Software Development and The Principle of Flow

Software development is a deep, rich, and complex problem domain. It’s easy to get wrapped up in all the tools, frameworks, languages, practices, and so forth. It’s effortless to lose sight of the key goal. If you were to focus on only one thing as you create software, what one thing should you pick? You should pick throughput. Read on to find out why this is the most important thing.

Flowing water used for growing crops.

What is the best way to measure the health of your development process?

You can measure the health of your software development process by how quickly you are able to deliver value to your customers.

How does your business make money?

Your business makes money when customers give you money in exchange for the value you deliver to them.

How does your business deliver value?

Your business delivers value when a customer’s life is improved by your offering, whether by providing an experience, a product, or a service.

How valuable are the company’s software development teams?

Software developers are valuable to the company in direct correspondance with how much value they are able to deliver to customers.

Software developers are a cost to the company if they deliver negative value to customers (outages, lost sales due to bad user experiences, security breaches, etc.)

What specific KPIs can we use to quantify speed of value delivery?

  1. Throughput
  2. Cycle Time
  3. Lead Time

1. Throughput

Throughput is a measure of how much work is delivered in a given time interval.

There are two basic ways to calculate throughput.

  1. The simplest way is number of work items per interval.
  2. The more complex way is story points per interval.

The exact numbers of your team throughtput aren’t important. What is important is the trend.

In a healthy process, throughput increases over time.

In an unhealthy process, throughtput decreases over time.

2. Cycle Time

Cycle time is a measure of how long it takes to complete a work item from the moment at which work has begun.

In the Kanban flow, this is a measure of how long it takes from when a work item has been put In Progress until it makes it to Done.

Cycle time is a measure of the speed of the development process.

In a perfectly healthy process, cycle time should be equal to the exact amount of time needed to add the requested value.

In an unhealthy process, there is a lot of overhead, and so more time is spent on activities that aren’t directly adding value to the customer.

3. Lead Time

Lead time is a measure of the amount of time is takes between when a work order is placed and when it is delivered.

In the Kanban flow, this is the duration from when a work item is created until it is deployed to production.

Lead time is the best measure of your agility. The more agility you have, the shorter your lead times will be.

This is the key metric that drives company time-to-market numbers.

If each team has short lead times, the company will be highly agile. The company is generally as fast as its slowest team.

Easy Litmus Test

If you want the simplest possible test of the health of your software development process:

  1. Create a new ticket with a simple copy change
  2. Track how long it takes until it reaches Done
  3. Track how long it takes from when it’s assigned to a developer until it’s Done

That provides your baseline Lead Time and Cycle Time.

Once you have a baseline, you can work with your team to improve those numbers.

How To Move Forward

To improve your software development process, you must have a clear vision for how you wish to improve.

Having values and metrics are the best way to make that vision a reality.

As software developers, we need to know what our most important KPIs are, and continually work to improve them.

If you can only improve one thing about your software process, optimize for high flow. If you can deliver swiftly, you can solve any other software engineering problem you face.