How to steal from your customer and then bill them for the privilege

Dave Nicolette, June 1, 2005

This article reiterates and then continues the discussion of stolen time started in this post on my agile development blog.

Is the time spent on technical tasks "stolen time?"

Any software development project involves both the creation of features the user has requested and the creation of technical frameworks and supporting code that enable the solution to run. Jon Kern uses the term feature to describe some bit of user-requested functionality, and the term task to describe some bit of necessary technical functionality. Many others use the term user story for the former and the term technical story for the latter, and understand the word task in the way that Timo Rantalaiho describes it. Whatever terminology you prefer, the fact remains that both types of work are necessary to produce a working software product.

Unfortunately, some agile teams do not treat the technical stories as stories at all. They define "story" to mean, strictly, user stories — stories that describe features. Then they must confront the fact that the technical work must be done whether it is tracked as "stories" or not. To deal with that reality, some teams treat the time spent on purely technical work as "stolen time." But that leads to another dilemma: Stolen time is not supposed to be billed to the customer. Stolen time is time that is taken away from productive, project-related work for some unavoidable reason — illness, vacation, administrative tasks, mandatory staff meetings, urgent technical support issues, or some other trivial thing unrelated to the delivery of the solution. Technical tasks germaine to the project are not in this category; they are definitely project-related.

So, some teams create a special category they call billable stolen time. This provides the team with a way to bill the customer for project-related technical tasks without admitting that technical work is part and parcel of solution delivery. The fallacy is that they believe the customer either does not want to hear about it or will not understand it. But the truth is the customer needs and wants to know about everything he/she is paying for. In the agile community, we call this transparency.

I have seen the lack of transparency lead to strained customer relations. Why, I ask while wearing the customer's shoes, should I permit you to steal time from me and then bill me for the privilege of doing so? You may only bill me for work that contributes to the delivery of the features I have requested. Everything else is somebody else's problem.

At that point, the project manager tries to tap-dance around the question. The customer no longer feels like part of the team, and begins to revert to the traditional adversarial relationship with IT professionals. Lacking trust, the customer will demand more and more formal status information, and the project will soon find itself back at the old waterfall.

Personally, I don't understand why some people don't think the technical tasks are part of delivering the solution. Let's reason through it.

1. Stolen time is
time spent doing things that don't contribute to delivering the solution.
time spent on anything other than a user story (something the customer would recognize as a feature).
a way for the project manager to hide the true status of the project from the customer.

2. Delivery of a feature means
the team asserts that the feature is complete during the end-of-iteration demo.
the team believes the code for the feature is basically complete, but it may not be runnable because the technical infrastructure may not be ready.
the feature runs and has been demonstrated to the customer.

3. Can a feature run without the underlying technical infrastructure?
Yes. No.

4. Is it valid to say a feature is "done" if it does not run?
Yes. No.

5. Therefore...Are technical tasks/stories germaine to the delivery of user features?
Yes. No.

6. If technical tasks/stories are germaine to the delivery of user features, is it correct to say time spent on them is "stolen" time?
Yes. No.

Okay, okay, you made your point...but what difference does it make, really? Doesn't it all wash out in the end?

The difference lies in whether the customer is really able to see where his/her money is going. Any time billable work is dumped into a general category, whether you call it "billable stolen time" or any other name, it naturally raises suspicion about how the time is being spent. Customers may not be able to understand the details of technical tasks that are necessary to make their features run, but they do understand the simple fact that some kind of "technical stuff" must be done before any software will run. They can understand statements like "Set up the database" and "Define user groups for authentication" even if they would be unable to complete those tasks themselves. By having that work on the table in the form of stories, the customer has a way to see where the time and money are going, and to understand why relatively few features are delivered in the first couple of iterations.

Let's walk through a hypothetical project. The customer has budget for four sprints. We're going to use our time machine to go back and run the project two different ways. First, we'll hide the technical stories from the customer and call that work "billable stolen time." Then, we'll be fully transparent with the customer and count all necessary work as "stories."

Our business analysts work with the customer to elicit a list of features. The features break down into nine user stories. Developers make a gut-feel estimate of each story in terms of "story points," using the Fibonacci numbers up to 13, as suggested by Mike Cohn. The customer assigns a value to each story based on his/her own reasoning.

Meanwhile, the technical team members work out the solution architecture and identify six technical stories. They estimate the stories in the same way as the user stories, but these stories have a user-defined value of zero. The technical team members also determine the dependencies between stories. We end up with a Product Backlog that looks like this:

StoryPointsValue
User Story 1575
User Story 2860
User Story 3355
User Story 4550
User Story 51345
User Story 6535
User Story 7510
User Story 885
User Story 932
Technical Story 180
Technical Story 250
Technical Story 350
Technical Story 430
Technical Story 520
Technical Story 610

The dependencies among the stories end up looking like this:

StoryTech Story 1Tech Story 2Tech Story 3Tech Story 4Tech Story 5Tech Story 6
User Story 1XXX   
User Story 2X XX  
User Story 3X   X 
User Story 4 XXX  
User Story 5 X XX 
User Story 6     X
User Story 7   X  
User Story 8    X 
User Story 9    X 
Technical Story 1  X   

Now let's create a sprint backlog for sprint 1. We think we can deliver 30 points of work in a sprint. Based on our CSM training, we know we should apply an adjustment factor of 0.6 to the first sprint to account for ramp-up time. So, we commit to 18 points of work in sprint 1. As a starting point, based on the dependencies we've identified, we have the following:

StoryPointsValueComments
Technical Story 350Prerequisite to Technical Story 1
Technical Story 180Prerequisite to User Story 1
Technical Story 250Prerequisite to User Story 1
 180

This isn't so good, because we're not delivering any user value. An agile principle is to deliver at least some user value in every iteration, including the first. So we shift things around a bit in order to bring a user story with a reasonable amount of customer-defined value to the fore, and we end up with this:

StoryPointsValueComments
Technical Story 350Prerequisite to Technical Story 1
Technical Story 180Prerequisite to User Story 1
Technical Story 520Prerequisite to User Story 3
User Story 3355 
 1855

Now let's run the project both ways and see what happens.

Sprint 1 when technical work is hidden from the customer

The sprint backlog that we show the customer for sprint 1 includes no technical stories, because we want to show the customer only the user stories. We'll slip the technical work in "on the side" and call it "billable stolen time." This way, the customer will think the entire universe consists solely of the features he/she has requested. They don't understand the rest of it, anyway. So we show them this:

StoryPointsValueComments
User Story 3355 
 355

The customer is perplexed. He/she understands there's a certain amount of ramp-up work to do at the beginning of development. But 3 story points? Is that really all we can deliver? What are we doing with the money and time? We assure him/her that we have some technical stuff to take care of, but that real value will start rolling in very soon. The customer is skeptical, but willing to proceed. Already the customer relationship is not as positive as it could be, thanks to the lack of transparency...and nothing has happened yet!

What happens...

Due to the kinds of problems that often come up when a team is creating the technical infrastructure for a solution, the team doesn't have time to get started on User Story 3 after all. They manage to complete all three technical stories, and they have good reasons for the additional time they spent, but none of that is visible to the customer. Instead, the customer only sees an entire sprint devoted to "billable stolen time," and no value delivered. Adding insult to injury, the customer is being billed for the equivalent of 24 points' worth of "billable stolen time." The velocity chart for sprint 1 looks like this:

...and the earned value chart at the end of sprint 1 looks like this:

At the end of sprint 1, no value has been delivered, the team's velocity appears to be zero, and the customer is left feeling uncertain about whether the agile approach is going to be worthwhile. At least with the traditional methodology, there was always someone to blame. This is starting to look like a money pit.

Sprint 1 when technical work is visible to the customer

We show the sprint backlog we came up with to the customer and explain that the technical stories are necessary in order to make the requested features work. Although the customer lacks the technical experience to understand the details, he/she does understand the general reasoning behind this, and feels very positive about going forward with the project.

What happens...

The team encounters the same technical challenges as in the first case, and fails to deliver User Story 3. The difference is that the customer already knows about those problems and is aware that the technical stories took a little more work to complete than was originally estimated. Although no user stories were delivered in the first sprint, the customer has full visibility into the progress the team is making and knows value will soon be delivered. The velocity chart for sprint 1 looks like this:

Earned value is zero for the same reasons as in the non-transparent example. But this time the customer is part of the team and understands what is going on. The customer relationship is in good shape.

Sprint 2 when technical work is hidden from the customer

The sprint backlog for sprint 2 begins with the leftover work from sprint 1. Some people call this hangover. We still think we can deliver 30 points of work in a normal sprint. We attribute the low velocity in sprint 1 to specific technical problems that will not recur. Working from the product backlog, we commit to 30 points of work in sprint 2, and we assure the customer that we have solved the initial technical problems and are now poised to deliver high value. A subtle problem occurs as a result of the poor customer relationship and the lack of transparency: The customer does not really examine the proposed sprint backlog to see if there are opportunities to improve the value returned, because he/she doesn't feel fully involved in the project.

StoryPointsValueComments
User Story 3355Left over from sprint 1
User Story 1575 
User Story 2860 
User Story 4550 
User Story 6535 
 24275

What happens...

The team completes 22 story points during sprint 2, but only 8 of these count toward user stories. Six are used in the incomplete User Story 2, which cannot count at all according to the agile principle that only completed stories count. A further 8 story points are absorbed by technical work that is not being tracked as "stories." User Story 2 is left unfinished and User Story 4 and 6 are not started. The customer is billed for 14 points' worth of so-called "billable stolen time." The whole "billable stolen time" thing is getting old. Where's the promised value? Since the technical work is hidden as "stolen time," the implied value promise for sprint 2 is very high, yet very little is actually achieved. The velocity chart now looks like this:

...and the earned value chart at the end of sprint 2 looks like this:

The customer is not pleased about having to pay for "stolen time," and still does not quite see where all his/her time and money are going, but at least the team is showing a non-zero velocity now, and at least some value has been delivered, even if less than promised. The customer decides not to cancel the project just now, but this is still far from a collaborative customer relationship and the reason is the lack of transparency. Things really aren't going badly, but the lack of transparency leaves the customer with a bad taste.

Sprint 2 when technical work is visible to the customer

Although the team failed to deliver any features in sprint 1, the customer is fully aware of all the technical problems the team encountered and knows there were good reasons why the initial technical stories took longer than originally expected. Working closely with the team, the customer decides to reprioritize the stories in sprint 2 to maximize the value returned. Since User Story 3 was not started, it is safe to move it. The customer moves User Story 3 behind User Story 2, which is worth 5 more value points. The sprint 2 backlog now looks like this:

StoryPointsValueComments
Technical Story 250Prerequisite to User Story 1
User Story 1575 
Technical Story 430Prerequisite to User Story 2
User Story 2860 
User Story 3355Left over from sprint 1; reprioritized
User Story 4550 
 29240

What happens...

The team completes 22 story points during sprint 2, leaving User Story 3 and User Story 4 unfinished. All the work is visible to the customer, who is not worried about the fact two stories were left unfinished. To the contrary, he/she is pleased that User Story 2 was completed, since it provides more value than the stories that were not completed. The velocity chart for the transparent version of the project now looks like this:

...and the earned value chart at the end of sprint 2 looks like this:

The customer is now slightly ahead in terms of earned value, and the team is working smoothly enough with the customer that delays and technical problems are likely to be understood and forgiven. The customer is happy with the value earned so far and is looking foward to sprint 3.

Sprint 3 when technical work is hidden from the customer

Everyone is frustrated with the project, thanks to the atmosphere of distrust that has developed as a result of the lack of transparency regarding technical stories. The team commits to 23 points of user stories.

StoryPointsValueComments
User Story 2860 
User Story 4550 
User Story 5545 
User Story 6535 
 23190

What happens...

Midway through the sprint, the customer decides to "take control" of the project. The team has repeatedly promised high value and has consistently failed to deliver. At the same time, there always seems to be a substantial amount of mysterious "billable stolen time." Enough. The customer halts work and calls a massive status meeting. For hours, everyone vents their pent-up frustration. There are recriminations and finger-pointing. Afterward, the customer insists that each team member prepare a detailed, written report of everything they have done since the start of the project. As a result, the team is only able to deliver 7 points' worth of user stories, completing the remainder of User Story 2 and all of User Story 4. They also bill the customer for 11 points' worth of "billable stolen time" for technical work. The velocity chart now looks like this:

...and the earned value chart at the end of sprint 3 looks like this:

Even after making a great effort to gain control of the project and to understand what is really going on, the customer is unhappy to be billed yet again for "stolen time." and once again to receive far less than the promised value. He/she is now considering canceling the project.

Sprint 3 when technical work is visible to the customer

The team has been making good progress and the customer is pleasd with the results as well as the process.

StoryPointsValueComments
User Story 3155Partially complete
User Story 4550 
User Story 51345Prerequisite to User Story 2
Technical Story 610 
User Story 6535Left over from sprint 1; reprioritized
 25185

What happens...

The team delivers 25 story points, meeting its commitment for the sprint. The velocity chart now looks like this:

...and the earned value chart at the end of sprint 3 looks like this:

The customer and the team are enthusiastic and motivated. Everyone is looking forward to wrapping up the project on schedule and on budget with all features delivered.

Sprint 4 when technical work is hidden from the customer

This is supposed to be the final sprint, so the team accepts all the remaining user stories and hopes for the best. The customer is just hoping to realize some of the promised value for this investment.

StoryPointsValueComments
User Story 5545 
User Story 6535 
User Story 7510 
User Story 885 
User Story 932 
 2697

What happens...

The team delivers User Stories 5, 6, and 7, but is unable to complete User Stories 8 and 9. A point's worth of technical work was also done, and was billed to the customer as "billable stolen time." This is not much money, but the fact there is still work going on that seems to be project-related and yet is not properly tracked is enough to make the customer feel dissatisfied. The velocity chart now looks like this:

...and the earned value chart at the end of sprint 4 looks like this:

The customer decides to end the project at this point. Although a couple of user stories still remain, they are of relatively low value and the customer would rather live without the features than to continue working with the team under the circumstances.

Sprint 4 when technical work is visible to the customer

The team has been making good progress and the customer is pleasd with the results as well as the process.

StoryPointsValueComments
User Story 7510 
User Story 885 
User Story 932 
 25185

What happens...

The team has plenty of time to complete the remaining user stories, to do additional testing, and to prepare for production deployment. The project is completed on time, on budget, and with all features delivered. The velocity chart looks like this:

...and the earned value chart at the end of sprint 4 looks like this:

The customer is very pleased with the result and is ready to use the agile approach on his/her next project.

Conclusion

Although the results of the two projects are not radically different, the customer's perception of the process and the team's morale and sense of accomplishment are very different indeed. In the first case, the team feels as if they have "escaped" from an unpleasant project. They are relieved it is behind them, but they feel little sense of accomplishment or pride. The customer will talk about his/her experience with peers over a game of golf or a few drinks, and they in turn will be hesitant to approve a project using the agile approach for their own business units. This is a hidden cost of the lack of transparency.

In the second case, the team does not feel exhausted or frustrated at the end of the project. They are motivated and ready to start another project. The customer is pleased and excited about this high-value process called "agile development," and will talk about his/her experiences with peers over a game of golf or a few drinks. They, in turn, will be eager to approve their next projects using the agile approach. This is a secondary benefit of transparency.

My advice: Any and all work that contributes to the delivery of features must be visible to the customer, explained, and tracked transparently. Any time you call "stolen" must really be stolen — that is, it must be time that was planned for productive work but that was used up for some other purpose. On no account is this billable to the customer.