Engineering Decision Frameworks
Engineering teams make many decisions. Some are obvious; many aren't. Without a framework, decisions are made informally — in Slack threads, in conversations, in someone's head — and then forgotten or contested later. Frameworks provide structure: who decides, who's consulted, what's recorded.
This page covers the major frameworks and when each fits.
RFC (Request for Comments)
A document proposing a change. Written by the proposer; commented on by the team; eventually accepted, rejected, or revised.
Structure:
- Summary
- Motivation
- Proposed approach
- Alternatives considered
- Trade-offs and risks
- Decision (after discussion)
When to use:
- Significant technical changes
- Cross-team work
- Decisions where the rationale should be preserved
The Rust language community popularized this in software. Many companies have adopted similar processes.
Length: 2-10 pages typically. Long RFCs lose readers; very short RFCs miss the point.
ADR (Architecture Decision Record)
A short document recording a single architectural decision.
Structure:
- Title
- Status (Proposed, Accepted, Deprecated, Superseded)
- Context (why we needed to decide)
- Decision (what we chose)
- Consequences (what this commits us to and what it precludes)
ADRs are 1-2 pages. They live in the code repository (often `docs/adr/`).
When to use:
- Architecture decisions worth preserving
- "Why is this like this?" questions you'll answer in 6 months
ADRs are write-once-rarely-update. If a decision is superseded, write a new ADR explaining the change.
DACI (Driver, Approver, Contributors, Informed)
A role model for decisions:
- **Driver**: makes the decision happen
- **Approver**: makes the final call
- **Contributors**: provide input
- **Informed**: notified of the outcome
For each meaningful decision, identify who's in each role. Avoids the "who decides" confusion.
Useful for:
- Cross-team decisions
- Decisions involving non-engineering stakeholders
- Anything with potential for "I thought we were deciding together"
RACI (Responsible, Accountable, Consulted, Informed)
Similar to DACI:
- **Responsible**: does the work
- **Accountable**: signs off (one person)
- **Consulted**: provides input before decision
- **Informed**: notified after
Used widely in project management; less common in engineering than DACI.
When to use which
| Situation | Framework |
|-----------|-----------|
| Significant technical change | RFC |
| Architecture decision worth preserving | ADR |
| Cross-team or stakeholder decision | DACI |
| Long-running project with many decisions | All three at different stages |
For day-to-day technical decisions, no framework is needed. Slack thread, code review comment, quick chat.
Levels of formality
The right amount of process scales with stakes:
Trivial decisions
Pick and move on. "Should this method be public or package-private?" Don't write an ADR.
Local technical decisions
Quick discussion in code review or design doc. No formal record needed if the code is the record.
Team-level architecture decisions
ADR. Record for future reference.
Cross-team or strategic decisions
RFC. Discussion across the affected teams. Time-boxed comment period.
Major technical changes
RFC + DACI. Multiple stakeholders; explicit roles.
Skipping levels in either direction is wrong:
- Process for trivial decisions = bureaucracy
- No process for major decisions = chaos
What makes decisions actually good
The framework is structure; the decision quality comes from elsewhere:
Specific options
"Adopt Kubernetes" is not an option. "Migrate the order service to Kubernetes by Q3 with these specific milestones" is. Vague decisions don't constrain action.
Honest trade-offs
Most decisions have downsides. Acknowledge them. The decision that "has no downsides" is rare; usually the trade-offs are hidden, not absent.
Reversibility
Distinguish reversible from irreversible decisions:
- **Reversible**: lightweight process; just decide
- **Irreversible**: heavy process; gather information; consider alternatives
Bezos's "Type 1 vs Type 2" decisions. Most decisions are Type 2 (reversible); spend less time on them.
Time-boxing
Decisions don't take more time because you give them more time. Set a deadline; decide.
Closing
The decision is made; communicate; move on. Reopening every decision because someone wasn't there is a recipe for paralysis.
Common failure patterns
- **Process for everything.** Bureaucracy.
- **No process for anything.** Re-litigation.
- **Long-running open decisions.** Team is blocked.
- **Decisions without recording.** Lost in 6 months.
- **No clear decider.** Group paralysis.
- **Approver overruling without explanation.** Demoralizing.
- **Frameworks as substitutes for thought.** Following templates without engaging.
Further Reading
- [TechnicalLeadershipSkills](TechnicalLeadershipSkills) — Why decisions matter
- [TechnicalProjectManagement](TechnicalProjectManagement) — Where decisions fit in projects
- [TechnicalWritingGuide](TechnicalWritingGuide) — Writing decisions clearly
- [TechnologyRadarProcess](TechnologyRadarProcess) — Tech-decision-specific framework
- [EngineeringLeadership Hub](EngineeringLeadershipHub) — Cluster index