I need to share something that happened in a code review yesterday, because I think it represents a dangerous pattern that’s emerging in the AI era.
The context: Junior engineer submits a PR for a critical payment processing feature. Code looks clean, tests pass, architecture seems sound.
The code review exchange:
Me: “Can you walk me through how this handles failed transactions?”
Engineer: “Sure, it retries up to 3 times with exponential backoff.”
Me: “Great. And what happens if all three retries fail?”
Engineer: long pause “I… I’m not totally sure. Copilot generated that part.”
Me: “Okay, can you look at the code and tell me?”
Engineer: scrolls through code for 2 minutes “It looks like it logs an error and returns null?”
Me: “Right. So if a customer’s payment fails after 3 retries, we return null to the frontend. What does the frontend do with null?”
Engineer: “Um… I don’t know. That’s a different team’s code.”
This Is Not a Code Review Problem. It’s a Mental Model Problem.
Here’s what scared me about this exchange: the engineer couldn’t explain their own code because they never built a mental model of how the system works.
They treated AI-generated code like a black box. Input: “handle payment retries.” Output: some code that compiles. Ship it.
But software isn’t just code that compiles. It’s a system where each component affects others. If you don’t understand how your code fits into the broader system, you can’t reason about failure modes.
The Downstream Disaster
Want to know what happened next?
The code shipped. Three days later, we had a production incident:
- Payment processor had an outage
- Our retry logic exhausted attempts and returned null
- Frontend received null and… displayed “Payment successful ✓”
- Because the frontend engineer also didn’t understand the contract and assumed null meant “no error”
Customer complaints: “I was charged but the order never processed!”
Support tickets: 400+ in 6 hours
Revenue impact: $50K+ in refunds and support costs
Two engineers, both using AI effectively from a “does the code work?” perspective, both lacking the system-level understanding to predict this failure mode.
“Copilot Wrote It” Is Not an Acceptable Response
After that incident, I instituted a new rule:
“Copilot wrote it” is not an acceptable answer in code review.
If you submit code you can’t fully explain—line by line, edge case by edge case, system interaction by system interaction—it doesn’t ship. Period.
I don’t care if the tests pass. I don’t care if it looks correct. If you can’t explain it, you don’t understand it. And if you don’t understand it, you can’t own it in production.
The Psychological Safety Problem
Here’s the uncomfortable part: this engineer is smart and hardworking. They weren’t being lazy. They genuinely thought that “AI generated code that passes tests” was sufficient.
Why? Because nobody taught them otherwise.
In fact, in many orgs (including ours, until recently), the implicit message was: “Ship fast. AI helps you ship fast. Use it.”
We never said: “AI helps you ship fast, but you’re still responsible for understanding every line.”
So when I said “you need to explain this before it ships,” the engineer felt like I was moving the goalposts. And in a sense, I was—we hadn’t set clear expectations about AI usage and ownership.
What “Owning Your Code” Means in the AI Era
I’ve been thinking about what it means to “own” code when AI generates significant portions of it.
Here’s my current definition:
You own code if you can:
- Explain why it works (not just that it works)
- Predict how it fails under various conditions
- Debug it when it breaks in production
- Explain its interactions with other parts of the system
- Justify the trade-offs (performance, readability, maintainability)
If you can’t do those five things, you don’t own the code. The AI does. And AI doesn’t get paged at 2am when it breaks.
The Bigger Pattern: Superficial Understanding at Scale
What worries me is that this isn’t isolated. I’m seeing variations of “I don’t know, AI wrote it” across multiple teams:
- “Can you explain this regex?” — “No, but it works.”
- “Why did you choose this algorithm?” — “AI suggested it.”
- “What’s the time complexity?” — “Um… AI didn’t say.”
- “How would you debug this?” — “I… I’d ask AI to debug it?”
Each individual case is small. But at scale, this is how you build systems where nobody fully understands how anything works.
And that’s terrifying.
The Contract We Need
I think we need a new social contract between engineering teams and AI:
AI can generate code. Humans must understand code.
That means:
- Use AI to accelerate implementation:

- Use AI to explore solutions:

- Ship AI-generated code you don’t understand:

- Accept “AI wrote it” as explanation:

Is this slower? Yes.
Is it worth it? Absolutely.
Because the alternative is what we experienced: a production outage caused not by bad code, but by two engineers who couldn’t reason about how their code interacted because neither understood their own implementations.
The Question I’m Wrestling With
Here’s what I don’t have an answer to: How do we teach engineers to treat AI as a tool, not as an authority?
Right now, when AI generates code, many engineers treat it as more correct than code they’d write themselves. They trust it implicitly. They don’t question it.
But AI makes mistakes. AI doesn’t understand your specific system context. AI doesn’t know your edge cases or business requirements.
Humans need to be the authority. AI should be the assistant.
How do we create that mindset shift?
For engineering leaders: Have you encountered “Copilot wrote it” as an explanation in code reviews? How did you respond? And how do you teach engineers to own AI-generated code?
This feels like the defining challenge of engineering leadership in 2026.