Back to SLOPE

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.

Look for Read the Green sections to dive deeper into each topic

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.

SPRINT LIFECYCLE Pre-Round Briefing + Par + Slope FOR EACH TICKET Pre-Shot Yardage + Club Execute Code + Test + Push Post-Shot Score + Log next ticket Hazard Hit? Log + Recovery Shot Post-Hole Scorecard + Retro 19th Hole Reflect + Improve
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
TournamentProjectThe whole thing, all phases
RoundPhaseMulti-sprint milestone (6 rounds total)
HoleSprintSelf-contained, has a par
ShotTicketOne deliberate action
StrokeCommitThe 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.

Par 3
1-2 tickets
Single package, familiar area
Par 4
3-4 tickets
Multi-package or schema changes
Par 5
5+ tickets
New infrastructure, cross-cutting

Course Rating / Slope

Par says how many shots. Slope says how hard those shots are. Each factor adds +1.

+1
Cross-package boundary — Changes span multiple packages
+1
Schema migration — Database migration required
+1
New area — First time touching this code area
+1
External dependency — API, SDK, or service integration
+1
Concurrent agents — Multi-agent coordination required
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
DriverNew infrastructure, big architectural moveStarting something from scratch
Long ironStandard feature implementationWell-understood pattern, moderate scope
Short ironTargeted implementationPrecise scope, clear target
WedgePrecision fix, surgical refactorSmall area, high accuracy
PutterPolish, final testing, cleanupLast mile, closing it out
ProvisionalFallback 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.

HAZARD RECOVERY FLOWS Clean Shot Fairway / Green Bunker Recovery shot (+1) Back in play Water Penalty + re-tee Replay from safe point OB Stroke + distance Back to original scope +0 strokes +1 stroke +1 stroke + rework +2 strokes
Bunker / Known gotcha

Recovery costs an extra shot but you're still in play. The gotcha was documented — you just didn't check the yardage book.

Water / Breaking change or data loss

Penalty stroke + re-tee from safe position. Irreversible damage — you need to revert and approach from a safer angle.

OB (Out of Bounds) / Scope creep

Stroke + distance. You left the sprint boundary entirely. Go back to where you were and re-approach.

Rough / Technical debt

No penalty, just slower going. The code works but it's harder to navigate. Budget extra time.

Trees / Blocking dependency

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.

Wind — Context compaction mid-sprint, token pressure
Rain — Docker down, CI backed up, infra issues
Frost delay — Waiting on dependency, external blocker
Altitude — New environment (first deploy to X)
Pin position — How tight the acceptance criteria are
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. 1
    Read the yardage book — Check codebase map for the area you're about to touch
  2. 2
    Check conditions — Any gotchas for this area? External blockers?
  3. 3
    Select your club — Declare your approach (driver/iron/wedge/putter) and record it
  4. 4
    Pick your target — Read the spec section, know exactly what "on the green" looks like
  5. 5
    Visualize the shot — If the area has prior miss data, account for it ("this green slopes left")
  6. 6
    Declare a provisional — If risky, name the fallback before swinging

Post-Shot Routine — After Each Ticket

  1. 1
    Score the shot — Did it land where you aimed? Fairway / green / miss?
  2. 2
    Record miss direction — Long (over-engineered), Short (under-scoped), Left (wrong approach), Right (wrong execution)
  3. 3
    Log hazards hit — Any bunkers (gotchas), water (breaking changes), OB (scope creep)?
  4. 4
    Commit and push — The stroke is recorded — the last push is the recovery point
  5. 5
    Update the lie — Update sprint file with ticket status and context checkpoint

Miss Direction Key

Long= Over-engineered, built more than needed
Short= Under-scoped, didn't finish the job
Left= Wrong approach, had to rework strategy
Right= Right approach, wrong execution/integration

Post-Hole Routine — After Each Sprint

  1. 1
    Tally the scorecard — Score vs par, shots taken, hazards, misses, conditions
  2. 2
    Aggregate shot stats — Fairways hit %, GIR %, putts per hole, penalty count
  3. 3
    Record to the yardage book — Update codebase map with anything learned
  4. 4
    Distill lessons — Update bunker locations for future players
  5. 5
    Check your handicap — Rolling trend: are you improving or regressing?
  6. 6
    File the card — Retro JSON + spec-status + completed sprint JSON

19th Hole — Informal Reflection

The bar after the round. Honest, unstructured, human.

  1. 1
    How did that feel? — Not stats, not process. Gut check.
  2. 2
    What would you tell the next player? — One piece of advice, no jargon.
  3. 3
    What surprised you? — The thing you didn't expect, good or bad.
  4. 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.

SCORING COMPUTATION Shots[ ] club, result, hazards buildScorecard() auto-computes stats Stats FW% | GIR% | putts penalties | misses Score vs Par score_label computeHandicap() last 5 | last 10 | all Eagle -2 Birdie -1 Par 0 Bogey +1 Double +2 Triple +3
Stat Last 5 Last 10 All-time
Handicap+1.2+1.8+2.1
Fairways71%65%62%
GIR68%61%58%
Avg putts1.31.51.6
Miss patternSlightly longLong + rightRight
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

Gimme — Trivial ticket, skip ceremony

Obvious fix, no architect review needed

Mulligan — Ticket revert and redo

Approach was fundamentally wrong

Provisional — Fallback declared before swinging

"If this doesn't work in 2 shots, play X instead"

Lay-up — Safer approach over ambitious one

Could go for it but risk isn't worth it

Scramble — Multi-agent sprint

Multiple agents take shots, use the best

Match play — Sprint-vs-sprint comparison

Compare two sprints head to head

Example Scorecard

Here's what a real SLOPE scorecard looks like — from an actual sprint.

Sprint 167 — Par 4, Slope 2 Conditions: Clear
1 Driver → Fairway

S167-1: Schema migration — Clean drive, landed where planned.

2 Long iron → Green

S167-2: API endpoints — On target, no hazards.

3 Short iron → Missed right

S167-3: Mobile wiring — Right approach, wrong integration point.

Hazard: Bunker (gotcha #39 — nvm sourcing)

4 Wedge → In the hole

S167-3 fix: Rewired to correct hook — Recovery shot, clean finish.

Score: Bogey (+1)
Fairways: 2/3 (67%)
GIR: 2/3 (67%)
Putts: 1
Hazards: 1 bunker
Misses: 1 right