Every day now I read several posts on LinkedIn how „Vibecoding“ will soon (or already does) enable people without any technical background to develop apps. I’m very skeptical, but not for the usual reasons. Yes, I do agree that coding AI’s do not work well enough yet to fulfill this promise today. But it seems very likely that the day they will be good enough is not very far anymore.
The true problem is not the current lack of skills of these AI’s, it’s something else, something much more fundamental.
Let’s put AI aside for a moment and consider a classic software development team: a technical lead (like a CTO) leading a team of human software developers. CTO’s almost always have substantial technical education and experience. Some might think that the main reason why this makes sense is, that they need to be able to assess the quality of the code created by the developers in the team. To insure that the specifications from the business are converted into suitable, secure, stable, scaling and performant software. Ultimately, developers are only humans, or? They make mistakes.
Now just assume (in the sense of a gedankenexperiment), that all the developers in this team are „perfectly capable“ in the sense that they never make any mistakes and create the software perfectly from the given specifications strictly following state of the art knowledge and practices.
Would this allow a non technical person to lead the team? Surprisingly, the answer is still no. The reason for this is, that given any specification for the app, there is an almost infinite number of ways the app could be implemented. And all these apps are not equivalent! Even if they all present the same functionality (or even user interface) to the end user, they have completely different properties „under the hood“. The possibilities are endless: programming language choice, choice of frameworks, databases, libraries, security measures, protocols, standards, application architecture etc.. And all these details influence how well the app will perform in the future. And for most of these choices there are no clear best practices. Applications are always a compromise. Whether a solution is optimal depends on the complex context in which the app has to operate later.
There are so many of these parameters that it is even for an experienced CTO extremely difficult to specify everything upfront. So what happens is, that the team starts to develop the app based on the first requirements / specifications. A good CTO will then inevitably find solutions which will - even if completely aligned with the specifications and properly implemented - collide with the targeted long term goals for the app.
Therefore, the problem is not really the flawed implementation of a specification (e.g. in the form a prompt in the case of vibe coding), but that all specifications necessarily must remain incomplete. This follows trivially from the fact that the amount of information in the specification/prompt is much much smaller compared to the codebase which is created from it. And this incompleteness creates a large number of degrees of freedom from which many must be controlled at some stage of the development process.
Or in other words: a software is far more than just the functionality it presents to the user. An experienced CTO can tell you about every single block of code how well it will support the business strategy (even if in most cases the differences don’t matter much and can be ignored).
Therefore, if you don’t understand code, you cannot assess the output of a coding AI. And if you don’t assess it, you can’t control it.
And if you can’t control the output, it will disappoint you, sooner or later.
One day, a competitor will do better.
Image: Shutterstock. Artist: pathdoc
Follow me on X to get informed about new content on this blog.
