There is no shortage of content about using AI for coding. Yet much of it describes a style of working that feels foreign to anyone with a structured approach to software development. The tutorials tend to assume a blank canvas, rarely reckoning with what it means to have a deliberate architectural philosophy already in place. This piece is an attempt to set that straight.
Coding is fundamentally about structure, and about the choices you make when constructing something that solves a well-defined task. Consider building a house. Before a single brick is laid, you need a blueprint. You designate each room for a specific purpose, ensure the rooms requiring water and electrical connections actually have them, and account for drainage and utility routing from the start. That planning is coding.
Translated to software: before writing a line of implementation, you need a template. A good starting point is a cookiecutter repository that enforces the blueprint of the project. From there you choose your primary classes — a pytorch_model, a dataset, a trainer. These are the rooms. The shared utilities that every component relies on, housed in a utils.py, are the electrical wiring running through the walls.
A well-formed Python project has a clear anatomy: modules inside src/ with no runnable scripts inside them, scripts and notebooks at the top level, Hydra config files governing execution. That structure is non-negotiable, and it is yours to define. Whether to build a class hierarchy for feed-forward and recurrent models or handle the distinction with a simple boolean flag is a design decision that belongs to the architect. It is not a question for AI.
You decide the design. You are the architect of the building, and that is not a task you delegate.
Given that framing, the question becomes: what remains for AI once the design decisions are yours alone? Quite a lot, provided you think of it as a skilled, tireless construction worker rather than a co-architect.
On command, AI excels at generating the scaffolding your design requires. It can produce multiple Hydra configuration files covering a sweep of hyperparameters. It can write Slurm scripts for matrix jobs that would otherwise take an afternoon to assemble. It can turn a day's commits into polished documentation — well-formatted Markdown tables, reStructuredText, or HTML output. It can generate the HTML needed to make notebook results presentable and publication-ready.
It is also genuinely useful as a research assistant. Asking it to survey the landscape of algorithms for a specific task — such as quantifying the shape of a three-dimensional object using computer vision — gives you a useful inventory to reason against. And it can write comprehensive tests for every case you have designed, which is where a significant portion of real productivity lives.
The right use of AI is not to critique your decisions. It is to execute them faithfully, at a speed and scale you could not match alone.
The common failure mode in AI-assisted development is treating the tool as a decision-maker rather than an implementer. The moment you outsource design choices to a language model, you lose the coherence that makes software maintainable. A construction worker who reroutes the plumbing without consulting the architect is not being helpful.
Design decisions — choosing the class hierarchy, knowing when a boolean suffices over a subclass, deciding what gets its own abstraction — belong to the software developer. You have the broad view of where the codebase is going next. That is why you build extensible tools: previously written code gets packaged, your next repository subclasses it, and functionality compounds cleanly across projects. Meanwhile the AI agent is running tests on the new repository, checking that your new feature does not break a previous one, and keeping the documentation current across every repo and every branch. This is how we work at KapoorLabs. AI handles the construction. We hold the blueprint. At any given moment we have full grasp of our code and our product — and it carries our name.