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,78 @@
|
|
|
1
|
+
# initiative-triage - when 20 things are "urgent," pick the 3 that matter
|
|
2
|
+
|
|
3
|
+
**Enter when:** a transformation engagement with a long list of initiatives, the customer's roadmap has more items than weeks, competing teams want different things, or the FDE needs to recommend what to do *first* across a complex programme.
|
|
4
|
+
|
|
5
|
+
**Read first:** `reality.md`, `success.md`, `stakeholders.md`, `context.md`. Load `business-case.md` if individual initiative cases exist.
|
|
6
|
+
|
|
7
|
+
Every enterprise engagement generates more work than any timeline can hold. Triage is the discipline of saying "not now" to real work with real sponsors - and making it stick. Without it, the FDE drowns in parallel efforts and ships nothing well.
|
|
8
|
+
|
|
9
|
+
## Method (you do this work)
|
|
10
|
+
|
|
11
|
+
**1. Collect the full list.** From the customer's roadmap, from discovery, from stakeholder requests, from `decisions.md` scope receipts. No filtering yet - everything goes on the board:
|
|
12
|
+
|
|
13
|
+
```markdown
|
|
14
|
+
| # | Initiative | Requested by | Stated priority | Current status |
|
|
15
|
+
|---|-----------|-------------|----------------|----------------|
|
|
16
|
+
| 1 | Payment API rewrite | CTO | P1 | Blocked on schema decision |
|
|
17
|
+
| 2 | Customer dashboard | Product | P1 | Design phase |
|
|
18
|
+
| 3 | SOC2 compliance | CISO | P0 | Not started |
|
|
19
|
+
| ... | ... | ... | ... | ... |
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Notice: every stakeholder's initiative is P0 or P1. That's the problem this skill solves.
|
|
23
|
+
|
|
24
|
+
**2. Apply the triage matrix.** Each initiative scores on three axes:
|
|
25
|
+
|
|
26
|
+
| Axis | Question | Scale |
|
|
27
|
+
|------|----------|-------|
|
|
28
|
+
| **Impact** | If this ships, what changes for the business in 90 days? | 1 (marginal) → 5 (transformative) |
|
|
29
|
+
| **Dependency** | How many other initiatives are blocked waiting for this? | 0 (standalone) → 5 (critical path for 3+ others) |
|
|
30
|
+
| **Cost of delay** | What happens each week this doesn't ship? | 1 (nothing) → 5 (measurable loss or regulatory exposure) |
|
|
31
|
+
|
|
32
|
+
**Triage score = Impact + Dependency + Cost of delay** (simple sum, 3–15 range).
|
|
33
|
+
|
|
34
|
+
**3. Sort into three lanes:**
|
|
35
|
+
|
|
36
|
+
| Lane | Score | Action |
|
|
37
|
+
|------|-------|--------|
|
|
38
|
+
| **Now** (max 3) | 11–15 | Active work this phase. FDE and team capacity allocated. |
|
|
39
|
+
| **Next** (max 5) | 7–10 | Sequenced for the following phase. Dependencies tracked but not started. |
|
|
40
|
+
| **Later** (unlimited) | 3–6 | Captured, not committed. Revisit at next triage. |
|
|
41
|
+
|
|
42
|
+
**The cap matters.** "Now" has exactly 3 slots. Not 4, not "3 plus this small one." Discipline is the product.
|
|
43
|
+
|
|
44
|
+
**4. Handle the political override.** When a powerful stakeholder pushes a low-scoring initiative into "Now":
|
|
45
|
+
|
|
46
|
+
- Show the displacement: "Adding X to Now means Y drops to Next. Y is currently blocking Z and W."
|
|
47
|
+
- Let them choose: "Which of the current three should Y replace?" Making the trade-off visible makes the conversation honest.
|
|
48
|
+
- If they override without trading: log it. `decisions.md`: "Initiative X added to Now without displacement by <who>. Capacity impact: <what slows>."
|
|
49
|
+
|
|
50
|
+
**5. Set the triage cadence.** Triage is not a one-time event:
|
|
51
|
+
|
|
52
|
+
| Engagement type | Triage frequency | Trigger for emergency re-triage |
|
|
53
|
+
|----------------|-----------------|-------------------------------|
|
|
54
|
+
| Sprint (1–2 weeks) | Once, at plan | Crisis or sponsor change |
|
|
55
|
+
| Standard (1–4 weeks) | Weekly | New P0 from sponsor |
|
|
56
|
+
| Programme (months) | Bi-weekly | Quarterly review, team change, market shift |
|
|
57
|
+
|
|
58
|
+
**6. Communicate the triage result.** The output is not just a priority list - it's a commitment:
|
|
59
|
+
|
|
60
|
+
> "We're committing to these three initiatives this phase: [A, B, C]. Here's why, here's what they deliver, and here's what's explicitly deferred: [D, E, F, ...]. If priorities change, we re-triage - we don't add without removing."
|
|
61
|
+
|
|
62
|
+
## Artifact
|
|
63
|
+
|
|
64
|
+
**`decisions.md`** - the triage table with scores, lanes, and the commitment statement. Dated. Referenced by plan and status.
|
|
65
|
+
|
|
66
|
+
**`reality.md`** - if triage revealed that the engagement scope is larger than the timeline supports, update the assessment.
|
|
67
|
+
|
|
68
|
+
## Checkpoint
|
|
69
|
+
|
|
70
|
+
Walk the FDE through: the 3 "Now" initiatives and why, the top "Next" items and what triggers their promotion, and the one initiative that will generate the most political pushback for being in "Later." Prepare the FDE for that conversation.
|
|
71
|
+
|
|
72
|
+
## Principles
|
|
73
|
+
|
|
74
|
+
- "Now" has 3 slots. Not 4. Discipline is the product.
|
|
75
|
+
- Every addition requires a removal. Visible trade-offs beat invisible overload.
|
|
76
|
+
- Triage is recurring, not one-time. The list changes; the discipline doesn't.
|
|
77
|
+
- A logged override protects the FDE. An unlogged override blames them.
|
|
78
|
+
- The initiative everyone wants but nobody will trade for is the one to watch.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# land - first 48 hours
|
|
2
|
+
|
|
3
|
+
**Enter when:** new customer, first meeting, just got the brief, nothing started yet.
|
|
4
|
+
|
|
5
|
+
**Read first:** `context.md` if it exists. Nothing else until you know what kind of engagement this is.
|
|
6
|
+
|
|
7
|
+
## Method - part 1: interrogate the brief (you do this work)
|
|
8
|
+
|
|
9
|
+
Read the brief the FDE gives you. What is **not** in it matters as much as what is. Produce the gap list yourself:
|
|
10
|
+
|
|
11
|
+
- **No named decision-maker** → the FDE will spend two weeks building for someone who can't say yes. Flag it.
|
|
12
|
+
- **"Straightforward cleanup" on an 8-year-old system** → the previous attempt is still visible in git history as a revert. Flag it.
|
|
13
|
+
- **Very tight timeline** → someone already promised the outcome before hiring the FDE. Flag it.
|
|
14
|
+
- **No out-of-scope section** → scope creep is pre-authorized. Flag it.
|
|
15
|
+
|
|
16
|
+
Write these into `brief.md` as **questions to answer**, not problems - they're what the FDE is walking in to resolve.
|
|
17
|
+
|
|
18
|
+
Pre-arrival checks to run through with the FDE:
|
|
19
|
+
- Access confirmed? Repo, environment, docs. Waiting for access on day two burns trust.
|
|
20
|
+
- Has someone tried this before? Find out why it failed before assuming this approach is different.
|
|
21
|
+
- Other vendors/teams in scope? Then the FDE is not the only one in the room, even when alone in the meeting.
|
|
22
|
+
- Tech stack recon: job postings, GitHub org - know the stack before they say it.
|
|
23
|
+
|
|
24
|
+
## Method - part 2: the first conversation (you coach, the FDE asks)
|
|
25
|
+
|
|
26
|
+
Intent: before any tech, learn what keeps the sponsor up at night - personally, not the project charter. Failure talk surfaces truth faster than "requirements." Angles in the FDE's own words:
|
|
27
|
+
|
|
28
|
+
- "Before you open the laptop - what would make this a bad engagement for *them*, not just a delayed project?"
|
|
29
|
+
- "What are they afraid you'll miss?"
|
|
30
|
+
- "Who loses credibility if this goes wrong?"
|
|
31
|
+
|
|
32
|
+
Let silence sit. If their fear doesn't match the written brief, the brief is wrong - say so plainly, log it.
|
|
33
|
+
|
|
34
|
+
**Listen for, and capture as you hear it:**
|
|
35
|
+
- **The real decision-maker** - whoever others mention most, especially if not yet met. That's who judges the work.
|
|
36
|
+
- **The previous attempt** - "we tried something similar last year" is the most important sentence in the first meeting. Who was involved? Still there and protective, or gone because of it?
|
|
37
|
+
- **The passed-over internal team** - they know exactly what's wrong, and they resent the FDE's presence. Find them before the first standup, ask what they tried, use their language in every meeting. Make them look right and they protect you; ignore them and they wait for the mistake.
|
|
38
|
+
- **The sacred thing** - "Is there anything in this environment I should treat as untouchable?" The hesitation before the answer is the answer.
|
|
39
|
+
- **AI posture and policy** - tools already in use (sanctioned or shadow), and: "Does your organisation have a policy on AI-generated code? Are there decisions where you would not be comfortable with AI involvement?"
|
|
40
|
+
- **Boundaries in multi-vendor rooms** - who owns what surface, who signs off before a change crosses it.
|
|
41
|
+
|
|
42
|
+
## The day 1 deliverable
|
|
43
|
+
|
|
44
|
+
Before the end of day 1, ship one visible thing: a small bug fix, a cleanup the team has stepped over, a dashboard tweak, a config improvement. Not because it matters technically - because it proves you can ship in their environment without breaking things. The first deploy sets the trust trajectory for the entire engagement. A day-1 deliverable earns more credibility than a week-3 architecture deck.
|
|
45
|
+
|
|
46
|
+
## Artifact (write as the conversation is debriefed)
|
|
47
|
+
|
|
48
|
+
**`brief.md`** - what they said, who sent the FDE, the timeline, **and the gap list**.
|
|
49
|
+
|
|
50
|
+
**`success.md`** - what done looks like, how it's measured, who actually signs off, what is explicitly out of scope. Agreed with the customer, not assumed.
|
|
51
|
+
|
|
52
|
+
**`stakeholders.md`**:
|
|
53
|
+
```markdown
|
|
54
|
+
| Who | Role | Signal | Notes |
|
|
55
|
+
|-----|------|--------|-------|
|
|
56
|
+
| <name> | sponsor / champion / resistor / veto / passed-over | green/amber/red | <evidence, day> |
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**`trust-profile.md`** - sacred data (`<private>` tagged), fears heard, AI policy, approval chain. Sensitive: never loaded for status reads, never into subagent prompts.
|
|
60
|
+
|
|
61
|
+
One falsifiable hypothesis about the real problem goes at the bottom of `brief.md` - discover will test it.
|
|
62
|
+
|
|
63
|
+
## Checkpoint
|
|
64
|
+
|
|
65
|
+
One page back to the FDE: success + sign-off owner, out-of-scope boundary, sacred data, stakeholder map with veto power, AI posture, the hypothesis. If it doesn't fit one page, the engagement isn't understood yet.
|
|
66
|
+
|
|
67
|
+
If remote: trust-building takes ~40% longer - push for a short video call before anything asynchronous.
|
|
68
|
+
|
|
69
|
+
## Principles
|
|
70
|
+
|
|
71
|
+
- Never start technical work before `success.md` exists.
|
|
72
|
+
- Sacred data never enters AI context. Ever.
|
|
73
|
+
- The brief is a hypothesis; discover confirms it.
|
|
74
|
+
- The passed-over internal team is the best source of truth, not an obstacle.
|
|
75
|
+
- If the customer cannot define success, that is the first problem to solve.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# multi-customer-ops - juggling engagements without dropping any
|
|
2
|
+
|
|
3
|
+
**Enter when:** the FDE is running 2+ engagements simultaneously, context-switching is causing mistakes or delays, a new customer is being onboarded while existing engagements are active, or the FDE says "I'm losing track."
|
|
4
|
+
|
|
5
|
+
**Read first:** Run `fde status` for the portfolio view. Then per engagement: `context.md` only - load deeper files only for the engagement being worked on.
|
|
6
|
+
|
|
7
|
+
The solo FDE running three customers simultaneously is the norm, not the exception. Without a system, the third customer gets the scraps of attention left after the other two have their crises. Multi-customer ops is the discipline of giving each customer the experience of being your only customer.
|
|
8
|
+
|
|
9
|
+
## Method (you do this work)
|
|
10
|
+
|
|
11
|
+
**1. The hard boundary: one `.fde/` per customer, always.**
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
~/fde-engagements/
|
|
15
|
+
acme-corp/.fde/ ← Acme's engagement memory
|
|
16
|
+
globex/.fde/ ← Globex's engagement memory
|
|
17
|
+
initech/.fde/ ← Initech's engagement memory
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Never:**
|
|
21
|
+
- Merge two customers' data into one folder
|
|
22
|
+
- Reference one customer's code/data in another's context
|
|
23
|
+
- Load two customers' `.fde/` folders in the same session
|
|
24
|
+
- Copy patterns between customers without stripping identifying information
|
|
25
|
+
|
|
26
|
+
Cross-contamination is the fastest way to lose two engagements at once.
|
|
27
|
+
|
|
28
|
+
**2. The daily triage.** Every morning, before opening any editor:
|
|
29
|
+
|
|
30
|
+
```markdown
|
|
31
|
+
## Daily triage - <date>
|
|
32
|
+
|
|
33
|
+
| Customer | Trust signal | Top risk | Today's action | Time budget |
|
|
34
|
+
|----------|-------------|----------|---------------|-------------|
|
|
35
|
+
| Acme | green | Migration deadline Fri | Finish data mapping, send status | 4h |
|
|
36
|
+
| Globex | AMBER | Sponsor went quiet Tue | Proactive conversation TODAY | 2h |
|
|
37
|
+
| Initech | green | None active | Build slice 3, push PR | 2h |
|
|
38
|
+
|
|
39
|
+
Priority order: Globex (amber trust), Acme (deadline), Initech (steady)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**3. The triage rules.** In order of priority:
|
|
43
|
+
|
|
44
|
+
| Priority | Rule | Why |
|
|
45
|
+
|----------|------|-----|
|
|
46
|
+
| **1** | Trust fires first | A green-trust engagement with a deadline can wait 4 hours. An amber-trust engagement cannot wait 4 hours - it's 48 hours from red. |
|
|
47
|
+
| **2** | Deadlines second | Real deadlines (customer-facing, regulatory, contractual) outrank planned milestones. |
|
|
48
|
+
| **3** | Highest-value delivery third | The engagement where today's work produces the most visible outcome. |
|
|
49
|
+
| **4** | Steady-state last | Engagements on track with no urgent needs get allocated remaining time. |
|
|
50
|
+
|
|
51
|
+
**4. Context-switch protocol.** When moving between customers:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
BEFORE LEAVING CUSTOMER A:
|
|
55
|
+
1. Write 3 lines to context.md: where we are, what changed, next step
|
|
56
|
+
2. Commit or stash any work in progress
|
|
57
|
+
3. Close all customer A files and browser tabs
|
|
58
|
+
|
|
59
|
+
BEFORE STARTING CUSTOMER B:
|
|
60
|
+
1. Run: fde resume (loads Customer B's engagement)
|
|
61
|
+
2. Read context.md - where did we leave off?
|
|
62
|
+
3. Confirm: what's the one thing to accomplish in this block?
|
|
63
|
+
4. Set a time boundary (e.g., "2 hours on Globex, then back to Acme")
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
The 3-line context update is the bridge. Without it, the next session starts with "what was I doing?" - that's 20 minutes of re-discovery each time.
|
|
67
|
+
|
|
68
|
+
**5. The communication cadence.** Each customer gets a rhythm:
|
|
69
|
+
|
|
70
|
+
| Engagement intensity | Status cadence | Touchpoint type |
|
|
71
|
+
|---------------------|---------------|-----------------|
|
|
72
|
+
| Active build (daily work) | Weekly written + ad-hoc Slack | Status update + visible progress |
|
|
73
|
+
| Light touch (2–3 days/week) | Weekly written | Status update + next week's plan |
|
|
74
|
+
| Monitoring only | Bi-weekly written | Health check + any emerging risks |
|
|
75
|
+
|
|
76
|
+
**The golden rule: no customer should have to chase you for an update.** Proactive status updates are cheaper than reactive ones - and they protect trust across all engagements.
|
|
77
|
+
|
|
78
|
+
**6. Capacity management.** The honest conversation with yourself:
|
|
79
|
+
|
|
80
|
+
| Situation | Action |
|
|
81
|
+
|-----------|--------|
|
|
82
|
+
| All engagements are steady | Allocate by value; reserve 20% for unplanned |
|
|
83
|
+
| One engagement is on fire | Other engagements get a proactive heads-up: "Focus is on X this week; here's what's planned for you next week" |
|
|
84
|
+
| Two engagements are on fire | Triage - one gets full attention, one gets stabilised, tell the sponsor of the stabilised one what's happening |
|
|
85
|
+
| Three+ are on fire simultaneously | Escalate to your manager/team. Solo capacity is exceeded - communicate before quality drops |
|
|
86
|
+
|
|
87
|
+
**7. The cross-contamination checklist.** Before every customer interaction:
|
|
88
|
+
|
|
89
|
+
- [ ] Am I in the right `.fde/` folder?
|
|
90
|
+
- [ ] Am I referencing the right customer's context?
|
|
91
|
+
- [ ] Is the status update addressed to the right person?
|
|
92
|
+
- [ ] Does my current context contain any data from another customer?
|
|
93
|
+
- [ ] Are my browser tabs / code editors pointed at the right customer?
|
|
94
|
+
|
|
95
|
+
One wrong customer name in a status update damages both relationships.
|
|
96
|
+
|
|
97
|
+
## Artifact
|
|
98
|
+
|
|
99
|
+
**`context.md`** (per customer) - the 3-line bridge updated at every context switch. The most-written file in multi-customer ops.
|
|
100
|
+
|
|
101
|
+
**`fieldbook.html`** - regenerated by `fde dashboard` (deterministic, zero tokens) to give the portfolio view. Trust-ordered.
|
|
102
|
+
|
|
103
|
+
## Checkpoint
|
|
104
|
+
|
|
105
|
+
The daily triage is the checkpoint. One line per customer: signal, priority, today's action. If any customer hasn't been touched in 3+ business days: flag it - silence is noticed.
|
|
106
|
+
|
|
107
|
+
## Principles
|
|
108
|
+
|
|
109
|
+
- One `.fde/` per customer. Never merge. Never cross-reference.
|
|
110
|
+
- Trust fires outrank deadlines. A deadline can be renegotiated; trust can't.
|
|
111
|
+
- Write the 3-line context bridge at every switch. 20 seconds saves 20 minutes.
|
|
112
|
+
- No customer should have to chase for an update.
|
|
113
|
+
- Two fires simultaneously is a triage decision. Three is an escalation.
|
|
114
|
+
- The wrong customer name in a status update is a two-customer trust fire.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# observability - if you can't see it running, you can't operate it
|
|
2
|
+
|
|
3
|
+
**Enter when:** shipping a feature to production, the customer says "we don't know when things break," a post-incident review revealed gaps in monitoring, or the handoff needs the team to operate what was built.
|
|
4
|
+
|
|
5
|
+
**Read first:** `terrain.md`, `delivery.md`, `context.md`. Load `trust-profile.md` if the data flowing through logs contains sensitive information.
|
|
6
|
+
|
|
7
|
+
Code without observability is code you can't operate. The FDE who ships a feature without telemetry creates a callback in six weeks when it breaks and nobody can tell why. Observability is built alongside the feature, not after - the same way tests are.
|
|
8
|
+
|
|
9
|
+
## Method (you do this work)
|
|
10
|
+
|
|
11
|
+
**1. Define "working" before instrumenting.** Write 2–4 questions that the person on call will ask about this feature:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
FEATURE: payment retry logic
|
|
15
|
+
QUESTIONS ON-CALL WILL ASK:
|
|
16
|
+
1. What fraction of payments succeed on first attempt vs after retry?
|
|
17
|
+
2. When a payment fails permanently, why? (provider error? timeout? validation?)
|
|
18
|
+
3. Is the payment provider slower than usual?
|
|
19
|
+
4. Are retries causing duplicate charges?
|
|
20
|
+
→ Every signal below must help answer one of these.
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
If you can't name the questions, you're not ready to instrument - you'll log everything and learn nothing.
|
|
24
|
+
|
|
25
|
+
**2. Pick the right signal for each question:**
|
|
26
|
+
|
|
27
|
+
| Signal | Answers | When to use |
|
|
28
|
+
|--------|---------|-------------|
|
|
29
|
+
| **Structured log** | "What happened in this specific case?" | Individual request debugging, audit trails |
|
|
30
|
+
| **Metric** | "How often / how fast, in aggregate?" | Dashboards, alerting, trend detection |
|
|
31
|
+
| **Trace** | "Where did time go across services?" | Cross-service latency, bottleneck identification |
|
|
32
|
+
|
|
33
|
+
Rule of thumb: metrics tell you **that** something is wrong, traces tell you **where**, logs tell you **why**.
|
|
34
|
+
|
|
35
|
+
**3. Structured logging - events, not prose.**
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
BAD: logger.info(`Payment ${id} failed for user ${userId} after ${n} retries`)
|
|
39
|
+
→ Unqueryable, inconsistent format, buried in noise
|
|
40
|
+
|
|
41
|
+
GOOD: logger.info({ event: "payment_failed", payment_id: id, user_id: userId,
|
|
42
|
+
retry_count: n, error_code: "PROVIDER_TIMEOUT", duration_ms: elapsed })
|
|
43
|
+
→ Queryable, alertable, structured for dashboards
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Every log line: a stable event name + machine-readable fields. Human-readable messages are for debugging sessions; structured events are for production operations.
|
|
47
|
+
|
|
48
|
+
**4. The four metrics every FDE feature needs:**
|
|
49
|
+
|
|
50
|
+
| Metric | What it measures | Alert threshold |
|
|
51
|
+
|--------|-----------------|-----------------|
|
|
52
|
+
| **Error rate** | Failures / total requests | >2x baseline for 5 minutes |
|
|
53
|
+
| **Latency (p95/p99)** | How long the operation takes | >2x normal for 5 minutes |
|
|
54
|
+
| **Throughput** | Requests per second/minute | <50% of normal for 10 minutes (demand drop = upstream problem) |
|
|
55
|
+
| **Business metric** | The thing the feature is supposed to improve | Direction reverses for 1 hour |
|
|
56
|
+
|
|
57
|
+
The business metric is the one most FDEs skip and the one the sponsor cares about most. "Error rate is fine" means nothing if payments processed per hour dropped.
|
|
58
|
+
|
|
59
|
+
**5. Alert design - avoid noise, ensure action:**
|
|
60
|
+
|
|
61
|
+
| Principle | How |
|
|
62
|
+
|-----------|-----|
|
|
63
|
+
| **Every alert has an owner** | If nobody is named, nobody responds |
|
|
64
|
+
| **Every alert has a runbook** | "Error rate spiked" → "Check these three things in this order" |
|
|
65
|
+
| **Severity maps to response time** | Critical: 15 min. Warning: next business day. Info: weekly review. |
|
|
66
|
+
| **No alert without action** | If the response is "ignore it" three times, delete the alert |
|
|
67
|
+
|
|
68
|
+
**6. AI component observability.** AI features fail differently - they degrade, they don't crash:
|
|
69
|
+
|
|
70
|
+
| What to observe | Why |
|
|
71
|
+
|----------------|-----|
|
|
72
|
+
| Model input/output pairs (sampled, privacy-respecting) | Detect drift: outputs changing without code changing |
|
|
73
|
+
| Latency per model call | Provider degradation is gradual, not binary |
|
|
74
|
+
| Fallback activation rate | If fallback fires >5%, the primary path has a problem |
|
|
75
|
+
| Confidence/quality score trend | A score that slowly drops = model drift |
|
|
76
|
+
| Token usage / cost per request | Cost creep is invisible until the bill arrives |
|
|
77
|
+
|
|
78
|
+
**7. The sacred-data boundary.** Before shipping any observability:
|
|
79
|
+
|
|
80
|
+
- Check `trust-profile.md` for `<private>` tagged data.
|
|
81
|
+
- PII in logs = a breach, not a debug aid. Mask, hash, or exclude.
|
|
82
|
+
- In healthcare: PHI in logs violates HIPAA. In fintech: PANs in logs violate PCI-DSS.
|
|
83
|
+
- Default: log IDs, not values. `user_id: 12345` not `user_email: jane@...`
|
|
84
|
+
|
|
85
|
+
## Artifact
|
|
86
|
+
|
|
87
|
+
**`delivery.md`** - under each shipped feature: what's observable, where to look, alert thresholds, the runbook.
|
|
88
|
+
|
|
89
|
+
**`handoff.md`** (when close approaches) - the on-call guide: "what each alert means and what to do."
|
|
90
|
+
|
|
91
|
+
**`risks.md`** - if observability gaps were found in existing code: what's unobserved and the risk it carries.
|
|
92
|
+
|
|
93
|
+
## Checkpoint
|
|
94
|
+
|
|
95
|
+
Before marking a feature shipped: the four metrics are emitting, alerts have owners and runbooks, sacred data is not in logs. If any gap: "Observability incomplete - <specific gap> - shipping without it means <specific risk>."
|
|
96
|
+
|
|
97
|
+
## Principles
|
|
98
|
+
|
|
99
|
+
- Define the questions before choosing the signals. Unquestioned telemetry is noise.
|
|
100
|
+
- Metrics for detection, traces for location, logs for explanation.
|
|
101
|
+
- Every alert has an owner and a runbook, or it's noise.
|
|
102
|
+
- AI features need observability for drift, not just failures.
|
|
103
|
+
- PII in logs is a breach. Default to IDs, not values.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# options-analysis - three paths, not one recommendation
|
|
2
|
+
|
|
3
|
+
**Enter when:** a significant technical or strategic decision needs to be made, the FDE is asked "what should we do?", the team is stuck between approaches, or a fork in the engagement requires the sponsor's input.
|
|
4
|
+
|
|
5
|
+
**Read first:** `reality.md`, `terrain.md`, `success.md`, `context.md`. Load `business-case.md` if the decision has cost implications.
|
|
6
|
+
|
|
7
|
+
One option is a request for trust. Two options is a false choice. Three options is a conversation between professionals. The FDE who presents three genuine options earns the decision-maker's respect - and their protection when things get hard.
|
|
8
|
+
|
|
9
|
+
## Method (you do this work)
|
|
10
|
+
|
|
11
|
+
**1. Name the decision.** One sentence: what needs to be decided, by whom, by when, and what happens if it's deferred.
|
|
12
|
+
|
|
13
|
+
> "Decision: approach for the payment migration. Decided by: CTO. Needed by: Friday. Deferral cost: blocks the next sprint and delays the pilot by two weeks."
|
|
14
|
+
|
|
15
|
+
**2. Generate three genuine options.** Not "good / medium / bad" - three approaches with real trade-offs:
|
|
16
|
+
|
|
17
|
+
| Option archetype | Description | When it fits |
|
|
18
|
+
|-----------------|-------------|-------------|
|
|
19
|
+
| **Conservative** | Lowest risk, smallest change, longest timeline | When trust is thin or the system is fragile |
|
|
20
|
+
| **Pragmatic** | Balanced risk/reward, proven patterns, moderate timeline | When the team is competent and the deadline is real |
|
|
21
|
+
| **Ambitious** | Highest reward, most change, highest risk | When the sponsor has appetite and the team has capacity |
|
|
22
|
+
|
|
23
|
+
Each option must be one the FDE would genuinely recommend under different circumstances. If you can't defend an option, replace it - padding is visible.
|
|
24
|
+
|
|
25
|
+
**3. Structure each option identically.** Same dimensions, same format - so comparison is instant:
|
|
26
|
+
|
|
27
|
+
```markdown
|
|
28
|
+
### Option A: <name> (Conservative)
|
|
29
|
+
- **What:** <the approach in one paragraph>
|
|
30
|
+
- **Timeline:** <estimate with basis>
|
|
31
|
+
- **Cost:** <effort, infrastructure, external>
|
|
32
|
+
- **Risk:** <what could go wrong and the mitigation>
|
|
33
|
+
- **Trade-off:** <what you give up by choosing this>
|
|
34
|
+
- **Best when:** <the condition that makes this the right choice>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**4. Add the comparison matrix.** Visually scannable:
|
|
38
|
+
|
|
39
|
+
| Dimension | Option A | Option B | Option C |
|
|
40
|
+
|-----------|----------|----------|----------|
|
|
41
|
+
| Timeline | 6 weeks | 4 weeks | 3 weeks |
|
|
42
|
+
| Risk | Low | Medium | High |
|
|
43
|
+
| Reversibility | Easy rollback | Partial rollback | Difficult to reverse |
|
|
44
|
+
| Team impact | Minimal | Moderate retraining | Significant ramp-up |
|
|
45
|
+
| Long-term cost | Highest (tech debt) | Moderate | Lowest |
|
|
46
|
+
|
|
47
|
+
**5. State your recommendation - and why.** The options are objective; the recommendation is your professional judgment:
|
|
48
|
+
|
|
49
|
+
> "I recommend Option B. The timeline pressure makes the conservative approach too slow, but the system fragility (see terrain.md hotspots) makes the ambitious approach reckier than the reward justifies. Option B gets us to pilot in 4 weeks with a tested rollback."
|
|
50
|
+
|
|
51
|
+
**6. Handle the override gracefully.** If the sponsor picks a different option:
|
|
52
|
+
|
|
53
|
+
- Log it in `decisions.md`: the choice, who made it, the trade-off they accepted.
|
|
54
|
+
- Adjust the plan to the chosen option. Don't passive-aggressively optimise for your preference.
|
|
55
|
+
- If the chosen option has a specific risk you flagged: note the early-warning signal in `risks.md` so it's caught if it materialises.
|
|
56
|
+
|
|
57
|
+
## Artifact
|
|
58
|
+
|
|
59
|
+
**`decisions.md`** - the options analysis:
|
|
60
|
+
```markdown
|
|
61
|
+
## Decision: <name> - <date>
|
|
62
|
+
Decided by: <who>
|
|
63
|
+
Options presented: A (<name>), B (<name>), C (<name>)
|
|
64
|
+
Recommended: B - <one line why>
|
|
65
|
+
Chosen: <A/B/C> by <who>
|
|
66
|
+
Trade-off accepted: <what the choice gives up>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
The full option details in the same entry or linked to a section in `reality.md`.
|
|
70
|
+
|
|
71
|
+
## Checkpoint
|
|
72
|
+
|
|
73
|
+
Present the three options and the recommendation. One question to the FDE: "Which option matches what the sponsor can hear right now?" (A risk-averse sponsor after an incident → conservative. A founder pre-fundraise → ambitious.) If unsure: present all three and let the sponsor decide.
|
|
74
|
+
|
|
75
|
+
## Principles
|
|
76
|
+
|
|
77
|
+
- Three options, never one. One option is a request for trust; three is a real decision.
|
|
78
|
+
- Each option must be genuinely defensible - no straw men.
|
|
79
|
+
- Same structure for each option. Comparison should take 30 seconds.
|
|
80
|
+
- Recommend one. State why. Accept the override gracefully.
|
|
81
|
+
- An override logged with its trade-off protects the FDE when the risk materialises.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# pattern-extract - if you did it twice, encode it
|
|
2
|
+
|
|
3
|
+
**Enter when:** the engagement is closing and reusable patterns exist, a technique worked well and will apply to future clients, the FDE notices themselves doing the same thing on a second engagement, or close identified a pattern worth preserving.
|
|
4
|
+
|
|
5
|
+
**Read first:** `decisions.md`, `reality.md`, `delivery.md`, `retrospectives/`, `context.md`. Patterns live in what was *done*, not what was planned.
|
|
6
|
+
|
|
7
|
+
The difference between a 5-year FDE and a 15-year FDE is not talent - it's encoded patterns. The 15-year FDE walks into a new engagement and recognises the situation in minutes because they've seen it before, named it, and know the move. Pattern extraction turns experience into reusable intelligence.
|
|
8
|
+
|
|
9
|
+
## Method (you do this work)
|
|
10
|
+
|
|
11
|
+
**1. Identify the pattern candidates.** Scan the engagement for things that:
|
|
12
|
+
|
|
13
|
+
| Signal | Example |
|
|
14
|
+
|--------|---------|
|
|
15
|
+
| Worked well and would work again in a similar situation | The "show the workaround first" approach to earning ops team trust |
|
|
16
|
+
| Failed and the failure mode is predictable | The "refactor before understanding" mistake on legacy codebases |
|
|
17
|
+
| Was discovered late and should have been discovered early | The hidden cron job that broke the migration - always ask about cron jobs |
|
|
18
|
+
| Required a workaround that others would face too | The compliance dance for getting AI tools approved in regulated environments |
|
|
19
|
+
| Involved a political dynamic that repeats | The passed-over internal team dynamic - present in every engagement with external FDEs |
|
|
20
|
+
|
|
21
|
+
**2. Write the pattern in a transferable format.** Each pattern must be usable by a future FDE who has never heard of this engagement:
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
## Pattern: <name>
|
|
25
|
+
|
|
26
|
+
### Situation
|
|
27
|
+
<When does this pattern apply? What does the FDE see/hear that triggers recognition?>
|
|
28
|
+
|
|
29
|
+
### The move
|
|
30
|
+
<What to do, specifically. Not advice - steps.>
|
|
31
|
+
|
|
32
|
+
### Why it works
|
|
33
|
+
<The mechanism - why this approach succeeds where the obvious approach fails.>
|
|
34
|
+
|
|
35
|
+
### Watch out for
|
|
36
|
+
<The failure mode or edge case that makes the pattern not apply.>
|
|
37
|
+
|
|
38
|
+
### Evidence
|
|
39
|
+
<Which engagement, what happened, what the result was. Specific, not generic.>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**3. The pattern quality test.** Before encoding:
|
|
43
|
+
|
|
44
|
+
| Test | Pass | Fail |
|
|
45
|
+
|------|------|------|
|
|
46
|
+
| **Transferable?** | Another FDE could apply this without context from this engagement | Only makes sense if you know the specific client |
|
|
47
|
+
| **Specific enough?** | Contains concrete steps, not just principles | "Build trust" / "Communicate well" - too vague to act on |
|
|
48
|
+
| **Repeatable?** | Applies to a class of situations, not just this one | Only worked because of a unique circumstance |
|
|
49
|
+
| **Falsifiable?** | You can tell when the pattern is working or not | No way to measure whether applying it helped |
|
|
50
|
+
|
|
51
|
+
**4. Classify by domain.** Patterns sort into the same domains as the skills:
|
|
52
|
+
|
|
53
|
+
| Domain | Pattern type | Example |
|
|
54
|
+
|--------|-------------|---------|
|
|
55
|
+
| **Embed & Trust** | Political / relational | "The passed-over team warm-up protocol" |
|
|
56
|
+
| **Discover & Diagnose** | Investigative / analytical | "The cron-job discovery checklist for legacy systems" |
|
|
57
|
+
| **Plan & Align** | Structural / strategic | "The three-option presentation for nervous sponsors" |
|
|
58
|
+
| **Build & Guard** | Technical / safety | "The Strangler Fig on financial transaction code" |
|
|
59
|
+
| **Ship & Verify** | Operational / process | "The regulated-environment change-approval timeline buffer" |
|
|
60
|
+
| **Operate & Close** | Knowledge / handoff | "The 2am document format that actually gets used" |
|
|
61
|
+
|
|
62
|
+
**5. Version and evolve.** Patterns are living documents:
|
|
63
|
+
|
|
64
|
+
- First use: **v0.1** - hypothesis based on one engagement
|
|
65
|
+
- Second use: **v1.0** - confirmed pattern, refined from two experiences
|
|
66
|
+
- After modification: increment minor version with what changed and why
|
|
67
|
+
- After contradiction: note the counter-example, adjust the "watch out for" section
|
|
68
|
+
|
|
69
|
+
**6. Cross-engagement pattern mining.** When the FDE has multiple engagements in `.fde/`:
|
|
70
|
+
|
|
71
|
+
- Compare `reality.md` across engagements - do the same problems recur?
|
|
72
|
+
- Compare `decisions.md` - are the same decisions being made?
|
|
73
|
+
- Compare `retrospectives/` - are the same lessons being "learned" twice?
|
|
74
|
+
|
|
75
|
+
A pattern learned twice is a process failure. Encoding it prevents the third time.
|
|
76
|
+
|
|
77
|
+
## Artifact
|
|
78
|
+
|
|
79
|
+
**`patterns.md`** - the pattern library, growing across engagements. Each pattern in the format above. Indexed by domain and situation trigger.
|
|
80
|
+
|
|
81
|
+
**`retrospectives/YYYY-MM-DD-<engagement>.md`** - reference to which patterns were extracted from this engagement.
|
|
82
|
+
|
|
83
|
+
## Checkpoint
|
|
84
|
+
|
|
85
|
+
Present the extracted patterns to the FDE: "From this engagement, I've identified N patterns worth encoding. The highest-value one is <name> because <it will apply to future engagements in these situations>." Confirm the pattern is accurate - the FDE's field judgment outranks the analysis.
|
|
86
|
+
|
|
87
|
+
## Principles
|
|
88
|
+
|
|
89
|
+
- If you did it twice, encode it. The same lesson learned three times is a failure.
|
|
90
|
+
- Patterns are steps, not principles. "Build trust" isn't a pattern; "fix a small visible bug on day one" is.
|
|
91
|
+
- Every pattern needs a situation trigger - the FDE must recognise when it applies.
|
|
92
|
+
- Version patterns. A pattern from one engagement is a hypothesis; from two, it's confirmed.
|
|
93
|
+
- The pattern library is the FDE's compound interest. It's what separates 5 years of experience from 1 year repeated 5 times.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# plan - sequence the work
|
|
2
|
+
|
|
3
|
+
**Enter when:** scope is understood and the work needs breaking down - a slice, a phase, or the whole delivery.
|
|
4
|
+
|
|
5
|
+
**Read first:** `reality.md`, `success.md`, `terrain.md`, `stakeholders.md`. Load `business-case.md` if sketch produced one. Not the full folder.
|
|
6
|
+
|
|
7
|
+
An FDE plan is not a sprint backlog. The technical sequence is the easy part. The hard part is when to show progress, who approves the next phase, and where trust is thin enough that two silent weeks read as failure. A technically correct plan that ignores engagement politics fails on schedule.
|
|
8
|
+
|
|
9
|
+
## Method (you do this work)
|
|
10
|
+
|
|
11
|
+
**0. Lock scope first.** Read `success.md`. If out-of-scope is undefined, define it now with the FDE - a plan on undefined scope accumulates silent commitments.
|
|
12
|
+
|
|
13
|
+
**1. Work backwards from success.** What's the last thing that must be true before done? And before that? That's the dependency chain - not a wish list.
|
|
14
|
+
|
|
15
|
+
**2. Front-load the fragile.** Check `terrain.md` hotspots. Risky modules go early - fail fast, not in week three.
|
|
16
|
+
|
|
17
|
+
**3. Slice vertically.** Each task delivers something visible and testable end to end ("user submits form, sees it saved"), never a horizontal layer ("build the database layer").
|
|
18
|
+
|
|
19
|
+
**4. Size to 30–90 minutes, PR-sized.** Longer = two tasks. Each task implementable, testable, reviewable without a thousand-line diff.
|
|
20
|
+
|
|
21
|
+
**5. AI components get explicit eval tasks.** "Output validated on 50 real production examples," "fallback tested under model unavailability," "inputs/outputs logging to <destination>" - these are pre-conditions of shipping, in the plan before build starts.
|
|
22
|
+
|
|
23
|
+
**6. Stakeholder touchpoints every 2–3 tasks.** "Show progress to <name from stakeholders.md>." Not ceremony: a customer who sees small wins stays bought in; silence gets filled with doubt.
|
|
24
|
+
|
|
25
|
+
**Acceptance criteria gate:** no task moves to build without written happy-path AND unhappy-path criteria. Can't write them = the task isn't understood; the open question goes to the customer **before** the task starts. Vague criteria surface later as scope creep and rework.
|
|
26
|
+
|
|
27
|
+
## Artifact
|
|
28
|
+
|
|
29
|
+
The plan goes to **`decisions.md`** - always. Build reads the plan from `decisions.md`; anywhere else and the build starts blind.
|
|
30
|
+
|
|
31
|
+
```markdown
|
|
32
|
+
Task N: <outcome, not activity>
|
|
33
|
+
Delivers: <what someone can see/test>
|
|
34
|
+
Accepts: <happy path> / <unhappy path>
|
|
35
|
+
Touches: <files/systems - blast radius declared upfront>
|
|
36
|
+
Risk: <what could go wrong + fallback>
|
|
37
|
+
Verify: <specific check>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Checkpoint
|
|
41
|
+
|
|
42
|
+
Walk the FDE through: sequence + why this order, where the fragile work sits, where the touchpoints land, the acceptance gate on task 1. One question: "Which stakeholder sees the first visible slice, and when?"
|
|
43
|
+
|
|
44
|
+
## Method - estimation (when the sponsor asks "how long, how much?")
|
|
45
|
+
|
|
46
|
+
Every FDE gets asked this in week one. The honest answer is a range, not a number. A single-point estimate is a promise; a range is a professional assessment.
|
|
47
|
+
|
|
48
|
+
**The 3-point method:**
|
|
49
|
+
1. **Best case** - everything goes right, no surprises, team has capacity. This is what the sponsor wants to hear.
|
|
50
|
+
2. **Expected case** - normal friction: one discovery changes the plan, one integration takes longer, one approval cycle stalls. This is what to plan against.
|
|
51
|
+
3. **Worst case** - a major unknown surfaces, a dependency fails, a key person is unavailable. This is what to protect against.
|
|
52
|
+
|
|
53
|
+
**Present as:** "2–4 weeks expected, could stretch to 6 if [named risk]." Never give one number.
|
|
54
|
+
|
|
55
|
+
**The sizing table:**
|
|
56
|
+
|
|
57
|
+
| Slice | Complexity | Dependencies | Unknowns | Estimate (expected) |
|
|
58
|
+
|-------|-----------|--------------|----------|---------------------|
|
|
59
|
+
| _per vertical slice from the plan_ | Low/Med/High | Named | Named | X days/weeks |
|
|
60
|
+
|
|
61
|
+
**Rules:**
|
|
62
|
+
- Estimate in weeks for engagements > 1 month. Days for < 1 month.
|
|
63
|
+
- Add 30% buffer for integration work (it always takes longer).
|
|
64
|
+
- Add 50% buffer for AI/ML work (eval cycles are unpredictable).
|
|
65
|
+
- Name assumptions explicitly: "assumes API docs are accurate", "assumes staging environment exists."
|
|
66
|
+
- Revisit estimates every 2 weeks. An estimate that never updates is fiction.
|
|
67
|
+
|
|
68
|
+
Write estimates to `decisions.md` under `## Sizing`. Include the assumptions - when they break, the estimate changes and the FDE has evidence for the conversation.
|
|
69
|
+
|
|
70
|
+
## Method - migration strategy (when the engagement is "move from X to Y")
|
|
71
|
+
|
|
72
|
+
Migrations are the most common enterprise FDE engagement. The strategy precedes the plan:
|
|
73
|
+
|
|
74
|
+
**Step 1: Classify the migration type.**
|
|
75
|
+
|
|
76
|
+
| Type | What it means | Risk profile |
|
|
77
|
+
|------|---------------|-------------|
|
|
78
|
+
| **Rehost** (lift-and-shift) | Same code, different infrastructure | Low code risk, high ops risk |
|
|
79
|
+
| **Replatform** | Minor code changes to use new platform features | Medium risk, clear scope |
|
|
80
|
+
| **Refactor** | Rewrite components to fit the new architecture | High risk, scope creep magnet |
|
|
81
|
+
| **Replace** | Buy/build new, retire old | Highest risk, requires parallel running |
|
|
82
|
+
| **Retire** | Turn off, nobody uses it | Politically hard, technically easy |
|
|
83
|
+
|
|
84
|
+
**Step 2: Map the dependency graph.** What calls what. What breaks if this moves first. The migration order is the reverse of the dependency chain - leaf nodes first, core last.
|
|
85
|
+
|
|
86
|
+
**Step 3: Define the cutover strategy.**
|
|
87
|
+
- **Big bang** - everything moves at once. Fast but catastrophic on failure. Only for small systems.
|
|
88
|
+
- **Strangler fig** - new traffic to new system, old traffic drains. Safe but slow. Preferred for anything load-bearing.
|
|
89
|
+
- **Parallel run** - both systems run, outputs compared. Expensive but safest for data-critical systems.
|
|
90
|
+
|
|
91
|
+
**Step 4: Write the rollback before the migration starts.** "If we move service X and it fails, we route back to old within [time]." No rollback = no migration.
|
|
92
|
+
|
|
93
|
+
**Step 5: Define success metrics per phase.** Not "migration complete" - that's a project plan. "Error rate same or lower, latency within 10%, zero data loss, team can operate without FDE." Measurable, per service.
|
|
94
|
+
|
|
95
|
+
Write migration strategy to `decisions.md` under `## Migration`. Each service gets a row: type, order, cutover method, rollback, success metric.
|
|
96
|
+
|
|
97
|
+
## When the plan changes mid-engagement
|
|
98
|
+
|
|
99
|
+
Never quietly update tasks. Name the reset: update `reality.md` and `success.md`, one paragraph in `decisions.md` - what changed, why, new sequence. An undocumented reset looks like drift; a documented one looks like the FDE caught something important.
|
|
100
|
+
|
|
101
|
+
## Principles
|
|
102
|
+
|
|
103
|
+
- Plan from success backwards, not from today forwards.
|
|
104
|
+
- Fragile zones early. Fail fast.
|
|
105
|
+
- Every 2–3 tasks, a stakeholder touchpoint. Trust decays without visibility.
|
|
106
|
+
- No written acceptance criteria, no build.
|
|
107
|
+
- Estimates are ranges, not promises. Name the assumptions.
|
|
108
|
+
- Migrations: leaf nodes first, core last. Rollback before cutover.
|