What is developer productivity? Is there an inevitable trade-off between speed and quality? How can organisations foster long-term productivity gains to drive better business outcomes?
These were some of the questions discussed during Codurance Fireside Chat #63, featuring Codurance Co-founder Sandro Mancuso and CodeScene Founder Adam Tornhill.
What is Developer Productivity?
To understand developer productivity, we need to first define what it means. As Sandro Mancuso and Adam Tornhill describe it:
Developer productivity is how well the software organisation supports the business. This typically includes the speed of feature releases, but it involves more than just speed. The speed must be sustainable, with consistent deliveries month after month and minimal surprises. This predictability builds confidence and helps achieve delivery deadlines, which are crucial for business success.
- Sandro Mancuso, cofounder of Codurance & Adam Tornhill, founder of CodeScene
The level of optimisation in developer productivity can also be affected by alignment between business and software teams. Misunderstandings about expectations and what can be achieved within a given timeframe often lead to inefficiencies and productivity issues. Ensuring clear communication and alignment between these teams is key to reducing waste and improving overall productivity.
Challenges and Strategies for Enhancing Developer Productivity
Unplanned work is a major disruptor of IT projects and significantly affects developer productivity. According to Adam Tornhill, unplanned work includes tasks we did not anticipate, such as defects and production failures. Addressing these issues promptly is crucial. Shifting focus to resolving production problems is essential for maintaining and improving productivity.
A key indicator of mature developer productivity is the ability of organisations to link code quality directly to business outcomes. In his research, Code Red: The Business Impact of Code Quality, Adam Tornhill reveals that companies with high code quality deliver features twice as fast and experience 15 times fewer defects compared to those with poor code quality. This data helps stakeholders pinpoint both effective and problematic areas of their software, leading to more informed discussions about trade-offs and improvements.
Challenging the Trade-Off Between Speed and Quality
In the industry, there is a common assumption that speed requires a compromise in quality. Many believe that a decrease in quality is an unavoidable consequence of rapidly delivering features and products. However, Sandro Mancuso, Adam Tornhill, and other advocates of quality and Software Craftsmanship challenge this notion. Their research indicates that there is no inherent trade-off between speed and quality.
Adam Tornhill’s research supports this view. His findings reveal that organisations which measure rework and bugs alongside their release metrics show that maintaining high code quality actually supports faster delivery. When outcomes are prioritised over mere processes, the data demonstrates that prioritising code quality can enhance speed. In essence, achieving high speed in development necessitates maintaining good quality code – proving that quality and speed are not mutually exclusive.
Driving Productivity in a Development Team
Securing support from the business to invest in code quality is crucial for enhancing developer productivity. One effective strategy is to implement test automation. Test automation can accelerate delivery by enabling faster shipping of code, while also reducing waste by linking changes in code and architecture to efficiency improvements.
By introducing automated testing, organisations can streamline their development processes, minimise manual errors, and ensure more reliable releases. This approach not only boosts productivity but also aligns code quality with overall business goals, facilitating smoother and faster deployments.
Challenges in Development Team Productivity
Technical debt is another major factor undermining software developer productivity. Although technical debt might not always obstruct feature releases, it significantly drains developer time. On average, developers work primarily within just 2-4% of the codebase.
If the technical debt is in parts of the codebase that are not critical to business operations or growth, it may be practical to accept some level of technical debt and redirect developers to more productive tasks. However, for frequently accessed areas of the codebase, maintaining clean and simple code is essential. Excessive developer involvement in the same code can lead to 'developer congestion', which may increase defect rates and result in code smells.
Addressing technical debt proactively and managing developer workloads effectively can enhance productivity and ensure more reliable and maintainable software.
Measuring Productivity with DORA Metrics
Organisations can effectively measure their software development team's productivity using the DORA metrics. These four key metrics include deployment frequency, lead time for changes, change failure rate, and time to restore service. For a more detailed explanation, refer to Matt Belcher's blog.
Mature organisations often utilise a distributed architecture, enabling developers to deploy multiple times per day. This frequent deployment is typically indicative of a highly productive development team. However, achieving this level of productivity requires precise alignment of requirements across the business and among multiple teams. Additionally, integrating automation into processes is essential to maintain speed and quality.
Optimising Team Behaviours for Productivity
To enhance software developer productivity, it is crucial to focus on team behaviours. Effective optimisation requires strong alignment between architecture teams and the broader business. Operational team boundaries should be narrow and should encompass neighbouring systems to foster synergies and prevent knowledge loss.
While a rigorous focus on quality is essential for any organisation aiming to excel, achieving a balance between excellence and pragmatism is often necessary. As outlined in the Software Craftsmanship manifesto, excellence must be tempered by practical constraints. Instead of halting progress, productive developers should address technical debt as they go, ensuring that features are delivered efficiently while maintaining code quality.
Key Takeaways for Enhancing Developer Productivity
Sandro Mancuso and Adam Tornhill summarised their key takeaways for improving developer productivity as follows:
- Foster a culture of continuous improvement and effective communication.
- Accelerate delivery and use data-driven metrics to guide enhancements.
- Use data to demonstrate the impact of code quality on business outcomes.
- Evaluate the entire value stream to ensure high-quality software delivery.
- Recognise that quality and productivity are shared responsibilities across the business, developers, and testers.
Sandro Mancuso, Co-founder of Codurance, invites you to book a demo of our Software Quality Assessment (SQA). This tool assesses your software's quality, aids in making informed decisions, and optimises your systems with data-backed insights.
Adam Tornhill, Founder of CodeScene, offers a code analysis and visualisation tool designed to measure and improve code quality, team dynamics, and delivery.
Watch the full recording of Sandro and Adam’s Fireside Chat #63 on YouTube or listen to the Podcast.
Want to learn more about Software Developer Productivity? Read more here.