fdeops 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +18 -0
- package/CLAUDE.md.template +25 -0
- package/LICENSE +21 -0
- package/README.md +328 -0
- package/adapters/AGENTS.md +24 -0
- package/adapters/GEMINI.md +24 -0
- package/adapters/README.md +31 -0
- package/adapters/copilot-instructions.md +24 -0
- package/adapters/cursor.fde.mdc +29 -0
- package/bin/check.js +260 -0
- package/bin/fde.js +690 -0
- package/bin/install.js +220 -0
- package/hooks/hooks.json +40 -0
- package/hooks/pre-compact +66 -0
- package/hooks/run-hook.cmd +3 -0
- package/hooks/session-start +91 -0
- package/hooks/session-stop +86 -0
- package/package.json +52 -0
- package/skills/fde/SKILL.md +219 -0
- package/skills/fde/references/ai.md +91 -0
- package/skills/fde/references/artifacts.md +247 -0
- package/skills/fde/references/assumption-audit.md +77 -0
- package/skills/fde/references/audit.md +61 -0
- package/skills/fde/references/blast-radius.md +91 -0
- package/skills/fde/references/build.md +98 -0
- package/skills/fde/references/business-case.md +78 -0
- package/skills/fde/references/close.md +43 -0
- package/skills/fde/references/dashboard.md +40 -0
- package/skills/fde/references/debrief.md +36 -0
- package/skills/fde/references/debug.md +55 -0
- package/skills/fde/references/demo-prep.md +31 -0
- package/skills/fde/references/discover.md +163 -0
- package/skills/fde/references/exec-narrative.md +108 -0
- package/skills/fde/references/fintech.md +48 -0
- package/skills/fde/references/gov.md +47 -0
- package/skills/fde/references/handoff-engineering.md +139 -0
- package/skills/fde/references/healthcare.md +45 -0
- package/skills/fde/references/incremental-build.md +91 -0
- package/skills/fde/references/initiative-triage.md +78 -0
- package/skills/fde/references/land.md +75 -0
- package/skills/fde/references/multi-customer-ops.md +114 -0
- package/skills/fde/references/observability.md +103 -0
- package/skills/fde/references/options-analysis.md +81 -0
- package/skills/fde/references/pattern-extract.md +93 -0
- package/skills/fde/references/plan.md +108 -0
- package/skills/fde/references/qa-live.md +113 -0
- package/skills/fde/references/rescue.md +81 -0
- package/skills/fde/references/review.md +53 -0
- package/skills/fde/references/rollback-drill.md +102 -0
- package/skills/fde/references/scope-defense.md +71 -0
- package/skills/fde/references/security-audit.md +105 -0
- package/skills/fde/references/ship.md +121 -0
- package/skills/fde/references/sketch.md +40 -0
- package/skills/fde/references/stakeholder-radar.md +68 -0
- package/skills/fde/references/status.md +30 -0
- package/skills/fde/references/test-on-legacy.md +108 -0
- package/skills/fde/references/trust-engineering.md +100 -0
- package/skills/fde/references/use-case-scoring.md +70 -0
- package/templates/.fde/README.md +13 -0
- package/templates/.fde/brief.md +8 -0
- package/templates/.fde/context.md +14 -0
- package/templates/.fde/decisions.md +18 -0
- package/templates/.fde/delivery.md +7 -0
- package/templates/.fde/reality.md +7 -0
- package/templates/.fde/retrospectives/.gitkeep +0 -0
- package/templates/.fde/risks.md +5 -0
- package/templates/.fde/stakeholders.md +10 -0
- package/templates/.fde/success.md +7 -0
- package/templates/.fde/terrain.md +7 -0
- package/templates/.fde/trust-profile.md +11 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# discover - find the real problem, map the terrain
|
|
2
|
+
|
|
3
|
+
**Enter when:** the brief feels wrong, the real problem is unclear, shadow processes are suspected, or any phase found that the map is missing.
|
|
4
|
+
|
|
5
|
+
**Read first:** `context.md`, `brief.md`. Load `terrain.md` if it exists - extend it, never regenerate from scratch.
|
|
6
|
+
|
|
7
|
+
## Frame the decision first
|
|
8
|
+
|
|
9
|
+
Before any scanning, write one sentence at the top of your working notes:
|
|
10
|
+
|
|
11
|
+
> "What will the sponsor do differently because of this discovery?"
|
|
12
|
+
|
|
13
|
+
If you can't name the decision this informs (descope? rescope? pick use case A over B? touch module X first?), you're collecting trivia, not discovering. Every output of this phase is aimed at that decision.
|
|
14
|
+
|
|
15
|
+
## Method - part 1: the codebase (you do this work)
|
|
16
|
+
|
|
17
|
+
**First move: `fde scan`** - it runs everything below deterministically in seconds (churn×tests, "temporary" archaeology, AI components, secrets redacted, previous attempts). Your job is then **interpretation**: read its output against the brief, follow the hotspots into the code, and connect the technical findings to the human signals in part 2.
|
|
18
|
+
|
|
19
|
+
If the CLI is unavailable, run the manual commands below. Either way: do not load the full codebase into context - scan wide, read deep only on hotspots.
|
|
20
|
+
|
|
21
|
+
**1. Stack and age.** Language, framework, build system, date of last major upgrade:
|
|
22
|
+
```bash
|
|
23
|
+
git log --reverse --format="%ad" --date=short | head -1 # repo birth
|
|
24
|
+
git log -1 --format="%ad" --date=short # last commit
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**2. Churn heat - the modules everyone touches but fears:**
|
|
28
|
+
```bash
|
|
29
|
+
git log --since="90 days ago" --name-only --pretty=format: | sort | uniq -c | sort -rn | head -20
|
|
30
|
+
```
|
|
31
|
+
The highest-churn file in a legacy codebase is the one everyone is afraid to refactor but cannot avoid touching. Cross-reference with complexity (file size, nesting) and mark "handle with care."
|
|
32
|
+
|
|
33
|
+
**3. Test gaps - what's covered, what's a lie:**
|
|
34
|
+
```bash
|
|
35
|
+
find . -path ./node_modules -prune -o -name "*test*" -print | head -30
|
|
36
|
+
```
|
|
37
|
+
Map test files against the churn list. A high-churn module with no test neighbors is a load-bearing wall with no insurance. Spot-read the tests that do exist: tests that pass but assert nothing are worse than no tests - note them.
|
|
38
|
+
|
|
39
|
+
**4. The "temporary" archaeology** (repeat `--include` per extension - brace globs silently match nothing):
|
|
40
|
+
```bash
|
|
41
|
+
grep -rnE "HACK|FIXME|XXX|temporary|for now|remove this|workaround" \
|
|
42
|
+
--include="*.js" --include="*.ts" --include="*.py" --include="*.java" \
|
|
43
|
+
--include="*.go" --include="*.rb" --include="*.cs" --include="*.php" . | head -30
|
|
44
|
+
```
|
|
45
|
+
Temporary code in production is permanent code with an excuse. Each hit is a candidate for "what was never built properly."
|
|
46
|
+
|
|
47
|
+
**5. AI components - they fail silently:**
|
|
48
|
+
```bash
|
|
49
|
+
grep -rlnE "openai|anthropic|llm|prompt|embedding|vector|inference" \
|
|
50
|
+
--include="*.js" --include="*.ts" --include="*.py" --include="*.java" \
|
|
51
|
+
--include="*.go" . | head -20
|
|
52
|
+
```
|
|
53
|
+
Flag every one. AI components don't fail like regular code - they degrade as the world changes. Each needs: model version, fallback path (or note its absence), observability (or note its absence).
|
|
54
|
+
|
|
55
|
+
**6. Data flow.** Where data enters, how it moves, where it stops. Entry points first: routes, queues, cron, file drops.
|
|
56
|
+
|
|
57
|
+
## Method - part 2: the humans (you coach, the FDE asks)
|
|
58
|
+
|
|
59
|
+
The real spec is what people **do** when the system fails - not what the slide deck says. Arm the FDE with these, in their own words:
|
|
60
|
+
|
|
61
|
+
- **"How is the team coping today without the fix?"** - the workaround is the honest requirements doc.
|
|
62
|
+
- **Find the spreadsheet.** Almost always there. Whoever maintains it is the best interview in the building.
|
|
63
|
+
- **The hesitation.** When someone says "well, there's also this other thing we do…" - stop them, ask them to finish. The main story is what they're comfortable explaining; the hesitation is the real problem.
|
|
64
|
+
- **"Which part of the codebase do you least want to touch?"** The answer is unanimous and it's the load-bearing wall. Check it against your churn scan - when the human answer and the churn data agree, that's your first map landmark.
|
|
65
|
+
- **Shadow AI.** Someone pasting data into ChatGPT to cope = a real unmet need + an uncontrolled data risk. Note both.
|
|
66
|
+
|
|
67
|
+
## Method - part 3: workshop facilitation
|
|
68
|
+
|
|
69
|
+
When discovery requires a structured session with multiple stakeholders (alignment, prioritisation, design):
|
|
70
|
+
|
|
71
|
+
**Before the room:**
|
|
72
|
+
- Define the single decision the workshop must produce - not "discuss options" but "rank the three candidates and commit to one."
|
|
73
|
+
- Cap at 8 people. Every person above 8 halves the probability of a decision.
|
|
74
|
+
- Time-box: 90 minutes max. Anything longer splits into two sessions.
|
|
75
|
+
- Pre-read: one page, sent 48 hours ahead. Nobody will read more.
|
|
76
|
+
|
|
77
|
+
**In the room (the FDE facilitates, not presents):**
|
|
78
|
+
1. **5 min - frame.** One slide: the decision, the constraint, the deadline. No history lesson.
|
|
79
|
+
2. **15 min - diverge.** Silent post-its (or digital equivalent). Everyone writes before anyone talks - prevents the loudest voice dominating.
|
|
80
|
+
3. **20 min - cluster.** Group themes, name them. The FDE does NOT label - the room labels.
|
|
81
|
+
4. **30 min - converge.** Dot-vote or forced-rank. The FDE counts, the room decides.
|
|
82
|
+
5. **10 min - lock.** State the decision back. "We're saying X. Anyone who can't live with this, speak now." Silence = consent.
|
|
83
|
+
6. **10 min - next steps.** Who does what by when. Written before people stand up.
|
|
84
|
+
|
|
85
|
+
**After the room:** Summary in `decisions.md` within 2 hours. Decisions decay - what felt clear at 3pm is debatable by 5pm if unwritten.
|
|
86
|
+
|
|
87
|
+
## Method - part 4: data estate assessment
|
|
88
|
+
|
|
89
|
+
When the engagement involves AI, analytics, or data-heavy automation, assess the data estate before scoring use cases:
|
|
90
|
+
|
|
91
|
+
**The 5 questions (ask the data owner, not the sponsor):**
|
|
92
|
+
1. **Where does data live?** - List every source: databases, warehouses, SaaS exports, spreadsheets, S3 buckets, vendor APIs. Map it.
|
|
93
|
+
2. **How fresh is it?** - Real-time, daily batch, "someone uploads a CSV on Mondays"? Freshness determines what's buildable.
|
|
94
|
+
3. **Who owns it?** - Not "IT" - the named person who can grant access and explain the schema. No name = no access in practice.
|
|
95
|
+
4. **What's the quality?** - Sample 100 rows from each critical source. Check: nulls, duplicates, format consistency, semantic correctness. A 60% null rate in a key field = that source is fiction.
|
|
96
|
+
5. **What are the governance constraints?** - PII classification, retention policies, cross-border rules, consent basis. One missed constraint = a compliance stop later.
|
|
97
|
+
|
|
98
|
+
**The data readiness matrix:**
|
|
99
|
+
|
|
100
|
+
| Source | Location | Freshness | Owner | Quality (sample) | Governance | Verdict |
|
|
101
|
+
|--------|----------|-----------|-------|-----------------|------------|---------|
|
|
102
|
+
| _fill per source_ | | | | | | Ready / Needs work / Blocker |
|
|
103
|
+
|
|
104
|
+
A use case that depends on a "Blocker" source doesn't get scored - it gets a data remediation conversation first. Write this to `terrain.md` under a `## Data estate` section.
|
|
105
|
+
|
|
106
|
+
## When scope is a transformation, not a single problem
|
|
107
|
+
|
|
108
|
+
Score every candidate use case before anything gets prototyped:
|
|
109
|
+
|
|
110
|
+
| Dimension | Question | 1–5 |
|
|
111
|
+
|---|---|---|
|
|
112
|
+
| Business value | What does it cost them unsolved? | |
|
|
113
|
+
| Complexity | How hard to build safely? (5 = hardest) | |
|
|
114
|
+
| Data readiness | Available, clean, sufficient volume today? | |
|
|
115
|
+
|
|
116
|
+
**Score = (Value × Data readiness) / Complexity.** Highest score gets prototyped first (hand to `sketch`). A 5-value/1-complexity/5-readiness case scores 25; a 5-value/5-complexity/2-readiness case scores 2 - they look identical on a whiteboard. Never let a technically interesting use case override the score.
|
|
117
|
+
|
|
118
|
+
## Artifact (this IS the memory - write it as you work)
|
|
119
|
+
|
|
120
|
+
**`reality.md`** - the readout the FDE takes into the sponsor meeting:
|
|
121
|
+
```markdown
|
|
122
|
+
# Reality (actual problem)
|
|
123
|
+
**Decision this informs:** <one line>
|
|
124
|
+
**Confirmed:** <real problem> (evidence: <workaround/data/quote, source, day>)
|
|
125
|
+
**Stated brief was wrong/right because:** <delta, with evidence>
|
|
126
|
+
**Implication for build:** <thin-slice direction>
|
|
127
|
+
**Validated with:** <who, when>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**`terrain.md`** - the map every later phase loads:
|
|
131
|
+
```markdown
|
|
132
|
+
# Terrain
|
|
133
|
+
**Stack:** <lang/framework/build, age>
|
|
134
|
+
**Hotspots (handle with care):** <file - churn n/90d - tests: none/weak/ok - why it matters>
|
|
135
|
+
**AI components:** <file - model - fallback? - observability?>
|
|
136
|
+
**Data flow:** <entry → transform → store → exit>
|
|
137
|
+
**Test landscape:** <covered / gaps / lies>
|
|
138
|
+
**Unknowns:** <named explicitly - an honest gap beats a confident guess>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Every line carries its evidence. `(churn: 47/90d)` `(ops lead, Day 5)` `(stated, unverified)`.
|
|
142
|
+
|
|
143
|
+
## Checkpoint (before any build)
|
|
144
|
+
|
|
145
|
+
Present to the FDE, four things, one paragraph each - no padding:
|
|
146
|
+
1. The real problem, with the two strongest pieces of evidence.
|
|
147
|
+
2. The top 3 risk areas of the codebase, one line of why each.
|
|
148
|
+
3. What must not be touched without characterisation tests.
|
|
149
|
+
4. The recommendation: confirm brief / descope / rescope - and the decision it puts in front of the sponsor.
|
|
150
|
+
|
|
151
|
+
If discovery revealed the problem is 3× the brief: the FDE tells the customer **before** telling themselves it's manageable. Lead with evidence, offer three paths (descope / rescope / pause-and-plan), confirm any reset in writing - update `success.md` and `brief.md` before continuing.
|
|
152
|
+
|
|
153
|
+
## If you've formed three wrong reads
|
|
154
|
+
|
|
155
|
+
Stop. Don't form a fourth hypothesis. Three disproven reads means the brief is actively misleading - usually the person who briefed doesn't know, or knows and can't say. Change method: stop analysing the system, ask three people separately "if you had to bet on what's actually wrong here, what would you say?" The thing they all hesitate before saying is the real problem.
|
|
156
|
+
|
|
157
|
+
## Principles
|
|
158
|
+
|
|
159
|
+
- The brief is a hypothesis until evidence confirms it.
|
|
160
|
+
- The workaround is more honest than the requirements document.
|
|
161
|
+
- Churn data + the human's "don't touch that" pointing at the same module = the map is true.
|
|
162
|
+
- Never modify code before the terrain map exists.
|
|
163
|
+
- Scan wide, read deep only on hotspots.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# exec-narrative - the story that gets the next phase funded
|
|
2
|
+
|
|
3
|
+
**Enter when:** the sponsor's boss needs a summary, a board update mentions the engagement, the FDE needs to justify continued investment, or a quarterly review is approaching.
|
|
4
|
+
|
|
5
|
+
**Read first:** `delivery.md`, `success.md`, `reality.md`, `risks.md`, `stakeholders.md`, `context.md`. The narrative is built from the engagement record, not from memory.
|
|
6
|
+
|
|
7
|
+
Technical FDEs lose renewals by presenting work instead of outcomes. The exec doesn't want to know what was built - they want to know what it changed. A good exec narrative takes 60 seconds to deliver and survives hostile questions.
|
|
8
|
+
|
|
9
|
+
## Method (you do this work)
|
|
10
|
+
|
|
11
|
+
**1. The Pyramid Principle.** One governing thought, supported by three arguments, each backed by evidence. The exec hears the conclusion first, not the journey:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
GOVERNING THOUGHT: (one sentence - the conclusion)
|
|
15
|
+
"The payment processing overhaul cut manual reconciliation from
|
|
16
|
+
3 FTEs to 0.5 FTE and eliminated the $2M annual audit risk."
|
|
17
|
+
|
|
18
|
+
SUPPORT 1: What was done (one paragraph)
|
|
19
|
+
→ Evidence from delivery.md
|
|
20
|
+
|
|
21
|
+
SUPPORT 2: What it saved (quantified)
|
|
22
|
+
→ Evidence from business-case.md + delivery.md
|
|
23
|
+
|
|
24
|
+
SUPPORT 3: What's next (the ask)
|
|
25
|
+
→ Evidence from decisions.md + risks.md
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**2. Four narrative lengths.** The same story, scaled for the context:
|
|
29
|
+
|
|
30
|
+
| Length | When | Format |
|
|
31
|
+
|--------|------|--------|
|
|
32
|
+
| **30 seconds** | Elevator, hallway, Slack thread | The governing thought + one number |
|
|
33
|
+
| **2 minutes** | Stand-up, exec check-in | Governing thought + 3 supports + the ask |
|
|
34
|
+
| **10 minutes** | Quarterly review, steering committee | Full pyramid + hard questions answered + visual |
|
|
35
|
+
| **60 minutes** | Board presentation, transformation review | Full pyramid + demos + deep-dive appendix |
|
|
36
|
+
|
|
37
|
+
Write all four. The FDE will need different lengths at different moments - having them pre-written means they're never caught improvising.
|
|
38
|
+
|
|
39
|
+
**3. The opening frame - SCQA.** Structure the first 30 seconds:
|
|
40
|
+
|
|
41
|
+
| Element | Purpose | Example |
|
|
42
|
+
|---------|---------|---------|
|
|
43
|
+
| **Situation** | Where we are (shared context) | "We started this engagement to fix the payment failures that were costing $200K/month in manual reconciliation." |
|
|
44
|
+
| **Complication** | What changed or what's at stake | "The problem was deeper than expected - the reconciliation failures traced to a data integrity issue in the core ledger." |
|
|
45
|
+
| **Question** | The decision the exec needs to make | "Should we extend the engagement to fix the root cause, or ship the workaround?" |
|
|
46
|
+
| **Answer** | Your recommendation | "Fix the root cause. The workaround adds $40K/year in maintenance and doesn't eliminate the audit risk." |
|
|
47
|
+
|
|
48
|
+
**4. Value in their units.** Translate every technical achievement:
|
|
49
|
+
|
|
50
|
+
| What you did (internal) | What it means (their units) |
|
|
51
|
+
|------------------------|---------------------------|
|
|
52
|
+
| Reduced p95 latency from 3s to 200ms | Customers complete checkout 15x faster |
|
|
53
|
+
| Added test coverage from 12% to 78% | Change failure rate dropped from 40% to 5% |
|
|
54
|
+
| Migrated from monolith to three services | Team can deploy independently - shipping frequency from monthly to weekly |
|
|
55
|
+
| Built ML fraud detection | $1.2M/year in fraud losses reduced to <$200K projected |
|
|
56
|
+
|
|
57
|
+
Never: "we refactored the authentication module." Always: what the refactoring *did* for them.
|
|
58
|
+
|
|
59
|
+
**5. Pre-wire the hostile questions.** Before any exec presentation, write the five toughest questions and one-line answers:
|
|
60
|
+
|
|
61
|
+
```markdown
|
|
62
|
+
## Hard questions - <presentation date>
|
|
63
|
+
1. "Why did this take longer than estimated?"
|
|
64
|
+
→ The original brief assumed API-only work; discovery revealed a database integrity issue. We surfaced it in week 2 instead of shipping a patch that would have required rework.
|
|
65
|
+
|
|
66
|
+
2. "How do we know it won't break again?"
|
|
67
|
+
→ Three guards: automated reconciliation check (runs daily), alerting on drift >0.1%, and the characterisation test suite covering the 12 failure modes we found.
|
|
68
|
+
|
|
69
|
+
3. "What happens when the FDE leaves?"
|
|
70
|
+
→ Handoff document written for the 2am scenario. The team ran the runbook independently last Thursday - no callbacks.
|
|
71
|
+
|
|
72
|
+
4. "Why should we fund phase 2?"
|
|
73
|
+
→ Phase 1 addressed the bleeding. Phase 2 eliminates the root cause. Without it: $40K/year maintenance on the workaround + the audit risk remains.
|
|
74
|
+
|
|
75
|
+
5. "Can the internal team do phase 2 without you?"
|
|
76
|
+
→ They can, with 2x the timeline. The value of an FDE in phase 2 is speed - the patterns are established and the trust with the ledger team is built.
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**6. The one number.** Every exec narrative needs a single memorable quantity:
|
|
80
|
+
|
|
81
|
+
- "31 spreadsheet rows to zero"
|
|
82
|
+
- "p95 held at 180ms"
|
|
83
|
+
- "$200K monthly risk retired"
|
|
84
|
+
- "Time-to-deploy from 4 hours to 12 minutes"
|
|
85
|
+
|
|
86
|
+
The number should appear in the first 30 seconds and be the thing they repeat to *their* boss.
|
|
87
|
+
|
|
88
|
+
## Artifact
|
|
89
|
+
|
|
90
|
+
**`delivery.md`** - append under `## Exec narrative - <date>`:
|
|
91
|
+
- The four narrative lengths (30s, 2min, 10min, 60min)
|
|
92
|
+
- The SCQA frame
|
|
93
|
+
- The hard-question sheet
|
|
94
|
+
- The one number
|
|
95
|
+
|
|
96
|
+
**`context.md`** - note: exec narrative prepared, presentation date, what must be updated before delivery.
|
|
97
|
+
|
|
98
|
+
## Checkpoint
|
|
99
|
+
|
|
100
|
+
Dry-run the 2-minute version with the FDE. Confirm: the one number lands in the first 30 seconds, the SCQA frame answers "why now," and the hardest question has a prepared answer. If the FDE can't deliver the 30-second version from memory, simplify.
|
|
101
|
+
|
|
102
|
+
## Principles
|
|
103
|
+
|
|
104
|
+
- Conclusion first, evidence second. The exec decides in the first 30 seconds.
|
|
105
|
+
- Value in their units. Never present work; present outcomes.
|
|
106
|
+
- One number per narrative. The room remembers one thing - make it the right thing.
|
|
107
|
+
- Pre-wire every hostile question. Surprise in an exec meeting is a trust withdrawal.
|
|
108
|
+
- Write all four lengths. The FDE will need them at different moments.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# fintech overlay - money moves, failures are silent
|
|
2
|
+
|
|
3
|
+
**Activate when you hear:** payments, transfers, settlements, reconciliation · PCI-DSS, PSD2, SOX, open banking, SWIFT · banking, lending, insurance, trading, crypto · "we handle money" in any form. Loads **alongside** the active phase, never instead of it.
|
|
4
|
+
|
|
5
|
+
**Read first:** `trust-profile.md` always - data classification and AI policy before any action. `terrain.md` only when reviewing transaction/cardholder code.
|
|
6
|
+
|
|
7
|
+
Financial systems carry a failure class others don't: **silent money loss.** A bug that processes a payment twice or drops a transaction is regulatory breach + customer harm + potential criminal liability, not a defect ticket.
|
|
8
|
+
|
|
9
|
+
## The first conversation
|
|
10
|
+
|
|
11
|
+
> "Does this system store, process, or transmit cardholder data? What's the current PCI-DSS compliance level?"
|
|
12
|
+
|
|
13
|
+
Cardholder data = PAN, CVV, PIN, expiry. PAN never stored post-authorisation without explicit business case + encryption + masking (last 4 only). **Full PANs in logs, analytics events, or error messages is the first finding and outranks everything else.** Tag all cardholder scope in `trust-profile.md` under `<private>`.
|
|
14
|
+
|
|
15
|
+
## Idempotency - the most common silent failure
|
|
16
|
+
|
|
17
|
+
Same operation twice must equal once. Retries, network failures, double-clicks all duplicate requests; without idempotency that's double charges and phantom credits. On any code that creates transactions, verify:
|
|
18
|
+
- An idempotency key on every write operation
|
|
19
|
+
- Key checked **before** processing, not after
|
|
20
|
+
- Retries reuse the same key, never a new one
|
|
21
|
+
|
|
22
|
+
Missing from a payment flow → flag before production. "We'll add it later" has caused real customer harm in every fintech that said it.
|
|
23
|
+
|
|
24
|
+
## Transaction integrity
|
|
25
|
+
|
|
26
|
+
Atomic or nothing. A transfer that debits A and fails before crediting B is a financial error that may require regulatory reporting, not a technical error. Verify: DB-level transactions wrap the operations · compensating transactions exist · **the reconciliation path can catch a discrepancy at midnight.**
|
|
27
|
+
|
|
28
|
+
## Fraud and reporting - surface early
|
|
29
|
+
|
|
30
|
+
> "What fraud signals does this system monitor, and what happens when a transaction is flagged?"
|
|
31
|
+
|
|
32
|
+
Immaturity markers: no velocity checks, no geographic anomaly detection, a review queue nobody actions, a manual override bypassing all controls. The engagement needn't build fraud detection - it must know what exposure the gaps leave. Same for regulatory reporting (CTR/SAR thresholds): manual reporting that relies on memory is a compliance risk; verify changes don't break automated reporting.
|
|
33
|
+
|
|
34
|
+
## AI in financial systems
|
|
35
|
+
|
|
36
|
+
Regulators commonly require **explainability** for automated decisions (credit, fraud, account actions). Before any AI-driven decision ships: explainability requirement for this jurisdiction confirmed · right-to-explanation satisfiable · decisions logged with input features. Some institutions prohibit AI final decisions on regulated activities - check `trust-profile.md` first.
|
|
37
|
+
|
|
38
|
+
## Writes
|
|
39
|
+
|
|
40
|
+
`trust-profile.md` - cardholder scope, PCI level, AI policy, reporting obligations. `risks.md` - idempotency gaps, integrity issues, fraud-control gaps, compliance exposure.
|
|
41
|
+
|
|
42
|
+
## Principles
|
|
43
|
+
|
|
44
|
+
- Idempotency is not optional.
|
|
45
|
+
- Full PANs in logs = immediate flag.
|
|
46
|
+
- Atomic or nothing; partial transaction states are financial errors.
|
|
47
|
+
- If midnight reconciliation can't catch it, there is no financial integrity.
|
|
48
|
+
- AI on regulated decisions needs explainability and an audit trail before build.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# government overlay - classification first, everything second
|
|
2
|
+
|
|
3
|
+
**Activate when you hear:** federal/state agency, military, intelligence · FedRAMP, FISMA, NIST 800-53, CMMC, ITAR · ATO, SSP · CUI or classified data · contractor handling government data. Loads **alongside** the active phase.
|
|
4
|
+
|
|
5
|
+
**Read first:** `trust-profile.md` always - classification level and clearance requirements before any action.
|
|
6
|
+
|
|
7
|
+
Government runs on statutory authority, multi-year procurement, clearances, and classification regimes where one mishandled file is a federal offence. Slower by design; security stakes higher than any commercial engagement.
|
|
8
|
+
|
|
9
|
+
## The first conversation
|
|
10
|
+
|
|
11
|
+
> "What is the classification level of the data this system handles? Is there a System Security Plan I should read before we start?"
|
|
12
|
+
|
|
13
|
+
- **Unclassified** - no special handling. **CUI** - NIST 800-171 handling. **Secret/Top Secret** - clearances, air-gap, need-to-know.
|
|
14
|
+
- CUI or above constrains everything: which tools are allowed, where code is written, **whether AI assistance is permitted at all**, who can see what. Tag in `trust-profile.md` under `<private>` immediately. If the SSP doesn't exist, that's the first finding - a system without a security plan can't get an ATO.
|
|
15
|
+
|
|
16
|
+
## ATO - the constraint nobody warns about
|
|
17
|
+
|
|
18
|
+
> "Is this system operating under an ATO, or does this work require a new one?"
|
|
19
|
+
|
|
20
|
+
A new ATO = months to years (Security Assessment Report, POA&M, Continuous Monitoring) - the delivery timeline just changed; plan around it in week one. Existing ATO: new external connections, auth changes, new data stores, or boundary changes can trigger re-assessment.
|
|
21
|
+
|
|
22
|
+
## FedRAMP and sovereignty
|
|
23
|
+
|
|
24
|
+
Cloud services holding federal data must be FedRAMP-authorised **at the right level** (Moderate ≠ High) - verify at fedramp.gov/marketplace. **This includes AI services: most commercial AI APIs are not FedRAMP-authorised - possibly including the assistant in use. Check the policy before processing any federal data.** Residency: data, backups, DR replicas, and third-party routes stay inside the required boundary.
|
|
25
|
+
|
|
26
|
+
## Controls and clearance
|
|
27
|
+
|
|
28
|
+
NIST 800-53 baseline by impact level (CUI+ → Moderate, 325+ controls). The engagement doesn't implement them all - it knows which controls its changes touch. Common in dev work: AC-2 (account management), AU-2 (audit events), CM-7 (least functionality), SI-10 (input validation).
|
|
29
|
+
|
|
30
|
+
> "Does this work require a security clearance, at what level?"
|
|
31
|
+
|
|
32
|
+
Required and not held → adjust scope to the unclassified components; be explicit about the boundary.
|
|
33
|
+
|
|
34
|
+
## Procurement
|
|
35
|
+
|
|
36
|
+
New tools or vendors may need months of procurement. Contracting officers (CO/COR) approve scope changes - not the program manager. Identify tool additions early.
|
|
37
|
+
|
|
38
|
+
## Writes
|
|
39
|
+
|
|
40
|
+
`trust-profile.md` - classification, ATO status, AI policy, clearance, FedRAMP constraints. `risks.md` - ATO gaps, FedRAMP violations, residency risks, control gaps.
|
|
41
|
+
|
|
42
|
+
## Principles
|
|
43
|
+
|
|
44
|
+
- Classification level determines tools, process, and people. Ask first.
|
|
45
|
+
- ATO timelines are delivery timelines. Week one, not week ten.
|
|
46
|
+
- FedRAMP is a gate, not a formality - for AI tools too.
|
|
47
|
+
- No SSP = first finding.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# handoff-engineering - making yourself replaceable is the goal
|
|
2
|
+
|
|
3
|
+
**Enter when:** the engagement is entering its final phase, the customer team needs to operate without the FDE, a new FDE is taking over, or the sponsor asks "what happens when you leave?"
|
|
4
|
+
|
|
5
|
+
**Read first:** `delivery.md`, `terrain.md`, `reality.md`, `decisions.md`, `context.md`, `stakeholders.md`. The handoff is built from the full engagement record. Load `trust-profile.md` for operational boundaries.
|
|
6
|
+
|
|
7
|
+
The mark of a great FDE engagement is that the team can operate without you. A handoff that requires a callback in six weeks means the engagement didn't end - it paused. Handoff engineering is deliberate: it's designed, tested, and verified before the last day.
|
|
8
|
+
|
|
9
|
+
## Method (you do this work)
|
|
10
|
+
|
|
11
|
+
**1. The handoff inventory.** Everything the team needs to operate, categorised:
|
|
12
|
+
|
|
13
|
+
| Category | What to hand off | Test: can they do it alone? |
|
|
14
|
+
|----------|-----------------|---------------------------|
|
|
15
|
+
| **Code knowledge** | Architecture decisions (`decisions.md`), why the code is shaped the way it is | Team member can explain the three most important design decisions |
|
|
16
|
+
| **Operational** | Deploy, rollback, incident response, monitoring | Team member runs the deploy and rollback procedure independently |
|
|
17
|
+
| **Tribal** | The things only you know - the workaround, the contact, the context | Written in `handoff.md` and reviewed with the person who'll carry it |
|
|
18
|
+
| **Political** | Stakeholder dynamics, approval chains, who to call when | Documented in `stakeholders.md` with signal history |
|
|
19
|
+
| **Data/AI** | Model versions, retraining triggers, drift monitoring, fallback paths | Owner named for each AI component; kill switch documented |
|
|
20
|
+
|
|
21
|
+
**2. The 2am document.** Written for the person woken up on a Saturday night with zero context:
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
# Operations runbook - <system name>
|
|
25
|
+
|
|
26
|
+
## The 3 things that will break (and the fix for each)
|
|
27
|
+
|
|
28
|
+
### 1. <most likely failure>
|
|
29
|
+
Symptom: <what they'll see>
|
|
30
|
+
Cause: <most likely why>
|
|
31
|
+
Fix: <exact steps, copy-pasteable commands>
|
|
32
|
+
Who to call if this doesn't fix it: <name, contact>
|
|
33
|
+
|
|
34
|
+
### 2. <second most likely failure>
|
|
35
|
+
...
|
|
36
|
+
|
|
37
|
+
### 3. <third most likely failure>
|
|
38
|
+
...
|
|
39
|
+
|
|
40
|
+
## Deploy
|
|
41
|
+
Command: <exact command>
|
|
42
|
+
Time: <how long it takes>
|
|
43
|
+
Verify: <how to confirm it worked>
|
|
44
|
+
Rollback: <exact command and expected time>
|
|
45
|
+
|
|
46
|
+
## Alerts
|
|
47
|
+
| Alert | Means | Do this |
|
|
48
|
+
|-------|-------|---------|
|
|
49
|
+
| <alert name> | <plain English> | <action or link to detailed runbook> |
|
|
50
|
+
|
|
51
|
+
## Contacts
|
|
52
|
+
| Who | When to call | How |
|
|
53
|
+
|-----|-------------|-----|
|
|
54
|
+
| <name> | <scenario> | <phone/slack/email> |
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**3. The knowledge transfer sessions.** Not a document dump - three structured sessions:
|
|
58
|
+
|
|
59
|
+
| Session | Focus | Attendees | Duration | Output |
|
|
60
|
+
|---------|-------|-----------|----------|--------|
|
|
61
|
+
| **Architecture walkthrough** | Why, not what. The decisions, the trade-offs, the things that almost went wrong. | Full team | 60–90 min | Recording + Q&A log |
|
|
62
|
+
| **Operational drill** | Deploy, rollback, incident response. They do it, you watch. | On-call team | 60 min | Drill report with confidence level |
|
|
63
|
+
| **Edge-case handover** | The things that aren't in any document. The workarounds, the fragile spots, the "ask Sarah because she's the only one who knows." | Team lead + 1 | 30 min | Additions to `handoff.md` |
|
|
64
|
+
|
|
65
|
+
**4. The confidence check.** After the knowledge transfer, score the team's readiness:
|
|
66
|
+
|
|
67
|
+
| Area | Confidence (1–5) | Evidence |
|
|
68
|
+
|------|------------------|----------|
|
|
69
|
+
| Daily operations | | Can they deploy and rollback without help? |
|
|
70
|
+
| Incident response | | Did they complete the drill within acceptable time? |
|
|
71
|
+
| Architecture decisions | | Can they explain why the system is built this way? |
|
|
72
|
+
| AI components (if any) | | Do they know how to monitor, retrain, and disable? |
|
|
73
|
+
| Stakeholder management | | Do they know who to update and how? |
|
|
74
|
+
|
|
75
|
+
**Average below 3.5 → the handoff is not complete.** Extend if possible; if not, document the gaps and name the risk.
|
|
76
|
+
|
|
77
|
+
**5. The successor brief.** If a new FDE is taking over, write a brief that gets them operational in one hour:
|
|
78
|
+
|
|
79
|
+
```markdown
|
|
80
|
+
# Successor brief - <engagement name>
|
|
81
|
+
|
|
82
|
+
## In 30 seconds
|
|
83
|
+
<The real problem, the solution, where it stands>
|
|
84
|
+
|
|
85
|
+
## Read these files first
|
|
86
|
+
1. context.md - current state
|
|
87
|
+
2. reality.md - the real problem (not the brief)
|
|
88
|
+
3. decisions.md - what was decided and why
|
|
89
|
+
4. stakeholders.md - who matters and their current signal
|
|
90
|
+
5. risks.md - what's dangerous right now
|
|
91
|
+
|
|
92
|
+
## The three things I wish I'd known on day one
|
|
93
|
+
1. <thing>
|
|
94
|
+
2. <thing>
|
|
95
|
+
3. <thing>
|
|
96
|
+
|
|
97
|
+
## The one thing that will bite you
|
|
98
|
+
<specific warning>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**6. The clean exit.** Before the last day:
|
|
102
|
+
|
|
103
|
+
- [ ] All access returned or transferred (repos, environments, admin panels)
|
|
104
|
+
- [ ] No personal credentials left in the system (API keys, tokens, SSH keys)
|
|
105
|
+
- [ ] `.fde/` folder handed to the successor or archived with the team
|
|
106
|
+
- [ ] Final status sent to sponsor (see `status.md`)
|
|
107
|
+
- [ ] Retrospective completed (see `close.md`)
|
|
108
|
+
- [ ] Patterns extracted (see `pattern-extract.md`)
|
|
109
|
+
|
|
110
|
+
## Artifact
|
|
111
|
+
|
|
112
|
+
**`handoff.md`** - the 2am document + the operational inventory. The most important file the engagement produces after the code itself.
|
|
113
|
+
|
|
114
|
+
**`context.md`** - final update: engagement status, handoff confidence, named gaps.
|
|
115
|
+
|
|
116
|
+
## Checkpoint
|
|
117
|
+
|
|
118
|
+
The acid test: "Can the team run this system for 30 days without calling you?" If yes → handoff complete. If no → name exactly what's missing, and either fix it or document the risk for the sponsor.
|
|
119
|
+
|
|
120
|
+
## The permanent crutch anti-pattern
|
|
121
|
+
|
|
122
|
+
Warning signs you've become a dependency instead of a deliverer:
|
|
123
|
+
- The team defers decisions until you're in the room
|
|
124
|
+
- "Can you just stay one more month?" (translation: the handoff hasn't started)
|
|
125
|
+
- You're the only person who's run the deploy or the rollback
|
|
126
|
+
- The sponsor introduces you as "part of the team" in month 4
|
|
127
|
+
- The customer calls you within a week of "close"
|
|
128
|
+
|
|
129
|
+
If you see 2+: accelerate the handoff immediately. The longer you stay past usefulness, the harder it is for the team to believe they can operate alone. A great FDE engagement ends with the team forgetting they needed you.
|
|
130
|
+
|
|
131
|
+
## Principles
|
|
132
|
+
|
|
133
|
+
- The goal of every engagement is to make yourself replaceable.
|
|
134
|
+
- The 2am document is the real handoff - everything else supports it.
|
|
135
|
+
- Knowledge transfer is three sessions, not a doc dump.
|
|
136
|
+
- A confidence score below 3.5 means the handoff isn't done.
|
|
137
|
+
- The successor brief gets the next FDE operational in one hour or it's too long.
|
|
138
|
+
- Clean exit: no personal credentials left behind, ever.
|
|
139
|
+
- If you're still indispensable after close, the engagement failed on the most important criterion.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# healthcare overlay - PHI ends licences
|
|
2
|
+
|
|
3
|
+
**Activate when you hear:** patient records, EHR/EMR, clinical data · HIPAA, HITECH, HL7, FHIR · hospital, clinic, payer, pharma · "we handle patient data," even informally. Loads **alongside** the active phase.
|
|
4
|
+
|
|
5
|
+
**Read first:** `trust-profile.md` always - PHI classification and AI policy before any action. `terrain.md` only when reviewing patient-data code.
|
|
6
|
+
|
|
7
|
+
A PHI breach can end an operating licence; an audit-trail gap can invalidate a clinical trial; a model trained on patient data without consent can trigger federal investigation.
|
|
8
|
+
|
|
9
|
+
## The first conversation
|
|
10
|
+
|
|
11
|
+
> "Walk me through what patient data this system touches, stores, transmits - and who has access."
|
|
12
|
+
|
|
13
|
+
PHI is broader than names: IPs, device identifiers, sub-state geography, and dates (other than year) can all qualify in context. When in doubt, treat as PHI. Tag everything in `trust-profile.md` under `<private>` - **PHI never enters AI context in plaintext: not prompts, not test fixtures, not dev logs.**
|
|
14
|
+
|
|
15
|
+
## AI policy before a single line
|
|
16
|
+
|
|
17
|
+
> "Does your organisation have a policy on AI tools accessing patient data? Is there a BAA covering the tools we're using?"
|
|
18
|
+
|
|
19
|
+
Unclear answer = treat as prohibited until confirmed. Asking costs zero; guessing wrong is catastrophic.
|
|
20
|
+
|
|
21
|
+
## Audit trails - non-negotiable
|
|
22
|
+
|
|
23
|
+
Every action on PHI logged: who, what, when, from where (HIPAA Security Rule). On any PHI-touching code verify: identity+timestamp+action logged · logs immutable to application code · audit logs separate from app logs · retention ≥ 6 years. **No audit trail + a request to build a PHI feature → the audit trail gets built first.**
|
|
24
|
+
|
|
25
|
+
## Break-glass
|
|
26
|
+
|
|
27
|
+
Clinical systems need emergency override (a clinician must reach a record even when auth fails). Every break-glass event must **alert and trigger review**, not just log; verify it can't be silently disabled.
|
|
28
|
+
|
|
29
|
+
## Minimisation, consent, encryption
|
|
30
|
+
|
|
31
|
+
- Store the minimum PHI for the purpose; if de-identified data answers the question, use it. De-identification = HIPAA Safe Harbor's 18 identifiers - a legal definition, not a judgment call.
|
|
32
|
+
- Data collected for one purpose can't serve another without consent - **including model training.** A model trained on records without explicit consent is immediate legal exposure.
|
|
33
|
+
- Minimums: TLS 1.2+ in transit (1.3 preferred), AES-256 at rest, keys managed separately. Check `trust-profile.md` for stricter local rules.
|
|
34
|
+
|
|
35
|
+
## Writes
|
|
36
|
+
|
|
37
|
+
`trust-profile.md` - PHI scope, AI policy, consent coverage, BAA status. `risks.md` - compliance gaps with severity and remediation path.
|
|
38
|
+
|
|
39
|
+
## Principles
|
|
40
|
+
|
|
41
|
+
- PHI never enters AI context in plaintext.
|
|
42
|
+
- Audit trails before features.
|
|
43
|
+
- Unclear AI policy = prohibited until confirmed.
|
|
44
|
+
- De-identification is a legal definition (18 identifiers).
|
|
45
|
+
- Break-glass must alert, not just log.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# incremental-build - thin slices on someone else's codebase
|
|
2
|
+
|
|
3
|
+
**Enter when:** the build task is larger than a single PR, multiple files or systems are involved, or the FDE needs to show visible progress to a stakeholder every 2–3 days.
|
|
4
|
+
|
|
5
|
+
**Read first:** `decisions.md` (the plan), `terrain.md` (the danger zones), `context.md`. This skill works *inside* the build phase - it's the execution discipline that makes large features safe on codebases you don't own.
|
|
6
|
+
|
|
7
|
+
The FDE who builds a 2,000-line feature in one PR gets it rejected. The FDE who ships five 200-line PRs - each reviewable, testable, and revertible - earns the team's trust. On someone else's codebase, small and visible beats clever and large.
|
|
8
|
+
|
|
9
|
+
## Method (you do this work)
|
|
10
|
+
|
|
11
|
+
**1. Slice vertically, never horizontally.**
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
BAD (horizontal):
|
|
15
|
+
PR 1: Build all database models
|
|
16
|
+
PR 2: Build all API endpoints
|
|
17
|
+
PR 3: Build all UI components
|
|
18
|
+
PR 4: Wire everything together (and pray)
|
|
19
|
+
|
|
20
|
+
GOOD (vertical):
|
|
21
|
+
PR 1: User can create a payment (schema + endpoint + minimal UI) - testable
|
|
22
|
+
PR 2: User can view payment status (query + endpoint + UI) - testable
|
|
23
|
+
PR 3: Payment retry on failure (logic + endpoint + UI feedback) - testable
|
|
24
|
+
PR 4: Admin can void a payment (auth + logic + UI) - testable
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Each vertical slice delivers working functionality the customer can see. Each slice is independently revertible.
|
|
28
|
+
|
|
29
|
+
**2. The slice checklist.** Before starting any slice:
|
|
30
|
+
|
|
31
|
+
- [ ] Slice is in `decisions.md` with acceptance criteria (happy + unhappy path)
|
|
32
|
+
- [ ] Blast radius declared: which files, which systems, which users affected
|
|
33
|
+
- [ ] Rollback path identified: "revert this PR" or something more specific
|
|
34
|
+
- [ ] No dependency on an unmerged slice (if dependent, state it and merge in order)
|
|
35
|
+
|
|
36
|
+
**3. The implementation loop.** For each slice, in this order:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Read existing code in the area (search before creating)
|
|
40
|
+
→ Write characterisation tests for what's there (if legacy)
|
|
41
|
+
→ Implement the minimal working path
|
|
42
|
+
→ Verify with evidence (tests + typecheck + smallest proving run)
|
|
43
|
+
→ Cleanup pass (dedupe, simplify - behaviour unchanged)
|
|
44
|
+
→ Self-review against acceptance criteria
|
|
45
|
+
→ Commit with descriptive message
|
|
46
|
+
→ Update decisions.md + delivery.md
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**4. Size discipline.** Each slice targets:
|
|
50
|
+
|
|
51
|
+
| Metric | Target | Why |
|
|
52
|
+
|--------|--------|-----|
|
|
53
|
+
| Lines changed | 100–300 | Reviewable in one sitting |
|
|
54
|
+
| Time to implement | 30–90 minutes | Testable before context decays |
|
|
55
|
+
| Files touched | 1–5 | Blast radius stays containable |
|
|
56
|
+
| Tests added | ≥1 per new behaviour | Proves the slice works; guards against regression |
|
|
57
|
+
|
|
58
|
+
A slice larger than 300 lines → split before implementing. "It's all connected" means the design needs work, not the slice limit.
|
|
59
|
+
|
|
60
|
+
**5. Stakeholder visibility rhythm.** Every 2–3 slices, something the customer can see:
|
|
61
|
+
|
|
62
|
+
- A working endpoint they can hit
|
|
63
|
+
- A UI change they can click
|
|
64
|
+
- A metric that moved
|
|
65
|
+
- A risk that was retired
|
|
66
|
+
|
|
67
|
+
Technical progress invisible to stakeholders is trust decay. `delivery.md` gets updated after every visible slice.
|
|
68
|
+
|
|
69
|
+
**6. The scope trap.** Mid-slice discoveries - "this module also needs updating," "I should refactor this while I'm here":
|
|
70
|
+
|
|
71
|
+
- If it's in `decisions.md`: do it as a separate slice.
|
|
72
|
+
- If it's NOT in `decisions.md`: log it as a scope receipt (see `scope-defense.md`), don't touch it.
|
|
73
|
+
- The hardest discipline: leaving ugly code alone when it's not in your slice.
|
|
74
|
+
|
|
75
|
+
## Artifact
|
|
76
|
+
|
|
77
|
+
**`decisions.md`** - each slice logged with: what was implemented, what was tested, what was deferred.
|
|
78
|
+
|
|
79
|
+
**`delivery.md`** - each visible slice with business-language description of what it delivers.
|
|
80
|
+
|
|
81
|
+
## Checkpoint
|
|
82
|
+
|
|
83
|
+
After each slice: tests pass (state the command and result), acceptance criteria met, blast radius as declared. After every 2–3 slices: stakeholder visibility confirmed - what did they see, and what's their signal?
|
|
84
|
+
|
|
85
|
+
## Principles
|
|
86
|
+
|
|
87
|
+
- Vertical slices, always. Horizontal layers are untestable until assembled.
|
|
88
|
+
- 100–300 lines per slice. Larger means split first.
|
|
89
|
+
- Every slice is independently revertible. If it isn't, the design is coupled.
|
|
90
|
+
- Visible progress every 2–3 slices. Technical progress alone is trust decay.
|
|
91
|
+
- The ugly code outside your slice stays ugly. That's discipline, not laziness.
|