How to Survive AI as a Developer
In his latest sketch comedy, “Shipping a button in 2026”, the YouTuber Kai Lentit depicts a software engineer debating with ghostly caricatures of different software developer archetypes, on how he should go about implementing a new feature for his software. Each one convincing him to pick a certain programming language, framework, and or technology to implement his basic software feature. In the end, after a lot of back-and-forth, and frustrated by the amount of choice and how the scope has expanded, he finally decides to open his AI code editor and let an AI model take care of it instead.
The punchline resonates with many developers, because it mirrors our new reality where we can have AI write code in programming language and frameworks we are not familiar with. AI has created a new layer in the software development process, where natural language can be compiled into working software code, and with the latest models and tools, it can debug, refactor and iterate. This has lead many people to prophesy that human programmers will be replaced by AI.
What these supposed prophets miss is the most important step of software engineering: modeling the domain using meaningful and consistent natural language. modeling and language developing is the key step that will determine if the code that AI produces will result in a codebase that becomes a nightmare to work with, even for very capable AI models, or if it becomes a legible codebase, where code changes integrate smoothly, without churning millions of AI tokens.
Modeling the domain is a process in which developers and domain experts collaborate to create a mental model of a domain that is to be translated into code. In his book “Domain Driven Design”, Eric Evans also calls this process ‘knowledge crunching’, and describes how language is cultivated based on the model of a domain. As an example of the importance of modeling a domain, think of trying to build an e-commerce website. We, as programmers, will find ourselves having to define core concepts such as ‘order’, ‘shopping cart’, ‘receipt’, ‘shipment’, and ‘purchase’. A person who does not have context about this domain might use the terms ‘order’ and ‘shipment’ interchangeably, given that a shipment is always linked to an order. But a good software model must define and differentiate these terms, otherwise developing the software for the domain becomes hard, and the resulting codebase ends up being a confusing mess riddle with bugs.
Coming back to AI, you can imagine how even the most advanced and sophisticated models would have difficulty fulfilling a request to develop a new feature, or update an existing one when the language used to prompt it is based on a poor domain model, or a non-existing one. Picture asking AI to ‘fix your ordering system’ on a codebase where the term ‘order’ is being used interchangeably with ‘shipment’. You should not be surprised if the AI model ends up making assumptions and changing the behavior you did not expect, or even worse, breaking how the ‘shipment’ logic works. Maybe you get the expected result after tweaking your prompts and giving the AI enough context on your poorly defined domain model. But once you submit your code changes and close the session with the AI agent, all the gained context is flushed away down the toilet, and the only thing remaining is a confusing mess in the form of bearly working code. You might be able to repeat this process many times, but with time you will notice that the process will start taking longer. The AI model will require you to provide more context every time, and you will find yourself nudging it more often to get it to produce your desired behavior while it burns through your budget in tokens.
In conclusion, this advancement of AI for software development has made writing code easier and accessible, to the point where deep knowledge of programming languages, frameworks, and libraries are no longer requisites. On the other hand, it has highlighted the importance for developers to collaboratively model the domain before attempting to write any code. With a good domain model, prompts become easier and more meaningful. Codebases better reflect the domain models and become simpler for developers and AI models to change it. For the developers looking to survive in the age of AI, my advice is to start focusing on how you model your domain, and how you can more effectively do it in collaboration with domain experts. Here are some resources that can help you with that: