Coding with AI feels less like just a new tool and more like a new way of thinking.
Over the past few months, I’ve been refining the process for how I use AI to design and build ML, AI, and data science projects. It’s been equal parts experiment and discovery; I have outlined my approach in the image below.

I have incorporated some important steps to battle some of the undesirable side effects of AI-assisted coding. For example, plan-first approach helps the programmer understand the business problem not just by brainstorming it with LLM, but also (as I recommend) with teammates. This can help reduce the cultural erosion that we might experience as we start communicating with machines more frequently and more deeply than other humans.
The two-step prompting strategy also helps the programmer understand the solution first before asking LLM to implement it. If this step is skipped, then it becomes difficult to understand the solution once the code is already written because since LLM writes a lot of code, it becomes hard to comprehend it in all its enormity. It’s easier to have a mental model of how each step is going to be solved by LLM and then try to review the code base.
There’s also a rise of accountability crisis in software development. (I have written about this before here.) One way to avoid it is by reviewing the output (as much as possible) and also be an active participant in the testing step. At least once critical-path test should be architected by the developer because business context can not be AI-generated. This helps with the circular validation problem where the developer ask AI to test the code that it generated — asking AI to grade its own homework!
Finally, frequent commits and feature branches for each task is crucial for this modular, incremental development approach.



