RFC Creation Skill
This skill guides users through creating rigorous RFCs based on principles from four influential software thought leaders:
- •Eric Evans (Domain-Driven Design): Ubiquitous language, bounded contexts, strategic design
- •Martin Fowler (Patterns & Refactoring): Design patterns, evolutionary architecture, incremental change
- •Dave Farley (Continuous Delivery): Deployability, testability, feedback loops
- •Gene Kim (DevOps): Flow, feedback, continuous learning, reducing WIP
When to Use
Trigger conditions:
- •User mentions RFC, "request for comments", or technical proposal
- •User wants to propose a significant architectural change
- •User mentions ADR (Architecture Decision Record)
- •User wants to document a technical decision
- •User is designing a new system or major feature
Initial offer: Offer a structured RFC workflow. Explain that this approach applies principles from DDD, software craftsmanship, and DevOps to ensure proposals are:
- •Clear in domain language (Evans)
- •Incrementally implementable (Fowler)
- •Continuously deployable (Farley)
- •Optimized for flow and feedback (Kim)
RFC Structure
Every RFC follows this structure:
# RFC-[NUMBER]: [TITLE] ## Status [Draft | Proposed | Accepted | Rejected | Superseded] ## Context What forces are at play? What problem are we solving? ## Decision What change do we propose? ## Consequences What are the tradeoffs? What becomes easier/harder? ## Implementation Path How do we get there incrementally?
Stage 1: Domain Discovery (Evans)
Goal: Establish ubiquitous language and bounded context.
Questions to Ask
- •
Domain Language:
- •What domain terms appear in this problem?
- •Are these terms used consistently across the team?
- •What concepts do different teams call by different names?
- •
Bounded Context:
- •What system boundary does this change affect?
- •Which teams own which parts?
- •Where are the context boundaries? (team boundaries, deployment boundaries, linguistic boundaries)
- •
Core vs Supporting Domain:
- •Is this core to competitive advantage, or supporting infrastructure?
- •Should this be built, bought, or outsourced?
Evans Principles to Apply
| Principle | Question to Ask |
|---|---|
| Ubiquitous Language | "Can a domain expert and developer discuss this using the same words?" |
| Bounded Context | "Which system/team owns this concept?" |
| Context Map | "How do systems communicate across boundaries?" |
| Strategic Design | "Is this core domain (build), generic (buy), or supporting (simplest solution)?" |
| Anticorruption Layer | "How do we protect our model from external system pollution?" |
Deliverable
A glossary of domain terms used in the RFC. Every term should be defined explicitly. If a term is ambiguous, call it out.
Stage 2: Design Rigor (Fowler)
Goal: Ensure the design is sound, patterns are appropriate, and change is manageable.
Questions to Ask
- •
Patterns:
- •What design patterns does this proposal use?
- •Are there simpler alternatives?
- •What anti-patterns does this avoid?
- •
Evolutionary Architecture:
- •How does this decision constrain future options?
- •What fitness functions would detect architectural drift?
- •Can this decision be reversed if wrong?
- •
Refactoring Path:
- •How do we migrate from current state to proposed state?
- •Can we do it in small, safe steps?
- •What seams exist for incremental change?
Fowler Principles to Apply
| Principle | Question to Ask |
|---|---|
| Refactoring | "Can we make this change in small, reversible steps?" |
| Patterns | "What well-known pattern solves this problem?" |
| Technical Debt | "Are we creating debt? Is it conscious and documented?" |
| Fitness Functions | "How would we detect if this architecture degrades?" |
| Last Responsible Moment | "Do we need to decide this now, or can we defer?" |
| Strangler Fig | "Can we replace incrementally rather than big-bang?" |
Deliverable
An "Alternatives Considered" section that documents:
- •Options explored
- •Why each was rejected (or chosen)
- •Reversibility assessment (1-10 scale)
Stage 3: Deployability Check (Farley)
Goal: Ensure the proposal supports continuous delivery.
Questions to Ask
- •
Testability:
- •How will this be tested?
- •Can it be tested in isolation?
- •What are the test boundaries?
- •
Deployability:
- •Can this be deployed independently?
- •What feature flags or toggles are needed?
- •How do we roll back if it fails?
- •
Feedback Loops:
- •How quickly will we know if this works?
- •What metrics/alerts will we add?
- •What does "done" look like?
Farley Principles to Apply
| Principle | Question to Ask |
|---|---|
| Trunk-Based Development | "Can this be merged to main frequently without breaking?" |
| Feature Toggles | "Can we deploy disabled and enable gradually?" |
| Testing Pyramid | "Do we have the right balance of unit/integration/e2e tests?" |
| Deployment Pipeline | "How does this change our build/test/deploy pipeline?" |
| Observability | "How will we know if this is working in production?" |
| Rollback Strategy | "How quickly can we undo this if it fails?" |
Deliverable
A "Deployment Strategy" section that includes:
- •Feature flag plan
- •Rollout phases
- •Rollback procedure
- •Success metrics
Stage 4: Flow Optimization (Kim)
Goal: Ensure the proposal improves flow and reduces friction.
Questions to Ask
- •
Flow:
- •Does this reduce or increase WIP (Work in Progress)?
- •Does this remove a bottleneck or create one?
- •What handoffs does this create or eliminate?
- •
Feedback:
- •How will teams learn if this works?
- •What telemetry/monitoring is needed?
- •How do we detect problems early?
- •
Learning:
- •What experiments does this enable?
- •How do we measure success?
- •What hypotheses are we testing?
Kim Principles to Apply (The Three Ways)
| Way | Principle | Question |
|---|---|---|
| First Way (Flow) | Reduce batch size | "Can we deliver smaller increments?" |
| First Way (Flow) | Reduce WIP | "Does this add to work-in-progress?" |
| First Way (Flow) | Remove constraints | "What bottleneck does this address?" |
| Second Way (Feedback) | Amplify feedback | "How quickly will we know if this fails?" |
| Second Way (Feedback) | Shift left | "Can we catch problems earlier?" |
| Third Way (Learning) | Enable experimentation | "What can we learn from this?" |
| Third Way (Learning) | Foster blameless culture | "How do we make it safe to fail?" |
Deliverable
An "Impact on Flow" section that includes:
- •Current bottlenecks addressed
- •New bottlenecks created (if any)
- •WIP impact assessment
- •Learning/experimentation opportunities
Stage 5: Synthesis & Review
Goal: Combine insights into a coherent RFC.
RFC Template
# RFC-[NUMBER]: [TITLE] **Author:** [name] **Date:** [date] **Status:** Draft ## Summary [One paragraph: what we're proposing and why] ## Context ### Problem Statement [What forces are at play?] ### Domain Context [Bounded context, ubiquitous language, key terms] ### Current State [How things work today] ## Decision ### Proposed Change [What we're proposing] ### Design Details [Patterns used, architecture decisions] ### Alternatives Considered | Option | Pros | Cons | Reversibility | |--------|------|------|---------------| | A | ... | ... | 8/10 | | B | ... | ... | 3/10 | ## Consequences ### Benefits [What becomes easier] ### Drawbacks [What becomes harder] ### Technical Debt [Any debt we're consciously taking on] ## Implementation Path ### Deployment Strategy - Feature flags: - Rollout phases: - Rollback procedure: ### Migration Steps 1. [First small step] 2. [Second step] 3. [Continue...] ### Success Metrics [How we'll know this worked] ### Impact on Flow - Bottlenecks addressed: - WIP impact: - Feedback loops added: ## Open Questions [What we still need to figure out] ## References - [Related RFCs] - [External resources]
Quality Checklist
Before finalizing, verify:
Evans (Domain)
- • Ubiquitous language defined and consistent
- • Bounded context clearly identified
- • Context map shows system relationships
- • Core vs supporting domain classified
Fowler (Design)
- • Patterns explicitly named and justified
- • Alternatives documented with tradeoffs
- • Reversibility assessed
- • Incremental migration path defined
Farley (Delivery)
- • Test strategy defined
- • Feature flag/toggle plan included
- • Rollback procedure documented
- • Pipeline changes identified
Kim (Flow)
- • WIP impact assessed
- • Bottlenecks identified
- • Feedback loops defined
- • Success metrics measurable
Anti-Patterns to Avoid
| Anti-Pattern | Problem | Solution |
|---|---|---|
| Big Bang | All-or-nothing deployment | Break into incremental steps |
| Ivory Tower | Designed without implementer input | Include engineers from affected teams |
| Analysis Paralysis | Infinite design phase | Set decision deadline, prototype |
| YAGNI Violation | Building for hypothetical future | Solve today's problem only |
| Unclear Ownership | No one responsible | Name explicit owner and reviewers |
| Missing Rollback | No way to undo | Always define rollback procedure |
Workflow Summary
- •Domain Discovery - Establish language and boundaries (Evans)
- •Design Rigor - Ensure sound patterns and incremental path (Fowler)
- •Deployability Check - Verify continuous delivery compatibility (Farley)
- •Flow Optimization - Ensure improved flow and feedback (Kim)
- •Synthesis - Combine into coherent RFC document
Each stage produces specific deliverables. The final RFC should explicitly address all four perspectives.
Tips
- •Start with the problem, not the solution
- •Name patterns explicitly - don't reinvent wheels
- •Every decision should be reversible or explicitly acknowledge lock-in
- •If you can't deploy incrementally, rethink the approach
- •Measure everything - hunches aren't enough
- •Small batches always beat big bangs