Agile software development is a cooperative game. At least Alistair Cockburn thinks so. I share his opinion and want to dig deeper. There are two words in the definition: game and cooperative. Let's open the dictionary (isn't it a silly trick to start a post?):
Ha! Now it is clear why luck is important in software development at least. There are 2 more serious and interesting words in this definition: play and skills.
Let's skip the details and go right down to the real meat. I have a theory. It is very simple, but my short experience proofs it. Here it is:
Why is that? Well, because software development IS a game. There is no elegant formal proof for this theory (so far, I am drafting it), but I have some in-vivo observations and some ideas behind.
Let's take a non-cooperative game like table tennis. What do you need to do to play table tennis really well? Just 3 things:
1. Like table tennis.
2. Like to win.
3. Train to sharpen your skills.
If you are a decent player, you already have 2 very important skills for software development:
1. Know how to set goals and how to reach the goals (and what does it mean). In table tennis the goal is to win. In software development the main goal is to create a working software. You can directly apply your passion and feelings toward this goal. You are good at table tennis, why not be good at programming? It sets a goal-oriented mentality and helps a lot.
2. Know how to improve and maintain your skills and why it is important. I bet you knew nothing about top spin and dirty tricks as you stood by the table first time. I bet you knew nothing about OOP looking at first lines of code in your life. But you mastered the top spin. And you got OOP eventually. It is all about learning. Games help to set a learn-oriented mentality and that is huge.
I know a person who is equally great at various games: from Quake 3 and chess to table tennis. I believe he will become a great software developer. And I know people who don't play games (almost), and I don't think they will really rock sometime.
Now let's dissect another word.
Mutual assistance and common goal are nice phrases. Cooperative brings team into the game and it makes huge (really HUGE) difference. You may play games and be a real star, but you may just suck at team games. There are people who are great software developers, but poor team members. They can hack alone and create nice staff, but can't maintain communication with the other team members, don't like to assist and pursue their own goals only.
Now imagine that you like to play software development game. You know how to win. You like to help others if it leads to a win. You are sure that your teammates will help you when needed. You share the common vision with the team. How cool is that? Do you want to work in such a place?
Now it is obvious that
It means you can (should?) play basketball, or football, or water polo, or whatever as a team to improve your cooperation as a team. It helps team to jell. It helps people to know each other. It helps leaders to emerge and lead the people. It helps to find people who don't care. I understand that it is hard to find a game you all can play, but it is worth trying.
Disclaimer. Every rule has exceptions and sometimes you come across great software developers who don't like games (and sport) at all, but I am curious enough to know what are they good at apart from software development? Maybe they write poems? Or maybe they paint like Monet? Are there parallels between art and software development? It is an interesting topic indeed.