A product/engineering proposal template
I'm a firm believer in getting people to write proposals. I think they're extremely effective for a few different reasons:
- Writing your thoughts down is a forcing function for clear thinking. This generally results in a stronger argument.
- They allow other people to give feedback to you or your team before you build the system. External feedback helps surface unknown unknowns, and can result in getting out of local minima. There's a great aphorism for this: 'weeks of coding can save you hours of planning'.
- Proposals form as point-in-time documentation of a system. This is usually better than the default of nothing in fast growing technology companies.
A good way to instigate proposal writing, and level up the quality of your proposals is to institute a proposal template. A proposal template is a template that you ask authors to think about and fill out whilst writing a proposal.
To make this easier for you, here's the template that I've used at Ravelin and Monzo. It's useful as a general purpose template for writing proposals for product and engineering. It's been proved on a spectrum of extremely technical engineering proposals, to broad product strategy.
It's not limited to any specific discipline, however: these are good questions to ask of any change.
What problem are you trying to solve?
- Introduce the problem statement here. This might be well-defined ('we need to tweak the parameter of a rule from X to Y to help reduce a certain type of abuse'), or more fuzzy ('we need to invest more in paying back technical debt').
- Focus on the underlying problem that needs to be solved, as opposed to jumping to how you will solve it.
Why should we solve it?
- Why is this an important problem for us to solve?
- Is it a big enough problem to solve? In companies like ours, there are more options available to us than we could ever complete. Prioritisation matters.
- Should we solve it now, or later?
- Provide specific data - quantitative or qualitative - wherever possible.
How do you propose to solve it?
- Add details of your proposed change. This can be high-level as psuedocode and sketches of the architecture, or as low-level as Protocol Buffer and interface definitions. Decide what the context of the proposal is, and write appropriately.
- Be explicit about what you are optimising for in this proposed solution — for example, 'we need to hit this deadline, so we'll accept the tech debt this entails'.
What other approaches did you consider?
- In general, it's a red-flag if you haven't thought of a couple of different ways that you could approach the problem.
- What does your proposed solution give you that these approaches don't?
- What are they optimising for that isn't appropriate in this case?
What could go wrong?
- What risks does your proposed change entail?
- How will you mitigate them?
- How could this system fail, and what would be the impact if it did?
Summary
Please feel free to use the template for whatever you like! It's available on GitHub if that's your thing: github.com/sjwhitworth/proposal-template.
If you're using Google Docs, copy and paste the above, and follow this guide to create it as a default template.
If you're using Notion, follow this guide to learn how to create your own templates.
If you end up using it, the only thing I ask of you is that you let me know how it went by tweeting me. I'm sjwhitworth on Twitter!