Tuesday, April 10, 2012

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.

Balance

You 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.

Interdependence

Funny 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 Lessons

What 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 :)

2 comments:

  1. Wow, what a useful analogy! That's because I thought of a use for it! You get yourself an aquarium. Then you get into it same number of "identifiable" objects as you have members in your team. They may all be fishes. But you can also make some of them plants or rocks, castles etc. Then you make one-to-one mapping between those aquarium objects and your team members. If the aquarium is at the work, it is even better!

    Actually, I had similar idea of visualization for a "dashboard tool" for a long time. Data comes from sources like time spent reports, code metrics, bug statistics, VCS repo statistics etc. Visualization is an aquarium with employees being fishes. The better an employee works the closer she is to the surface. The more hours/work she does, the quicker and more energetic the fish movements are. Locations in aquarium can be associated with projects. Employee working simultaneously on two projects darts between to locations in aquarium as the fish.

    Clicking on a location or on a fish gives detailed info. Choosing feed tool and clicking it on a fish sends automatic request for bonus for the employee. :)

    ReplyDelete
    Replies
    1. :))) I would love to see this visualization!

      You can also include indicators of project health (murky water, lots of, ahem, excrements on the bottom, excessive algae growth etc) if some project actors negatively affect its balance, based on efficiency ratings - and this is not balanced by other actors (and if they do balance it - then such overinvolvement affects their health).

      Thanks for your feedback!

      Delete