Full Reference
The SLOPE Framework
A comprehensive framework that maps sprint workflows to golf terminology. Goes beyond naming — the golf metaphor introduces structural improvements: directional miss tracking, handicap trending, club selection, course rating, conditions tracking, and a multi-level routine hierarchy.
The Big Picture
Every sprint flows through the same lifecycle. Here's the full picture — from stepping up to the tee to sitting down at the 19th hole.
Read the Green — Why a fixed lifecycle matters for AI agents
AI coding agents lose context. They crash, compact, and restart. Without a fixed lifecycle, every session starts from zero — the agent has no idea what happened in the last 50 sprints.
SLOPE's lifecycle is designed around this constraint. Every artifact is written to disk at specific checkpoints: the sprint file after pre-round, the scorecard after post-hole, the handicap after the 19th hole. When context compacts, the agent reads these artifacts and picks up exactly where it left off.
The "for each ticket" loop is where most work happens. But the pre-round and post-hole routines are what make the data compound. Without them, you just have a git log. With them, you have a trajectory.
Structure Mapping
| Golf | Development | Scope |
|---|---|---|
| Tournament | Project | The whole thing, all phases |
| Round | Phase | Multi-sprint milestone (6 rounds total) |
| Hole | Sprint | Self-contained, has a par |
| Shot | Ticket | One deliberate action |
| Stroke | Commit | The atomic unit of work |
Read the Green — Why these levels matter
The five levels aren't arbitrary — they map to different feedback loop frequencies. A stroke (commit) gives you immediate feedback: does it compile? A shot (ticket) gives you end-of-task feedback: does the feature work? A hole (sprint) gives you multi-task feedback: did the team improve?
The round (phase) and tournament (project) levels are where strategic patterns emerge. "We always struggle at the mobile-orchestrator boundary" is a round-level insight. "Our scoping gets better every phase" is a tournament-level trend.
Most dev frameworks only operate at one or two levels. SLOPE gives you vocabulary and measurement at all five, so you can reason about performance at the right granularity.
Par System
Par is determined by ticket count. It sets the expected difficulty before the sprint begins.
Course Rating / Slope
Par says how many shots. Slope says how hard those shots are. Each factor adds +1.
Read the Green — How par + slope interact with scoring
A Par 4, Slope 3 sprint is meaningfully harder than a Par 4, Slope 0. Both have 3-4 tickets, but the slope factors compound difficulty in ways that ticket count alone doesn't capture.
The handicap system accounts for this: handicap = avg(score - par) over a rolling window. A bogey on a Slope 3 sprint is more forgivable than a bogey on Slope 0. The framework doesn't penalize you for taking on hard work.
Example: Sprint 167 — Par 4, Slope 2 (cross-package + schema migration)
Score: 5 (Bogey) — but given the slope, this is a solid result.
The handicap computation weights this appropriately.
Club Selection
Declared before each shot. This is your approach commitment — choosing the right club prevents over-engineering and under-scoping.
| Club | Approach | When |
|---|---|---|
| Driver | New infrastructure, big architectural move | Starting something from scratch |
| Long iron | Standard feature implementation | Well-understood pattern, moderate scope |
| Short iron | Targeted implementation | Precise scope, clear target |
| Wedge | Precision fix, surgical refactor | Small area, high accuracy |
| Putter | Polish, final testing, cleanup | Last mile, closing it out |
| Provisional | Fallback approach declared upfront | "If this doesn't work in 2 shots..." |
Read the Green — The psychology of declaring your approach
Club selection isn't just metadata. It's a forcing function that makes you think about complexity before writing code. When you pick up a driver, you're saying: "this is risky, this is new, I'm swinging hard." When you pick up a putter, you're saying: "this is close to done, precision matters more than power."
Over time, club selection data reveals patterns: "We always reach for drivers on OAuth work, but irons would be safer." This is exactly how golf pros optimize — they know which clubs they hit consistently and which ones introduce variance.
The provisional is particularly powerful for AI agents. When an agent declares a provisional ("if this approach fails in 2 commits, switch to X"), it prevents the common failure mode of sinking 45 minutes into a dead-end approach.
Hazards
Obstacles that add strokes to your score. Each hazard type maps to a specific development problem — and a specific recovery pattern.
Recovery costs an extra shot but you're still in play. The gotcha was documented — you just didn't check the yardage book.
Penalty stroke + re-tee from safe position. Irreversible damage — you need to revert and approach from a safer angle.
Stroke + distance. You left the sprint boundary entirely. Go back to where you were and re-approach.
No penalty, just slower going. The code works but it's harder to navigate. Budget extra time.
Can't go direct. Must punch out sideways — unblock the dependency first, then approach the target.
Read the Green — From bunker locations to a hazard map
The real power isn't in logging individual hazards — it's in the bunker location map that accumulates over time. After 50 sprints, you know exactly where the bunkers are: "the OAuth module always has nvm sourcing issues," "mobile-orchestrator boundary misses right on integration."
This map gets baked into the pre-shot routine. Before starting a ticket, the agent checks: "are there known bunkers in this area?" If yes, it budgets an extra shot and selects a safer club. This is how golf pros play — they don't just swing and hope. They study the course.
In CaddyStack, this is implemented as common-issues.json — a growing database of gotchas indexed by code area, severity, and recurrence. The pre-round briefing surfaces the top hazards for the sprint's work area automatically.
Conditions
External factors tracked per sprint. Not controlled by the player — but accounted for in the scorecard.
Read the Green — Why conditions aren't excuses
Conditions aren't excuses — they're context. A bogey in wind (context compaction) is different from a bogey on a calm day. The scorecard captures both the score and the conditions, so when you review your handicap trend, you can separate "bad play" from "hard conditions."
Pin position is especially useful for AI agents. A ticket with loose acceptance criteria ("make the UI better") is a center pin — easy to land near. A ticket with precise requirements ("the animation must be exactly 200ms with this easing curve") is a tucked pin — requires surgical precision. Knowing the pin position before you swing changes your club selection.
Routines
Consistency prevents unforced errors. Same steps, same order, every time.
Pre-Shot Routine — Before Each Ticket
- 1 Read the yardage book — Check codebase map for the area you're about to touch
- 2 Check conditions — Any gotchas for this area? External blockers?
- 3 Select your club — Declare your approach (driver/iron/wedge/putter) and record it
- 4 Pick your target — Read the spec section, know exactly what "on the green" looks like
- 5 Visualize the shot — If the area has prior miss data, account for it ("this green slopes left")
- 6 Declare a provisional — If risky, name the fallback before swinging
Post-Shot Routine — After Each Ticket
- 1 Score the shot — Did it land where you aimed? Fairway / green / miss?
- 2 Record miss direction — Long (over-engineered), Short (under-scoped), Left (wrong approach), Right (wrong execution)
- 3 Log hazards hit — Any bunkers (gotchas), water (breaking changes), OB (scope creep)?
- 4 Commit and push — The stroke is recorded — the last push is the recovery point
- 5 Update the lie — Update sprint file with ticket status and context checkpoint
Miss Direction Key
Post-Hole Routine — After Each Sprint
- 1 Tally the scorecard — Score vs par, shots taken, hazards, misses, conditions
- 2 Aggregate shot stats — Fairways hit %, GIR %, putts per hole, penalty count
- 3 Record to the yardage book — Update codebase map with anything learned
- 4 Distill lessons — Update bunker locations for future players
- 5 Check your handicap — Rolling trend: are you improving or regressing?
- 6 File the card — Retro JSON + spec-status + completed sprint JSON
19th Hole — Informal Reflection
The bar after the round. Honest, unstructured, human.
- 1 How did that feel? — Not stats, not process. Gut check.
- 2 What would you tell the next player? — One piece of advice, no jargon.
- 3 What surprised you? — The thing you didn't expect, good or bad.
- 4 What are you excited about next? — Where the energy is for the next round.
Read the Green — Why routine beats talent
The #1 insight from 175 sprints: routine beats talent. An agent that follows the pre-shot routine every time will outperform an agent that's "smarter" but inconsistent. Golf pros know this — they don't skip their routine even when they're playing well.
The 19th Hole is the most underrated part. It captures what metrics can't: momentum, energy, intuition. After 50 sprints of 19th Hole notes, patterns emerge that no stat can show: "we always feel drained after OAuth work," "infrastructure sprints are energizing."
For AI agents specifically, the routines solve the context compaction problem. When an agent's context window fills up and old messages get compressed, the routine artifacts on disk preserve everything. The next session reads the sprint file and the scorecard, and it's as if no context was lost.
Scoring & Handicap
Every sprint produces a scorecard. Rolling stats produce a handicap. The handicap tells you if the system is improving.
| Stat | Last 5 | Last 10 | All-time |
|---|---|---|---|
| Handicap | +1.2 | +1.8 | +2.1 |
| Fairways | 71% | 65% | 62% |
| GIR | 68% | 61% | 58% |
| Avg putts | 1.3 | 1.5 | 1.6 |
| Miss pattern | Slightly long | Long + right | Right |
Read the Green — What the handicap actually tells you
The handicap isn't a judgment — it's a prediction. A handicap of 1.2 means "this system averages 1.2 strokes over par." That's not bad or good in isolation — it's useful because it tells you what to expect from the next sprint.
The three windows (last 5, last 10, all-time) show different things:
- Last 5 — Are you in form right now? Recent momentum.
- Last 10 — Is this a trend or a fluke? Smooths out variance.
- All-time — Your baseline. Where you started vs where you are.
When last-5 is significantly better than all-time, you're improving. When it's worse, something changed — check conditions, check hazards, check if you're playing a harder course (higher slope sprints).
The miss pattern is arguably more actionable than the handicap itself. "We consistently miss long" means the team over-engineers. "We miss right" means the approach is correct but execution/integration fails. This directly maps to training drills: research sprints for "long" misses, feedback sprints for "right" misses.
Special Plays
Obvious fix, no architect review needed
Approach was fundamentally wrong
"If this doesn't work in 2 shots, play X instead"
Could go for it but risk isn't worth it
Multiple agents take shots, use the best
Compare two sprints head to head
Example Scorecard
Here's what a real SLOPE scorecard looks like — from an actual sprint.
S167-1: Schema migration — Clean drive, landed where planned.
S167-2: API endpoints — On target, no hazards.
S167-3: Mobile wiring — Right approach, wrong integration point.
Hazard: Bunker (gotcha #39 — nvm sourcing)
S167-3 fix: Rewired to correct hook — Recovery shot, clean finish.