Software team as an ecosystem
My kids got a fish tank for their birthday. Of course it is Daddy and Mommy who really watch after it, clean it, wash it, feed the inhabitants (and remove an occasional corpse) and grumble at the ever overbreeding snails. Kids do get to help us, and we all get to enjoy watching the fish go about their simple lives. Win-win!
Yet it was also very interesting to rediscover what a simple semi-closed ecosystem is, and how similar it is to a software development team.
|Just added the fish to the top-left, hope they'll adjust too.|
BalanceYou see, what you want to achieve with an aquarium is balance, in as many areas as possible. Fish cannot live without enough oxygen from the plants. Plants cannot thrive without enough carbon dioxide from them and fish "breathing". Plants are also needed to process the excrement of the fish (ewwwww, yes, but also part of life), so that the water does not eventually become contaminated with organics excess. On the other hand, plants cannot really live without enough of those organics in both the soil and the water. Balance!
Therefore "starting" a fish tank is a long and a comparatively thoughtful process. You slowly introduce new inhabitants, both stationary and swimming, and keep checking on their well-being, adjusting the parameters in your control (lighting duration, water temperature, amount of food, water replacement volume and frequency), and hoping that your little friends will also adjust to their new home.
InterdependenceFunny enough, that balance means interdependence. That's what you eventually expect from citizens of an aquarium, and that what also happens in a good software team.
Everyone has their role, their character (you bet!), their skill set and experience, and sometimes even a job description. But no man can ever be "an island unto himself", and a fish tank model can explain that a little bit.
You get your task from someone (even yourself) or somewhere, and you could grumble (we all do), but you need it to do your job. After you're done with the task, you pass it on to somebody (and let's stop with the fish tank analogy right there), and you both need each other. The designers, the developers, the quality assurance guys, all depend on each other to produce a good product for the client, and to continue doing the job they love - that's part of the task, isn't it?
Also, in a good team there is always an atmosphere of sharing - good findings, technological tricks, a good laugh and a good argument. Different skill sets, experiences and backgrounds can contribute to a richer exchange between the team members, as oxygen, as food, as the sometimes ewww-ish but still required organics.
Simple LessonsWhat that teaches me as a developer - make sure that I take (to reduce some of the potential toxicity build up) and give (to make the environment more nutritional). That applies to the work items, but also to emotions, motivations, education etc that can happen within a team. A snappy response may be nothing, and may even help me solve a problem with a colleague, but eventually it could lead to destroying the team.
What that teaches me as a leader - help the team members fit into this environment, make whatever transitions easier, and teach them to adjust in a way that will be good for both them and those around. And watch out for the stupid snails!
Actually, that applies to any team or community. But I happen to deal with software development teams. And fish tanks :)