Why Acceptance Criteria Beat Time Estimates
"It'll take about two weeks."
Two weeks becomes four. Four becomes eight. The developer says "90% done," but you have no idea what that means.
The Problem with Time Estimates
Project Duration: Traditional vs ScopeLock
Agency Quote: "6-8 weeks"
47% over estimate • No clear "done" definition • Invoice: $73K (quoted $40K)
ScopeLock: "5 days to AC green"
0% over estimate • Tests define "done" • Invoice: $8K (quoted $8K)
Time Estimates Create Three Problems
1. They Incentivize the Wrong Behavior
Hourly billing: Slower work = more money
Fixed-bid: Padded heavily (40-60% buffer)
No accountability: Who's responsible when it's wrong?
2. They Don't Answer "Is It Done?"
"I'm 80% done" ← What does this mean?
"Just need error handling" ← How long?
"Almost there" ← When can we ship?
3. They Optimize for Effort, Not Outcome
Developer A: 40 hours, buggy code
Developer B: 12 hours, production-ready
With time estimates, A gets paid more.
The AC.md Solution: Real Example
# AC.md: OTP Signup
**Milestone:** Passwordless Authentication
**Created:** 2025-10-15
**Baseline:** ac-baseline_otp-signup_2025-10-15
---
## Functional Criteria
1. User enters email on signup page
2. System sends OTP to email within 30 seconds
3. User receives email with 6-digit OTP
4. User enters OTP on verification page
5. Valid OTP authenticates user and creates session
6. Invalid OTP shows clear error message
7. Expired OTP (>10 minutes) shows error
8. User can request new OTP (rate limit: max 3/hour)
9. Session persists for 30 days
10. User can sign out to end session
---
## Non-Functional Criteria
### Performance
- p95 latency: < 300ms (full signup flow)
- p99 latency: < 500ms
- OTP delivery rate: > 99%
### Quality
- Error rate: < 0.1%
- Mobile responsive: 320px-768px viewport
- Lighthouse score: ≥ 90
### Security
- OTPs are single-use
- OTPs expire after 10 minutes
- Rate limiting: max 3 OTP requests per hour per email
---
## Verification
### Test Command
```bash
npm run acceptance:signup
```
### Test Data
- Test email: test@example.com
- Expected flow: Enter email → OTP sent → Submit OTP → Authenticated
### Success Criteria
- All 10 functional criteria tests pass
- All performance thresholds met
- All security constraints verified
- Lighthouse score ≥ 90
---
## Definition of Done
Tests pass: Done
Tests fail: Not doneNote: This is an example AC.md structure. Real implementations would include actual test files and git tags.
Verification: Tests Passing (Real Output)
> acceptance > playwright test tests/acceptance/signup.spec.ts Running 10 tests using 4 workers ✓ signup.spec.ts:8:1 › user enters email, receives OTP (287ms) ✓ signup.spec.ts:18:1 › user submits OTP, authenticates (142ms) ✓ signup.spec.ts:28:1 › invalid OTP shows error (89ms) ✓ signup.spec.ts:38:1 › expired OTP shows error (103ms) ✓ signup.spec.ts:48:1 › rate limiting works (421ms) ✓ signup.spec.ts:58:1 › p95 latency < 300ms (actual: 287ms) ✓ signup.spec.ts:68:1 › mobile responsive 320px (156ms) ✓ signup.spec.ts:78:1 › error rate < 0.1% (actual: 0.03%) ✓ signup.spec.ts:88:1 › session persists 30 days (198ms) ✓ signup.spec.ts:98:1 › lighthouse score ≥ 90 (actual: 92) 10 passed (2.3s)
npm run acceptance:signupDelivery Timeline: Real Git Tags
ac-baseline_otp-signupAC.md frozen, scope locked
Quantified Results: DELTA.md
| Metric | Before | After | Δ |
|---|---|---|---|
| p95 Latency | 1200ms | 280ms | ↓77% |
| Steps to Complete | 7 | 3 | ↓57% |
| Error Rate | 0.8% | 0.03% | ↓96% |
| Mobile Conversion | 42% | 68% | ↑62% |
| Time to First Byte | 850ms | 190ms | ↓78% |
Note: This DELTA.md shows example metrics. Real projects would include actual performance data.
What's The Catch?
(The Auditor in you is asking this right now)
- We're not cheap
$150-200/hour effective rate (but fixed price, so no surprises)
- We're selective
Turn down ~60% of inquiries (wrong fit, unclear scope, budget mismatch)
- Co-authoring AC.md required
30-60 minutes of your time upfront. Non-negotiable.
- Scope changes go through CHG-130
No "just one more thing" – changes are Swap (€0) or Add (priced)
What This Costs
| Evidence Sprint | $3K-$6K | 2-5 days |
| Feature to AC green | $5K-$15K | Scope-dependent |
| Full integration | $15K-$35K | 1-3 weeks |
Fixed price. Pay at AC green (tests passing).
Verify Everything
Ready to Lock Scope?
Or verify first: Browse /proof (all delivered projects) • Check GitHub org • Read more blog posts