Skip to content
Go back

I am obsolete. And that's okay?

When we interview candidates to work at PortSwigger, one of the questions we like to ask is “What is your superpower?”. It’s basically just your classic “What are your strengths?” question, but with the unassuming glasses and slight hunch tossed to one side. By putting a cape and bright red underpants on the question, candidates can’t hide behind humility, and really have to think about what they can do not just well, but better than anyone else.

I interviewed for PortSwigger long before the hiring pipeline became the well-oiled machine that it is today. I often joke that that’s probably for the best; otherwise, I probably wouldn’t have made the cut. I do remember an exchange on the phone that went like this:

Daf: Can you name and describe any design patterns?
Me: Well … there’s the Singleton pattern.
Daf: Okay … can you name any other design patterns?

Probably best not to dwell on it.

Anyway, the point is that I never got asked the superpower question, so I never really thought about it … until fairly recently (because a candidate uno-reversed me). After commending them for their guile, I came up with this: My superpower is my ability to remember more or less every line of code, or method, or class, I’ve ever written. Perhaps it’s a bit hyperbolic, but as I said, the point is to put modesty to one side and embrace our abilities.

This is a very useful superpower to have. It means I can map out refactors of codebases I’ve had a large impact on in my head. It’s enabled me to mentally assess feature feasibility and approaches early on in the design process. It’s helped hone in on which method is causing a bug based on the reproduction steps without opening the codebase. There’s a line in New Girl where the character Nick, during a breakdown, says, “I’m not convinced I know how to read, I’ve just memorized a lot of words”, I can relate to that.

Kryptonite

This was a very useful superpower to have. You see, I haven’t written a line of code in about a month now. Oh, I’ve been ‘coding’, sure. But I haven’t actually written any code.

Claude Code has revolutionized the way I work as a developer. We’re way past AI code completion or copy-pasting snippets from LLM chat windows. AI can now work agentically to tackle large problems systematically and autonomously. I can now describe a problem to Claude Code and effectively let it cook, without the need to write any code myself, like some kind of artisan.

Now, anyone paying more attention than I think is reasonable to what I have to say here might have noticed that I said I haven’t written a line of code for “about a month” … but agentic coding is already almost old news, having existed for much longer than that. So what gives?

It’s certainly not obliviousness, nor impetus; PortSwigger has firmly embraced AI as the future of both our tools and the way we build them. We have continuous, active discourse on how we can use AI effectively almost daily, and a company-wide mandate to discover, learn, and pioneer new developments in the space. Agentic coding was first mentioned in our ‘artificial-intelligence’ Zoom channel in September last year, and Claude Code specifically in February, months before I started using it.

So why the delay? Honest, fear. “Never write a line of code again” might sound like a great pitch, but given that I’ve said that my superpower is remembering all the lines of code I have written, to me, it sounds more like what Lex Luthor would shout before throwing a rock at my head. (I actually know very little about Superman lore, having always been a Marvel fan myself, so don’t worry, we’re about done with that metaphor now.)

If I’m not writing any of the code, how am I supposed to remember how it all works and leverage that knowledge to excel at my job? Womp womp, I’m not. So my natural reaction was to try and resist the change - to bury my head in the sand and keep doing what I knew I did well.

Change or die

Fear’s a pretty pointless response, though … or maybe not pointless, but certainly unhelpful. Sticking your head in the sand when there’s a tsunami coming won’t stop you from drowning, it just means you’ll drown with your ass in the air.

Me not wanting to change the way I work wasn’t going to stop that new way of working from becoming the norm; all it would do is leave me behind. My superpower was going to become obsolete whether I kept trying to use it or not.

So what’s the alternative? Dive in, I guess. (This is where my tsunami metaphor immediately falls over. Do not dive into a tsunami.) Instead of being judgmental, I decided to be curious and give it a shot. I was … pleasantly surprised.

Steve Yegge does a much better job of articulating how much fun agentic coding is than I could, so I won’t dive too much into that here. I will say, though, that it completely changed my approach to ideating. Suddenly I can have a “I wonder if this is possible” thought, and turn it into a prototype (or a ‘no-totype if it is in fact not possible. I’m coining that term) asynchronously, without having to take the time to actually give it a go myself.

One of my first experiences with this new way of working was having an idea for a BApp on the drive home, describing it to Claude Code when I got in the door, and then going to make some spaghetti. When we were both done cooking, Claude had … also made some spaghetti. But it was spaghetti that worked, and proved that the BApp idea was feasible. I had prototyped something that would’ve taken me a day, perhaps, in effectively no time at all.

This was an epiphany moment for me; suddenly, the part of my brain that loves problem solving caught up with the industry and realised that I was still solving problems, just with bigger building blocks. I was still being presented with a problem and coming up with a solution, it’s just that I didn’t then have to implement that solution myself. Really it’s no different from writing Java instead of machine code; it’s just adding another layer of abstraction over the solution space.

What about my superpower, though? What about the fear of being obsolete? Well, when I described it back at the start of this post, I did say “… every line of code, or method, or class …”; this is just taking that another layer higher, or perhaps quite a few layers higher. I’d be lying if I said I’m not still worried about how good I’ll be as a developer in this new world; about whether my superpower really does still apply, or whether I need to work on a new one. The difference, though, is that I’m excited to embrace it and driven to be good at it.

I’m okay with being obsolete because it gives me an opportunity to grow.

Addendum

I’m not sure if this blog post will be published externally or not. I wrote it for me as much as anything else, and decided to share it internally in the hopes that it might resonate with others. If it does reach the masses, though, and you’re reading this as a user of one of our products, you might be thinking “good lord, what is happening in there?!”.

Rest assured that our pioneering spirit with AI is as cautious and intentional as it is energetic. We’re not just suddenly committing vibe-coded “slop” to the codebases of the tools you know and love. PortSwigger is investing time into understanding how AI can be used safely and effectively to empower our workflows while still maintaining the standard of quality and attention to detail that makes our products great and the developers that build them happy bunnies who can sleep at night!


Share this post on: