Writing RFCs
RFC Structure
# RFC: [Title]
**Author:** [Name]
**Status:** Draft | In Review | Accepted | Rejected
**Created:** YYYY-MM-DD
**Updated:** YYYY-MM-DD
## Summary
One paragraph explanation of the proposal.
## Motivation
Why are we doing this? What problem does it solve?
- Problem statement
- Current pain points
- Business impact
## Detailed Design
### Architecture Changes
```php
// Code examples
interface NewServiceInterface
{
public function process(array $data): Result;
}
Database Changes
-- New tables or schema modifications
CREATE TABLE vendor_feature (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
status ENUM('active', 'inactive') DEFAULT 'active'
);
Configuration Changes
<!-- New XML configuration needed -->
<config>
<type name="Vendor\Feature\Service">
<arguments>
<argument name="config" xsi:type="object">ConfigInterface</argument>
</arguments>
</type>
</config>
Alternatives Considered
Option A: [Name]
- Pros: ...
- Cons: ...
Option B: [Name]
- Pros: ...
- Cons: ...
Migration Strategy
How do we get from current state to new state?
Rollback Plan
What if something goes wrong?
Testing Strategy
How do we verify this works?
Timeline
| Phase | Duration | Owner |
|---|---|---|
| Design | 1 week | Author |
| Implementation | 2 weeks | Team |
| Testing | 1 week | QA |
| Deployment | 1 day | DevOps |
Open Questions
- Question 1
- Question 2
## RFC Process
- Author writes draft RFC
- Share with team for feedback
- Address comments
- Technical review meeting
- Decision: Accept/Reject/Revise
- Implementation begins
- RFC archived as decision record
Technical Proposals
Proposal Template
# Technical Proposal: [Feature Name]
## Executive Summary
2-3 sentences for leadership. What, why, impact.
## Background
Context and history. Why now?
## Problem Statement
Clear problem definition:
- Current situation
- Desired situation
- Gap between them
## Proposed Solution
### High-Level Approach
Architecture diagram or description.
### Implementation Details
#### Phase 1: [Name]
**Goal:** What we achieve
**Effort:** Estimated hours
**Risk:** Low/Medium/High
#### Phase 2: [Name]
...
### Technical Specifications
```php
// API contracts
public interface FeatureInterface
{
public function execute(Request $request): Response;
}
Cost-Benefit Analysis
Costs:
- Development: 80 hours
- Infrastructure: $500/month
- Maintenance: 10 hours/month
Benefits:
- Reduced checkout time: 40%
- Increased conversion: 2%
- Reduced support tickets: 30%
ROI: 3 months
Risk Assessment
| Risk | Probability | Impact | Mitigation |
|---|---|---|---|
| Performance regression | Medium | High | Load testing |
| Data migration issues | Low | High | Incremental migration |
Success Metrics
- Metric 1: Target value
- Metric 2: Target value
Dependencies
- Team training required
- Vendor coordination needed
- Infrastructure changes
Recommendation
Clear ask: Approve/Reject/Defer
## Proposal Tips
- Lead with business impact
- Use data to support claims
- Acknowledge trade-offs
- Provide clear recommendation
- Include rollback plan
- Keep executive summary short
Decision Documents
Decision Record Template
# Decision: [Title]
**Date:** YYYY-MM-DD
**Status:** Proposed | Accepted | Deprecated | Superseded by [link]
**Deciders:** [Names]
## Context
What is the situation that requires a decision?
## Decision
What did we decide?
## Rationale
Why did we decide this? What factors influenced us?
## Consequences
### Positive
- Benefit 1
- Benefit 2
### Negative
- Drawback 1
- Drawback 2
### Risks
- Risk 1
## Alternatives Considered
| Alternative | Pros | Cons | Decision |
|-------------|------|------|----------|
| Option A | ... | ... | Rejected: reason |
| Option B | ... | ... | Rejected: reason |
| Option C | ... | ... | Accepted |
## Links
- [Related RFC](link)
- [Implementation PR](link)
## Notes
Additional context or follow-up items.
ADR (Architecture Decision Record)
# ADR-001: Use Repository Pattern for Data Access
## Status
Accepted
## Context
Our application needs consistent data access patterns.
Current code mixes direct SQL with ORM.
## Decision
We will use the Repository Pattern for all data access.
## Consequences
+ Consistent data access
+ Easy to test
+ Can swap implementations
- More classes to maintain
- Learning curve for team
Decision Log Structure
docs/
decisions/
001-use-repository-pattern.md
002-choose-caching-strategy.md
003-migration-approach.md
When to Write Decisions
Write decision records when:
- Choosing between technologies
- Establishing architectural patterns
- Making design trade-offs
- Documenting why NOT to do something
- Recording lessons learned
Stakeholder Communication
Audience Adaptation
For Technical Audience
Focus on:
- Architecture and design
- Code examples
- Technical trade-offs
- Implementation details
Format:
- Detailed specifications
- Code snippets
- Diagrams
- Technical metrics
For Business Audience
Focus on:
- Business impact
- Cost-benefit
- Timeline
- Risk mitigation
Format:
- Executive summary
- Charts and graphs
- Simple language
- Clear recommendations
Status Report Template
# Weekly Status Report
## Executive Summary
[1-2 sentences: on track/at risk/blocker]
## Accomplishments
- [x] Completed item 1
- [x] Completed item 2
## In Progress
- [ ] Item 1 (70% complete)
- [ ] Item 2 (30% complete)
## Blockers
- None or description and mitigation
## Metrics
| Metric | Target | Actual | Status |
|--------|--------|--------|--------|
| Code coverage | 70% | 72% | Green |
| Test pass rate | 98% | 97% | Yellow |
## Next Week
- Planned items
Communication Cadence
Daily:
- Stand-up updates
- Slack status
Weekly:
- Status report
- Team sync
Bi-weekly:
- Sprint review
- Stakeholder demo
Monthly:
- Metrics review
- Technical deep-dive
Handling Difficult Conversations
When delivering bad news:
1. State the facts clearly
2. Explain impact
3. Present mitigation plan
4. Ask for input/support
Example:
"We discovered that the migration will take 2 weeks longer than planned.
This delays launch by 2 weeks. We can mitigate by parallelizing testing.
I need approval for additional QA resources."
Practice Problems
Write an RFC for implementing a new caching strategy in a Magento application.
Write a weekly status report for a Magento upgrade project that is 3 days behind schedule.
Quiz
1. What should an RFC include?
2. When should you write a decision record?
3. How should you adapt communication for business stakeholders?
4. What is the purpose of the executive summary?
Flashcards
Question
What is an RFC?
Click to reveal answer
Answer
Request for Comments - formal proposal for technical changes with alternatives and decision
Question
What is an ADR?
Click to reveal answer
Answer
Architecture Decision Record - documents architectural decisions and rationale
Question
What to include in executive summary?
Click to reveal answer
Answer
2-3 sentences: what, why, business impact, and recommendation
Question
How to adapt for business audience?
Click to reveal answer
Answer
Focus on impact, cost, timeline - avoid technical jargon
Question
When to write decision records?
Click to reveal answer
Answer
For any significant architectural choice or design trade-off
Revision Notes
Key Takeaways
- 1. RFCs provide structured proposals: problem, solution, alternatives, decision
- 2. Decision records capture context, rationale, and consequences
- 3. Adapt communication to audience: technical vs business focus
- 4. Executive summary: 2-3 sentences for quick understanding
- 5. Status reports: be honest, explain impact, present mitigation
- 6. Write decisions when choosing technologies or establishing patterns
Interview Tips
- • How do you write an effective RFC?
- • Describe your approach to technical documentation
- • How do you communicate technical decisions to non-technical stakeholders?
- • Give an example of a difficult technical decision you documented
- • How do you keep documentation up to date?
Cheat Sheet
Technical Communication Cheat Sheet
RFC Structure:
- Summary (1 paragraph)
- Motivation (why)
- Detailed Design (how)
- Alternatives
- Migration/Rollback
- Timeline
- Open Questions
Decision Record:
- Context (situation)
- Decision (what)
- Rationale (why)
- Consequences (impact)
Adaptation:
- Technical: code, architecture, details
- Business: impact, cost, timeline
Cadence:
- Daily: standup
- Weekly: status report
- Bi-weekly: sprint review