Writing my recent article on Engineering strategy was one of the most challenging pieces of writing I’ve done in the past few years because I had far more ideas than I could fit into a coherent narrative. I extracted a number of those into semi-edited snippets filed under the “strategy” tag, and here is the last one in that vein.
The question I want to briefly explore here is, “What strategies should most engineering organizations try to document?” I’ve taken a somewhat overly broad view of what you might consider an engineering strategy, including both technical and organizational aspects.
An unordered list of strategies I would recommend every engineering organization document as they grow are:
How do we review, merge, deploy, and release code?
What are our approved technologies for new projects?
When and how do we deprecate user-facing functionality?
When and how do we deprecate internal tools?
How do we document our software and process?
Because this is a surprisingly controversial topic, explicitly which tools do we and don’t we use for documentation?
How do we evaluate, select and adopt new technologies?
How do we migrate away from our existing technologies?
How do we respond to incidents?
How do we identify and prioritize incident remediations?
How do folks switch teams?
How do you staff work on ‘unowned” areas and tools?
How do folks move from individual contributor track to management track? How do they move back?
How do you think about evaluating internal versus external candidates for scarce roles?
How do you empower senior engineers to contribute to the engineering organization beyond day-to-day technical contributions?
For many of these, you could argue that they are more policy than strategy. That’s a reasonable argument, but for me the distinction is that you turn a policy into a strategy by explaining the rationale behind it: a policy is just an incomplete strategy.