Applying a bit of XP to hobby projects

Hobby projects, everybody has one or two on the go. They’re fun little side-steps from the mundane routine of developing for a living. These projects usually get a fair bit of thought put into them, but precious little time–an unfortunate side-effect of having a life outside work.

We’re all used to working within limited time-frames, but the limitations are much more noticeable when you only have a few hours on a Sunday afternoon. This time is precious, but unfortunately we often find ourselves spending the time doing much less than we would like. That might be because you’ve hit a design aspect you can’t solve yet, or more often because your time is spent flitting between tasks. This lack of visible progress has a demoralising effect, next time you get some free time you may be less inclined to spend it on your project because you know you’ll not make much headway.

After spending what few spare minutes I have (aka. toilet breaks) reading Ron Jeffries book Extreme Programming Adventures in C#, which by-the-way is an excellent read, one aspect stood out that might help reduce the feeling of futility. It’s a concept called User Stories.

A User Story is a short description of the behavior of the system from the point of view of the Customer. They are in the format of about three sentences of text written in the Customer’s terminology without technical jargon. In simplistic terms, user stories are the response to, “Tell me the stories of what the system will do. Write down the name of the story and a paragraph or two.” – XP Practices – User Stories, Mayford Technologies

These stories describe how the customer wants the system to work, in manageable chunks.

Some examples would be:

After adding a new product, we should be shown the inventory with our new product highlighted.

When removing a product from the inventory a reason for the deletion should be supplied by the user, then an e-mail should be sent to the person who added the product with this reason.

Actions should be recorded, so on startup the most commonly used actions can be presented for quick access.

By hijacking this concept, we can improve our morale by giving us some feeling of progress in our project. Next time you’re daydreaming about your hobby project, break down your thoughts and write little stories about the functionality, nothing more than a couple of sentences. Once you’ve got a few stories together, prioritise the stories in whatever fashion suits you best.

Armed with your collection of stories, the next time you sit down for some hobby time, focus only on the first story. When your time is up, if you’ve managed to complete the story, cross it off the list. Then when you’re wrapping up, take a look at that list, doesn’t it feel nice to actually see some progress? You’ve reduced your list by one. That’s substantially more noticeable than just the buckshot effect we’re used to. You’ve actually implemented a new feature!

If you repeat this process whenever you get to do some development, you’ll start making some very visible progress, which is certainly a good feeling. I’ve found that this feeling makes me want to spend more time developing, definitely an improvement over the common feelings of futility.

Give it a try, see how it suits you.