by Leon Rosenshein

Flow vs. Utilization

What should you optimize, utilization (how busy everyone is) or flow (how tasks are moving through the system)? How do you measure those things? What does it even mean if they’re high or low?

What does utilization mean for a developer? What does it include? Of course, time spent typing in code counts. And time spent writing tests. But what about time building/running code and tests? Or time documenting the design decisions made? And the time spent making those decisions? Those should probably count. What about time spent tracking the time spent? Or time planning what work to do? Is time spent helping a co-worker understand something utilization? What about training, or research? All important things so how do you count them?

What does it mean to optimize flow? Is it as simple as increasing the number of Jira task state changes? Or maybe just increasing state changes to the right? Probably not because all Jira state changes aren’t equal. Is popping into existence a state change? Can you optimize development flow like an assembly line?

Or should we be optimizing something else? Like maybe value? Value as in customer value. Whoever your customer is, internal or external. And that value doesn’t exist until it’s delivered. Because working on your machine, or in staging, or some other test harness isn’t value in your customer’s hands.

Which might push you towards optimizing flow. After all, getting a task done adds value, right? Sometimes, but not always. Because, for tracking and dependency reasons, not every task in Jira adds value. In fact, most of them don’t. They’re necessary, but not sufficient. Until all of the required tasks are done, we can’t do the one task that adds value. You could spend a year doing precursor tasks and not add any value. So optimizing flow doesn’t seem right.

So how do you optimize value? First, figure out what value means. What use cases and user stories add the most value? Add new benefits to the user’s workflows? Then figure out which tasks are really required to provide those benefits. Once you know which tasks, focus on those specific tasks, not just any task. Look for bottlenecks and work to reduce them. Concentrate utilization in those areas. Think broadly. If you need domain expertise, get it. Ideally on the team, with the team if needed. If you need broad agreement between customers and suppliers, get that. Make sure everyone involved knows what you’re doing and why.

Or, to but it in the terms we started with, keep individual utilization high on the flow of tasks which roll up to adding value.