AI-generated code and AI-assisted engineering are not the same thing.
The biggest shift for me came when I stopped treating AI as a code generator.
I started treating it as a very fast implementation partner—one that can do a lot of work, but does not own the context or consequences.
Before delegating a significant task, I want to understand:
→ What needs to be built and how it should behave
→ Where the change belongs and what constraints exist
→ How the result will be verified
AI can help here too. Give it the requirements and architecture, then ask:
What assumptions are we making?
What are we missing?
What are the trade-offs?
But the important engineering decisions still need to be understood and owned by the engineer.
Context matters more than prompt polish.
In my experience, relevant context and explicit acceptance criteria matter more than finding the perfect wording.
A good environment includes:
• Clear architecture
• Explicit conventions
• Reusable patterns
• AGENTS.md and project documentation
• Tests and known failure modes
These reduce avoidable guessing. They do not remove uncertainty, but they make assumptions easier to surface.
Delegate, don’t abdicate.
Once the problem is understood, I delegate bounded pieces of work:
Requirements → constraints → context → boundaries → implementation → verification
Then the feedback loop becomes:
AI implements → checks run → failures are fixed → checks run again → human reviews
Automated checks validate the expectations we encoded. They cannot tell us whether those expectations are complete or correct. Verification should scale with the ambiguity, risk, and blast radius of the change.
The most interesting part is what happens after a failure.
I do not only fix the code. I ask why the mistake happened.
Was the requirement ambiguous?
Was a convention missing?
Was there no check to catch it?
If the same mistake could happen again, I improve the environment: documentation, an AI skill, a test, a CI rule, or an architecture constraint.
Over time, the project develops failure memory.
A mistake becomes a lesson.
The lesson becomes a guardrail.
The next task starts from a better system.
I do not think the future is simply:
Human writes less code + AI writes more code.
It is closer to:
Human frames the problem → AI helps explore → human makes the important decisions → AI implements → automated systems verify → human reviews → the environment improves.
AI-generated code is an output.
AI-assisted engineering is the system that produces it, verifies it, and learns from it.