The AI Assistance Spectrum: Choosing the Right Level for Professional Software Engineering
A framework for six levels of AI assistance in software, from code review to vibe coding, with guidance on when to dial AI help up or down.
How much AI assistance belongs in a professional engineering workflow? The useful answer is not yes or no but a level. Above a fully manual baseline sit six of them: review-only lookups, inline autocomplete, function generation, multi-file refactoring, autonomous agents, and “vibe coding,” where nobody reads the output. Each step up buys speed and spends comprehension.
For most production code the defensible default is function-level generation. You write the signature and the intent, the model writes the body, and you review it like any other diff. Dial that down in regulated or security-critical paths, and up only where test coverage is strong enough to catch what the model gets wrong.
The Core Problem
Engineers and teams struggle with several fundamental questions about AI assistance:
Unclear boundaries: When does AI assistance help versus harm our work? A team ships a feature noticeably faster with autocomplete, then spends days chasing a subtle race condition that a careful manual implementation would have avoided.
Team inconsistency: Different team members use AI at vastly different levels. One developer writes every function manually while their colleague uses full autonomous coding. The resulting codebase shows dramatic quality variations that complicate code review and maintenance.
Risk management: How do we leverage AI speed without compromising our understanding of the systems we’re building? Technical debt accumulates silently when we accept AI suggestions without deep review.
Career concerns: Developers worry about skill atrophy from over-reliance on AI, while simultaneously fearing they’ll fall behind by not using it enough. This anxiety affects both junior and senior engineers differently.
Context switching costs: Each tool (Copilot, Cursor, Claude Code) has a different interaction model. Moving between assistance levels carries its own tax, and the mental bookkeeping of “which level am I on right now” competes with the problem you were solving.
ROI ambiguity: Initial velocity gains look impressive. Whether they hold over a maintenance horizon measured in years is a separate question, and the costs that erode them (review overhead, rework, slower onboarding) surface late.
The Six-Level AI Assistance Spectrum
Two things define each level below: the size of the unit the model produces, and what it takes to trust that unit. Tool names change quickly; the levels do not. Write the policy in your team handbook against levels, and it will survive the next product launch.
Level 0: Zero AI - Manual Development
What it is: Traditional development with compiler support, linters, and static analysis - but no AI-powered code completion or generation.
When to use:
- Highly regulated environments (healthcare systems, financial platforms)
- Security-critical authentication and authorization code
- Learning new languages or frameworks where you need to build muscle memory
- Code that requires audit trails for compliance
Tools: Standard IDEs with TypeScript compiler, ESLint, language servers
Reality check: Very few teams operate at this level anymore. Even “no AI” teams use AI-powered search, Stack Overflow answers generated by AI, and documentation created with AI assistance. True Level 0 is now nearly extinct.
Level 1: AI-Assisted Search & Documentation
What it is: Using AI to find code examples, understand error messages, query documentation, and research unfamiliar APIs.
When to use:
- Exploring unfamiliar libraries or frameworks
- Debugging cryptic error messages
- Onboarding to new codebases
- Understanding legacy code patterns
Tools: ChatGPT, Claude for one-off queries, GitHub Copilot Chat for contextual help
Productivity impact: McKinsey’s developer-productivity lab found documentation tasks completing in half the time. DORA’s 2024 report ties every 25% increase in AI adoption to a 7.5% rise in documentation quality, the largest positive effect it measured on any process outcome. Implementation speed is untouched at this level.
Risk level: Minimal - you’re getting information only, not generating production code
This level is particularly valuable for teams whose regulator prohibits AI code generation. A platform can forbid AI-authored production code and still run AI over pull requests as review support. The audit trail stays intact, and human reviewers get a first-pass filter for the defect classes that are tedious to spot by eye.
Level 2: Inline Autocomplete
What it is: Single-line or small block completion as you type, reactive to your current file context.
When to use:
- Writing boilerplate code (imports, type definitions, standard patterns)
- Implementing common patterns (error handling, validation)
- Generating variable names and function signatures
- Repetitive code that follows established patterns
Tools: GitHub Copilot (base mode), TabNine, Amazon CodeWhisperer, Codeium
Productivity impact: Google Research measured a 6% reduction in coding iteration time across more than 10,000 internal developers over three months, reported at 90% confidence. Acceptance ran at 25% for single-line and 34% for multi-line suggestions. Design time is unchanged, and Google withdrew its own context-switching claim from that write-up when it could not be confirmed with statistical significance.
Risk level: Low - suggestions are small enough to review before accepting
Code quality impact: Minimal if developers remain engaged and review each suggestion
Here’s the critical thing about Level 2: it’s easy to review suggestions before accepting them. The cognitive load of checking a single-line suggestion is manageable. This makes it ideal for junior developers who need to build code reading skills while gaining some productivity benefits.
// Level 2 example: Autocomplete suggests the implementation
function validateEmail(email: string): boolean {
// As you type the comment "check if email is valid", AI suggests:
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}
// Developer's job: Review the regex, consider edge cases
// Is this regex sufficient? Does it match your validation requirements?
// Should you use a library like validator.js instead?
The developer still thinks through the problem but saves keystrokes on the implementation.
Level 3: Function-Level Generation
What it is: You write function signatures or comments describing what you need, and AI generates complete implementations.
When to use:
- Unit tests (test structure is predictable)
- Data transformations (input/output clearly defined)
- CRUD operations (patterns are well-established)
- Algorithm implementations from well-defined specifications
Tools: GitHub Copilot (multi-line), Cursor (single-file edits), AI chat interfaces
Productivity impact: 55.8% faster on a from-scratch HTTP server in GitHub’s randomized trial of 95 developers, though the 95% confidence interval on that figure spans 21% to 89%. Negligible on novel design.
Risk level: Medium - requires careful review of logic, edge cases, and performance characteristics
Common pitfalls: AI generates locally optimal code that’s globally inconsistent with your codebase patterns.
Here’s where AI assistance becomes powerful but requires discipline. The AI can write entire functions, but you need to review them carefully:
// Level 3 example: Function-level generation
// Developer writes the signature and comment:
/**
* Fetches user data with exponential backoff retry logic
* @param userId - User identifier
* @param maxRetries - Maximum retry attempts (default: 3)
*/
async function fetchUserWithRetry(
userId: string,
maxRetries: number = 3
): Promise<User> {
// AI generates the complete implementation:
let attempt = 0;
while (attempt < maxRetries) {
try {
const response = await fetch(`/api/users/${userId}`);
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
return await response.json();
} catch (error) {
attempt++;
if (attempt >= maxRetries) {
throw error;
}
// Exponential backoff: 1s, 2s, 4s
await new Promise(resolve =>
setTimeout(resolve, Math.pow(2, attempt) * 1000)
);
}
}
throw new Error('Max retries exceeded');
}
Developer’s review checklist:
- Does the exponential backoff logic match our requirements?
- Should we add jitter to prevent thundering herd?
- Are we handling all relevant HTTP status codes?
- Should certain errors (404, 401) skip retries?
- Is the error handling consistent with our monitoring setup?
Level 3 is where the sustained return tends to be best, and it is also where the published evidence splits most cleanly along the line this level draws. GitHub’s treatment group finished in 1 hour 11 minutes against the control group’s 2 hours 41 minutes, but the task was a self-contained HTTP server with no existing code to respect. McKinsey found time savings shrinking to under 10% once developers rated a task high in complexity. METR ran the same kind of work in the opposite setting: 16 experienced maintainers, 246 real issues, repositories averaging more than a million lines of code. That group finished 19% slower.
The unit of output at Level 3 is still small enough to review properly, so the speed arrives without a quality tax. Two conditions have to hold for it: the review actually happens, and the work is shaped like the work the study measured.
Level 4: Multi-File Refactoring & Editing
What it is: You describe desired changes across multiple files, and AI coordinates the edits while maintaining consistency.
When to use:
- Renaming functions or variables across files
- Updating API signatures and all call sites
- Applying consistent patterns across modules
- Migration tasks (e.g., moving from CommonJS to ES modules)
Tools: Cursor Composer, GitHub Copilot Workspace (beta), Claude Code with file context
Productivity impact: Google’s study of its own internal migrations reports total migration time cut by an estimated 50%, with 80% of the code modifications in landed changelists fully AI-authored. McKinsey measured refactoring completing in nearly two-thirds the time. Both describe mechanical transformation under test coverage; unstructured refactors do not behave this way.
Risk level: Medium-high - AI may miss implicit dependencies, break runtime behavior while maintaining type safety
Critical requirement: Comprehensive test coverage to catch AI mistakes
The failure mode worth planning for is the reference the type system cannot see. A rename applied across dozens of files can leave the compiler quiet and the suite green while a reflection-based lookup still holds the old name as a string, and the break only surfaces at runtime with a stack trace that points nowhere useful.
// Level 4 example: Multi-file refactoring challenge
// Before: Old API signature
async function getUserData(id: string): Promise<UserData> {
// implementation
}
// After: AI renames to getUser and changes return type
async function getUser(id: string): Promise<User> {
// implementation
}
// AI updates every direct call site correctly:
const user = await getUser(userId);
// But misses this reflection-based usage:
const dynamicCall = {
'getUserData': getUserData, // Still references old name
'getOrderData': getOrderData
};
const result = await dynamicCall['getUserData'](id); // Runtime error!
Safeguards for Level 4:
- Run full test suite before and after changes
- Review the AI’s change plan before execution
- Use version control to enable easy rollback
- Manual smoke testing of changed functionality
- Search for string references to renamed identifiers
Level 5: Agentic/Autonomous Development
What it is: You describe features or problems at a high level, and AI autonomously plans, implements, tests, and iterates.
When to use:
- Prototypes and proof-of-concepts
- Well-scoped features following established patterns
- Greenfield projects with no legacy constraints
- Exploratory work where learning is the goal
Tools: Claude Code (agentic mode), Cursor Composer (autonomous), GitHub Copilot Workspace, Windsurf
Productivity impact: Large on first implementation, partly repaid in review and rework. This stays a qualitative claim, because no published study measures output per unit of effort at this level.
Adoption: DORA’s 2025 report finds agentic the least-used interaction mode, with 61% of respondents reporting they never interact with AI tools in an agentic way. In-IDE chat and predictive text remain the common modes.
Risk level: High - AI operates with extended autonomy, can compound errors, makes architectural decisions without human oversight
Reality check: A long autonomous runtime is not the same as long stretches of good output. Context drift and decision quality degrade over extended sessions.
The absence of a number here is itself informative. Level 5 is young enough that the research programmes measuring the lower levels have not caught up with it, and the adoption data suggests why. Reading DORA’s own ownership figures, its 2025 report concludes that today’s AI tools function as sophisticated assistants rather than autonomous agents. That is the same gap the tooling marketing skips over: the capability ships long before the working practice around it settles.
Level 5 works well for prototyping and exploration, where the point is to answer a product question before committing engineering time. The trap is what happens once the answer arrives. A prototype that validated a direction is rarely a codebase anyone can extend, and the architectural decisions inside it were never written down.
Here’s what Level 5 looks like in practice:
// Level 5 example: Agentic development
// Developer provides high-level requirement:
/*
Build a notification system that:
- Sends email, SMS, and push notifications
- Implements retry logic with exponential backoff
- Tracks delivery status in database
- Provides webhook callbacks for delivery events
- Includes rate limiting per user
*/
// AI autonomously:
// 1. Creates data models (Notification, DeliveryStatus, RateLimit)
// 2. Implements service layer with multiple providers
// 3. Adds retry queue with Redis
// 4. Creates webhook delivery system
// 5. Adds comprehensive tests
// 6. Documents the architecture
// Typical shape of the output:
// Good: Complete file set, wired together and running
// Good: Test suite generated alongside the implementation
// WARN: Several overlapping notification libraries (inconsistent)
// WARN: Rate limiting logic has edge case bugs
// WARN: No monitoring/observability hooks
// WARN: Architectural decisions not documented
Critical safeguards for Level 5:
- Sandbox environments only
- Human reviews AI’s architectural plan before execution
- Security scanning on all generated code
- Senior developer reviews before deployment
- Clear expectation that code may need significant refactoring
Level 6: Vibe Coding - AI-First Development
What it is: Trusting AI completely, not reading generated code in detail, following “vibes” and test results to guide development.
When to use:
- Rapid prototyping for immediate learning
- MVP development that will be thrown away
- Exploring problem spaces
- Non-critical applications with short lifespans
Tools: Replit Agent, v0.dev, Bolt, Lovable, full agentic platforms
Productivity impact: Vendors advertise order-of-magnitude speedups; the claims cover the first build only
Risk level: Very high - no code comprehension, maintenance nightmares, security vulnerabilities, rapid technical debt accumulation
Critical limitations:
- Breaks down after initial context window fills
- Impossible to debug without understanding the code
- Team handoffs are extremely difficult
- Security and performance issues go unnoticed
To be direct about Level 6: it isn’t production-ready for most professional contexts. Its characteristic defect is inconsistency. Authorization gets applied on some endpoints and skipped on others, because nothing in the loop was tracking a cross-cutting invariant, and nobody read the code closely enough to notice. Tests pass because the tests were generated from the same misunderstanding.
The security side of that has been measured, even though the productivity side has not. Veracode’s 2025 report tested output from more than 100 large language models and found 45% of the code samples failing security tests by introducing an OWASP Top 10 vulnerability, with Java at 72%, C# at 45%, JavaScript at 43% and Python at 38%. Cross-site scripting was the worst category: the models failed to defend against it in 86% of the relevant samples, and newer models produced more syntactically correct code without improving on security. Read that as a property of generated output on security-relevant tasks, not as a prediction that 45% of your shipped code is vulnerable. It still describes precisely the defect class that survives a workflow where nobody reads the diff.
The only viable use cases for Level 6:
- Throwaway prototypes with explicit “will be rewritten” labels
- Learning experiments where the goal is exploring possibilities
- Proof-of-concepts never intended for production
- UI mockups for design validation
Framework for Choosing Your Level
Here’s a TypeScript-based decision framework that captures the key factors:
interface ProjectContext {
complexity: 'simple' | 'moderate' | 'complex';
riskTolerance: 'low' | 'medium' | 'high';
regulatoryConstraints: boolean;
teamExperience: 'junior' | 'mixed' | 'senior';
maintenanceHorizon: 'prototype' | 'months' | 'years';
testCoverage: 'none' | 'partial' | 'comprehensive';
}
interface AILevelRecommendation {
baseline: 0 | 1 | 2 | 3 | 4 | 5 | 6;
adjustments: Array<{
scope: string;
level: number;
reasoning: string;
}>;
safeguards: string[];
}
function recommendAILevel(context: ProjectContext): AILevelRecommendation {
// Start with base recommendation
let baseline = 3; // Default to function-level generation
const adjustments = [];
const safeguards = [];
// Adjust based on regulatory constraints
if (context.regulatoryConstraints) {
baseline = Math.min(baseline, 1);
safeguards.push('Full audit trail required');
safeguards.push('Human review mandatory for all code');
}
// Adjust based on team experience
if (context.teamExperience === 'junior') {
baseline = Math.min(baseline, 2);
safeguards.push('Focus on learning fundamentals');
safeguards.push('Progressive unlock as skills develop');
}
// Adjust based on maintenance horizon
if (context.maintenanceHorizon === 'years') {
baseline = Math.min(baseline, 3);
safeguards.push('Code comprehension required');
safeguards.push('Documentation mandatory');
} else if (context.maintenanceHorizon === 'prototype') {
baseline = Math.min(baseline + 2, 6);
adjustments.push({
scope: 'Prototype only - plan for rewrite',
level: 6,
reasoning: 'Learning goal, not production system'
});
}
// Test coverage enables higher levels
if (context.testCoverage === 'comprehensive') {
adjustments.push({
scope: 'Refactoring tasks',
level: Math.min(baseline + 1, 5),
reasoning: 'Tests will catch AI mistakes'
});
} else if (baseline > 3) {
safeguards.push('Build test coverage before using higher AI levels');
}
// Risk tolerance modifier
if (context.riskTolerance === 'low') {
baseline = Math.min(baseline, 2);
} else if (context.riskTolerance === 'high' &&
context.maintenanceHorizon === 'prototype') {
baseline = Math.min(baseline + 1, 5);
}
return { baseline, adjustments, safeguards };
}
// Example usage: Financial system
const financialSystem = recommendAILevel({
complexity: 'complex',
riskTolerance: 'low',
regulatoryConstraints: true,
teamExperience: 'senior',
maintenanceHorizon: 'years',
testCoverage: 'comprehensive'
});
console.log(financialSystem);
// {
// baseline: 1,
// adjustments: [
// {
// scope: 'Refactoring tasks',
// level: 2,
// reasoning: 'Tests will catch AI mistakes'
// }
// ],
// safeguards: [
// 'Full audit trail required',
// 'Human review mandatory for all code',
// 'Code comprehension required',
// 'Documentation mandatory'
// ]
// }
// Example usage: Startup MVP
const startupMVP = recommendAILevel({
complexity: 'moderate',
riskTolerance: 'high',
regulatoryConstraints: false,
teamExperience: 'mixed',
maintenanceHorizon: 'prototype',
testCoverage: 'partial'
});
console.log(startupMVP);
// {
// baseline: 5,
// adjustments: [
// {
// scope: 'Prototype only - plan for rewrite',
// level: 6,
// reasoning: 'Learning goal, not production system'
// }
// ],
// safeguards: [
// 'Build test coverage before using higher AI levels'
// ]
// }
Practical Implementation Patterns
Three patterns work well in practice:
Pattern 1: The Graduated Approach
This works particularly well for teams new to AI assistance:
Week 1-2: Level 1-2 (search and autocomplete)
- Team learns to evaluate AI suggestions
- Establish baseline productivity metrics
- Develop "AI suggestion review" muscle memory
Week 3-4: Level 3 (function generation) for tests only
- Lower risk domain for practicing
- Immediate feedback from test execution
- Build confidence in reviewing generated code
Week 5-8: Level 3 for feature code
- Apply learned review skills to production code
- Track quality metrics closely
- Adjust policies based on findings
Week 9+: Level 4 for refactoring (if test coverage is strong)
- Enable multi-file capabilities
- Maintain strict review processes
- Measure long-term quality impact
Pattern 2: Risk-Based Zones
Different parts of your codebase have different risk profiles:
// Define AI level policy by code zone
const aiLevelPolicy = {
// Security-critical: minimal AI
'src/auth/**': { maxLevel: 2, requireReview: true },
'src/payments/**': { maxLevel: 2, requireReview: true },
// Business logic: moderate AI
'src/features/**': { maxLevel: 3, requireReview: true },
'src/services/**': { maxLevel: 3, requireReview: true },
// UI components: higher AI allowed
'src/components/**': { maxLevel: 4, requireReview: false },
'src/pages/**': { maxLevel: 4, requireReview: false },
// Tests: encourage AI usage
'src/**/*.test.ts': { maxLevel: 5, requireReview: false },
// Prototypes: maximum AI
'prototypes/**': { maxLevel: 6, requireReview: false }
};
Pattern 3: Role-Based Capabilities
Different team members should use different AI levels based on their experience:
type DeveloperLevel = 'junior' | 'mid' | 'senior' | 'principal';
type CodeZone = 'security' | 'business' | 'ui' | 'tests' | 'prototype';
function getAllowedAILevel(
developerLevel: DeveloperLevel,
codeZone: CodeZone
): number {
const matrix: Record<DeveloperLevel, Record<CodeZone, number>> = {
junior: {
security: 1, // Search only
business: 2, // Autocomplete only
ui: 2, // Autocomplete only
tests: 3, // Function generation OK
prototype: 3 // Function generation OK
},
mid: {
security: 2,
business: 3,
ui: 4,
tests: 5,
prototype: 5
},
senior: {
security: 2,
business: 4,
ui: 4,
tests: 5,
prototype: 6
},
principal: {
security: 3, // Can use function generation with deep review
business: 4,
ui: 4,
tests: 5,
prototype: 6
}
};
return matrix[developerLevel][codeZone];
}
// Example: Junior developer working on business logic
const allowedLevel = getAllowedAILevel('junior', 'business');
// Returns: 2 (autocomplete only, focus on learning)
// Example: Senior developer working on prototype
const seniorPrototype = getAllowedAILevel('senior', 'prototype');
// Returns: 6 (vibe coding acceptable for throwaway code)
Visualizing the Decision Framework
Here’s how different factors influence your AI level choice:
Cost Analysis & Trade-offs
Exactly one line of this cost model has a published price. The rest is not unmeasurable, only unpriced: published research names most of these pressures and puts numbers on several of them, but nobody converts them into dollars.
The Priced Line
Seat licences scale linearly with headcount and sit at the bottom of the range. GitHub’s plan documentation lists Copilot Business at $19 per granted seat per month and Copilot Enterprise at $39. Cursor’s pricing page lists both of its team tiers at $40 per user per month.
The arithmetic for a 20-developer team: twenty seats at $19 a month for twelve months is $4,560, and the same twenty seats at $40 is $9,600. Call it roughly $4,600 to $9,600 a year at list price. Usage then sits on top of the seat in both products. Cursor applies usage-based billing to every paid tier, and GitHub meters premium work in AI credits priced at $0.01 each. Both vendors reprice and rename these tiers often, so rebuild the arithmetic from the current pages rather than from these figures.
The Unpriced Lines
Subscriptions are the smallest part of the equation:
Learning curve: DORA’s 2025 report puts the median respondent at 16 months of experience with AI tools, and finds only 7% of AI users reaching for the tool reflexively when a problem appears. In the three field experiments Cui and colleagues ran at Microsoft, Accenture and an anonymous Fortune 100 company, adoption averaged about 60% a year after rollout. Sabre, reporting inside the same DORA study, saw assistant adoption reach 74% of its developers while only 25% used agent mode. A licence bought is not a capability acquired.
Review and rework: DORA states the mechanism plainly in its own summary of the 2025 findings: time saved in creation is frequently re-allocated to auditing and verification. Stack Overflow’s 2025 developer survey ranks “AI solutions that are almost right, but not quite” as the top frustration, at 66% of the 31,476 developers who answered that question. DORA’s respondents also report a median of two hours of their most recent workday interacting with AI, roughly a quarter of an eight-hour day.
Debugging time: Code you did not write takes longer to debug, because the patterns are not in your head. 45.2% of Stack Overflow’s respondents name debugging AI-generated code as more time-consuming than debugging their own.
Maintenance surface: Higher levels produce more code per unit of thought, and more code is more surface to maintain. GitClear’s read of 211 million changed lines between January 2020 and December 2024 shows copy-pasted lines rising from 8.3% to 12.3% of changed lines across 2021 to 2024, while refactored lines fell from about 25% to under 10%. Copy-paste overtook refactoring for the first time in that series. GitClear sells code-quality analytics, so weigh the direction rather than the decimals.
Context switching overhead: Moving between assistance levels and tool interfaces has a cost of its own. The mental bookkeeping of “which AI level am I using now?” competes with the problem you were solving. No published measurement puts a number on this one.
Knowledge transfer: Two credible studies disagree about junior developers, and the disagreement is itself the finding. McKinsey reports that in some cases tasks took junior developers 7% to 10% longer with the tools than without. Cui and colleagues report the opposite, with juniors gaining 27% to 39% against 8% to 13% for seniors. One figure is consistent with both readings: 20% of Stack Overflow’s respondents say they have become less confident in their own problem-solving. The bill arrives months later, in the design review where an engineer cannot explain their own code.
No single multiplier covers this, and a vendor-supplied one should be treated as marketing. The signal worth instrumenting is a ratio: when review, rework, and debugging start growing faster than delivered features, the level is set too high for the codebase.
The Shape of the Return
No published source supports a payback month for AI tooling. What the record does support is a description of the return’s shape, and even that description has moved.
DORA’s 2024 report estimated that every 25% increase in an individual’s AI adoption arrived with a 2.1% rise in individual productivity, a 7.5% rise in documentation quality, a 3.4% rise in code quality and a 3.1% gain in code review speed. The same 25% arrived with a 1.5% drop in software delivery throughput and a 7.2% rise in delivery instability. DORA’s own explanation was batch size: AI lets people produce more code in the same time, so changelists grow, and larger changelists are harder to deliver safely. The 2025 report flipped one of those signs. Throughput now improves with adoption while instability still gets worse. The two years report in different statistical units, standardized effect sizes with 89% credible intervals in 2025 against percentage estimates in 2024, so they cannot be plotted as a trend line. What survives the change of method is the asymmetry: the benefit side moved, the stability cost did not.
Self-report is the least reliable input into any of this. METR’s randomized trial put 16 experienced open-source maintainers on 246 real issues in repositories averaging more than a million lines of code. The developers forecast a 24% speedup. After finishing, they still believed AI had sped them up by 20%. They were 19% slower. METR now labels that result historical and says it no longer reflects the current impact of AI models on open-source developer productivity, which is the kind of correction a payback calculation cannot absorb. Its 2026 follow-up survey of 349 technical workers found a median self-reported speed change of 3x, published alongside METR’s own note that in early 2025 people overestimated AI’s effect on their time by 40 percentage points on average.
DORA’s 2025 respondents fit the same gap. More than 80% believe AI increased their productivity, and more than 40% describe the increase as slight. Build the business case on the belief and the number comes out large. Build it on measurement and it comes out smaller, noisier, and specific to the shape of the work.
Outcomes from Published Deployments
Five organizations have published enough detail about their own rollouts to be read against the levels above. The pattern across them is consistent and slightly uncomfortable: the largest gains come from the most artificial tasks.
ANZ Bank ran a six-week randomized experiment with about 100 of its 5,000-plus engineers, reversing the control and treatment roles partway through. The Copilot group completed tasks 42.36% faster, averaging 17.86 minutes per task against the control group’s 30.98 minutes, with fewer code smells and bugs on average. A 12.86% higher unit-test success ratio did not reach statistical significance, and the security result was inconclusive, though Copilot introduced no major security issues. The bank later extended access to roughly 1,000 engineers. The caveat is load-bearing: the tasks were algorithmic Python coding challenges rather than production work, and katas do not carry the constraints that make production slow.
Google published the strongest evidence available for Level 4. In an int32-to-int64 identifier migration, 80% of the code modifications in landed changelists were fully AI-authored, and total time on the migration fell by an estimated 50% against a comparable exercise without model assistance. A JUnit3-to-JUnit4 migration saw about 87% of AI-generated code committed without any change, covering 5,359 files and more than 149,000 lines in three months. A Joda-time-to-Java-time migration saved roughly 89% of the human time on small clusters. Humans reviewed the generated code the same way as any other code. Every one of these is a mechanical, pattern-shaped transformation over a codebase with strong test coverage, which is the precondition Level 4 already states.
Microsoft, Accenture and an anonymous Fortune 100 company hosted three randomized field experiments covering 4,867 developers, pooling to a 26.08% increase in completed tasks with a standard error of 10.3%. The seniority split runs against McKinsey’s: junior developers gained 27% to 39%, seniors 8% to 13%. Adoption reached only about 60% after a year. The authors state plainly that they had no access to the code and could not evaluate the quality of the work produced, which is the limit of what a task-count metric can tell you.
Adidas reported inside DORA’s 2025 study that teams with loosely coupled architectures and fast feedback loops saw productivity gains of 20% to 30%, measured as increases in commits, pull requests and feature-delivery velocity, alongside a 50% increase in hands-on coding time against administrative toil. Teams tightly coupled to the ERP system, with slower feedback loops, did not see the same result. The architecture set the ceiling; the tool did not.
Sabre reported in the same study that assistant adoption surged to 74% of developers across varying tenures, while usage analytics showed only 25% of those users touching agent mode. Adoption of a product and adoption of its most advanced capability are separate numbers, and the second one lags.
Set those against the counterweight. METR’s 16 maintainers, working inside repositories averaging more than a million lines, came out 19% slower. GitHub’s 55.8% and ANZ’s 42.36% both came from self-contained, from-scratch tasks. Google’s 50% earns its place as the exception because it describes mechanical transformation under test coverage, which is the one job the spectrum already reserves for Level 4. Headline percentages travel badly between contexts. The level and the shape of the task travel well.
Metrics to Track
If you implement higher AI assistance levels, track these metrics from day one:
Development Metrics
interface DevelopmentMetrics {
// Velocity tracking
featuresDeliveredPerSprint: number;
timeToFirstPR: number; // Hours from ticket to initial code
codeReviewCycles: number; // Iterations before merge
// Quality tracking
bugIntroductionRate: number; // Per 1000 lines
revisionRate: number; // % of AI code needing rework
technicalDebtScore: number; // Complexity/coupling metrics
testCoveragePercentage: number;
// AI-specific metrics
aiGeneratedLinesPercentage: number;
aiSuggestionAcceptanceRate: number;
aiCodeRevisionTime: number; // Hours spent reviewing AI code
}
Quality Safeguards by Level
Different AI levels require different safeguards:
Level 2-3 Safeguards:
- Mandatory code review for all AI-generated code
- Developers explain AI-generated logic in PR descriptions
- Static analysis with comprehensive linting rules
- Unit test coverage requirements unchanged (typically 80%+)
Level 4-5 Safeguards:
- Pre-change: Comprehensive test suite (80%+ coverage)
- During: Human reviews AI’s execution plan before running
- Post-change: Full test suite + manual smoke testing
- Documentation: AI documents its architectural decisions
- Rollback: Easy revert mechanism for multi-file changes
Level 6 Safeguards (Critical):
- Sandbox environments only - never production
- Security scanning on all generated code
- Senior developer reviews architecture before any deployment
- Clear expectation of potential complete rewrites
- Time-boxed experiments with explicit learning goals
Common Pitfalls & Lessons Learned
Six failure modes show up often enough to plan around:
Pitfall 1: Uniform Adoption Expectations
What happens: All developers receive the same AI tools with uniform usage expectations. Junior developers ship features quickly while struggling to build fundamentals, and months in they cannot debug their own code.
Why it matters: Junior developers need constraints (Level 2 maximum) to build core competencies. Senior developers can handle Level 4-5 effectively. Role-based guidelines are essential.
Solution: Explicit AI level policies by role, documented in team handbook, enforced in code review.
Pitfall 2: Ignoring the Quality Plateau
What happens: An early velocity boost generates enthusiasm for a couple of quarters. Then bug reports climb, feature completion slows, and developers grow frustrated. Whatever measurement exists shows technical debt up and velocity settled well below the honeymoon figure.
Why it matters: Initial velocity gains don’t sustain. Quality degrades silently if not tracked.
Solution: Track revision rates, technical debt metrics, and maintenance burden from day one. Don’t wait until problems are obvious.
Pitfall 3: Inadequate Code Review Adaptation
What happens: A standard code review checklist is applied to AI-generated code. Pattern inconsistencies, subtle bugs, and performance issues that AI commonly introduces go undetected.
Why it matters: AI code needs different review focus - pattern consistency with codebase, edge case handling, performance characteristics, and security implications.
Solution: Updated review checklists, explicit “AI-generated” PR labels, and a review time budget that is explicitly larger than the one for hand-written code.
Pitfall 4: Vibe Coding for Production
What happens: Level 6 gets used for a customer-facing feature because the initial results look impressive. The code reaches production without anyone having read it, and the defects that surface later are the ones no test was written to look for: inconsistent authorization, unvalidated input paths, secrets handled casually.
Why it matters: Vibe coding produces unmaintainable code with hidden security issues. It’s never appropriate for production systems.
Solution: Strict boundaries - Level 6 only for throwaway prototypes with explicit “will be rewritten” labels in the repository.
Pitfall 5: Junior Developer Skill Atrophy
What happens: Junior developers get access to Level 4-5 tools on the rationale that they become more productive. A few quarters later they struggle with debugging tasks and cannot explain their own code in design reviews.
Why it matters: The loop that builds engineering judgement is writing something, watching it fail, and working out why. Generation skips that loop. Juniors ship features but don’t develop debugging skills or architectural understanding.
Solution: Strict limits for juniors (Level 2 maximum), progressive unlock as competency is demonstrated through code reviews and technical discussions.
Pitfall 6: Context Window Illusions
What happens: A 200K token context window is taken to mean AI “understands” the entire codebase. Massive context is provided with the expectation of consistent architectural decisions. The AI makes conflicting choices across different parts of the system.
Why it matters: AI attention degrades with context size. It “sees” tokens but doesn’t truly understand system architecture.
Solution: Provide explicit architectural decisions, patterns, and constraints rather than relying on context inference. Keep context focused on relevant files.
Where the Default Holds
Function-level generation is the level that survives contact with a codebase somebody else will maintain. The unit of output stays small enough to review, and the review is what keeps quality attached to speed. Hold there for production code with a maintenance horizon measured in years.
Override in three directions. Downward, to search and autocomplete, where a regulator demands an audit trail or where a junior engineer is still building the instincts that generation would let them skip. Upward, to multi-file and agentic levels, for mechanical transformations backed by test coverage strong enough to catch what the model misses. All the way up, to vibe coding, only for code that carries a written expectation of being thrown away.
Accountability does not move with the level. Whoever merges the code owns its correctness, its security, and its maintenance, whether they typed it or approved it.
References
- GitHub Copilot Plans - Official seat pricing for Copilot Free, Pro, Pro+, Business and Enterprise, including how premium usage is metered in AI credits.
- Cursor Pricing - Official tier and per-seat pricing for Cursor, including the usage-based billing that applies on top of every paid plan.
- DORA Accelerate State of DevOps Report 2024 - The per-25%-adoption estimates for productivity, documentation quality, code quality, review speed, delivery throughput and delivery stability, plus DORA’s batch-size explanation for the delivery hit.
- 2025 DORA Report: State of AI-assisted Software Development - The follow-up survey of roughly 5,000 respondents, covering adoption and trust, median AI experience, daily time spent with AI, agentic usage, and the Adidas and Sabre accounts quoted above.
- Research: Quantifying GitHub Copilot’s Impact on Developer Productivity and Happiness - GitHub’s SPACE-framework study of 95 developers building an HTTP server, with the completion times and the confidence interval behind the 55.8% figure.
- Unleashing Developer Productivity with Generative AI - McKinsey’s task-type breakdown of documentation, new code and refactoring gains, including where savings collapse on complex work and where junior developers slowed down. Run on McKinsey’s own developers, so read it as directional.
- ML-Enhanced Code Completion Improves Developer Productivity - Google’s controlled measurement of inline completion across more than 10,000 internal developers, with acceptance rates and a published correction removing a claim that lacked statistical significance.
- How Is Google Using AI for Internal Code Migrations? - The migration study behind the Level 4 figures: AI-authored change proportions, estimated time saved, and the file and line counts for the JUnit migration.
- The Impact of AI Tool on Engineering at ANZ Bank - A randomized six-week trial with roughly 100 engineers inside a regulated bank, covering task completion time, code quality and the inconclusive security result.
- How Generative AI Affects Highly Skilled Workers - MIT Sloan’s summary of three randomized field experiments across 4,867 developers, with the seniority split and the authors’ caveat that code quality was never evaluated.
- Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity - METR’s randomized trial inside mature repositories, where forecast, perceived and measured effects diverged sharply. METR now labels the result historical.
- Measuring the Self-Reported Impact of Early-2026 AI on Technical Worker Productivity - METR’s follow-up survey of 349 technical workers, and its own estimate of how far self-reported time savings drift from measured ones.
- 2025 Stack Overflow Developer Survey: AI Section - Large-sample frustration and trust data, including the almost-right-but-not-quite problem, the debugging cost of generated code, and declining confidence in personal problem-solving.
- 2025 GenAI Code Security Report - Veracode’s benchmark of security-relevant code generated by more than 100 models, broken down by language and vulnerability class.
- AI Copilot Code Quality: 2025 Data Suggests 4x Growth in Code Clones - A longitudinal read of 211 million changed lines showing copy-paste rising and refactoring falling. GitClear sells code-quality analytics, so weigh the commercial interest.
Related posts
Where AI coding assistants actually help, why individual speed gains stall at the team level, and what to put in place before widening adoption.
Agents made code-writing essentially free, but judgment about when and how much to use them is still entirely yours. An Aristotelian frame to separate the two skills.
A practical repo layout that keeps Claude Code, Codex, Copilot, Cursor, and OpenCode reading the same rules, with honest notes on where portability breaks.
How GitHub's Spec Kit turns loose AI code generation into structured, maintainable output through a four-phase specify-plan-tasks-implement loop.
How to model GitHub Copilot ROI at enterprise scale: the license and review cost lines, the metrics that matter, payback shape by team size, and rollout anti-patterns.