<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Technical Leadership on VividMap Blog</title><link>https://blog.vividmap.io/categories/technical-leadership/</link><description>Recent content in Technical Leadership on VividMap Blog</description><image><title>VividMap Blog</title><url>https://blog.vividmap.io/og-image.png</url><link>https://blog.vividmap.io/og-image.png</link></image><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 29 Apr 2026 19:21:08 -0600</lastBuildDate><atom:link href="https://blog.vividmap.io/categories/technical-leadership/index.xml" rel="self" type="application/rss+xml"/><item><title>How to Write an Engineering RFC That Actually Gets Decisions Made</title><link>https://blog.vividmap.io/posts/how-to-write-an-engineering-rfc/</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.vividmap.io/posts/how-to-write-an-engineering-rfc/</guid><description>Most RFCs die in a comment thread without a decision. Here&amp;#39;s how to structure a technical proposal so that it surfaces trade-offs clearly, drives toward a concrete outcome, and builds trust with the people who review it.</description><content:encoded><![CDATA[<p>Most engineers write their first RFC by borrowing a template and filling in the blanks. The result is a document that describes a technical solution in detail, lists some alternatives, and ends with an open-ended question about what people think.</p>
<p>That kind of RFC doesn&rsquo;t produce decisions. It produces comment threads.</p>
<p>An effective RFC is not a document that describes a solution. It is a document that frames a decision — that lays out the problem, the constraints, the viable options, and the trade-offs clearly enough that reviewers can evaluate them and reach a conclusion. The solution you prefer is in there, but it&rsquo;s one item in a structured argument, not the whole document.</p>
<p>This distinction matters because the purpose of an RFC is not to present your thinking to an audience. It is to create the conditions for a decision to be made. A document that accomplishes that purpose is structurally different from one that doesn&rsquo;t.</p>
<h2 id="what-makes-an-rfc-hard-to-review">What Makes an RFC Hard to Review</h2>
<p>Before talking about how to write a good RFC, it&rsquo;s worth naming what makes most RFCs difficult to review:</p>
<p><strong>The problem isn&rsquo;t clear.</strong> Reviewers can&rsquo;t evaluate a proposed solution if they don&rsquo;t share your understanding of the problem. If you jump to &ldquo;here&rsquo;s what we should build&rdquo; without establishing &ldquo;here&rsquo;s the specific problem this solves and why it matters,&rdquo; reviewers spend their cognitive load trying to infer the problem from the solution — and they often infer different problems, which produces confused or contradictory feedback.</p>
<p><strong>The trade-offs are hidden.</strong> Every technical decision involves trade-offs. If your RFC presents only the chosen solution and dismisses alternatives in a sentence or two, reviewers sense that you&rsquo;ve done the trade-off analysis in your head and haven&rsquo;t shared it. The most common response is to force that analysis out in comments — which extends the review time and gives the impression that the trade-offs weren&rsquo;t considered.</p>
<p><strong>There&rsquo;s no clear outcome.</strong> An RFC that ends with &ldquo;What do you think?&rdquo; is not driving toward a decision. It&rsquo;s requesting input. Input without a decision mechanism produces more input. Clearly framing what you need from reviewers — &ldquo;approve the proposed approach,&rdquo; &ldquo;choose between options A and B,&rdquo; &ldquo;raise blockers by Friday&rdquo; — converts a comment thread into a decision process.</p>
<h2 id="the-structure-that-works">The Structure That Works</h2>
<p>The following sections are not a template to fill in. They are a sequence of questions that, when answered well, produce a document that drives decisions.</p>
<h3 id="context-and-problem-statement">Context and Problem Statement</h3>
<p>What is the problem, and why does it matter now?</p>
<p>Write this section as if the reader has never thought about this problem before. What is the current state? What is the specific failure mode, gap, or constraint that&rsquo;s motivating this proposal? Why is this worth addressing now rather than later?</p>
<p>The problem statement is the hardest section to write well because it requires you to separate the problem from the solution you already have in mind. Resist the urge to frame the problem in terms of the solution (&ldquo;we need to replace X with Y&rdquo;) and instead frame it in terms of the state you want to change (&ldquo;under current conditions, we observe X, which causes Y, which costs us Z&rdquo;).</p>
<p>One test: if someone reads your problem statement and proposes a completely different solution than the one you prefer, is that solution actually viable? If yes, your problem statement is correctly scoped. If no, you&rsquo;ve probably framed the problem to match your preferred solution — which makes the document less useful and less trustworthy.</p>
<h3 id="goals-and-non-goals">Goals and Non-Goals</h3>
<p>What does a successful outcome look like, and what is explicitly out of scope?</p>
<p>Goals should be stated in terms of outcomes, not implementations. &ldquo;Reduce checkout latency below 200ms at P99&rdquo; is a goal. &ldquo;Replace the synchronous database call with an async queue&rdquo; is an implementation choice. Stating goals at the right level lets reviewers evaluate whether a proposed approach actually achieves them.</p>
<p>Non-goals are underused but valuable. They signal that you&rsquo;ve considered scope creep and made a deliberate choice about what not to solve. &ldquo;This proposal does not address multi-region failover&rdquo; tells reviewers not to evaluate the document on those terms, and it signals that you&rsquo;ve made a deliberate scope choice rather than missing something obvious.</p>
<h3 id="proposed-approach">Proposed Approach</h3>
<p>What is your recommended solution?</p>
<p>Describe the solution in enough detail that a reviewer can evaluate whether it achieves the goals and what the trade-offs are. Include the key design decisions and why you made them. Don&rsquo;t pad this section with implementation details that aren&rsquo;t relevant to the decision — if someone needs to read 10 pages of implementation specifics to evaluate whether the approach is sound, the RFC is at the wrong level of abstraction.</p>
<p>Be explicit about what you are choosing and why. &ldquo;We are using approach X instead of Y because&hellip;&rdquo; is more useful than &ldquo;We are using approach X.&rdquo; The &ldquo;because&rdquo; is the substance of the trade-off analysis that reviewers need to evaluate your reasoning.</p>
<h3 id="alternatives-considered">Alternatives Considered</h3>
<p>What other viable approaches did you evaluate, and why didn&rsquo;t you choose them?</p>
<p>This is the section most commonly written poorly — either skipped, or filled with strawman alternatives that were never serious options. Both approaches undermine the RFC&rsquo;s credibility.</p>
<p>A well-written alternatives section requires genuine engagement with the alternatives. For each alternative: what is it, what are its genuine advantages over the proposed approach, and what specifically makes you prefer the proposed approach over it?</p>
<p>Reviewers who would have chosen differently often do so because they weight the trade-offs differently, not because they identified an alternative you didn&rsquo;t consider. Showing that you considered the same alternatives with a specific rationale for your preference converts a challenge (&ldquo;why didn&rsquo;t you do X?&rdquo;) into a discussion (&ldquo;you preferred X for reasons A and B; I would have weighted B more heavily because&hellip;&rdquo;).</p>
<h3 id="risks-and-open-questions">Risks and Open Questions</h3>
<p>What are the known risks, and what is still uncertain?</p>
<p>A good RFC doesn&rsquo;t pretend to have all the answers. It distinguishes between what is decided (the recommended approach) and what is open (implementation questions, dependencies, risks that need mitigation). Listing open questions with owners and resolution paths shows reviewers that you&rsquo;re not sweeping uncertainty under the rug.</p>
<p>Risks worth naming: performance at scale you haven&rsquo;t tested, dependency on another team&rsquo;s work, backwards compatibility concerns, operational overhead, security surface expansion. Name the risk and your proposed mitigation or monitoring approach.</p>
<h3 id="success-criteria">Success Criteria</h3>
<p>How will you know if this worked?</p>
<p>State how you will evaluate success after implementation. Quantitative metrics are preferred: latency targets, error rate thresholds, adoption metrics. Qualitative criteria are acceptable for decisions whose impact is harder to measure, but be specific about what &ldquo;success&rdquo; looks like. &ldquo;Teams adopt the new pattern&rdquo; is not a success criterion. &ldquo;5 of 8 product teams have migrated to the new pattern within two quarters&rdquo; is.</p>
<h2 id="getting-reviews-that-converge">Getting Reviews That Converge</h2>
<p>An RFC with clear structure still fails if the review process doesn&rsquo;t drive toward a decision. A few practices that help:</p>
<p><strong>Set a review deadline.</strong> &ldquo;Comments open through [date]&rdquo; converts an open-ended process into a bounded one. Reviewers are more likely to engage by a deadline, and you can move to a decision without waiting indefinitely for comments that may never come.</p>
<p><strong>Name the decision-maker.</strong> Who has final approval? Is it the tech lead of the impacted team, the engineering manager, the architect? If this isn&rsquo;t clear, approval is ambiguous and the RFC can remain &ldquo;under review&rdquo; indefinitely. State explicitly who makes the call.</p>
<p><strong>Distinguish blocking concerns from non-blocking feedback.</strong> Ask reviewers to flag blocking concerns explicitly. This separates &ldquo;I have concerns that need to be resolved before this proceeds&rdquo; from &ldquo;I have suggestions that would improve this.&rdquo; The first category requires action before the decision; the second can be addressed in implementation.</p>
<p><strong>Close the RFC explicitly.</strong> When you have the decision, document it. Update the RFC with the outcome: &ldquo;Approved — proceeding with Option A. Options B and C rejected for reasons stated in comments from [reviewer].&rdquo; An RFC without a recorded outcome is a discussion that never ended.</p>
<h2 id="rfc-as-a-career-signal">RFC as a Career Signal</h2>
<p>At senior level and below, your code is the primary evidence of your technical judgment. At staff level and above, your written reasoning — in RFCs, design documents, and architectural proposals — is what scales your influence beyond the rooms you&rsquo;re in.</p>
<p>An RFC that frames a decision clearly, engages honestly with trade-offs, and produces an outcome is evidence of operating at the staff level: it demonstrates breadth (understanding the full context), judgment (making defensible trade-off calls), and influence (getting to a decision without authority to mandate it).</p>
<p>An RFC that gets stuck in comment threads, requires repeated clarification, or produces no decision is a missed opportunity — and a signal that the skill needs development. The good news is that it&rsquo;s a learnable skill. Each RFC you write teaches you something about what your reviewers need to see to converge.</p>
<hr>
<p><em>VividMap helps you log impact evidence from your technical leadership work — including RFCs you&rsquo;ve driven, design documents you&rsquo;ve written, and decisions you&rsquo;ve shaped. <a href="https://vividmap.io">See how it works</a>.</em></p>
]]></content:encoded></item></channel></rss>