Bindings, Platforms, and Innovation
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
Tracking change and innovation in the enterprise software development community
Posted by Mark Levison on Jul 03, 2008 01:00 AM
Sometimes teams have trouble starting new habits: writing unit tests, fix compiler warnings, not breaking the build. How do we help the team change these habits? Clint Shank designed a game to help people transition.
Now Erik Ramfelt has written a "The Continuous Integration Game plugin" for Hudson. The premise is that sometimes developers need a push to do the right thing:
I've had problems in the past with people breaking the build. To help, I've used techniques like the rotating Build Nazi and the put a dollar in the broken build jar, but these are all negative focused. How about something that rewards developers that don't break the build? How about rewarding developers for following the best practice of breaking their work into smaller chunks and checking in early and often?
After reading Darin Cummins article "The Development Game" (Agile Development Conference 2004), Clint came up with the idea for a game were developers are rewarded for doing good things with the build and punished for doing bad.
As implemented by Eric your karma is calculated with the following rules:
The rules of the game are:
- -10 points for breaking a build
- 0 points for breaking a build that already was broken
- +1 points for doing a build with no failures (unstable builds gives no points)
- -1 points for each new test failures
- +1 points for each new test that passes
Rules that depend on other plugins:
- PMD Plugin. Adding/removing a HIGH priority warning = -5/+5. Adding/removing a MEDIUM priority warning = -3/+3. Adding/removing a LOW priority warning = -1/+1.
- Task Scanner Plugin. Adding/removing a HIGH priority task = -5/+5. Adding/removing a MEDIUM priority task = -3/+3. Adding/removing a LOW priority task = -1/+1
- Warnings Plugin. Adding/removing a compiler warning = -1/+1.
- ...
As Clint warns you do have be on the lookout for cheaters (perhaps doing trivial and pointless checkins every hour) and reset the points every so often to given everyone a chance to win eventually.
When this was discussed on Scrum Development several concerns were raised. Graeme Matthew points out that if the rewards are too big developers might be focused on doing things to improve their score and not deliver value to the customer. Ilja Preuss suggested:
Another thing to keep in mind is that extrinsic motivation typically is in violent conflict with intrinsic motivation. That is, if your team already is well intrinsically motivated, you might well may things worse by adding extrinsic motivation.
Finally Pete Deemer said:
It seems to me like a complex framework of individual incentives would inadvertently cultivate "I" thinking to he detriment of "we" (team) thinking (the latter being one of the "quiet accelerators" in scrum); it would invite optimization at the micro level that is sub-optimal at the macro level; and it would generate a lot of ceremony and mental activity around things other than the the doing of the work in service of the customer.
5 Ways to Ensure Application Performance
Ebook: Scaling Agile with C/ALM
Ensuring Code Quality in Multi-threaded Applications
Our team too had trouble with broken builds. Our solution was to implement a "Stop the Line" approach, though. That is, every time the build breaks, the whole team gathers to analyze the problem and find both a solution for the current problem as well as for the root cause.
This approach seems to be very effective, mostly - so it seems to me - because it doesn't assume the prevalent reason for problems to be that people are just lazy or undisciplined. Since we have started using Stop the Line, we have implemented a wide range of solutions, from the reduction of redundant information in the build system, over changing some conventions regarding our use of SVN, to implementing an Eclipse plugin to make it easier to run all relevant tests before checkin.
Another nice side effect is that it strengthens the collaboration in the team, instead of setting up an atmosphere of competition.
Ilja as usual an elegant solution. I was conflicted when I wrote this piece. On the one hand I like games and how they can make an annoying thing fun on the other I don't like how the competitive aspect can damage the team dynamic.
What if you make the point accumulation to be on a team basis? If someone breaks the build, the team loses 10 points. If someone makes a successful build, the team benefits. Then set a goal for the month/sprint/whatever of X points. If the goal is met, then the team gets something good, and the team sets a higher goal for the next iteration. If the goal is not met, lower the goal to something more obtainable, and progress from there (similar to using velocity)
Will it sounds like an interesting idea. I think the key thing here would be you have to get the team to agree that they want to do it. Also you have to set both the metrics and the reward very very carefully. Set this up wrong and the focus won't be on delivering value for the customer. Instead it will be on gaming the metric.
Do you want to try this out and report back in a few iterations? Seriously.
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
This article explores the use of JBoss and jBPM to implement design solutions that effectively address the issue of orchestrating long running activities.
This presentation covers the use of graph databases as an optimal solution for data that is difficult to fit in static tables, rapidly evolving data or data that has a lot of optional attributes.
This session introduces Real Options and shows how it can help in running your project. Real Options is a decision-making process that can be used to manage risk.
This article discusses the use of bindings on services and references (including the instance of non-configured bindings) as the means to implement SCA communications in a Web and SOA environment.
After a short introduction to DSLs, Scott Davis plays with the keyboard showing how to approach the creation of a DSL by typing working snippets of Groovy code that get executed.
IBM Rational and InfoQ present, Scaling Agile with C/ALM, an eBook showing organizations how to become “finely tuned software delivery machines” by enabling team integration and scaling.
Amanda Laucher presents a real life enterprise application written in F#. She shows actual code snippets, explaining design decisions and suggesting how to use some of the F# constructs.
4 comments
Watch Thread Reply