What software engineering really is
It's important to understand that software engineering isn't knowing languages and frameworks — it's knowing how to design a system properly: minimizing architectural complexity, keeping the system maintainable and changeable.
Why does this matter so much right now?
The problem is that the cost of adding each new piece of functionality grows non-linearly — it accelerates as the project's architectural complexity grows.
And at some point every change becomes so heavy and expensive that the team — or the AI — can no longer keep up.
This used to fuel jokes about corporations that take three months to change the color of a button.
Now it's the core problem of vibecoders: one change keeps breaking everything around it, the whole thing falls apart, and the system can't grow any further. And you can reach that state after just a couple of days of vibecoding.
The answer to this problem lies in knowing which of your system's complexities — and to which external tools — can be delegated, and, most importantly, what structuring and isolation of the system's parts will let future changes touch the fewest neighboring parts — lowering the cost of change, in time or in tokens, and pushing back the moment when changes become unaffordable.
That's why what decides things now is the theoretical depth of your understanding of software engineering and modern AI-development methodologies: it's exactly what determines how long a system can keep growing and how much each next step will cost — by slowing the rate at which complexity builds up.
Right now there are no methodologies that let AI assemble, at high quality, an architecture that stays cheap to change for a long time — but there already are methodologies that turn a well-described project and architecture into a working product.
Subscribe — I'm building a free course on the foundations of software engineering right here. And if you need a product rather than a course — that's what my studio is for.
