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:

When to use:

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:

ADRs are 1-2 pages. They live in the code repository (often docs/adr/).

When to use:

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:

For each meaningful decision, identify who's in each role. Avoids the "who decides" confusion.

Useful for:

RACI (Responsible, Accountable, Consulted, Informed)

Similar to DACI:

Used widely in project management; less common in engineering than DACI.

When to use which

SituationFramework
Significant technical changeRFC
Architecture decision worth preservingADR
Cross-team or stakeholder decisionDACI
Long-running project with many decisionsAll 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:

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:

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

Further Reading