In a cost-conscious market that has resulted in many layoffs in the tech industry, getting the most out of your current development team is key. Running a high-performing engineering organization requires better code quality and faster time to market. But how do you measure your development team?
In this post, we’ll look at software key performance indicators (KPIs), and how you can use them to help your development organization improve.
What Are Software Development KPIs?
What Is a KPI?
A key performance indicator (KPI) is a value that measures how effectively a company, department, team, or individual meets their goals.
KPIs serve as measurable targets for business units. You can use them to gauge and compare your performance in strategic and operational goals. Different teams use different KPIs; there’s no right or wrong answer for how you choose a set of indicators.
KPIs help provide clarity about your path to success and enable you to continuously improve performance.
What Is a Software Development KPI?
In software engineering, KPIs are how you measure your development results. You use them to evaluate your success in reaching specific goals.
Many programming metrics focus on measures such as story points, deployments, and lines of code. While they may (or may not) be useful for evaluating development teams, these measures don’t tell you how well your development efforts are meeting your objectives.
Let’s look at seven of the most common KPIs for software development teams, and how they can help you. It’s important to note that none of these KPIs work by themselves. You must consider them alongside each other as an overall measure of your team’s success. High deployment frequency can be a sign of an effective team—unless it’s a by-product of a high change failure rate. Short cycle times can be a sign of effective development, unless they’re accompanied by low code coverage.
Seven KPIs for Software Development Teams
- Lead Time
Lead time is how long it takes your team to implement an enhancement or a bug fix. It’s the time elapsed between when your team receives a request and when they deploy the fix or enhancement to production.
lead time = date request completed - date request received
You can calculate this with reports from tools like Jira, Trello, and Asana, that track your feature and deficiency tickets.
Lead time is a valuable planning tool. When you understand the average time it takes your team to complete a task, it helps you make estimates. You can also use lead time to improve customer satisfaction by finding bottlenecks and delivering new features to them faster and more often.
Lead time is like velocity, which we’ll discuss below, in that it can vary from job to job. Smaller tasks are often added to sprints more often than larger jobs that need more time or people allocated to them. So, lead time is a very useful KPI, but you must evaluate it with the bigger picture in mind.
- Change Failure Rate
change failure rate = total failed changes/total changes
Change failure rate is a DevOps metric that measures how often changes lead to failures in production. You calculate it by dividing the number of failed changes by the number of changes over a specific period. A lower rate is better, since it means that fewer changes are causing problems.
Let’s imagine your team pushed 256 changes to production last month, and 18 of them failed. That’s a failure rate of .07 (or 7% if you multiply the result by 100).
.07 = 18/256
Changes include new features, bug fixes, and hardware updates, such as additional or replacement servers. Any given deployment includes one or more changes, so you’ll need to track the changes in each release and compare them to issues that crop up afterward.
The 2023 Accelerate State of DevOps Report established a change failure rate of 5% for Elite level organizations. This KPI works as a counterbalance for lead time, deployment frequency, and velocity, since it can be an indicator that you are trying to release changes too quickly.
- Velocity
velocity = total story points/total sprints
Velocity measures how much work your team accomplishes in a development interval, such as the number of story points completed during a sprint. This version of the formula uses story points and sprints, but you can use a different measure of work instead of story points and a different time interval, too.
If your team executed 425 story points over 22 sprints last year:
19.32 = 425/22
Their velocity is a little over 19. So, scheduling roughly this number of story points for each sprint should be safe and lead to successful iterations. Velocity is available in reports from development platforms like Jira and Asana, and their tools can adjust the formula based on how you manage your intervals, such as hours per week.
This KPI is a useful way of measuring a team’s productivity over an extended time period, giving you a measure of predictability when planning efforts. If you can gain a good understanding of your team’s velocity, it makes it easier to estimate when they’ll finish new features or bug fixes.
It’s important to view velocity as a moving average, since there are many reasons your team might get more or less work done during any time period: production emergencies, sickness, vacations, or the nature of the work assigned during an interval.
- Deployment Frequency
deployment frequency = total number of deployments/time
How often does your team send new updates and features to clients? This is your deployment frequency, usually measured as the number of deployments during a unit of time.
4.3 = 112/26
18.6 = 112/6
Pushing 112 deployments over the previous half a year is a frequency of a little over four a week, or eighteen and a half a month.
Frequent deployments are a good sign. They mean that your continuous integration/continuous delivery processes are in good shape, and you’re spreading your risks over small, incremental changes rather than clustering them into large and complicated releases.
According to the 2023 Accelerate State of DevOps Report Elite organizations deploy “on demand,” while high-performing organizations deploy between once a day and once a week.
- Cycle Time
cycle time = release time - start time
Cycle time is how long it takes for a task to go from start to completion. This differs from lead time in that cycle time starts when the work begins, not when you schedule the task or add it to your team’s queue.
This KPI is another statistic that most development platforms will calculate for you, often by comparing the first code commit to the deployment time for a feature or defect. So if a developer started work on FOO-123 on August 1st and the artifact is tagged as part of a deployment on August 23rd, you have a cycle time of 22 days:
22 days = 8/23 - 8/1
This KPI is another effective measure of your team’s efficiency, as well as another powerful tool for planning.
According to LinearB, the cycle time for top organizations is under 42 hours while cycle time of under 92 hours is considered to be good.
- Mean Time To Recovery
mean time to recovery = down time/number of outages
Mean time to recovery (MTTR) is the average time your team needs to recover from an outage. MTTR includes the total time of an outage, comprising when the problem is detected until when it’s completely resolved.
Some production ticketing systems like ServiceNow will provide this information for you, or you can calculate it yourself by tracking outages and looking at lead time or cycle time for the associated development issues.
MTTR measures not just how efficiently your team addresses problems, but also how reliable and easy to maintain your system is. It’s also a leading indicator of overall customer satisfaction. Long outages lead to unhappy clients.
- Code Coverage
coverage = lines of code executed/lines of code in component
Code coverage is the percentage of code that runs during your tests. It’s a reliable indicator of your code’s quality. Code quality can be subjective, but coverage is a KPI that’s difficult to dispute. It shows that you have useful tests that exercise a high percentage of your code.
Tools like JaCoCo, OpenClover, and Jest plug in to your CI/CD pipelines, run your tests, and provide reports that include code coverage and can tell you where and how to improve it.
A higher coverage percentage means your test suites are thoroughly verifying your code. A lower one means that your tests are incomplete or that you have large sections of “dead” code that are no longer or were never needed.
Use These KPIs to Improve Your Development Efforts
We’ve looked at seven important KPIs for software development. By monitoring velocity, lead time, deployment frequency, change failure rate, code coverage, cycle time, and MTTR, you’ enhance your development efforts.
The common thread throughout all these metrics is developer productivity, and DevZero can help. An internal development platform will help your developers to focus on code and more accurately reproduce your production environments. Learn more here and get started on improving your KPIs today!
This post was written by Eric Goebelbecker. Eric has worked in the financial markets in New York City for 25 years, developing infrastructure for market data and financial information exchange (FIX) protocol networks. He loves to talk about what makes teams effective (or not so effective!).