I want to share some more notes on my development practices in the Age of AI. With all the amazing tools that we now have, the key question is how to balance the development speed with code / system quality especially long-term.
The unit of development is a feature. If we need to create or integrate a new system, we split the development into milestones, and every milestone is developed following the same methodology.
Every major or even minor feature development starts with a design doc. I write the doc with AI. I typically dictate the ideas to AI, and it compiles the first version of the design in a standard structure. Usually (or I can say - always) the first version is bad. So I go through it, comment on it, amend it, and iterate with AI till it gets to a good state. This can take 5-6 or even 10 iterations. The key is that if your document is written with or by AI, you should be responsible for every line and every word in it - you should understand it, and be able to stand behind it. Otherwise, it’s meaningless to write a document at all, from my perspective.
After the design is done, I completely understand it, and can defend every decision in it, we move on to the development. If the feature is not related to the core business component or a critical engineering path, I let Claude / Codex develop it end-to-end. I push extensively for testing in my prompts, apply various agents such as co-pilot to validate the code, but I don’t review it. Typically this development might take up to a day for a small / medium feature because of all the tests and checks, but it runs mostly autonomously, so I can do something else in parallel.
If the feature is business critical, I stay on top of the code. AI implements the design step-by-step and I review the code of every step ensuring not only the good coding solution (and I believe that AI typically programs better than me) but also my own understanding of the code. Here the logic is the same as with the design doc - if the code is AI written, I should be responsible for every line of the code.
I also stay on top of the code when it’s related to my areas of expertise, for example Machine Learning. But if it’s something that I am not very familiar with, for example, frontend development, I would leave it to AI.
I am still not sure it’s the most efficient approach for high quality code development. I can implement 2-3 features in parallel with this approach, which doesn’t seem much. I guess as agents become better, there will be less and less need to check what they do - but I personally started to review much more in the last several months, so the trend for me is the opposite 🙂.