Writing code is one thing. Maintaining it is another.
Changing code, safely and quickly, is a challenge that gets more and more difficult the more code there is.
The more things there are that need to stay the same while the change is implemented, the more skill is required.
If we're talking about solo projects or spinning up a basic internal dashboard for temporary use, then sure, AI is fantastic.
But the moment the system gets complex, or needs lots of collaborators working on it together (which usually coincides with it being truly economically valuable and defensible), AI struggles.
Listening to
talking on the latest Pragmatic Engineer podcast, he states that the genie has no taste, no sense of design.1This makes sense if you believe, as I do, that design is about vision. It's about envisaging possible futures, and taming complexity in the here and now to better serve that future.
LLMs cannot design, because they remix the past. They're incredible at doing so, and the results are sometimes magical, but by their very nature, they deal with the art of the probable.
Humans, on the other hand, deal with the art of the possible.
They can hold a vision in mind that can exist wildly outside the bounds of the statistically likely or reasonable.
No LLM can be trained on what we see in our mind's eye.
Software engineers are paid to navigate the trade-off space between the reality of today and the dream of tomorrow.
There's a future for them yet.