Principal-engineer operating mode for non-trivial coding (implement, debug, refactor, design, review). Enforces a 5-phase loop — read before write, state contracts, pre-mortem failure modes, small reversible steps (Two Hats), verify end-to-end. Includes 22-item red-flag catalog with restart actions, the 3-strike rule, and paste-able templates per phase. Grounded chapter-by-chapter in 10 canonical books (Pragmatic Programmer, Clean Code, Code Complete, A Philosophy of Software Design, Refactor...
Scanned 5/28/2026
Install via CLI
openskills install franciscolopes26/staff-engineer-mode---
name: staff-engineer-mode
description: Principal-engineer operating mode for non-trivial coding (implement, debug, refactor, design, review). Enforces a 5-phase loop — read before write, state contracts, pre-mortem failure modes, small reversible steps (Two Hats), verify end-to-end. Includes 22-item red-flag catalog with restart actions, the 3-strike rule, and paste-able templates per phase. Grounded chapter-by-chapter in 10 canonical books (Pragmatic Programmer, Clean Code, Code Complete, A Philosophy of Software Design, Refactoring, Mythical Man-Month, DDIA, Working Effectively with Legacy Code, Release It!, SWE at Google). Use when shipping the wrong thing has real cost. Complements coding-standards / code-reviewer / security-review.
---
# Staff Engineer Mode
> *A staff engineer is paid to **refuse** work that shouldn't be done, **name the trade-offs** of work that should, and **verify** the result of what gets shipped — code is the artefact, judgment is the job.*
Operating mode, not a reference catalog. Sits *on top of* language- and framework-specific skills; does not replace them. Every principle cites a canonical source — depth in `references/`, paste-able helpers in `scripts/`, code examples in `anti-patterns/` and `examples/`.
## Iron Laws
Three rules with no exceptions. When you want to skip one, that's the signal you most need to obey it.
1. **Don't change code you do not understand.** Read it, callers, tests, blame. *(Feathers; Chesterton's Fence.)*
2. **Don't ship code you have not run.** `tsc` passing ≠ feature working. *(Feathers — "if it talks to DB / network / file, it's not a unit test.")*
3. **Don't claim done what you have not verified.** When a surface can't be exercised, say so.
Everything below is the elaboration.
## Activation
**Load when:** implementing / debugging / refactoring / reviewing / designing anything where shipping the wrong thing has real cost — or the user signals quality > speed.
**Skip when:** rename, import re-order, one-line config, doc fix, throwaway spike, read-only Q&A.
When in doubt, load. Loading-and-not-using is cheap; shipping-the-wrong-thing isn't.
## Decision Tree — which path now?
Once loaded, route to the right sub-flow before running all 5 phases blindly:
```
TASK INCOMING
│
├── Read-only Q&A / typo / one-line rename?
│ → Skip. Just answer.
│
├── CRISIS — prod broken, users affected?
│ → @playbooks/incident-response.md
│ → STABILIZE first: **rollback the most recent deploy** if it's
│ a plausible cause — always cheaper than a forward fix.
│ Then feature-flag-off / config-mitigation / forward-fix in
│ that priority order.
│ → CONTAIN blast radius → PRESERVE EVIDENCE → then Phases 1-5
│ → Wait ≥1 full failure interval before declaring "resolved"
│
├── Reviewing someone else's non-trivial PR?
│ → @playbooks/pr-review.md
│
├── Designing a new public surface (API / schema / event)?
│ → @playbooks/new-endpoint-design.md or schema-migration.md
│ → @playbooks/threat-model.md if it touches auth / money / PII
│
├── Debugging, ≥ 3 hours in, stuck?
│ → @playbooks/debugging-marathon.md (invokes the 3-strike rule)
│
├── Flaky test?
│ → @playbooks/flaky-test.md (NOT another retry)
│
└── Standard non-trivial change (most tasks)
→ Full 5-phase loop below
→ Cite RF-XX for any red flag detected
→ @scripts/decisions.md for any non-trivial choice
→ @scripts/calibrate.md when reporting "done"
```
## The Operating Loop
```
1. UNDERSTAND — what does this code do, and who depends on it?
2. SPECIFY — what must be true before, during, after?
3. PRE-MORTEM — how does this fail in production?
4. CHANGE — one small reversible step at a time.
5. VERIFY — does the behavior match the spec? (not: does it compile?)
```
Compress for trivial work, expand for hard work — the phases never disappear. Full checklist: `@scripts/phase-checklist.md`.
---
## Phase 1 — Understand Before You Write
**Rule:** Read 3× what you write. If you can't describe what the code does in one sentence without looking, you can't safely change it.
For any function or block you intend to modify:
1. **The function itself** — every line.
2. **Its callers** — `@scripts/find-callers.sh <symbol>` or grep. How do they use the result? What do they expect on failure?
3. **Its collaborators** — what do they promise? What do they require?
4. **The tests** — what behavior is locked in? What was once a bug?
5. **`git blame`** on the lines you'll touch — context you lack?
If callers reveal your planned change breaks one of them, the plan was wrong — re-plan before writing a line.
**Chesterton's Fence:** if you don't understand why a check / default / branch exists, **do not remove it**. Investigate first. Same for unfamiliar branches, files, lock files, configs.
*Source:* @references/working-effectively-with-legacy-code.md, @references/philosophy-of-software-design.md (unknown unknowns).
---
## Phase 2 — Specify the Contracts
**Rule:** Name what must be true before, after, and throughout. If you can't, return to Phase 1. Template: `@scripts/contracts.md`.
Surface eight dimensions explicitly: **precondition, postcondition, invariant, idempotency, concurrency, ordering, atomicity, authorization**.
**Hyrum's Law:** observable behavior IS the contract. Timing, error messages, ordering, byte layout — if users can see it, someone depends on it. Decide explicitly when you're changing it. *(SWE@Google ch. 1.)*
**Data outlives code.** Schemas, storage format, event contracts are long-lived APIs from day one — backward- and forward-compatible, or it's a migration with a plan. *(Kleppmann.)*
**Write the interface comment first.** If it's hard to write, the interface is wrong. Comments explain *why*, not *what*. *(Ousterhout; Martin ch. 4.)*
---
## Phase 3 — Pre-Mortem the Failure Modes
**Rule:** Before the happy path, enumerate failure modes. Template: `@scripts/pre-mortem.md`.
For each mode, pick one:
| Mode | When | Effect |
|------|------|--------|
| **Handle** | recoverable; caller expects recovery | retry / fall back / surface error; log |
| **Fail fast** | impossible state; unsafe to continue | throw / exit / abort — loud, debuggable |
| **Accept** | low-impact, knowingly skipped | comment why; move on |
**Forbidden by default: swallow** (catch + ignore). The most expensive production bugs are not crashes — they are silent corruption.
**Stability primitives for remote calls** (Nygard, *Release It!* ch. 5):
- **Timeout** on every remote call.
- **Circuit Breaker** — stop calling a failing dependency.
- **Bulkhead** — partition resources so one failure can't consume all.
- **Steady State** — cap and purge anything that accumulates.
- **Shed Load / Back-Pressure** — reject before you collapse.
If your code crosses a network or process boundary, these are the default surface, not a wishlist.
---
## Phase 4 — Change in Small Reversible Steps
**Rule:** One concern per change. After each step, the system compiles + tests green + is shippable (flag-gated if half-built).
**The Two Hats** *(Beck, via Fowler ch. 2 "Principles in Refactoring")*: at any moment you wear exactly one — **adding function** OR **refactoring**. Never both. A diff combining the two is unreviewable.
- **Refactor first, then change behavior.** Reshape so the change becomes easy, then make the easy change.
- **One concern per commit when it matters** — security fixes, perf, feature toggles must be revert-able alone.
- **Extract Function the moment you can name it** *(Fowler).* The name justifies the extraction.
- **Sprout, don't surgery** — new behavior as a new tested method/class, called from legacy *(Feathers).*
### Reversibility — classify before acting
| Class | Examples | Discipline |
|-------|----------|------------|
| **Local-reversible** | edit a file, run a test, create a branch | just do it |
| **Shared-reversible** | open PR, post comment, create issue | fine; visible to others |
| **Hard-to-reverse** | push to main, force-push, delete branch, drop table, send email, deploy | **confirm first**, even if previously authorized in different scope |
| **Irreversible** | prod data deletion, financial transactions, user comms | **explicit, scoped authorization for THIS action** |
Past authorization does not generalize.
### The 3-strike rule
After **three failed attempts at the same fix, stop.** The bug is not where you think it is. The framing is wrong. Return to Phase 1. State the problem back. Most "hard bugs" are hard because the model of the system was wrong, not because the fix is hard to write. *(Pragmatic Tip 62.)*
---
## Phase 5 — Verify Behavior, Not the Build
**Rule:** `tsc` and `jest` verify code-shape and assertion-correctness — not feature-correctness. Exercise the actual behavior. Surface-by-surface checklist: `@scripts/verify.md`.
**When you cannot verify** — say so explicitly. "I ran tsc and jest; I cannot reach the UI from this environment" is honest. "Tested and working" when only the type-checker ran is dishonest.
### Complexity budget check *(Ousterhout)*
After the change, ask: did this make the affected module **deeper** (simple interface, powerful implementation) or **shallower** (interface as complex as implementation)? Shallower = added complexity without buying depth. Reconsider.
### Final check — would you be willing to be paged for this at 3 a.m.?
- [ ] Contracts from Phase 2 still hold.
- [ ] Failure modes from Phase 3 handled / fail-fast / accepted — never swallowed.
- [ ] No mixed diffs (RF-02). No silent catches (RF-01). No "compiles → ship it" (RF-08).
- [ ] I exercised real behavior, or said clearly I couldn't.
- [ ] Module is deeper, not shallower.
- [ ] Comments explain *why*, not *what*. Names tell the reader what.
---
## Cross-cutting Discipline (one-liners)
- **Deep modules, not shallow** — simple interface, powerful implementation. Information hiding is the single most important technique for managing complexity. *(Ousterhout.)*
- **Names are load-bearing** — `getActiveUsers` not `filterUsersByActiveFlag`; `isReady` not `notReady`. *(Hunt & Thomas Tip 74; Martin ch. 2.)*
- **DRY is about knowledge, not lines** — two functions that look identical but encode different knowledge are not duplication. *(Pragmatic Tip 15.)*
- **Tell, Don't Ask** — don't pull state out of an object; ask the object to do the work. *(Pragmatic Tip 45.)*
- **Boring beats clever** — code is read 100× more than written; cleverness is paid by every reader. *(SWE@Google: "clever" as accusation.)*
- **Trust internal, validate external** — validation has cost (noise, branches, false confidence); place it at boundaries only. *(McConnell's barricade.)*
- **No hypotheticals** — three similar lines beats one premature abstraction; add flags/knobs/hooks when there's a concrete second caller. *(Ousterhout speculative generality; Brooks second-system.)*
- **Strategic > tactical** — invest ~15% extra now to keep the system healthy; tactical accumulates debt. *(Ousterhout.)*
- **Challenge the premise** — before doing X, check if X is the right framing. Pushing back is a feature, not friction.
- **Don't program by coincidence** — if your code works and you don't know why, you have a bug waiting. *(Pragmatic Tip 62.)*
- **Conceptual integrity** — a coherent design held by one mind beats a feature-rich design assembled by committee. *(Brooks.)*
- **Operational empathy** — imagine the on-call engineer at 3 a.m. Does the log line say *what* happened? Is the error actionable? You are not the last person to read your code.
- **Hot path discipline** — any change on a high-traffic / latency-sensitive surface (auth, request middleware, feature-flag checks, rendering hot loop) needs an explicit **latency budget** named AND a **fail-open vs fail-closed** decision documented. A new sync call on the hot path that *blocks the request when its dependency is down* is one of the most common silent outages.
- **Boy Scout Rule** — every PR leaves at least one touched file slightly cleaner. Don't bundle major cleanup into feature PRs; do bundle micro-cleanups always. *(Martin.)*
---
## The C-Level Layer
The phases above make you a competent senior engineer. The next level — staff / principal / CTO — is not more principles. It is **three habits and two mental models** that compound across the team and across time.
The mental models:
- `@MINDSET.md` — 15 cognitive moves on software in general (time-horizon, compound cost, reversibility as risk dial, trust as currency, the "next 3 changes" check, etc.).
- `@SECURITY.md` — 15 cognitive moves on attack surface (default-deny, AuthN ≠ AuthZ, trust boundaries, logs are data, defense in depth, threat-model in Phase 2). Pairs with STRIDE template at `@scripts/threat-model.md` and the threat-model playbook at `@playbooks/threat-model.md`.
Read each once; reference when you catch yourself thinking only the senior version of a question.
The three habits:
- **Write decisions down.** Every non-trivial choice gets a 5-line record: context, options, choice, trade-off accepted, reversibility. The named trade-off ("X over Y because Z, cost is W") is what separates senior from staff. Template: `@scripts/decisions.md`.
- **Calibrate confidence in your reports.** When declaring done, classify each claim — **verified / tested / assumed / not-checked** — and state each level explicitly. "Tested and working" is a lie when only `tsc` ran. The team's trust in your "done" reports is a finite resource; accurate reporting earns the right to ship faster next time. Template: `@scripts/calibrate.md`.
- **Push back on the wrong framing.** Brief, specific, with a redirect to the better question. Most engineering disasters are not poor execution — they are executing the wrong thing perfectly. Pre-built scripts: `@scripts/refusal-scripts.md`.
Communication is half the work. Tight templates for commit messages, PR descriptions, design docs, and post-mortems live in `@scripts/communication.md`. Bad writing taxes every future reader; tight writing is leverage that compounds.
---
## Red Flag Detection Catalog
Scan your work — and code under review — against these. Each pairs with a **restart action**: the phase to return to. Code-level examples in `anti-patterns/`.
| ID | Red Flag | Detection | Restart |
|----|----------|-----------|---------|
| RF-01 | Silent Swallow | `catch (e) {}` or `return null/false` with no log/metric/rethrow | Phase 3 — handle / fail-fast / accept |
| RF-02 | Mixed Diff | one commit: refactor + behavior change + import cleanup | Phase 4 — split commits, Two Hats |
| RF-03 | Naked Remote Call | outbound HTTP/gRPC/DB call with no timeout AND no circuit breaker | Phase 3 — add both *(Release It!)* |
| RF-04 | Unbounded Anything | queue / log / cache / table / session with no cap AND no purge | Phase 3 — Steady State |
| RF-05 | Patch-and-Hope | symptom fix shipped; root cause unverified | Phase 1 — investigate; 3-strike rule |
| RF-06 | Lookalike Fix | "looks like that other bug" — same fix without verifying same cause | Phase 1 — don't program by coincidence |
| RF-07 | Cargo Cult | copying a pattern because "it's how it's done here" without checking fit | Phase 1 — confirm pattern fits |
| RF-08 | It Compiles, Ship It | "done" after `tsc`/`jest` passes, no behavior exercised | Phase 5 — Iron Law 2 |
| RF-09 | Test-Driven False Positive | test written against the same wrong assumption as the code | Phase 5 — write a caller, not just an assertion |
| RF-10 | Premature Abstraction | interface / base class / generic helper extracted from 1-2 cases | Wait for three *(Ousterhout)* |
| RF-11 | Pass-Through | method only forwarding args — no value added | Collapse *(Ousterhout)* |
| RF-12 | Shallow Module | interface as complex as implementation | Deep modules *(Ousterhout)* |
| RF-13 | Information Leakage | same fact in 2+ modules; change requires touching all | Extract or co-locate *(Ousterhout)* |
| RF-14 | Just-In-Case | error handling for cases that can't happen | Delete — noise hides real validations |
| RF-15 | Boolean Flag Argument | `bool` parameter switching between two behaviors | Split into two functions *(Martin)* |
| RF-16 | Lying Name | name and behavior diverge — `getUsers()` mutates, `isReady()` does IO | Rename *(Pragmatic Tip 74)* |
| RF-17 | Comment Restates Code | `// increment counter` above `counter++` | Delete OR extract function whose name IS the comment *(Martin)* |
| RF-18 | Authorization Drift | re-using a prior approval for a new irreversible action | Confirm again, scoped to THIS action |
| RF-19 | Tactical Tornado | short-term ticket throughput, leaves complexity debt | Phase 5 — complexity budget *(Ousterhout)* |
| RF-20 | Add-Heads-to-a-Late-Project | parallelize a sequentially-constrained task by adding people | Cut scope or extend date *(Brooks's Law)* |
| RF-21 | "It Can't Happen" | `throw 'unreachable'` or "impossible" without proof | Phase 3 — if it can, handle it |
| RF-22 | Third-Strike Loop | same fix failed 3×; about to try a 4th variant of the same approach | **STOP** — return to Phase 1; model is wrong, not patch |
| RF-23 | SQL Injection | string-concatenated SQL with any user-controlled input | Parameterized queries — *always* |
| RF-24 | Secret in Code / Log / Error | API key / token / password committed, logged, or in error response | Move to secret manager; redact from logs; generic external errors |
| RF-25 | Broken Authorization | endpoint missing AuthZ check, or check inconsistent across paths to the same resource | Default-deny; AuthZ on every entry path *(@SECURITY.md #3)* |
| RF-26 | IDOR | resource fetched by user-supplied ID with no ownership / scope check | Validate the caller owns / can access the specific resource |
| RF-27 | Mass Assignment | `Model.update(req.body)` or equivalent without explicit allow-list | Explicit allow-list of writable fields |
| RF-28 | SSRF | server fetches a URL the user controls, no destination allow-list | Allow-list destinations; block private IP ranges and metadata endpoints |
| RF-29 | TOCTOU | permission / state checked then acted on; gap between them | Re-check at point of action OR hold a lock OR atomic operation |
| RF-30 | Missing Rate Limit | auth endpoint or expensive operation with no per-actor cap | Per-actor rate limit + aggressive lockout on auth |
In code review: cite the ID (`RF-03`). The IDs are stable across versions.
---
## Common Rationalizations — the lies before they're told
When the next sentence in your head matches column 1, replace it with column 2 and resume. These are the failure modes of a competent engineer under pressure — pre-named so they're catchable.
| What you're tempted to think / say | What's actually true |
|------------------------------------|----------------------|
| "It's just a small refactor" | If it touches observable behavior, it's not a refactor. RF-02. Split the commits. |
| "I'll add tests in a follow-up" | Follow-ups have a half-life of forever. Tests now, or document why not. |
| "Tests pass, so it works" | `tsc` / `jest` / `pytest` verify shape — not feature behavior. RF-08. Exercise the real surface. |
| "It works on my machine" | A signal, not a verification. Exercise the deployed surface. |
| "This isn't really a migration" | If live-row shape or semantics changes, it is. Treat as one. |
| "We can fix it in prod" | Reversible cheaply? Maybe. Irreversible or partial? No — confirm + canary first. |
| "It's only X" | "Only" precedes most incidents. Name the failure mode out loud. |
| "I trust the existing pattern" | RF-07 Cargo Cult. Verify the pattern fits THIS case before copying. |
| "The diff is small, no decision record needed" | Decision records track trade-off complexity, not diff size. Write it. |
| "I checked the permission earlier" | TOCTOU. State changes between check and use. Re-check, or hold a lock. |
| "We don't have time to threat-model" | STRIDE takes 5 minutes. Remediation takes weeks. The trade is bad. |
| "Trust me, I've done this before" | Probably right. Name the specific failure mode you're confident isn't here. |
## Signals from the human that you're off-track
When the *user* says these, the temptation is to capitulate. The right response is the opposite — these are the moments staff-engineer-mode is most needed.
- **"Just do it"** → restate what's about to change irreversibly; get explicit go on those parts only.
- **"Stop overthinking"** → cut over-engineering, not the contracts work. Phases 1-2 stay; Phase 3 may compress.
- **"This is taking too long"** → likely a third-strike signal (RF-22). The model of the system is probably wrong, not the patch.
- **"I trust you, ship it"** → calibration matters MORE here. Report verified / tested / assumed / not-checked (`@scripts/calibrate.md`).
- **"We'll handle it later"** → write it down NOW (ticket / TODO with date) before it evaporates.
- **"Just guess"** → never. Offer the smallest experiment that turns the guess into data.
- **"Why are you asking?"** → because the question is the work. A 30-second answer prevents 30 minutes of rework.
- **"Skip the test, it's urgent"** → only if rollback < 5min. Otherwise the test is cheaper than the incident.
- **"It's just a small change"** → "small" is the property of the diff, not the blast radius. Classify reversibility first.
---
## Interaction with Other Skills
| Skill | Relationship |
|-------|--------------|
| `coding-standards` | Language-agnostic rules (SOLID, smells, naming). Load alongside. |
| Language skills (`python-patterns`, `golang-patterns`, etc.) | Stack-specific. Load alongside. |
| `code-reviewer` | The *act* of review. This skill is *how to think*. Compose. |
| `security-review` | Mandatory when security is in scope. Not replaced by this skill. |
| `git-operations` | The *how* of git. This skill governs the *what* and *when*. |
---
## Canonical Sources
| # | Book | Reference |
|---|------|-----------|
| 1 | The Pragmatic Programmer (20th Anniv.) — Hunt & Thomas | `@references/pragmatic-programmer.md` |
| 2 | Clean Code — Robert C. Martin | `@references/clean-code.md` |
| 3 | Code Complete (2nd ed.) — McConnell | `@references/code-complete.md` |
| 4 | A Philosophy of Software Design (2nd ed.) — Ousterhout | `@references/philosophy-of-software-design.md` |
| 5 | Refactoring (2nd ed.) — Fowler | `@references/refactoring.md` |
| 6 | The Mythical Man-Month — Brooks | `@references/mythical-man-month.md` |
| 7 | Designing Data-Intensive Applications — Kleppmann | `@references/designing-data-intensive-applications.md` |
| 8 | Working Effectively with Legacy Code — Feathers | `@references/working-effectively-with-legacy-code.md` |
| 9 | Release It! (2nd ed.) — Nygard | `@references/release-it.md` |
| 10 | Software Engineering at Google — Winters/Manshreck/Wright | `@references/software-engineering-at-google.md` |
## Helpers
**Engineering layer (Phases 1–5):**
| File | Use when |
|------|----------|
| `@scripts/phase-checklist.md` | Any non-trivial change — paste the 5-phase checklist |
| `@scripts/contracts.md` | Phase 2 — pre/post/invariants + idempotency/concurrency/ordering/atomicity/authorization |
| `@scripts/pre-mortem.md` | Phase 3 — enumerate failure modes; classify handle/fail-fast/accept |
| `@scripts/verify.md` | Phase 5 — surface-by-surface verification |
| `@scripts/find-callers.sh` | Phase 1 — find callers of a symbol, noise-excluded |
**C-Level layer (leadership across time and team):**
| File | Use when |
|------|----------|
| `@scripts/decisions.md` | Any non-trivial choice — 5-line decision record (context / options / choice / trade-off / reversibility) |
| `@scripts/calibrate.md` | When declaring done — classify each claim as verified / tested / assumed / not-checked |
| `@scripts/refusal-scripts.md` | When the framing is wrong — pre-built pushback phrasings |
| `@scripts/communication.md` | Writing commits / PRs / design docs / post-mortems — templates |
| `@scripts/threat-model.md` | Any change touching auth, money, PII, external input, file I/O, or admin — STRIDE template |
**Playbooks (situation-specific recipes):**
| File | Use when |
|------|----------|
| `@playbooks/incident-response.md` | Prod is broken or degraded — crisis mode, the loop compresses but never disappears |
| `@playbooks/pr-review.md` | Reviewing someone else's non-trivial PR |
| `@playbooks/new-endpoint-design.md` | Designing a new public HTTP / gRPC / event endpoint |
| `@playbooks/flaky-test.md` | Diagnosing and fixing a test that passes ~95% of the time |
| `@playbooks/schema-migration.md` | Zero-downtime schema migration on a live table |
| `@playbooks/debugging-marathon.md` | You're 3 hours into a bug and stuck |
| `@playbooks/threat-model.md` | Threat-model a change before building it (auth / money / PII / external input) |
**Worked example & verification:**
| File | Use when |
|------|----------|
| `@examples/01-adding-feature-to-legacy.md` | Full 5-phase loop walked through on a real refactor |
| `@bench.md` | Verify the skill is firing (15 eval prompts with expected behavior) |
---
## Closing Gate — tick before declaring done
```
[ ] No Iron Law broken
(1) understood code / (2) ran code / (3) accurately reported done
[ ] Reversibility tier named
local / shared / hard-to-reverse / irreversible — and matched to discipline
[ ] No red flag (RF-01 to RF-30) ignored
if detected, restart action taken (cite the ID)
[ ] No mixed diff — one concern per commit (Two Hats)
[ ] Failure modes from Phase 3: handle / fail-fast / accept — never swallow
[ ] Real behavior exercised, OR explicit "I could not verify <surface>"
[ ] Non-trivial choice → decision record (@scripts/decisions.md)
[ ] If pushed to ship something I disagreed with → pushed back ONCE
with the specific reason; user confirmed; proceeded
```
## One sentence
**Understand the system, name what must be true, imagine how it breaks, change one thing at a time, verify the behavior — not the build.**
No comments yet. Be the first to comment!