"Six months ago, we shipped features in two days. Now a single change takes two weeks."
If you've built an application with AI tools — Cursor, Lovable, Bolt.new, Replit, v0 — and you're past the first few months of development, there's a good chance your delivery speed has declined. Not gradually. Sharply.
This is not a team problem. It's a structural one.
The Mechanism: Verification Debt
Every AI session optimizes for the immediate task. "Fix the checkout bug" — the fix goes where the symptom is. "Add email notification on purchase" — added inline in the payment handler.
Each session is locally correct. But none of them maintain awareness of the broader codebase structure.
The result: files that started as single-purpose now handle multiple concerns. Business logic scattered across layers. A dependency graph where everything is connected to everything.
This creates verification debt — the growing cost of verifying that a change doesn't break something unexpected.
VERIFICATION DEBT COMPOUND CURVE
Time per feature (days)
|
10| * *
8| *
6| *
5| *
4| *
3| *
2| *
1| *
0+--+--+--+--+--+--+--+--+--+--+--+-
M1 M2 M3 M4 M5 M6 M7 M8 M9 M10
Each new feature adds coupling.
Each coupling point adds verification overhead
to every future change.
Why It Compounds
The compound rate is approximately 30-40% per quarter in structurally uncoupled codebases. Here's why:
Month 1-3: Small codebase. Blast radius is obvious. One developer ships independently. Features take 1-2 days.
Month 4-6: Codebase has grown. Files are shared across features. Every change requires checking what else it affects. PR review time doubles because reviewers can't predict side effects. Features take 3-5 days.
Month 7-9: Team grows to handle the backlog. But more developers in a coupled codebase doesn't create parallelism — it creates coordination overhead. Two developers modify the same 600-line utility file in the same sprint. Merge conflicts. Re-reviews. Features take 5-10 days.
Month 10+: The team has doubled. Total output has dropped. 40% of developer time goes to merge conflicts, coordination meetings, and verifying side effects.
Measure It
1. File churn concentration
git log --since="30 days ago" --pretty=format:"%H" | while read hash; do
git diff-tree --no-commit-id --name-only -r $hash
done | sort | uniq -c | sort -rn | head -10
If the same files appear in every commit, your codebase is structurally coupled. Changes can't be isolated because domain boundaries don't exist.
2. Coupling density
git log --since="30 days ago" --pretty=format:"%H" | while read hash; do
git diff-tree --no-commit-id --name-only -r $hash | wc -l
done | awk '{sum+=$1; n++} END {print "Avg files per commit:", sum/n}'
Healthy: 2-4 files per commit (changes stay within one domain).
Warning: 5-8 files (cross-domain coupling).
Critical: 8+ files (no structural boundaries exist).
3. Verification bottleneck files
find src/ -name "*.ts" -o -name "*.tsx" | xargs wc -l | \
awk '$1 > 300 {print}' | sort -rn | head -10
Files above 300 lines are verification bottlenecks. Every change to a large file requires reviewing the entire file because the internal blast radius is the whole file.
4. PR review time trend
If you use GitHub:
gh pr list --state merged --limit 50 --json createdAt,mergedAt | \
jq '.[] | {days: (((.mergedAt | fromdateiso8601) - (.createdAt | fromdateiso8601)) / 86400)}'
Compare the average from your first 25 merged PRs vs your last 25. If review time has increased significantly, verification debt is compounding.
The Myth: "We Just Need More Developers"
Adding developers to a structurally coupled codebase makes delivery slower, not faster. Each new developer adds coordination overhead without reducing verification debt.
The research confirms it: PR review times in AI-generated codebases increase by 91% between month 3 and month 9. The cause is not team size — it's structural coupling.
The Structural Fix
The fix is not process improvement, better planning, or more standups. It's structural:
Bounded domain isolation — each business domain owns its files. Cross-domain imports are forbidden by automated rules.
Enforced import boundaries — a boundary linter prevents one domain from reaching into another. Violations are caught before merge, not after.
Known blast radius — when domains are isolated, every change has a predictable scope. PR reviews become fast because the reviewer knows exactly what could be affected.
Parallel delivery — isolated domains mean developers work independently. No merge conflicts on shared files. No coordination meetings about who's touching what.
The goal: delivery time stays flat as the codebase grows. Not because of better developers — because of better structure.
Based on ASA (Atomic Slice Architecture) — an open architecture standard for AI-generated software that enforces these boundaries automatically.

Top comments (0)