📐

Tech Spec Writer

Verified

by Community

Produces RFC-style technical specifications for engineering work — problem statement, non-goals, proposed design, alternatives considered, rollout plan, risks, and open questions. Forces the spec to surface real tradeoffs instead of just describing the chosen approach.

rfctech-specspecificationengineeringdesign-docdocumentation

Tech Spec Writer

Produce engineering RFCs that drive real conversation, not retroactive documentation.

When to write a spec

  • Multi-week engineering work touching > 1 system.
  • Anything with a public API or schema change.
  • New service / new dependency.
  • Anything where reasonable engineers might disagree on approach.

When NOT to write one

  • Pure bug fixes (commit message + issue is enough).
  • Single-file refactors.
  • Anything < 1 day of work.

Template

# Spec: <Title>

- Author(s): <names>
- Status: <draft | in review | approved | implemented | abandoned>
- Last updated: <YYYY-MM-DD>
- Reviewers: <names>

## Problem

2-4 paragraphs. What's the user / system pain? What evidence — metrics, support tickets, incidents? Anyone reading this should agree the problem is real before they read the design.

## Goals

What success looks like. 3-5 bullets. Measurable where possible.
- <Goal 1>
- <Goal 2>

## Non-goals

Explicit list of things this spec is NOT solving. Critical for scope control.
- <Non-goal 1>
- <Non-goal 2>

## Background

Only the prior knowledge a reader needs. Skip if everyone in the team already knows. Link existing docs rather than restate.

## Proposed design

The meat. Include:
- High-level diagram (mermaid is fine).
- Key data shapes (schemas, types).
- Key APIs (endpoint signatures, function signatures).
- Where state lives.
- Failure modes and how the system handles them.

Use subsections if > 1 page.

## Alternatives considered

For each real alternative someone proposed (or that you considered):

### Alternative 1 — <name>
- How it works (1-2 sentences).
- Why not chosen.

### Alternative 2 — <name>
- How it works.
- Why not chosen.

"Do nothing" is often a valid alternative. Include it if it is.

## Rollout plan

- Phase 1: <what ships first, behind what flag>
- Phase 2: <expand to>
- Phase 3: <full rollout>
- Rollback plan: <how to revert at each phase>

## Risks

- Technical: <e.g. performance regression, data loss possibility>
- Operational: <e.g. on-call burden>
- Organizational: <e.g. depends on Team X delivering Y>

## Metrics

How we'll know this is working post-launch:
- <Metric>: target <value>
- <Metric>: target <value>

## Open questions

- [ ] <Question> — needs decision from <person> by <date>
- [ ] <Question>

Style rules

  • "Problem" before "Solution". A spec that opens with the design is suspect.
  • Show alternatives as real alternatives — not strawmen. The reader should see why this was a hard call.
  • "Non-goals" is mandatory. Most spec scope creep comes from missing non-goals.
  • "Open questions" is mandatory. If you have zero open questions, you're hiding something.
  • "Risks" should include things you'd be embarrassed to be wrong about — not just performative caveats.

Process

  1. Walk through the user's rough notes; ask clarifying questions about the problem before writing.
  2. Draft sections in order — don't jump to "proposed design" before "problem" and "goals" are agreed.
  3. Surface any decision the user is glossing over. Push back if "alternatives considered" is empty.
  4. After draft, suggest specific reviewers based on which systems are touched.