Please ensure Javascript is enabled for purposes of website accessibility

Every few weeks, another breathless headline announces the imminent death of software engineering as a profession. A CEO declares that his company has stopped hiring junior developers. A venture capitalist tweets that his portfolio companies have cut their engineering headcount in half. A model demo shows an AI building a working web app from a one-sentence prompt, and the comments fill with eulogies for the craft.

I’ve been writing code and running production infrastructure long enough to recognize this pattern. It’s the same cycle that accompanied visual IDEs, no-code platforms, offshore outsourcing, and every other “engineer killer” of the past three decades. The tools got better. The work didn’t go away. In most cases, it expanded, because whatever those tools made cheaper, companies demanded more of.

The AI wave is genuinely different in scale and capability — I’m not going to pretend otherwise. The productivity gains are real. But the story being told about what AI means for software and systems engineering gets the fundamentals wrong. AI isn’t replacing engineers. It’s compressing timelines and changing what the job looks like day to day. The engineers who understand this distinction will thrive. The ones who believe the hype — in either direction — will struggle.

Here’s why the replacement narrative breaks down, and what’s actually happening instead.


The “Why” Problem

The most important sentence in any engineering project is not written in code. It’s the sentence that explains why the project exists.

Why are we building this service? Why does it need to scale to ten thousand requests per second rather than one hundred? Why is this particular queue the right abstraction instead of a stream? Why is downtime at 3 AM acceptable but downtime at 10 AM catastrophic? Why are we migrating off this database now, when we’ve postponed it for two years? Why does the finance team need this report broken down by region and not by product line?

AI cannot answer any of these questions without being told the answer. And telling the AI the answer is itself the engineering work.

Large language models are extraordinary at pattern completion. Given a well-specified problem, they can produce remarkably competent solutions, often faster than a human can type. But they have no stake in the business, no relationship with the stakeholders, no memory of the argument in the architecture review last quarter, no sense of which technical debts are load-bearing and which are inert. They don’t know that the CTO has a bias against microservices because the last migration went poorly, or that the compliance team will reject any design that stores customer data outside a specific VPC.

Every real project lives inside a thick context of constraints, history, politics, and intent. The code is the output of that context, not the input. You can feed an AI a ticket that says “add rate limiting to the API” and get back working middleware in thirty seconds. But deciding that rate limiting is the right intervention — rather than caching, horizontal scaling, a circuit breaker, a contract change with the downstream team, or simply telling a customer to back off — is the actual work. The code is almost an afterthought.

This is the part of engineering that doesn’t show up in demos. Demos always start with a clean, well-framed prompt. Production work almost never does. A user reports that “the dashboard is slow.” A monitoring alert fires at midnight. A sales engineer promises a feature that the architecture doesn’t support. A regulator asks a question nobody anticipated. Turning that ambiguous noise into a tractable technical problem is a human skill, and it’s nowhere close to being automated.


Context Collapse and the Review Problem

The second thing AI can’t do well is tell you when it’s wrong.

I’m not talking about confident hallucinations in chatbot form — though those are bad enough. I’m talking about the subtler failure mode that happens constantly when AI is used to generate real engineering work: code that looks correct, passes a cursory read, might even pass tests, and is nonetheless wrong in a way that will only reveal itself under load, at scale, in production, at 3 AM on a holiday weekend.

Consider something as mundane as a shell script. I recently had to debug a script that failed with an unbound variable error deep inside a template substitution loop. The script had been written correctly in the style that was working elsewhere in the codebase, but one of the variables it consumed was optional in certain environments. A human who understood the deployment topology would have anticipated this. An AI asked to “fix the unbound variable error” would cheerfully suggest a dozen valid-looking patches — most of which would either silently mask the real bug or change behavior in ways the author didn’t want.

This is the core problem. AI produces locally plausible code without understanding the global invariants the code has to respect. It doesn’t know that this filesystem has a GPT partition table mismatch that needs to be resolved before any resize will work. It doesn’t know that your Docker Swarm has a quirky interaction between a specific kernel version and an overlay driver that makes certain recovery steps dangerous. It doesn’t know that kill -9 -1 in the wrong session will take down your SSH connection along with everything else. These aren’t edge cases. They are the substance of operations work. And none of them are visible in the prompt.

Catching these issues requires deep, context-rich expertise. You have to know what “correct” looks like in this specific system, under this specific load, with this specific history. You have to notice that the AI’s proposed solution subtly violates an invariant three layers down. You have to ask the question the AI wouldn’t think to ask, because it doesn’t have skin in the game.

I’ve watched junior engineers accept AI-generated code because it looked reasonable, and then spend two days debugging the consequences. I’ve watched senior engineers skim the same output, immediately flag the one wrong line, and move on. The difference isn’t that one is using AI better. The difference is that one has the expertise to evaluate the output and the other doesn’t. AI does not give you that expertise. It assumes you already have it.


The Lead Engineer Model

The best analogy I’ve found for what it feels like to work with modern AI tooling is this: you are now a lead engineer supervising a prolific, fast, confident, and occasionally wildly incorrect junior.

A lead engineer working with a junior doesn’t write less code in total — they may write more, because the junior’s output has to be reviewed, corrected, and integrated. What the lead does is different. They frame problems. They set direction. They catch subtle mistakes. They make judgment calls about when “good enough” is actually good enough and when it isn’t. They own the outcome in a way the junior doesn’t.

That is exactly what working with AI looks like on real engineering projects. You spend less time typing and more time reviewing. You spend less time on mechanical implementation and more time on specification, verification, and integration. The bottleneck moves from “how fast can I write this” to “how carefully can I read, test, and reason about what was produced.”

This shift is genuinely significant, and it changes the day-to-day experience of the job. But it is not a shift from “engineer” to “non-engineer.” If anything, it raises the bar for what an engineer is. When the mechanical parts of the job get easier, the judgmental parts — architecture, trade-offs, failure analysis, debugging, system design, stakeholder communication — become proportionally more of the work. Those are precisely the parts that require deep experience and deep thinking. They are not getting automated. They are getting more important.

And here is the uncomfortable implication that a lot of the replacement narrative misses: you cannot become a senior engineer without first being a junior one. The craft of reading code critically, of spotting subtle bugs, of understanding a complex system well enough to know when something in it is off — that craft is built by writing a lot of code, breaking a lot of things, and learning why. If we use AI to skip that stage entirely, we produce people who can prompt but not review. That’s not an engineer. That’s a liability.


Acceleration, Not Replacement

So what is AI actually doing to engineering work? It’s compressing timelines. It’s taking projects that used to take six weeks and finishing them in three. It’s turning prototypes that used to require a week of scaffolding into afternoon experiments. It’s letting one engineer cover ground that used to require a small team.

That’s an enormous productivity gain. It’s not nothing. It will reshape how engineering organizations are structured, how projects are scoped, and how much a single competent engineer can deliver. Teams will get smaller for the same output, or more ambitious for the same team size. Both are happening right now.

But compression is not replacement. A project that used to take six weeks still requires someone to decide what to build, to frame the problem, to specify the constraints, to evaluate the result, to integrate it with everything else, to own it when it breaks. The compression happens in the middle of that pipeline — the mechanical translation from “clear spec” to “working code” — not at the ends, which are where most of the actual skill lives.

This pattern shows up everywhere in the history of tooling. Compilers didn’t eliminate programmers; they moved them up the stack. High-level languages didn’t eliminate programmers; they enabled more ambitious projects. Cloud infrastructure didn’t eliminate systems administrators; it turned them into platform engineers who manage more, not less, complexity. Every wave of abstraction compresses the mechanical work and expands the judgmental work. AI is the same pattern, just bigger.


What This Means for Engineers

If you’re a working engineer reading this, the actionable takeaways are not complicated.

Use the tools. Seriously. Engineers who refuse AI tooling out of principle are making the same mistake as engineers who refused version control or who hand-rolled their own build systems past the point of usefulness. You don’t get bonus points for doing things the hard way when the easy way produces better outcomes.

But invest in the parts of the craft that AI can’t touch. Understand your systems deeply. Develop the taste to recognize good code from code that merely looks good. Learn how to debug under uncertainty. Get comfortable with ambiguous specifications and political constraints. Build the judgment that tells you when to trust a piece of generated code and when to throw it out.

And keep writing code — real, hard, hands-on code — especially early in your career. The ability to review AI output is downstream of the experience of having written similar things yourself. You cannot shortcut that, and if you try, you will end up as a person who ships fast-looking code full of hidden bombs, and who cannot tell the difference.


The Long View

The prediction that software engineering is about to be eliminated is, I think, a category error. It confuses the mechanical act of producing code with the intellectual act of engineering. The first is getting much cheaper very quickly. The second is not, because its bottleneck was never typing speed.

In five years, the median engineer will probably ship two or three times what they ship today, with AI handling most of the rote implementation. They will spend their time specifying, reviewing, debugging, and integrating. Their jobs will feel different, and in many ways more demanding — there will be less hiding behind mechanical work. But they will still be engineers, and there will still be more demand for good ones than the industry can supply.

The engineers who struggle will be the ones who mistook the mechanical parts of the job for the entirety of it. The engineers who thrive will be the ones who always understood that the code was the easy part, and the thinking was the job.

That was true before AI showed up. AI is just making it obvious.