This post is inspired by the serendipitous nexus of two separate concepts that I noticed on my Twitter feed today: One serious and grave (but inspiring) and the other not so serious and fun. They came together hours apart, but have that satisfying Reese’s Peanut Butter Cups factor where they are way better together.
First, A tweet from Uncle Bob:
This points to an article he’s written for the Scrum Alliance about the not-so-hidden reason why so many Scrum teams fail: They make a mess fast:
The reason scrum teams make messes is because they have been empowered and incented to make one. And a Scrum team can make a mess really, really fast! A Scrum team is hyper-productive at making messes. Before you know it the mess will be “so big and so deep and so tall, you can not clean it up. There is no way at all.”
And when that happens, productivity declines. Morale goes down. Customers and managers get angry. Life is bad.
Why? Because we don’t have an objective way to measure how a team delivers code while going “fast” and incent good behaviours. You can’t just tell them “WRITE CLEAN CODE” if they don’t know how to do TDD or automated acceptance testing or use tools like NDepend to measure the complexity of the code they’re writing. Suites of tests and automated, repeatable evaluations of code for hotspots go a long way to helping teams improve, but it takes time to build proficiency and break the bad habits that have become engrained and calcified over the years.
Next, a tweet from SharePoint/.NET/WP7 guru, Bil Simser:
This points to a blog post that mused, “What if Visual Studio Had Achievements?”:
What if Visual Studio supported achievements, just like games on Steam, Xbox or PS3? Bragging to your coworkers about which one you’ve just unlocked, imagine that!
Achievements are a brilliant and subtle peer-pressure mechanism where video gamers get “prestige points” according to the feats of derring-do they accomplish in various games. The harder the challenge, the greater the reward, the higher your “gamer score” goes. You can see how your friends stack up against you on leaderboards and claim bragging rights, win some bets and keep the fun going.
NOW, the nexus of the two ideas: What if we could incent developers to adopt better practices by incorporating a similar system in their IDE and code versioning system? The blog post Bil refers to has some great starter ideas, and most of them reward behaviours that get written up in The Daily WTF and Jeff Atwood’s Coding Horror blog. But what if we used the system for good?
Some ideas for achievements I’d like to see:
- The Accountant – Write first test class and method (Inspired by Uncle Bob’s article)
- Transposition Error – Write test that fails first
- The Novice – Write 10 unit tests
- The Apprentice – Write 50 unit tests
- The Journeyman – Write 200 unit tests
- The Craftsman – Write 500 unit tests
- The Master – Write 1000 unit tests
- Toight Loik a Toiga – Write methods that consistently have a low cyclomatic complexity
- The Historian – Write a class or method that has a populated header comment (not just the stub)
- The Biographer – Document 20 methods with comments
- The Librarian – Check in your first project to TFS
- Excuse Me While I Swerve – Create your first code branch in TFS
- Look Out, Coming Through! – Merge your first code branch in TFS back to the main trunk.
And so on – I think this could be an incredibly powerful device to motivate new Scrum teams - especially if there’s some eye-candy and a server that lets them carry their achievements forward from project to project.
This idea appears to have the attention of the Visual Studio Team – from the blog that Bil referred to, I noticed this tiny update footnote:
Update: Jeff Sandquist from Microsoft’s Developer Relations told us that they are going to make this happen! Check out their Coding 4 Fun and Channel 9 projects. More details to follow.