- High Availability
- Monitoring
- Coping with Release Cycles
- The Cost of Complexity Shackled to Large Architectures
- Looking for Speed
- It's Not a One-Man Mission
The Cost of Complexity Shackled to Large Architectures
It has long since been established that, in the world of technology, having even the smallest gadget grants certain bragging rights. However, for one reason or another, when it comes to the technology architecture, everyone likes to brag that he has bigger toys than the next guy.
I can't count the number of times I've overheard developers and engineers at conferences arguing about who has the larger and more complicated architecture. Since when did this become a goal? The point of building scalable systems is that they scale easily and cost effectively. One aspect of being cost effective is minimizing the required infrastructure, and another is minimizing the cost of maintaining that architecture. Two people arguing over who has the more complicated architecture sounds like two people arguing over who can burn money in a hotter furnace—I hope they both win.
Of course, architectures can be necessarily complicated. But a good architect should always be battling to KISS (keep it simple, stupid). Two fundamental truths about complex architectures are as follows:
- Independent architectural components added to a system complicate it linearly. Dependent architectural components added complicate it exponentially.
- Complex systems of any type are complicated.
The first means that when one component relies on another component in the architecture, it compounds the complexity. An example of an independent component is a transparent web proxy-cache. The device sits out front and simply attempts to speed viewing of the site by caching content. It can be removed without affecting the function of the architecture. On the other hand, the complexity of a core database server is compounded because the web application depends on it.
Although the second truth may sound overly obvious, it is often ignored or overlooked. A complex system is more difficult to operate, develop, extend, troubleshoot, and simply be around. Inevitably, business requirements will change, and modifications will need to be made. Complex systems have a tendency to become more complex when they are modified to accomplish new tasks.