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.
Files changed (70) hide show
  1. package/AGENTS.md +18 -0
  2. package/CLAUDE.md.template +25 -0
  3. package/LICENSE +21 -0
  4. package/README.md +328 -0
  5. package/adapters/AGENTS.md +24 -0
  6. package/adapters/GEMINI.md +24 -0
  7. package/adapters/README.md +31 -0
  8. package/adapters/copilot-instructions.md +24 -0
  9. package/adapters/cursor.fde.mdc +29 -0
  10. package/bin/check.js +260 -0
  11. package/bin/fde.js +690 -0
  12. package/bin/install.js +220 -0
  13. package/hooks/hooks.json +40 -0
  14. package/hooks/pre-compact +66 -0
  15. package/hooks/run-hook.cmd +3 -0
  16. package/hooks/session-start +91 -0
  17. package/hooks/session-stop +86 -0
  18. package/package.json +52 -0
  19. package/skills/fde/SKILL.md +219 -0
  20. package/skills/fde/references/ai.md +91 -0
  21. package/skills/fde/references/artifacts.md +247 -0
  22. package/skills/fde/references/assumption-audit.md +77 -0
  23. package/skills/fde/references/audit.md +61 -0
  24. package/skills/fde/references/blast-radius.md +91 -0
  25. package/skills/fde/references/build.md +98 -0
  26. package/skills/fde/references/business-case.md +78 -0
  27. package/skills/fde/references/close.md +43 -0
  28. package/skills/fde/references/dashboard.md +40 -0
  29. package/skills/fde/references/debrief.md +36 -0
  30. package/skills/fde/references/debug.md +55 -0
  31. package/skills/fde/references/demo-prep.md +31 -0
  32. package/skills/fde/references/discover.md +163 -0
  33. package/skills/fde/references/exec-narrative.md +108 -0
  34. package/skills/fde/references/fintech.md +48 -0
  35. package/skills/fde/references/gov.md +47 -0
  36. package/skills/fde/references/handoff-engineering.md +139 -0
  37. package/skills/fde/references/healthcare.md +45 -0
  38. package/skills/fde/references/incremental-build.md +91 -0
  39. package/skills/fde/references/initiative-triage.md +78 -0
  40. package/skills/fde/references/land.md +75 -0
  41. package/skills/fde/references/multi-customer-ops.md +114 -0
  42. package/skills/fde/references/observability.md +103 -0
  43. package/skills/fde/references/options-analysis.md +81 -0
  44. package/skills/fde/references/pattern-extract.md +93 -0
  45. package/skills/fde/references/plan.md +108 -0
  46. package/skills/fde/references/qa-live.md +113 -0
  47. package/skills/fde/references/rescue.md +81 -0
  48. package/skills/fde/references/review.md +53 -0
  49. package/skills/fde/references/rollback-drill.md +102 -0
  50. package/skills/fde/references/scope-defense.md +71 -0
  51. package/skills/fde/references/security-audit.md +105 -0
  52. package/skills/fde/references/ship.md +121 -0
  53. package/skills/fde/references/sketch.md +40 -0
  54. package/skills/fde/references/stakeholder-radar.md +68 -0
  55. package/skills/fde/references/status.md +30 -0
  56. package/skills/fde/references/test-on-legacy.md +108 -0
  57. package/skills/fde/references/trust-engineering.md +100 -0
  58. package/skills/fde/references/use-case-scoring.md +70 -0
  59. package/templates/.fde/README.md +13 -0
  60. package/templates/.fde/brief.md +8 -0
  61. package/templates/.fde/context.md +14 -0
  62. package/templates/.fde/decisions.md +18 -0
  63. package/templates/.fde/delivery.md +7 -0
  64. package/templates/.fde/reality.md +7 -0
  65. package/templates/.fde/retrospectives/.gitkeep +0 -0
  66. package/templates/.fde/risks.md +5 -0
  67. package/templates/.fde/stakeholders.md +10 -0
  68. package/templates/.fde/success.md +7 -0
  69. package/templates/.fde/terrain.md +7 -0
  70. package/templates/.fde/trust-profile.md +11 -0
@@ -0,0 +1,40 @@
1
+ # sketch - prototype to kill or confirm a direction
2
+
3
+ **Enter when:** a direction needs validating before committing real build time - show something, de-risk, pick between use cases.
4
+
5
+ **Read first:** `context.md`, `reality.md`. Load `terrain.md` only if the prototype touches the existing codebase.
6
+
7
+ ## Method (you do this work)
8
+
9
+ **0. Name the killer assumption.** With the FDE: "What's the belief that kills the project if it's wrong?" Prototype **that** - not the pretty demo.
10
+
11
+ **1. Pick by score when several use cases compete.** Use the scoring model from `discover.md` - (Value × Data readiness) / Complexity. If discover already scored, reuse; never re-score independently.
12
+
13
+ **2. Build the minimum that tests the assumption.** No error handling, no tests, no polish. Same-day demo if possible. Rough is honest - polish tricks people into believing it's further along than it is.
14
+
15
+ **3. AI directions - test these before anything else:**
16
+ - Data: available, clean, sufficient volume? Synthetic-data prototypes say nothing about production behaviour.
17
+ - Environment: are external model calls even allowed here?
18
+ - Latency: acceptable against real user expectations, not ideal conditions?
19
+ - Is AI the right tool at all - or is this a data-quality or process problem wearing an AI costume?
20
+
21
+ **4. Kill it immediately if:** the assumption is disproven · the customer ignores it (indifference is a signal, not neutrality) · 3 iterations and feedback isn't converging · it works but the customer can't explain or trust the output (unexplainable AI in a high-stakes context is not a solution). When killed: write down what was *learned*, not what was built. The learning is the asset.
22
+
23
+ **5. Translate to business language** once validated: problem solved, cost of inaction, success in numbers, 2–3 trade-offs. Three sentences max for the stakeholder - can't say it in three, don't understand it yet.
24
+
25
+ ## Artifact
26
+
27
+ **`prototype-log.md`** - what was built, shown, the actual reaction, what was learned (including kills - a killed prototype that saved three weeks is a win worth recording).
28
+
29
+ **`business-case.md`** - scored use case, cost of inaction, success metrics, trade-offs, the 3-sentence pitch. `plan` builds around this file.
30
+
31
+ ## Checkpoint
32
+
33
+ Tell the FDE: did the riskiest assumption hold · what the customer's reaction actually revealed · proceed / pivot / kill · the 3-sentence case if proceeding. The pitch is written for the person who can say yes or no.
34
+
35
+ ## Principles
36
+
37
+ - Speed of learning beats code quality. Never more than a day.
38
+ - Show it rough. Polish misleads.
39
+ - Prototype the killer assumption, not the demo.
40
+ - Kill fast; log the learning.
@@ -0,0 +1,68 @@
1
+ # stakeholder-radar - reading the room before it reads you
2
+
3
+ **Enter when:** new stakeholders appear, signals shift mid-engagement, a meeting felt off but you can't say why, or it's been two weeks and the map hasn't been updated.
4
+
5
+ **Read first:** `stakeholders.md`, `context.md`. Load `trust-profile.md` only if sacred-data boundaries affect who gets told what.
6
+
7
+ The org chart tells you who reports to whom. The stakeholder radar tells you who actually decides, who blocks quietly, and who's about to escalate. FDEs who read the org chart get blindsided; FDEs who read the room stay ahead.
8
+
9
+ ## Method (you do this work)
10
+
11
+ **1. Map the five roles - every engagement has them, sometimes in one person:**
12
+
13
+ | Role | How to spot them | What they need from you |
14
+ |------|-----------------|------------------------|
15
+ | **Sponsor** | Signed the SOW, owns the budget, asks "are we on track" | Progress in their units (cost saved, risk retired), never technical detail |
16
+ | **Champion** | Wants you to succeed, opens doors, warns you about politics | Early wins they can point to - makes them look right for backing you |
17
+ | **Gatekeeper** | Controls access: repos, environments, meetings, introductions | Respect for their process; go around them and they close every door |
18
+ | **Resistor** | Sceptical, protective, or threatened - not necessarily wrong | To be heard first; resistors who feel consulted become the strongest allies |
19
+ | **Ghost** | Named on the project, never in the room - either checked out or operating above you | Find out which. A checked-out ghost is noise. A ghost operating above you is the real decision-maker. |
20
+
21
+ **2. Track signal, not sentiment.** A stakeholder's signal is what they *do*, not what they say:
22
+
23
+ | Signal | Evidence (not vibes) |
24
+ |--------|---------------------|
25
+ | **Green** | Responds same-day, shares context unprompted, introduces you to their people |
26
+ | **Amber** | Response time doubles, defers decisions, "let me check with…" when they used to decide alone |
27
+ | **Red** | Stops responding, routes around you, a new person you've never met starts asking questions |
28
+
29
+ **3. The 48-hour rule.** A stakeholder who goes amber has roughly 48 hours before they go red. A stakeholder who goes red is already escalating above you. Respond same-day to amber signals - not with more delivery, with a conversation.
30
+
31
+ **4. Detect the invisible escalation.** Three markers:
32
+ - Questions shift from "what are you building" to "when will it be done" - someone above is asking.
33
+ - A meeting gets shortened or cancelled - they're meeting without you.
34
+ - A new stakeholder appears with no introduction - they were sent to check.
35
+
36
+ When you see any of these: tell the FDE immediately, recommend a proactive conversation with the sponsor before the invisible meeting becomes visible.
37
+
38
+ **5. The passed-over team - the most dangerous and most valuable stakeholder.**
39
+
40
+ In every engagement where an external FDE was brought in, an internal team was passed over. They know the codebase better than you, they know the politics better than you, and they resent your presence. Three moves:
41
+
42
+ - **Ask what they tried.** Before your first standup. Their previous approach is the real requirements doc.
43
+ - **Use their language.** In every meeting. They hear their words coming back and they feel consulted, not replaced.
44
+ - **Make them look right.** Credit their prior work in your artifacts. They protect you if they feel respected; they wait for your mistake if they don't.
45
+
46
+ ## Artifact
47
+
48
+ **`stakeholders.md`** - updated with evidence-dated signal changes:
49
+ ```markdown
50
+ | Who | Role | Signal | Last evidence | Notes |
51
+ |-----|------|--------|---------------|-------|
52
+ | <name> | sponsor | green | responded same-day with budget approval (Jun 12) | owns renewal decision |
53
+ | <name> | resistor→champion | amber→green | shared API docs unprompted after we used their naming (Jun 14) | was passed-over lead |
54
+ ```
55
+
56
+ Signal changes get a dated evidence note. A signal that moved without evidence logged is a guess, not radar.
57
+
58
+ ## Checkpoint
59
+
60
+ One line per stakeholder who changed signal this week. If nobody changed: "Map stable - next check <date>." If a ghost appeared or a resistor went quiet: name it, recommend the move, and update `context.md` with the action.
61
+
62
+ ## Principles
63
+
64
+ - Signals are evidence-based, not feeling-based. "Seemed distant" doesn't move a signal; "stopped responding to three messages" does.
65
+ - The 48-hour rule: amber is a same-day response, not a next-week note.
66
+ - The passed-over team is your most important relationship. Win them first.
67
+ - Every engagement has a ghost. Find them before they find you.
68
+ - A stakeholder map that hasn't been updated in two weeks is fiction.
@@ -0,0 +1,30 @@
1
+ # status - the sponsor update that keeps the engagement alive
2
+
3
+ **Enter when:** the weekly update is due, an exec asks "where are we," or the FDE says "I need to send Dana something." This artifact decides renewals; engineers underinvest in it.
4
+
5
+ **Read first:** `success.md` (the yardstick), `delivery.md`, `decisions.md`, `risks.md`, `context.md`. Gather the week's facts: `fde receipts` for agreements, `git log --since='7 days ago' --oneline` for shipped work.
6
+
7
+ ## Method (you do this work)
8
+
9
+ 1. **Lead with value in their units** - time saved, errors prevented, revenue protected, risk retired. Never "completed the API endpoint"; always what the endpoint *does for the business*.
10
+ 2. **Progress against `success.md`** - the agreed definition of done, not a task list. On / ahead / behind, with the why in one line.
11
+ 3. **Bad news first, never buried.** A risk the sponsor learns from your update is managed; a risk they learn from their staff is a trust fire. Each risk: one line + what you're doing about it + what you need from them.
12
+ 4. **The ask, explicit.** Access, a decision, an introduction, a sign-off. Updates without asks train sponsors to skim.
13
+ 5. **Next week in three bullets.** What they'll see, when, and the next touchpoint.
14
+
15
+ One page maximum. Exec voice: no jargon, no hedging, every claim traceable to the memory (`(shipped Tue, delivery.md)`). Draft in the **FDE's voice, for the FDE to send** - never send anything yourself.
16
+
17
+ ## Artifact
18
+
19
+ Append the draft to `delivery.md` under `## Status - <date>` (the running record the close phase and dashboard read). Note in `context.md`: status drafted, awaiting FDE review/send.
20
+
21
+ ## Checkpoint
22
+
23
+ Walk the FDE through the two highest-stakes lines - the worst risk and the biggest ask - and confirm the framing matches what the sponsor can hear right now (check `stakeholders.md` signal first: a red-signal sponsor gets a different opening than a green one).
24
+
25
+ ## Principles
26
+
27
+ - No surprises: anything the sponsor would be angry to learn later goes in this update.
28
+ - Value in their units, progress against the agreed yardstick, one page.
29
+ - An update without an ask is a missed move.
30
+ - You draft; the FDE sends. Their voice, their relationship.
@@ -0,0 +1,108 @@
1
+ # test-on-legacy - making changes safe on code that has no tests
2
+
3
+ **Enter when:** the codebase has little or no test coverage, you need to change code where tests are absent or misleading, or `terrain.md` flagged high-churn modules with no test neighbours.
4
+
5
+ **Read first:** `terrain.md` (the churn heat map), `decisions.md` (the current slice), `context.md`. This skill is the safety net for building on someone else's untested codebase.
6
+
7
+ Legacy code without tests is a minefield. You can't refactor it because you don't know what it does. You can't add features because you don't know what you'll break. The way through: characterise what exists, wrap the change, prove it works - in that order.
8
+
9
+ ## Method (you do this work)
10
+
11
+ **1. Characterisation tests first.** Before changing anything, write tests that describe what the code *actually does right now* - including the parts that seem wrong:
12
+
13
+ ```
14
+ The code truncates names at 50 characters.
15
+ → That seems like a bug, but it might be a contract another system depends on.
16
+ → Write a test: "truncates names at 50 characters" - that's the characterisation.
17
+ → NOW you can change the code and know exactly what you've broken.
18
+ ```
19
+
20
+ Characterisation tests answer: "What does this code do?" not "What should this code do?" They're the honest documentation that the README isn't.
21
+
22
+ **How to write them:**
23
+ 1. Pick the function/module you're about to change.
24
+ 2. Call it with representative inputs (from production if possible, from logs, from the team's knowledge).
25
+ 3. Record what comes back - that's your expected output.
26
+ 4. Turn that into an assertion.
27
+
28
+ ```
29
+ # The pattern:
30
+ result = function_under_test(real_input)
31
+ assert result == whatever_it_actually_returned # characterisation, not specification
32
+ ```
33
+
34
+ **2. The Strangler Fig pattern - wrap, don't rewrite.**
35
+
36
+ Never rewrite legacy code in place. Instead:
37
+
38
+ ```
39
+ Step 1: New interface wraps the old code (calls through to it)
40
+ → All existing callers work exactly as before
41
+ → Your characterisation tests pass
42
+
43
+ Step 2: New implementation behind the new interface
44
+ → Old code still there, still callable
45
+ → Feature flag or config switches between old and new
46
+
47
+ Step 3: Gradually migrate callers to the new path
48
+ → Each migration is a small, testable change
49
+ → Old path remains as fallback
50
+
51
+ Step 4: Remove old code only when:
52
+ → No callers remain
53
+ → New path has been stable for N days
54
+ → Team agrees it's safe
55
+ ```
56
+
57
+ **3. The test pyramid for legacy engagement work:**
58
+
59
+ | Level | What to write | How many | Why |
60
+ |-------|-------------|---------|-----|
61
+ | **Characterisation** | What the code does now | 3–5 per module you're changing | Safety net before any change |
62
+ | **Unit** | Your new code's behaviour | 1 per new function/method | Proves your addition works |
63
+ | **Integration** | The seam between old and new | 1–2 per boundary | Proves old and new cooperate |
64
+ | **Smoke** | The critical user path end-to-end | 1 per feature | Proves the user can still do the thing |
65
+
66
+ **4. Spot the lying tests.** Worse than no tests are tests that pass but verify nothing:
67
+
68
+ ```
69
+ # This test passes and proves nothing:
70
+ def test_process_payment():
71
+ result = process_payment(mock_everything())
72
+ assert result is not None # what does "not None" prove?
73
+
74
+ # This test is actually testing something:
75
+ def test_process_payment_deducts_from_balance():
76
+ account = create_account(balance=100)
77
+ process_payment(account, amount=30)
78
+ assert account.balance == 70
79
+ ```
80
+
81
+ When you find a lying test: note it in `terrain.md`. Don't fix it unless it's in your slice - but name it, because the next person needs to know.
82
+
83
+ **5. The "safe to change" checklist.** Before modifying any legacy code:
84
+
85
+ - [ ] Characterisation tests written for the module being changed
86
+ - [ ] All characterisation tests pass before your change
87
+ - [ ] Your change is wrapped (Strangler Fig), not a rewrite-in-place
88
+ - [ ] New tests cover your new behaviour
89
+ - [ ] All tests (characterisation + new) pass after your change
90
+ - [ ] The diff shows only what you intended to change
91
+
92
+ ## Artifact
93
+
94
+ **`terrain.md`** - update test-gap assessment: which modules now have characterisation tests, which still don't, which tests are lying.
95
+
96
+ **`decisions.md`** - log: "Added characterisation tests for <module> before changing <feature>. Coverage state: <before/after>."
97
+
98
+ ## Checkpoint
99
+
100
+ Before merging any change to legacy code: characterisation tests existed before the change (state which), new tests cover the new behaviour, all pass. If characterisation tests were skipped: that's a finding - state why (time pressure? inaccessible code?) and log the risk.
101
+
102
+ ## Principles
103
+
104
+ - Characterise before changing. What the code does > what it should do.
105
+ - Wrap, don't rewrite. The Strangler Fig is the safest pattern on legacy code.
106
+ - A lying test is worse than no test. Name it when you find it.
107
+ - The ugly behaviour in the characterisation test might be someone else's contract. Don't "fix" it without asking.
108
+ - Test coverage on legacy code is insurance - buy it before you need it, not after.
@@ -0,0 +1,100 @@
1
+ # trust-engineering - earning commit access one move at a time
2
+
3
+ **Enter when:** new engagement where you don't have full access yet, trust is thin, the customer said "let's start small," or you need to navigate "we don't trust AI-generated code."
4
+
5
+ **Read first:** `trust-profile.md`, `stakeholders.md`, `context.md`. The trust profile tells you where the walls are; the stakeholder map tells you who built them.
6
+
7
+ Trust is the currency of FDE work. Code quality gets you a second week; trust gets you the engagement. It's earned in small, visible moves - never demanded, never assumed, and never recovered once burned.
8
+
9
+ ## Method (you do this work)
10
+
11
+ **1. The trust ladder - every engagement climbs it in order:**
12
+
13
+ ```
14
+ Level 0: Observer → read-only access, watching
15
+ Level 1: Advisor → recommendations, no code changes
16
+ Level 2: Contributor → PRs reviewed by their team
17
+ Level 3: Committer → direct push to feature branches
18
+ Level 4: Owner → production access, deploy authority
19
+ Level 5: Trusted → they call you before making decisions
20
+ ```
21
+
22
+ **Never skip a level.** The FDE who asks for production access on day two gets observer access for a month. The FDE who ships a clean PR on day two gets committer access by week two. Each level is earned by demonstrating competence AND respect at the current level.
23
+
24
+ **2. The first-week trust plays - specific, not generic:**
25
+
26
+ | Day | Move | Why it works |
27
+ |-----|------|-------------|
28
+ | 1 | Fix a small, visible, annoying bug - something the team has been stepping over | Proves you can ship in their environment without breaking things |
29
+ | 1 | Ask the passed-over team what naming conventions they use - then use them | Shows respect before competence |
30
+ | 2 | Send a one-paragraph status to the sponsor without being asked | Sets the pattern: they hear from you before they have to ask |
31
+ | 3 | Find a genuine risk and flag it without drama | Demonstrates you're protecting them, not performing |
32
+ | 5 | Show a small win to the champion so they can share it upward | Gives them evidence their bet on you was right |
33
+
34
+ **3. Navigate "we don't trust AI-generated code":**
35
+
36
+ This is increasingly common. The right response is respect, not persuasion:
37
+
38
+ - **Ask the policy, don't assume.** "Does your organisation have a position on AI-assisted code in production?"
39
+ - **If prohibited:** work without AI on their code. Use fdeops for engagement memory (`.fde/` files) and your own planning - that's your tooling, not theirs.
40
+ - **If permitted with review:** every AI-touched line goes through their normal review process. Flag it: "AI-assisted, human-reviewed" in commit messages if they want traceability.
41
+ - **If grey area:** treat as prohibited until someone with authority says otherwise. The cost of asking is zero; the cost of guessing wrong is the engagement.
42
+ - **Never hide it.** An FDE caught using prohibited AI tools loses the engagement and the reputation. Full stop.
43
+
44
+ **4. Trust recovery - when you've made a mistake:**
45
+
46
+ Mistakes happen. What matters is speed and honesty:
47
+
48
+ - **Own it in the first hour.** Not "we found an issue" - "I introduced this bug." Passive voice erodes trust faster than the mistake.
49
+ - **Show the fix AND the prevention.** "Here's what happened, here's the fix, here's the test that prevents it next time."
50
+ - **One visible win within 48 hours.** Trust recovery needs a concrete success close to the mistake - not weeks later.
51
+ - **Never minimise.** "It was a small bug" is your assessment, not theirs. Let them size it.
52
+
53
+ **5. The trust account - deposits and withdrawals:**
54
+
55
+ | Deposits (slow, steady) | Withdrawals (fast, expensive) |
56
+ |-------------------------|-------------------------------|
57
+ | On-time status updates | Surprises - especially bad ones they hear from someone else |
58
+ | Using their conventions | "I know better" energy - even when you do |
59
+ | Flagging risks early | Breaking something in production |
60
+ | Crediting the internal team | Taking credit for shared work |
61
+ | Asking before touching sensitive code | Assuming access you haven't been given |
62
+ | Over-communicating during incidents | Going quiet when things are hard |
63
+
64
+ ## Artifact
65
+
66
+ **`trust-profile.md`** - updated sections:
67
+ ```markdown
68
+ ## Trust level
69
+ Current: <level 0–5> as of <date>
70
+ Evidence: <what earned this level>
71
+ Next target: <level> - requires: <specific action>
72
+
73
+ ## AI policy
74
+ Status: <prohibited / permitted-with-review / grey-area-treating-as-prohibited>
75
+ Source: <who confirmed, when>
76
+ ```
77
+
78
+ **`decisions.md`** - log trust-significant moves: "Flagged migration risk to ops lead before they discovered it (Day 3) - trust deposit."
79
+
80
+ ## Checkpoint
81
+
82
+ One question to the FDE: "Are we at the right trust level for what we need to do next week?" If not: name the gap, name the move, and put it in `context.md` as the next action.
83
+
84
+ ## The week 2-4 valley
85
+
86
+ Week 1 is the honeymoon - everyone's excited, access is fresh, the brief is new. Weeks 2-4 are the valley: novelty wears off, real problems surface, the sponsor's patience shifts from "take your time" to "when do we see results." Most engagements silently fail here, not at ship.
87
+
88
+ Counter it:
89
+ - Ship one visible artifact per week, even if discovery isn't done. A terrain map, a risk register, a stakeholder signal update - something the sponsor can point to.
90
+ - Proactive status update at end of week 2 - explicitly name what discovery revealed that wasn't in the brief. This resets expectations with evidence.
91
+ - If still in discovery at week 3: the conversation with the sponsor about scope or timeline reset is overdue. Don't wait for them to ask.
92
+
93
+ ## Principles
94
+
95
+ - Trust is earned in small moves, lost in one. Never skip the ladder.
96
+ - The first-week plays are specific and deliberate - not "be helpful."
97
+ - AI policy: ask, never assume. Prohibited until confirmed.
98
+ - Mistakes happen; hiding them doesn't. Own it in the first hour.
99
+ - The FDE who makes the internal team look right earns trust faster than the FDE who ships the most code.
100
+ - Weeks 2-4 are where engagements silently die. Ship visible artifacts weekly to survive the valley.
@@ -0,0 +1,70 @@
1
+ # use-case-scoring - pick the right battle, not the interesting one
2
+
3
+ **Enter when:** multiple potential use cases compete for attention, the customer says "we want to do everything," a transformation engagement needs a starting point, or the FDE needs to recommend which problem to solve first.
4
+
5
+ **Read first:** `reality.md`, `brief.md`, `terrain.md`, `context.md`. If `business-case.md` or `prototype-log.md` exist from sketch, load those - they carry forward.
6
+
7
+ The most dangerous moment in a multi-use-case engagement is when the technically interesting problem wins over the high-value problem. Scoring replaces opinion with arithmetic. The arithmetic is wrong - all models are - but it's *visibly* wrong, which means it can be debated and corrected. Opinion can't.
8
+
9
+ ## Method (you do this work)
10
+
11
+ **1. List every candidate.** From the brief, from discovery conversations, from the FDE's own observations. Include the ones the customer hasn't said aloud but the codebase implies - a high-churn module with no tests is a candidate even if nobody named it.
12
+
13
+ **2. Score on five dimensions.** Each 1–5, with the scoring rubric below:
14
+
15
+ | Dimension | 1 | 3 | 5 |
16
+ |-----------|---|---|---|
17
+ | **Business value** | Nice-to-have improvement | Noticeable cost or revenue impact | Existential - they lose customers or face regulatory action without it |
18
+ | **Urgency** | Someday; no deadline | Needed this quarter; mild pressure | Burning now; every week costs real money or trust |
19
+ | **Feasibility** | Requires new infrastructure, skills, or major refactoring | Moderate effort with known patterns | Can be built on existing systems with existing team |
20
+ | **Data readiness** | Data doesn't exist or is deeply unclean | Data exists but needs work; volume uncertain | Available, clean, sufficient volume today |
21
+ | **Stakeholder alignment** | No sponsor; political resistance | One sponsor but competing priorities | Active sponsor with budget and decision authority |
22
+
23
+ **3. Calculate the score.**
24
+
25
+ ```
26
+ Score = (Business value × Urgency × Stakeholder alignment) / (6 - Feasibility) × Data readiness
27
+ ```
28
+
29
+ Why this formula:
30
+ - **Multiplied numerator** - all three must be present. A high-value problem with no urgency or no sponsor scores low because it won't ship.
31
+ - **Feasibility inverted** - harder problems get a higher denominator, pulling the score down. A feasibility of 5 (easy) gives denominator 1; feasibility of 1 (hard) gives denominator 5.
32
+ - **Data readiness as multiplier** - for data-dependent use cases (ML, analytics). For pure engineering work, set to 3 (neutral) unless data quality is genuinely a factor.
33
+
34
+ **4. Rank and present.** Sort by score. Present the top 3 to the FDE and the sponsor:
35
+
36
+ ```markdown
37
+ | Rank | Use case | Value | Urgency | Feasibility | Data | Alignment | Score | Recommend |
38
+ |------|----------|-------|---------|-------------|------|-----------|-------|-----------|
39
+ | 1 | Fix payment reconciliation | 5 | 5 | 4 | 3 | 5 | 187.5 | Start here |
40
+ | 2 | Dashboard redesign | 3 | 2 | 5 | 3 | 3 | 54.0 | Quick win if capacity |
41
+ | 3 | ML fraud detection | 5 | 3 | 2 | 2 | 4 | 30.0 | Phase 2 after data prep |
42
+ ```
43
+
44
+ **5. Defend the recommendation, not the model.** The model is a reasoning tool, not a decision. When presenting:
45
+
46
+ - "The scoring puts payment reconciliation first because it's the only use case where all three conditions hold: the sponsor is active, the problem is burning, and we can build it on the existing system."
47
+ - Never: "The model says X." Models don't decide; people decide with evidence.
48
+
49
+ **6. Handle the CEO's pet project.** Sometimes the highest-scoring use case isn't the one the most powerful stakeholder wants. That's information, not a problem:
50
+
51
+ - Present the scores honestly - the stakeholder sees you're being rigorous, not political.
52
+ - If they override: log it in `decisions.md` as a deliberate choice, note the trade-off, and build what they chose. The FDE who was honest about the trade-off is protected when the override creates problems.
53
+
54
+ ## Artifact
55
+
56
+ **`reality.md`** - the scored use-case table with the recommendation. This is the evidence the sponsor references when justifying the prioritisation upward.
57
+
58
+ **`decisions.md`** - if the scored recommendation was overridden: what was chosen, by whom, the trade-off accepted.
59
+
60
+ ## Checkpoint
61
+
62
+ Walk the FDE through the top 3 scores and the recommendation. One question: "Does the sponsor have a strong preference that overrides the scoring?" If yes, log it. If no, proceed with the highest score to sketch or plan.
63
+
64
+ ## Principles
65
+
66
+ - Score replaces opinion. Visible arithmetic beats invisible judgment.
67
+ - All three conditions (value, urgency, alignment) must hold - or the use case won't ship.
68
+ - The technically interesting problem that scores low gets deferred, not pursued.
69
+ - Present the model; let the human decide. If overridden, log the trade-off.
70
+ - A use case with no active sponsor is a research project, not an engagement deliverable.
@@ -0,0 +1,13 @@
1
+ # `.fde/` engagement memory
2
+
3
+ **Default location (recommended):** `~/fde-engagements/<engagement-name>/.fde/`
4
+
5
+ Create with:
6
+
7
+ ```bash
8
+ node bin/install.js init <engagement-name> # from fdeops repo; or npx fdeops@latest init when npm ≥ 3.0.0
9
+ ```
10
+
11
+ Stays on **your machine** - not in shared git by default.
12
+
13
+ Optional: copy into a workspace only if allowed and `.fde/` is gitignored.
@@ -0,0 +1,8 @@
1
+ # Brief (stated problem)
2
+
3
+ <!-- What they said the problem is. Hypothesis until the discover phase confirms. -->
4
+
5
+ **Stated problem:**
6
+ **Timeline:**
7
+ **Named decision-maker:**
8
+ **Gaps in the brief (questions to answer):**
@@ -0,0 +1,14 @@
1
+ # Engagement context
2
+
3
+ <!-- Loaded every session. Keep compact: state, owner, next action. -->
4
+
5
+ **Engagement:**
6
+ **Customer:**
7
+ **Phase:** land | discover | build | ship | close
8
+ **Last updated:**
9
+
10
+ ## Current state
11
+
12
+ ## Next action
13
+
14
+ ## Notes for the next session
@@ -0,0 +1,18 @@
1
+ # Decisions and plan
2
+
3
+ <!-- Plan lives here: PR-sized tasks with verification steps. -->
4
+
5
+ ## Plan
6
+
7
+ ## Decision log
8
+
9
+ <!-- Use this format for each decision. The rationale is the part that survives the engagement. -->
10
+
11
+ <!--
12
+ ### [Date] Decision title
13
+ - Context: what prompted this decision
14
+ - Options considered: what was on the table
15
+ - Decision: what was chosen
16
+ - Rationale: why this over the alternatives
17
+ - Owner: who approved
18
+ -->
@@ -0,0 +1,7 @@
1
+ # Delivery log
2
+
3
+ <!-- Business-visible value, not ticket theater. -->
4
+
5
+ ## Shipped
6
+
7
+ ## Running value
@@ -0,0 +1,7 @@
1
+ # Reality (actual problem)
2
+
3
+ <!-- Hypothesis until the discover phase confirms with evidence. -->
4
+
5
+ **Working theory:**
6
+ **Evidence:**
7
+ **Differs from brief how:**
File without changes
@@ -0,0 +1,5 @@
1
+ # Risk register
2
+
3
+ | Risk | Status | Owner | Mitigation |
4
+ |------|--------|-------|------------|
5
+ | | open | | |
@@ -0,0 +1,10 @@
1
+ # Stakeholders
2
+
3
+ <!-- Champions, blockers, veto power. Trust signals: quiet = escalate. -->
4
+
5
+ | Name | Role | Stance | Notes |
6
+ |------|------|--------|-------|
7
+ | | | champion / neutral / resistant | |
8
+
9
+ **Trust signal:** green | amber | red
10
+ **Last trust check:**
@@ -0,0 +1,7 @@
1
+ # Success definition
2
+
3
+ <!-- Agreed definition of done. Out-of-scope is as important as in-scope. -->
4
+
5
+ **Done when:**
6
+ **Explicitly out of scope:**
7
+ **Stakeholder who signs off:**
@@ -0,0 +1,7 @@
1
+ # Terrain (codebase map)
2
+
3
+ <!-- Hotspots, test gaps, fragile zones. Update as you learn - do not load whole repo into context. -->
4
+
5
+ **Stack:**
6
+ **Hotspots (handle with care):**
7
+ **Test gaps:**
@@ -0,0 +1,11 @@
1
+ # Trust profile
2
+
3
+ <!-- Sacred data, AI policy, approvals. Use <private>...</private> for never-AI content. -->
4
+
5
+ **AI code policy:**
6
+ **Approval chain:**
7
+ **Data that must never enter AI context:**
8
+
9
+ <private>
10
+ <!-- Example: cardholder data scope, production credentials paths -->
11
+ </private>