Software Development: Adjusting Execution To Need
Before my company achieved product market fit, we had certain unspoken values within our software team. These included: move fast, take risks, minimize process / management overhead, empower individuals, prioritize features over infrastructure, find the MVF (Minimum Viable Feature), execute in the presence of customers, self-organize, obsess over customers, and deliver transparency.
While many of these are values you hope to maintain as your company grows, it became increasingly clear we could not apply all these values to all projects. For example, when we started enhancing one of our most used features based on customer requests, it really did not make sense to take risks and move fast; when we starting scaling out our database clusters in support of high demand, we clearly were not prioritizing features over infrastructure or trying to execute in the presence of customers; and sometimes when you work on critical operations projects for a 24x7 global SaaS application, you actually need a little more process and management overhead.
The common solution for a fast growing company is to gradually replace the fast-moving, risk-taking DNA of an early engineering team with a more conservative culture befitting the changing needs of the business. But in return, you give up a little of the one advantage granted to every startup: the ability to move fast.
An alternative is to take a more nuanced approach: adjusting the execution to the need. The first step to doing this is to establish a vocabulary that describes the different modes in which the team wants to operate. Here is an example of three modes:
- Emerging - This mode is applied to more experimental projects where there are substantial unknowns that increase our risk of building the wrong feature or infrastructure. This is the startup mode, where you move fast and break things.
- Tactical - In this mode we are solving for the needs of the business as we understand them at this time. Tactical projects usually have few unknowns and the risks reside more in execution than envisioning. This is a high growth mode, where we need high quality solutions to well known problems.
- Strategic - This mode is applied to projects that are solving for future demand, often tied to scale or longer term execution of the vision. This is where we think beyond the scope of the problem as it is understood today, and build for the needs of our future company.
By applying these modes to different work items that move across a board, an engineering team can adjust its execution to the needs of the business, while minimizing the gap in expectations that can occur when there is a difference in expectation versus execution (e.g. a team executing an emerging project with a strategic mindset).
While startups need to change as they grow, they should do so without losing the edge that made them successful in the first place. After all, if you lose the ability to move fast, you've abdicated the one sole advantage that is granted to all emerging businesses: speed.
Related posts: Finding the Minimum Viable Feature (MVF), MVF: The Importance of Not Over-investing