Continuous Integration means a lot to me. It's like my second child. I found out the hard way that this sort of cultural thing is very hard to rely on and maintain inside an ever-growing company.
My latest crusade was about ignored tests. When I first came aboard the company, we had many. Since I considered them a broken window, I started handling them one by one.
After a couple of days – Great Success – no more ignored tests. Since then, it has been two years and we've been trying to get the ignored tests in check … unsuccessfully.
First, we started to register the ignored tests introduced in each commit.
Next, we sent a daily personal email to each developer with their own ignored tests.
Then we sent it to their managers.
And, as a final move, we went directly to the developers. Then we heard them say: “I know, I’ll fix them once I finish my super-urgent feature.”.
Days, weeks and months passed by, and nothing was fixed.
I then realized something simple: you can’t make people do things. Even if they understand the importance of the issue at hand, they will assign it a different priority than you. And most of these issues are seemingly not things they enjoy doing.
I wanted to find a way to encourage developers and rally them to my cause.
I started with small "hackathon"-like days, during which we solved a specific issue like dead code or improving tests' execution time.
It worked for a short time, but it didn't achieve the impact I wanted (not too many people are excited about “Hey, we deleted a bunch of code… hooray for us!”). The worst part was that it was a one-time thing: the developers stopped addressing those issues once the hackathon was over.
I needed to return to the basics – understand the user.
For starters, if you don’t know how to do something, at least make sure you're measuring it. So we started to measure some statistics about the issues (number of ignored tests per team, number of dead endpoints, etc) and displayed them on our office monitors.
Although it was very helpful to me, it was not clear enough to other people in the company what those stats meant.
Next, I started to create a backlog of our technical debt tasks. This didn’t work as well (I got the “It's in the backlog” answer from both developers and team leads all the time, but no one seemed to try and get things out of the backlog).
Finally, it struck me: Why not create healthy competition between the groups and teams? This way, we’ll exterminate the “threat” and reward people for doing good deeds for our ecosystem and codebase.
People love to win and - even better – hate to lose. This could create the momentum I wanted and it will go all the way up to the group leads.
So I started thinking about the concept for the first competition – exterminating ignored tests. I wanted a cool and funny way to display it on the boards and make everyone connected, resulting in "Game of Code".
Next to each group's sigil, you can see the number of ignored tests, with the leading group painted green.
I’m getting great feedback, and many questions and discussions about this issue – which is exactly what I wanted: Developers, product and managers are all talking about ignored tests, trying to understand what "this cool Game of Thrones-thing on the monitors" is all about.
And, of course, the groups are starting to churn the ignored tests at a high rate – after two weeks, we are left with only a few remaining tests. As the deadline nears, the rate increases.
I also spotted a few tricksters who tried to cheat the system (our developers are very creative), but this is fine as well – the important thing is that people are paying attention and trying to understand the underlying issue.
People also mentioned that the competition itself is not fair - but it's not meant to be. It's not meant to be fair or balanced. The competition is only an excuse. It is meant to be a fun game for all to play - and at the end, we all win!
So, what is the difference?
A Clear, single goal everyone can easily understand.
Displaying the goal and exposing it to everyone (including the company’s CEO) in a clear, understandable manner creates a larger impact, raises awareness and puts the effort in everyone's faces.
Competition and Gameplay are very good motivators. It's a constructive way to encourage engagement in the most unexpected ways.
How does it all unfold in the long run?
I’ll let you know.
All I know is that when you play the "Game of Code," we all win.