An engineering leader’s guide to establishing and following a tech strategy.
A well-defined technical strategy aligns the engineering team's efforts with the business objectives, enables efficient decision-making, and sets the team up for long-term success.
Learning how to craft a realistic roadmap, communicate engineering needs to stakeholders and higher-ups, and make technology decisions for an entire department are important aspects of any tech strategy. I'll draw upon my experience leading teams at Google working on projects like Chrome, as well as observations from my peers at other large tech companies to guide you through these crucial factors.
Crafting a realistic roadmap
Developing a clear, realistic roadmap is the first step to an effective technical strategy. The roadmap should outline the major initiatives and milestones over the next 6-12 months (or longer for more mature products) that will help achieve overall product and business goals. Some key things I've learned about roadmapping:
Start with the "why"
Before diving into features and timelines, deeply understand the product vision and business objectives. How does your team's work fit into the bigger picture? What user needs and business goals are you trying to fulfill? The engineering roadmap should trace back to these.
When I was leading the Chrome developer experience (DevX) team, our high-level objective was to make web developers more productive by providing them with best-in-class tools for building, debugging, and optimizing their web applications. Every item on our roadmap, from new debugging features to performance improvements, was tied to this central mission.
Ruthlessly prioritize
You'll always have more ideas than capacity. Effective roadmaps focus on the highest-impact items and aren't afraid to say no to "nice to haves." I like the RICE scoring model for prioritizing where you evaluate items based on reach, impact, confidence, and effort.
For example, when prioritizing features for Chrome's DevTools, we once considered adding a new performance profiling feature. Using the RICE model, we could evaluate it as follows:
- Reach: High (would benefit most web developers)
- Impact: Medium (would improve performance debugging, but not revolutionary)
- Confidence: High (based on user feedback and competitive analysis)
- Effort: High (required significant engineering resources)
In addition to using the RICE model, it's crucial to consider dependencies. Some valuable projects may need to wait for other pieces to be in place first. For instance, certain advanced features might depend on APIs your team doesn’t necessarily control, influencing the order of implementation in your roadmap.
Break it down
Large, ambitious projects are great, but your roadmap needs to show progressive, shippable milestones. Work with your tech leads to define these incremental targets.
Expect the details to evolve as you learn more. When I was a part of the multi-quarter project migrating DevTools to TypeScript we broke down the undertaking into quarterly milestones. Each landmark delivered a subset of the overall functionality in a shippable state which allowed us to gain valuable learnings and make course corrections, rather than build without context and hope it all worked out in the end.
Validate with cross-functional partners
Engineering doesn't operate in a vacuum. Review your draft roadmap with product management, UX, content, quality assurance (QA), and other peer functions. Do they agree this plan will achieve the desired user and business outcomes? Incorporate their feedback.
When building out the roadmap for Chrome's DevTools migration, we worked closely with our UX designers to ensure the planned features would meet the needs of web developers. We also partnered with our developer relations team to validate the prioritization and get input on the most pressing pain points they were hearing from the developer community. This cross-functional input was invaluable in stress testing and refining our plan.
Treat it as a living document
A roadmap should be directional but flexible. Revisit and adjust it regularly based on progress, learnings, and any shifts in company strategy. I recommend reviewing it on a quarterly basis at a minimum.
At Google, we did formal quarterly roadmap reviews with leadership to assess progress, discuss key learnings, and determine any necessary adjustments to scope or prioritization. But we also had regular touchpoints within the team to monitor advancement, flag potential risks or blockers, and adapt our plan as needed. We aimed to maintain a consistent overall direction while remaining adaptable to changing circumstances. This meant keeping our high-level objectives stable, such as improving developer productivity or enhancing Chrome's performance, while being flexible in how we achieved these goals. For instance, if we learned that a particular approach wasn't yielding the expected results, we'd adjust our tactics without losing sight of our main objectives.
This balance allowed us to make progress toward our long-term vision while responding effectively to shifting priorities within Chrome and Google, emerging technologies, or changes in user needs. It's like having a fixed destination for a journey but being willing to alter the route as you encounter new information or obstacles along the way.
Communicating engineering needs for leadership buy-in
Gaining support and securing resources is essential to making meaningful progress on your roadmap. Successful engineering leaders know how to clearly communicate their team's needs and get buy-in from non-technical stakeholders. Some tips:
Tie requests to value
When making engineering requests, focus on the user and business value, not just technical details. How will this help achieve company objectives? Use metrics and data to back it up.
When I needed additional headcount for the Chrome DevX team, I made the case by highlighting how our improvements would boost web developers' productivity, leading to better web experiences for Chrome users. I presented metrics showing the growing usage of our work and the projected increase if subsequent planned enhancements were actioned. By connecting the dots between user and business value, I secured the needed resourcing.
Prioritize and sequence
Be selective in your asks. Stakeholders can be skeptical of a huge laundry list of needs. Focus on what's most critical and propose a realistic timeline for acquiring resources.
Educate proactively
Don't assume business partners have the technical context on why something is needed. Invest time in explaining key technical concepts, tradeoffs, risks, and debt in an accessible way. Establish a common language.
When advocating for Chrome to adopt a more comprehensive, system-wide approach to speed and performance, rather than focusing on isolated optimizations, I knew I needed to educate executives on why this was critical for Chrome's overall performance and user experience. This holistic approach involved considering how all browser components interact and impact each other, rather than optimizing individual parts in isolation.
I held a series of technical deep dives and Q&A sessions to build their understanding of the current engine's limitations, the benefits of the proposed new architecture, and the migration plan. Establishing this shared context upfront paved the way for easier discussions and decision-making down the line.
Leverage peer relationships
Stakeholders are more receptive if they trust you. Build personal connections and consult with cross-functional peers early and often, not just when you need something. Understand their world and how you can support each other.
Skip-level 1:1s are a great way to build rapport with key stakeholders outside direct management chains. By proactively reaching out and investing in those relationships during periods of relative calm – when there aren't urgent issues or high-pressure deadlines looming – I've built trust and allies to lean on when there are important or difficult engineering needs. This “peacetime” relationship-building might involve casual coffee chats, joining cross-functional team meetings, or collaborating on low-stakes projects.
Outside of high-stress situations, these interactions have helped me build a foundation of mutual understanding and respect. As a result, when critical situations arise, I have established connections to draw upon. It's also helped me better understand others’ priorities and constraints, so that I can frame my requests in the most relevant and compelling way when the need arises.
Escalate carefully
There may be times when you need to escalate an unmet need or unresolved issue up the chain. For instance when:
- There's a critical headcount shortage: This is when a team desperately needs additional developers to meet an important deadline, but the immediate manager lacks the authority to approve new hires.
- There's an unresolved technical dispute: When two teams disagree on a fundamental technical approach affecting multiple projects and lower-level discussions have reached an impasse, consider escalation.
- You've identified a significant risk: If you've discovered a potential security vulnerability that requires immediate attention and resources beyond your team's scope, raise the issue further up the chain.
In these cases, escalation might be necessary. But do this thoughtfully and sparingly. Have a clear "ask" and try to propose a solution, not just elevate a problem. Acknowledge the constraints and competing priorities your leaders face.
Making tech decisions: Department-wie vs. with everyone’s input
Some technology choices, like programming languages, frameworks, infrastructure, and tools, can impact an entire department. They may be hard to reverse later. When and how should you make these decisions vs. getting input from all developers?
The case for top-down decisions:
- Enables standardization and consistency across teams, which aids collaboration and mobility: When all teams use the same technologies and practices, it becomes easier for developers to collaborate across projects and move between teams. For example, if an entire organization standardizes on using a specific framework for front-end development, a developer can easily contribute to different projects or switch teams without having to learn a new framework.
- Allows for centralized training, support, and best practices: With a uniform tech stack, the organization can provide comprehensive training programs and support systems that benefit all teams. This approach is more cost-effective and ensures consistent quality.
- Can be more efficient than debating choices at length: Making decisions at a higher level can save time that would otherwise be spent on lengthy discussions in individual teams. As an example, deciding on a cloud provider like AWS at the executive level prevents each team from going through the same evaluation process.
- Ensures alignment with company strategy and direction: Top-down decisions can better reflect overarching company goals and long-term vision. For instance, if a company aims to become a leader in AI, a top-down decision to invest heavily in machine learning technologies across all products ensures that every team's efforts contribute to this strategic goal.
- Takes the burden off individual teams to evaluate and decide: By making certain decisions at a higher level, individual teams are freed up to focus on their specific projects and innovations. For example, if the organization decides on a standard CI/CD pipeline, development teams can concentrate on writing code rather than setting up and maintaining their build and deployment systems.
The case for developer involvement:
- Developers are closest to the technical needs and tradeoffs: Developers have unique insights into the practical implications of technical decisions. For example, a developer might identify that a proposed database solution, while theoretically powerful, might slow down development. Their hands-on experience allows them to foresee challenges and opportunities that might not be apparent from a high-level perspective.
- Fosters buy-in and engagement by giving developers a voice: When developers feel their opinions are valued and considered in decision-making processes, they're more likely to be enthusiastic about implementing and working with the chosen solutions. This engagement can lead to higher job satisfaction and productivity.
- Diversity of input can surface important considerations and alternatives: Different developers bring varied experiences and perspectives to the table. This diversity can lead to more robust solutions and identify potential issues early. For example, a developer with experience in a particular technology might be able to suggest an alternative approach that solves the problem more efficiently or with fewer potential pitfalls.
- Acknowledges that one-size-fits-all has limits: Different projects often have unique requirements that may not be met by a universal solution. Involving developers in decisions allows for necessary customization. For instance, while a company might standardize on using PostgreSQL for most applications, a team working on a graph-based application might make a case for using a graph database like Neo4j for their specific project.
- Encourages innovation and creative problem-solving: When developers are involved in decision-making, they're more likely to think creatively about solutions to technical challenges. This involvement can lead to innovative approaches that might not have been considered in a top-down decision-making process.
- Builds technical leadership skills within the team: Involving developers in technical decisions provides opportunities for them to develop and demonstrate leadership skills. This involvement can be valuable for their career growth and can help identify future technical leaders within the organization.
In my experience, the right approach depends on the type and scope of the decision. My general model:
Make top-down decisions for:
- Broad language/platform choices (e.g. we'll build in C++)
- Core infrastructure and architecture (databases, service mesh, etc.)
- Critical toolchains (source control, CI/CD, deployment)
- Compliance and regulatory needs (security, privacy, legal)
Involve developers in:
- Framework and library choices within the overall ecosystem: Developers' hands-on experience can guide selections that boost productivity and suit project-specific needs.
- Developer environment setup and configurations: Input here ensures tools align with developers' workflows and preferences, enhancing efficiency.
- Testing approaches and tools: Developers can provide valuable insights into which testing methodologies and tools work best for different types of projects.
- Team-specific processes and rituals: Allowing teams to shape their own processes fosters ownership and accommodates unique project requirements.
Even for top-down decisions, I find it valuable to solicit developer input and feedback first. You may not achieve full consensus, but you'll get valuable perspectives to incorporate. Clearly communicate the rationale, implications, and migration path once decided.
Final thoughts
Effective technical strategy is a continuous process, not a one-time exercise. It requires regularly evaluating priorities, engaging with stakeholders, and balancing tradeoffs. As a leader, your role is to set a clear direction, secure resources, and enable your team to execute successfully.
The most effective strategies aren't purely top-down or purely consensus-driven, but a healthy mix of both. Leverage your experience and judgment while trusting and empowering your teams. With focus, collaboration, and adaptability, you can develop and deliver a strategy that moves the needle for your users, business, and team.
Equally important is executing your strategy with empathy, consistency, and transparency. Technical leadership is part people management, part business acumen, part technical excellence.
Remember, there's no one perfect blueprint. Adapt the practices to your context, stay curious, and empower your teams.