How to Speed Up Your Development by Using Andy Grove‘s High Leverage Activities
As a software developer, you‘re constantly juggling multiple priorities—building new features, fixing bugs, refactoring code, reviewing pull requests. With an ever-growing backlog, it can feel like there‘s never enough time to get it all done. In the words of former Intel CEO Andy Grove, "There are so many people working so hard and achieving so little."
In his classic management book High Output Management, Grove introduces the concept of leverage—the amount of output or impact produced per unit of time invested. To be an effective engineer, it‘s critical to maximize your leverage by focusing your time on the highest-value activities.
The Leverage Equation
You can calculate the leverage of an activity by considering the results it produces in proportion to the time it takes:
Leverage = Impact Produced ÷ Time Invested
For example, let‘s say you spend an hour automating a manual testing process that normally takes 15 minutes to run. After the one-time investment of an hour, you‘ll save 15 minutes every time you need to run those tests in the future. The more frequently the tests need to be run, the higher the leverage of the automation task.
Grove explains that there are only three ways to increase your overall leverage:
- Reduce the time required to complete an activity
- Increase the output generated by an activity
- Shift to higher-leverage activities
Below are some concrete ways to apply these leverage principles to speed up your development.
Automate All the Things
One of the highest-leverage ways for developers to save time is through automation. Any manual, repetitive process is a prime candidate. Some common examples:
- Building and deploying code
- Running tests
- Generating documentation
- Triaging and assigning bugs
- Conducting code reviews
There‘s an upfront investment required to automate a task, but that time is quickly paid back. Let‘s say you currently spend 15 minutes per day manually deploying code to a staging server. Writing a script to automate that process may take a few hours initially. But after just one month, you‘ll break even on the time invested. And the savings only grow from there.
According to a survey by Stripe, developers spend 17% of their time on average dealing with maintenance issues like debugging and refactoring. By investing in automation, you can significantly reduce this wasted time and free up more bandwidth for valuable development work.
Invest in Reusability
As a full-stack developer, you have the opportunity to build leverage into your applications at every layer of the stack. Writing reusable, modular code is a high-leverage activity—for every extra minute you spend making a function more generic, you may save hours down the line when you‘re able to reuse it.
Spend time upfront building out a library of reusable components, utility functions, and frameworks. Make sure to document them well and make them easily discoverable by your team. Every time one of these components is reused, you‘ll multiply the leverage of the initial time invested.
This principle applies to every area of the stack:
- Use design systems and component libraries to speed up UI development
- Build internal APIs and services for shared functionality
- Create infrastructure as code templates for common architectures
- Leverage open-source libraries and frameworks when possible
Be careful not to over-engineer your abstractions. The goal is to find the right balance of reusability and simplicity. When in doubt, err on the side of YAGNI and refactor later as needed.
Optimize Performance
Performance optimization is another high-leverage activity for full-stack developers. By reducing application latency and improving throughput, you can deliver a better user experience while reducing operational costs.
Some common performance optimizations include:
- Database query optimization and indexing
- Caching frequently accessed data
- Lazy loading non-critical assets
- Minifying and compressing frontend resources
- Parallelizing and distributing backend workloads
Even small performance improvements can have a huge impact at scale. For example, Google found that a 0.5 second decrease in search latency resulted in a 20% increase in traffic. Amazon calculated that every 100ms of latency cost them 1% in sales.
By prioritizing performance, you can increase the leverage of all future development work. You‘ll be able to ship features faster and handle more traffic with less infrastructure. Performance is a gift that keeps on giving.
Embrace Cloud and Serverless
Leveraging cloud services and serverless architectures is a force multiplier for full-stack developers. Instead of wasting time managing infrastructure, you can focus on writing code and shipping features.
Serverless computing automatically scales your workloads based on demand, so you only pay for the resources you actually use. Services like AWS Lambda, Google Cloud Functions and Azure Functions handle all the underlying server management, letting you deploy code with a single command.
Serverless also encourages a more modular, event-driven architecture. By breaking your application into smaller services, you can develop and deploy each part independently, increasing your agility. Microservices are often faster to build and easier to maintain than large, monolithic codebases.
Moving to serverless can dramatically increase your productivity as a full-stack developer. A case study by iRobot found that using serverless increased their development speed by 10x and reduced their total cost of ownership by 40%.
Measure and Optimize Velocity
To identify the highest-leverage opportunities, you need visibility into your development process. By measuring key metrics like cycle time, throughput and mean time to recover (MTTR), you can identify bottlenecks and optimize your workflow.
Some key metrics to track:
- Cycle Time: The time it takes from starting work on a task to deploying it to production. Shorter cycle times indicate a more efficient development process.
- Throughput: The number of tasks completed per unit of time (e.g. week or month). Higher throughput means you‘re delivering more value faster.
- MTTR: The average time it takes to recover from a production incident. Shorter MTTR means you‘re able to resolve issues and restore service more quickly.
- Code Coverage: The percentage of your codebase covered by automated tests. Higher coverage reduces the risk of regressions and improves your confidence in shipping code.
- Audience Metrics: Measure the impact of your work on key user and business metrics. Prioritize tasks that directly drive growth and revenue.
By tracking these metrics over time, you can calculate your team‘s velocity—the rate at which you consistently deliver value. With a quantitative baseline, you can run experiments to find the development practices that increase your leverage.
There are many tools available to automate the collection and visualization of engineering metrics. Some popular options include:
- Jira and Trello for project management and cycle time tracking
- GitHub Insights and GitPrime for git analytics
- Datadog and New Relic for application performance monitoring
- PagerDuty and VictorOps for incident response and MTTR tracking
- Code Climate Velocity and Coveralls for code quality and test coverage
Make sure to choose tools that integrate well with your existing workflow. The goal is to minimize overhead and make it easy for your team to view and act on the data.
Cultivate a Leverage Mindset
Leverage is not just about tactics and tools—it‘s also a mindset. It‘s about constantly looking for ways to increase your impact and do more with less.
Cultivating a culture of leverage requires psychological safety. Team members need to feel empowered to experiment with new ideas, even if they fail. They need to be able to take risks and make decisions without fear of blame or retribution.
Collaboration and knowledge sharing are also key to increasing team-wide leverage. Encourage pair programming, code reviews, and documentation to spread insights across the organization. Make it easy for developers to discover and reuse each other‘s work.
Finally, leverage is about focusing on what matters most. It‘s easy to get caught up in the urgency of incoming requests and lose sight of the bigger picture. Make sure to carve out time for long-term, high-impact projects. Regularly reassess your priorities and say no to work that doesn‘t align with your goals.
As a technical leader, it‘s your job to instill a leverage mindset in your team and create an environment where it can thrive. By making leverage a core part of your engineering culture, you‘ll be able to scale your impact and deliver outsized results.
Go Forth and Leverage
Increasing your leverage is an ongoing journey, not a one-time optimization. As you experiment with different tactics and tools, make sure to measure your results and double down on what works.
Remember, your time is your most valuable asset. By ruthlessly prioritizing high-leverage activities, you can achieve more with less and accelerate your development velocity. So go forth and leverage! Your future self (and your users) will thank you.
Further Reading
- High Output Management by Andrew Grove
- The Effective Engineer by Edmond Lau
- Accelerate: The Science of Lean Software and DevOps by Nicole Forsgren, Jez Humble, and Gene Kim
- 7 Time Management Techniques for Developers by 7pace
- Evidence and Case Studies from DevOps Research and Assessment (DORA)