Search This Blog

The aquarium analogy, or: Is it all about the fish?

Recently1 A couple of years ago, I got into the fantastic world of aquariums. At first, I thought there’s not much to know about it. You buy a fish tank, You put water in, some equipment - filters and such, buy some fish, and that’s it. Oh boy, was I wrong…

This is actualy a post about software development. really…!

So why am I blabbering about fish? Well, it occurred to me, that growing a software developement organization is much like maintaining an aquarium. my aquarium

How so?

Well, first I need to bore you with some more “fish talk”2.

A bit more “fish talk”

An aquarium is a closed eco-system. And much of what happens in nature, needs to happen also in your little home aquarium. Experienced fish keepers know this as the nitrogen cycle. In short:

  • fish produce waste
  • waste deteriorates into toxic ammonia
  • bacteria consume ammonia and turns it into (toxic) nitrites
  • nitrates (not very toxic, yet can harmful in very high amounts) are formed from the breakdown of nitrites by nitrifying bacteria
  • plants & algea consume nitrates
  • fish eat the algea
illustration taken from, if you want to learn more about the nitrogen cycle, pay them a visit.

OK, back to “software development talk”

In the same way I want to show off colorful fish, and thriving plants in my living room’s aquarium. An organization would want to show off with (and sell!) their wonderful products.

And much like fish, the product (software) “deteriorates” and needs to be constantly maintained. google explains why software deteriorates

How do we deal with software rot? Should we throw in more bacteria hire more developers to clean up the mess? Probably not. The thing is, that much like in an aquarium where you can’t just throw in bacteria and expect everything to just work, you can’t just blindly hire more developers and expect them to be on top of everything from day one.

Cultivating bacteria

In a newly set up aquarium, there is no nitrogen cycle, since there are no bacteria & no algea…
You’ll need to “jump start” the cycle. There are starter kits, where you just pour bacteria into the aquarium. But it’s not a magic solution. The bacteria takes time to acclimate. If you add too many fish too early, they produce too much waste, and there’s not enough bacteria to consume it. The fish will die.
Instead, you’ll need to slowly build the fish population in parallel to the bacteria population that grows. You do this by taking care of water quality (doing frquent water changes) and making sure ammonia/nitrites levels are kept low. Then, bacteria population will slowly increase, which in time will be able to handle larger bio-loads (more fish).

Cultivating developement teams

You can’t rush building a developement team either. A small, already “acclimated” team, may work well in its domain of expertise. You may even “jump start” a new team by hiring a bunch of experienced senior engineers. But it would be unwise to frequently pivot the team from one product to the next. It takes time until a team starts working together efficiently, and it takes time to gain expertise in a new domain.
You can’t overwhelm a new aquarium with little bacteria with too many fish at once.

Cultivating individuals

Its not just the team you’d want to cultivate. It’s important to grow individuals as well. Investing in personal growth means growing the teams capacity without hiring more people. I.e: scale up vs. scale out. Both are important.


Up until now, I’ve talked mostly about the “capacity” that an organization can burden its engineering department with, and the fact you need to “cultivate” your engineering department in parallel to developing the product. This is one side of the coin (cultivating the bacteria engineering). The other side is making the work itself more “friendly”, by being more focused. The point is, that capacity increses with focus. If the organization is focused on the product vision, it gives the developers the “expertise path” in the domain, which in time scales up (more capacity).

This is true for aquariums as well. You need to focus on your “type of aquarium”. One cannnot just blindly add different species of fish to the same tank. Different species has different temprature ranges they are able to leave in. Different pH (acidity), different KH/GH (hardness), etc’…
But even if all environmental parameters match, you still cannot mix species that are likely to be eaten by a different type of fish you have in the same tank. Same goes for fish that are territorial & aggressive.

No team can handle all products, and no aquarium can handle all fish combinations.
Point is: if you’re focused, you can deliver more. If you’re leaning towards exploration mode (which is totally legit), do it moderately and take into account the hit you’re taking in delivering production grade code.

In summary

  • The organization is the tank
  • The product is the fish
  • The Developers are the bacteria

And you need to take special care balancing everything in order for this eco-system to thrive.

  1. I started writing this post when the aquarium was still a “recent” thing for me…↩︎

  2. I assume many readers are not aware of the fish keeping hobby details, much like the clueless couple-of-years-younger me didn’t. And it is important for the analogy ¯\_(ツ)_/¯↩︎

No comments:

Post a Comment