Categories
Software Architect

Skyscrapers aren’t scalable

97 Things Every Software Architect Should Know – 8/97

We often hear software engineering compared to building skyscrapers, dams, or roads. It’s true in some important aspects.

The hardest part of civil engineering isn’t designing a building that will stand up once it is finished, but figuring out the construction process. The construction process has to go from a bare site to a finished building. In the interim, every worker must be able to apply his trade, and the unfinished structure has to stand up the whole time. We can take a lesson from that when it comes to deploying large integrated systems. (“Integrated” includes virtually every enterprise and web application!) Traditional “big bang” deployments are like stacking up a pile of beams and girders, throwing them into the air, and expecting them to stick together in the shape of a building.

Instead, we should plan to deploy one component at a time. Whether this is a replacement or a greenfield project, this has two large benefits.

First, when we deploy software, we are exposing ourselves to the accumulated technical risk embodied in the code. By deploying one component at a time, we spread technical risk out over a longer period of time. Every component has its own chance to fail in production, letting us harden each one independently.

The second large benefit is that it forces us to create well-defined interfaces between components. Deploying a single component of a new system often means reverse-integrating it with the old system. Therefore, by the time deployment is complete, each component has worked with two different systems: the original and the replacement. Nothing is reusable until it has been reused, so piecewise deployment automatically means greater reusability. In practice, it also leads to better coherence and looser coupling.

Conversely, there are some important ways that civil engineering analogies mislead us. In particular, the concreteness of the real world pushes us toward a waterfall process. After all, nobody starts building a skyscraper without knowing where it’s going or how tall it should be. Adding additional floors to an existing building is costly, disruptive and risky, so we strive to avoid it. Once designed, the skyscraper isn’t supposed to change its location or height. Skyscrapers aren’t scalable.

We cannot easily add lanes to roads, but we’ve learned how to easily add features to software. This isn’t a defect of our software processes, but a virtue of the medium in which we work. It’s OK to release an application that only does a few things, as long as users value those things enough to pay for them. In fact, the earlier you release your application, the greater the net present value of the whole thing will be.

“Early release” may appear to compete with “incremental deployment”, but they can actually work together quite well. Early release of individual components means that each one can iterate independently. In fact, it will force you to work out thorny issues like continuous availability during deployments and protocol versioning.

It’s rare to find a technique that simultaneously provides higher commercial value and better architectural qualities, but early deployment of individual components offers both.

'Coz sharing is caring
Categories
Software Architect

Stand Up!

97 Things Every Software Architect Should Know – 7/97

As architects, many of us have grown from highly technical positions where our success was derived mainly from our ability to talk to machines. However, in the role of architect much of our communication is now done with our fellow human beings. Whether it’s talking to developers about the benefits of employing a specific pattern, or explaining to management the cost-benefit tradeoffs of buying middleware, communication is core to our success.

Although it’s difficult to measure an architect’s impact on a project, if developers consistently ignore their guidance and management doesn’t buy-in to their recommendations, the “rightness” of their guidance will do little to advance their career. Experienced architects understand that they need to “sell” their ideas and need to communicate effectively in order to do that.

Many books have been written on the topic of inter-personal communication, but I wanted to call out one simple, practical, easy-to-employ tip that will drastically increase the effectiveness of your communication, and, consequently, your success as an architect. If you‘re in any situation where you‘re talking to more than one person about your guidance, stand up. Whether it‘s a formal design review, or an informal discussion over some diagrams, it doesn‘t matter. Stand up, especially if everyone else is sitting down.

Standing up automatically communicates authority and self-confidence. You command the room. People will interrupt you less. All that is going to make a big difference to whether or not your recommendations will be adopted.

You‘ll also notice that once you stand, you‘ll start making more use of your hands and other body language. When speaking to groups of 10 or more people, standing up will also help you can make eye contact with everybody. Eye contact, body language, and other visual elements account for a large portion of communication. Standing up also tends to change your tone of voice, volume, pitch, and speed: projecting your voice to larger rooms; slowing down to make more important points. These vocal elements contribute substantially to the effectiveness of communication.

The easiest way to more than double your effectiveness when communicating ideas is quite simply to stand up.

'Coz sharing is caring