Sailing the Seven C’s

by James C

In this article the author, Grady Booch, outlines the metaphor of software-intensive systems and developers disguised as captains sailing over rivers and oceans. He first describes a river to be the software-intensive system architecture of an enterprise; the larger the enterprise the larger the river and vice versa. He describes the banks of the river to software reaching its limits or colliding with the outside world. The bedrock of the river can either be solid but resistant to change or loose and flexible to its environment. The movement of the river, or enterprise, can be either smooth or turbulent. The clarity of the water could be clear or muddy, corresponding to clean programming or quick-and-dirty programming. The metaphor slightly mentions the cautions of outside pirates and fellow captains that may sail close by. His approach to using rivers was a transition from his previous point of view of developing software using the construction buildings.


I believe using rivers and captains are a more ideal approach to comparing software-intensive systems and developers, respectively. The make-up of rivers alone can generate many analogies between different software components. The idea of being considered a captain is not such a stretch from reality, too. As captains, we developers tend to listen to only ourselves and the code that guides us. The direction of our software program is constrained to follow the easy path downstream, unless we challenge ourselves to go against the flow.

As beginning developers we tend to travel in packs, which is to say that we ride the ferry with other beginners. The more we develop our “sea legs” we branch off more and more on our own. In my case, I was braved out into the deep and began to tread water early; it wasn’t until I realized that reading a boatload of information on traveling the waterways helped me to cross the river easier.


Booch, G. (2009). Like a river. IEEE Software, 26(3), 10-10-11. doi:10.1109/MS.2009.74