Skill 16 · Vanity Engineering Review
Subchapter 16.2
references/kill-criteria-template.mdMarkdown8 KBView on GitHub
Generate a project-specific version of this template for every system or feature reviewed. The template is divided into sections that must all be completed — a kill criteria framework with gaps is worse than none because it creates false confidence.
When generating kill criteria for a specific project:
[bracketed placeholders] with project-specific valuesBefore writing any code, complete these:
PROJECT: [Name]
OWNER: [Person responsible for the feature]
KILL CRITERIA OWNER: [Different person responsible for enforcement]
START DATE: [Date]
EVALUATION WINDOW: [30/60/90 days — define based on expected adoption curve]
BUDGET CAP: [Monthly cost ceiling in currency]
SUCCESS METRIC: [The one number that justifies this feature's existence]
SUCCESS THRESHOLD: [Minimum acceptable value for the success metric]
MEASUREMENT METHOD: [How the success metric is measured — dashboard URL, query, API]These are non-negotiable. If any of these conditions are met, the component is shut down immediately. No meeting, no discussion, no “let’s give it another week.”
Enforcement mechanism: Automate where possible. For conditions that cannot be automated, the Kill Criteria Owner checks daily during the evaluation window.
| # | Trigger | Detection Method | Auto-Kill? |
|---|---|---|---|
| H1 | Security breach traced to this component | Security monitoring / incident report | YES — immediate rollback |
| H2 | Production incident P1/P0 caused by this component | Incident management system | YES — immediate rollback |
| H3 | Cost exceeds [BUDGET_CAP * 1.5] on any single day | Billing alerts | YES — auto-disable |
| H4 | Zero usage for [30] consecutive days | Usage monitoring dashboard | YES — auto-decommission |
| H5 | Sole maintainer departs and no volunteer within [14] days | HR / team notification | Kill Criteria Owner enforces |
| H6 | [Project-specific catastrophic condition] | [Detection method] | [Yes/No] |
For each auto-kill trigger, implement:
These must exist before the feature ships. If they do not exist, the feature does not ship.
These force a mandatory review meeting within 48 hours of being triggered. The default outcome of the review is KILL. The team must argue for continuation, not against shutdown.
| # | Trigger | Threshold | Review Default |
|---|---|---|---|
| R1 | Success metric below threshold | [METRIC] < [THRESHOLD] for [14] consecutive days | Kill |
| R2 | Maintenance cost exceeds value | > [X] eng-hours/month on unplanned work | Kill |
| R3 | Consecutive sprints with unplanned work | [3] sprints in a row | Kill |
| R4 | Dependency CVE | CVSS >= 7.0 in any dependency introduced by this component | Kill unless patched in 72h |
| R5 | Team velocity impact | Measurable velocity decrease > [15%] since introduction | Kill |
| R6 | Onboarding friction | New team member cannot make a meaningful change within [1 day] | Simplify or kill |
| R7 | [Project-specific degradation signal] | [Threshold] | Kill |
These define success. The feature must meet ALL of these within the evaluation window to earn the right to continue existing. Failure to meet any one criterion triggers a Tier 2 review with default-to-kill.
| # | Criterion | Target | Measurement | Window |
|---|---|---|---|---|
| S1 | Primary success metric | >= [TARGET] for 7 consecutive days | [Dashboard/query] | [30] days |
| S2 | Latency / performance | P95 <= [X ms] for 7 consecutive days | APM monitoring | [30] days |
| S3 | Security | Zero incidents attributable to component | Security monitoring | [30] days |
| S4 | Cost | Under [BUDGET_CAP] for 7 consecutive days | Billing dashboard | [30] days |
| S5 | Bus factor | >= 2 people can independently modify and deploy | Demonstrated (not claimed) | [30] days |
| S6 | Documentation | Exists, validated by non-author, covers ops runbook | Reviewed artifact | [30] days |
| S7 | Dependency health | All deps maintained, no known vulns, upgrade path clear | Audit | [30] days |
| S8 | [Project-specific value criterion] | [Target] | [Measurement] | [Window] |
When all Soft-Go criteria are met for the full evaluation window:
These criteria specifically target vanity engineering recurrence. Include at least 3 in every kill criteria framework:
| # | Criterion | What It Catches |
|---|---|---|
| A1 | No abstraction may be added without 2+ concrete consumers | Premature abstraction |
| A2 | No new dependency without written justification (problem it solves, alternatives considered, maintenance cost accepted) | Framework worship |
| A3 | Any component not modified in [90] days is flagged for deletion review | Code that exists because nobody deletes things |
| A4 | Architecture changes require a “what could be simpler?” section in the RFC | Complexity bias |
| A5 | No technology choice based on “learning opportunity” in production systems | Resume-driven development |
| A6 | Complexity budget: each feature gets a max file/module count proportional to its user value | Over-decomposition |
| A7 | The question “could a junior engineer maintain this?” must be answered in every design review | Intellectual self-indulgence |
Generate this calendar when creating project-specific kill criteria:
Day 0: Kill criteria framework completed, reviewed, signed off
Day 0: Auto-kill mechanisms deployed and tested
Day 1: Feature ships
Day 7: First soft-go checkpoint — are we trending toward targets?
Day 14: Second checkpoint — any Tier 2 triggers tripped?
Day 21: Third checkpoint — trajectory check
Day 30: Soft-go evaluation. All criteria met? Graduate or kill.
Day 90: Post-graduation review — still earning its place?
Day 180: Second post-graduation review — still necessary at all?These are how kill criteria frameworks fail in practice. Guard against each: