AI coding tools save time until senior engineers clean up the code
AI coding tools save time until they hand you the cleanup. Senior engineers are doing a lot of that cleanup now. They review shaky diffs, strip out duplicated logic, catch fake dependencies, and fix auth mistakes that look fine in a demo and bad in p...
Senior developers are becoming AI code editors, and that’s a real job now
AI coding tools save time until they hand you the cleanup.
Senior engineers are doing a lot of that cleanup now. They review shaky diffs, strip out duplicated logic, catch fake dependencies, and fix auth mistakes that look fine in a demo and bad in production. A recent Fastly survey of roughly 800 developers put a number on it: at least 95% said they spend extra time fixing AI-generated code, and senior devs carry most of that work.
That’s a fair description of AI-assisted development in 2026. The tools are useful. They’re fast. They can sketch a feature, scaffold a service, or wire up a frontend in minutes. They also push a lot of the hard work downstream to the people who understand architecture, failure modes, and security well enough to see what the model missed.
“AI babysitter” is snarky, but it lands.
The title hasn’t caught up with the work
A lot of teams already operate this way, whether they’ve admitted it or not. Juniors or product-minded engineers use Copilot, Lovable, and similar tools to generate a first pass. Seniors decide whether any of it belongs in production.
That split matters. Experienced developers are reportedly about twice as likely as juniors to ship AI-generated code into production. That usually reflects judgment, not trust. They know where the model helps, where it wanders, and how to contain the damage.
That’s the pattern worth watching. AI has increased the value of senior engineering judgment, not reduced it.
Part of the senior role used to be speed, design skill, and institutional memory. Now it also includes verification. Senior devs write tighter specs, narrow the model’s search space, spot when five files solve the same problem in five different ways, and recognize when a passing test suite is still lying.
The whole “vibe coding” argument misses that. Generated code is great for prototyping. It also creates review debt.
Why the code looks fine and still causes trouble
Most code models are good at local completion. Give them a nearby pattern, some file context, a few interfaces, and they’ll usually produce something plausible. Sometimes very plausible.
Where they fall down is system-level coherence.
A model can write a neat handler for a new endpoint while ignoring the service’s retry policy, tracing conventions, permission model, or error semantics. It can patch a React component and quietly introduce a second state management pattern your team never wanted. It can add caching that works in isolation and breaks consistency guarantees somewhere else.
That’s a predictable outcome. These systems generate likely text from the context they have. Even with larger context windows and better tool use, they don’t carry architectural intent across a codebase unless you force that intent into the prompt, the interfaces, and the checks around generation.
The result is familiar: local correctness, global mess.
The mess usually has a pattern:
- duplicated business logic across multiple modules
- inconsistent API handling and error paths
- invented packages or wrong library calls
- insecure defaults around auth, crypto, or input validation
- “green” tests that only show the happy path still compiles
Anyone who’s reviewed enough generated diffs has seen some version of this.
The security problems are old and dull
The security issues in AI-written code usually aren’t exotic. They’re the same mistakes teams have always made, just produced faster.
Hardcoded secrets. Weak randomness. Missing CSRF protection. Sloppy JWT handling. SQL or command injection risk because the model took a shortcut. Endpoints with no real authorization because they were assumed to be “internal.” Overbroad IAM policies. Hallucinated dependencies from ambiguous package publishers.
A good senior reviewer will catch plenty of that. A tired one won’t catch all of it.
That’s why “we’ll review the PRs carefully” stops being a serious control once teams rely on AI for routine code generation. Review doesn’t scale well under normal conditions. It scales even worse when the code shows up in bigger bursts than before.
If your process encourages whole-file rewrites from a chatbot, you’ve already made review harder than it needs to be.
Treat AI code like untrusted input
The practical response is simple: treat generated code like untrusted external input that happens to compile.
That changes the prompt and the gatekeeping.
The better setups are spec-first. Instead of “build this feature,” the prompt starts with interfaces, type constraints, invariants, error contracts, architecture boundaries, and examples of what must not happen. The model gets a bounded task and a narrow slice of repo context. The output should be a minimal diff, not a rewrite of half the service.
Then comes the part that makes the workflow defensible: verification.
A solid generate-and-check loop usually includes some mix of:
- type checking with
tsc,pyright, orgolangci-lint - static analysis with tools like
Semgrep,ESLint, orBandit - dependency and license audits through OSV,
npm audit, orpip-audit - unit tests, plus property-based tests where edge cases matter
- basic fuzzing for parsers, API handlers, and input-heavy code
- secret scanning and SBOM generation for supply chain visibility
- runtime smoke tests in ephemeral environments with least-privileged credentials
None of that is glamorous. Fine. Good AI coding practice looks a lot like old engineering hygiene, except the hygiene has to be stricter because the code shows up faster and with more confidence than it deserves.
Diff size is a policy question
One of the best rules here is also one of the least discussed: ask the model for diffs, not rewrites.
Diff-driven generation keeps the review surface smaller. It lowers the odds that the tool rewires adjacent logic, renames unrelated symbols, or deletes behavior nobody asked it to touch. It also makes targeted testing and regression isolation easier.
The opposite approach is common because it feels productive. Paste in a spec, ask for the full implementation, let the tool roam. That’s how teams end up with AI-generated code that mostly works and no longer matches the architecture they thought they had.
Small diffs are boring. Good.
Where AI coding earns its keep
The sweet spot is getting pretty clear.
AI works well on code near the edges: adapters, UI scaffolds, migrations, CRUD surfaces, test generation, repetitive integration work, one-off scripts, and glue code between systems that are already well defined.
It’s weaker in the middle of the product, where domain rules are subtle, failure handling matters, and architectural consistency carries a long bill.
That doesn’t mean keep AI away from core logic. It means the risk changes fast depending on where the code lands. If the model is touching auth, billing, data retention, access control, concurrency primitives, or cross-service contracts, the review bar should go up immediately.
Teams that ignore that usually learn the lesson in production.
This is now a tooling and org problem
There’s a reason companies are starting to formalize work around AI code review, cleanup, and platform governance. Once generated code becomes routine, somebody has to own the guardrails: prompt templates, repo access policies, CI gates, approved dependency rules, provenance tracking, and audit trails.
That matters even more in regulated environments. If AI-generated code ends up in systems that have to pass SOC 2 or ISO 27001 scrutiny, “a senior engineer looked at it” won’t carry much weight. Provenance notes, SBOMs, reproducible builds, and documented verification steps start to matter quickly.
The economics are straightforward. AI can cut the time from idea to prototype. It can also shorten delivery time for production features if the surrounding discipline is good enough. But some of that speed gets borrowed from review, testing, and cleanup work that now lands on a smaller group of senior people.
The upside is real. Faster iteration on repetitive work is real too.
The fantasy version was always that AI would write the app and engineers would just approve the result. The real job is messier than that. Senior developers are becoming editors, verifiers, and boundary setters for machine-generated code. That role has teeth, and it’s probably sticking around.
If you lead a team, the advice is pretty plain: keep the generators, tighten the specs, shrink the diffs, and automate the skepticism. Human review still matters. It just can’t carry the whole load by itself.
Useful next reads and implementation paths
If this topic connects to a real workflow, these links give you the service path, a proof point, and related articles worth reading next.
Add focused AI, data, backend, and product engineering capacity when the roadmap is clear.
How an embedded engineering pod helped ship a delayed automation roadmap.
Macroscope launched this week with an ambitious pitch: connect to your GitHub repo, read the code and the work around it, catch bugs in pull requests, summarize what changed, and answer plain-English questions about the codebase. That covers what wou...
Greptile, a startup building AI-assisted code review, is reportedly raising a $30 million Series A led by Benchmark at a $180 million valuation. For a company founded in 2023, that’s fast. It also points to a specific shift in the market. AI coding c...
Goldman Sachs is testing Cognition’s AI coding agent Devin inside the bank, and the way it’s talking about the rollout is unusually direct. CIO Marco Argenti told CNBC the firm plans to deploy hundreds of Devin instances alongside its 12,000 human de...