Here's How Your Mom Would Want You to Develop Software

We had a heated debate today in our weekly all-hands developer meeting about whether agile points should be given to bugs and chores as well as features. We use the story types mandated by Pivotal Tracker. In a nutshell, features are stories that add clear value to the user (so they can be expressed using the formulation "As a user I want...") whereas chores don't (they might be necessary, for example, to pay down technical debt). Bugs are, well, bugs.

Monica's closet

According to Pivotal Tracker orthodoxy, only features are assigned story points. Your team's "velocity" depends on the average story points completed over the past 3-4 iterations, so if you spend a lot of time on refactoring or fixing bugs, your velocity will go down. So our sales team started agitating to assign points to chores and bugs as well so that "clients can appreciate all the hard work we're doing."

To me, this triggered memories of trying to keep my room clean as a child. If you're a slob like I was, you throw your dirty socks and candy wrappers on the floor until you're not sure there is a floor anymore. Your mom keeps saying "just put your socks in the laundry and your rubbish in the trashcan every day and you'll never have to tidy up." But somehow that seems like too much effort, so the mess accumulates until even you can't bear it anymore.

The danger is that by then the thought of tidying the room properly is too traumatic to contemplate. So instead you end up grabbing armloads of stuff and shoveling them into your closet. Close the closet door (push hard!) and voilĂ , your room is clean. Except it isn't. The mess is still there, it's just less visible.

Pointing chores and bugs is essentially the same thing. The best thing about agile pointing is that it creates the right incentives for developers by measuring their true productivity in terms of user value created. Just filled three sprints with nothing but bug-fixing? Just spent a month refactoring your database layer because it had become unmaintainable? Your sinking velocity is telling you something. You need to figure out what it is and fix it.

Maybe your specs are incomplete or wrong, so you aren't developing what the client actually wants. Maybe you aren't writing enough unit or integration tests, so bugs get further in the development cycle than they should. Maybe you are coding too fast with insufficient planning, so your design is not capable of absorbing new requirements and needs larger and more frequent refactorings than it should.

Whatever the case, assigning points to chores and bugs is just stuffing those underlying problems into a metaphorical closet. Let story points do their job and warn you when there is a fundamental issue with your development process. But don't take my word for it. Ask your mom, she'll tell you the same.

Matt

Matt