Part 2A - Understanding Activity-Based Engineering Consumption

(Reading Time: 2 minutes 54 seconds)

From Purpose to Activity

In Part 1, Making Invisible Developer Work Visible, I introduced five purposes of engineering work: Build, Fix, Improve, Run, and Evolve. In this article, we’ll follow three developers through two sprints. Their sprint tables account for 424 of their 480 hours, and show which purposes and activities consumed that time, and which parts of the system it supported.

But those sprint tables only show the work somebody thought to write down. Releasing a button and checking that it works are easy to record. The pull request review before the release, the daily scrum, and the steady stream of direct messages usually aren’t. Neither is the fact that a database migration for the engineering platform is really being done on behalf of the customer portal and the invoice calculation.

In this article, we’ll take the second sprint and ask who the work was for. We’ll come back to where the time went in Part 2B. Some of it traces cleanly to a single feature or service. Some of it is shared, and some of it never made it onto the board at all.

Direct Consumption

Person Task Activity Pool Consumption Object Activity Driver (Hours) Classification
Developer 1 Release button to production Build Customer Portal 6 Direct Consumption
Developer 1 Ensure button works Build Customer Portal 47 Direct Consumption
Developer 2 Release hot fix Fix Invoice Calculation 6 Direct Consumption
Developer 2 Ensure hot fix works Fix Invoice Calculation 61 Direct Consumption

Indirect and Overhead Consumption

Person Task Activity Pool Consumption Object Activity Driver (Hours) Classification
Developer 1 PR Review Fix Invoice Calculation 5 Indirect Consumption
Developer 1 Scrum Meeting Build Customer Portal 8 Overhead Consumption
Developer 1 Direct Messages Build Engineering Platform 14 Overhead Consumption
Developer 2 PR Review Build Customer Portal 5 Indirect Consumption
Developer 2 Scrum Meeting Build Invoice Calculation 8 Overhead Consumption
Developer 3 Direct Messages Evolve Engineering Platform 16 Overhead Consumption
Developer 3 Migrate database by creating test data Evolve Invoice Calculation 32 Indirect Consumption
Developer 3 Migrate database by creating test data Evolve Customer Portal 32 Indirect Consumption

Total Consumption - Development Work

Person Classification Hours
Developer 1 Direct Consumption 53
Developer 1 Indirect Consumption 5
Developer 1 Overhead Consumption 22
Developer 2 Direct Consumption 67
Developer 2 Indirect Consumption 5
Developer 2 Overhead Consumption 8
Developer 3 Direct Consumption 0
Developer 3 Indirect Consumption 64
Developer 3 Overhead Consumption 16

Department Total Consumption

Consumption Objects Direct Consumption Indirect Consumption Overhead Consumption Total Consumption (Hours)
Customer Portal 53 37 8 98
Invoice Calculation 67 37 8 112
Engineering Platform 0 0 30 30

Conclusion - Understanding Activity-Based Consumption

Here we’ve asked who the team’s work was for. Half of the second sprint traces directly to the customer portal or the invoice calculation. The rest is the migration, plus reviews, meetings, and messages. Each one is small on its own, but they touch every developer and every consumption object, and they rarely show up on a Jira board.

The database migration shows why the classification matters. Measured against the engineering platform, Developer 3’s sixty-four hours are direct consumption. Measured against the customer portal and the invoice calculation, the same hours become indirect consumption, split thirty-two and thirty-two. The work didn’t change. The question we asked did. We can only count those hours once, so the tables above use the second view. And that even split is a choice we made, not something we discovered about how the work was done.

We now have a way to see what consumes engineering effort, and who that effort is for. In Part 2B - Understanding Engineering Capacity, we’ll step back and look at where the team’s capacity went across both sprints.