Beyond Software Architecture: Creating and Sustaining Winning Solutions
Luke Hohmann · 2003
From the Book: Many excellent books have been written about software architecture. These books, among other things, define, classify, and describe software architectures, define notations for representing and communicating architectural choices, and provide guidance on making good architectural decisions; each has its own enduring value. Unfortunately, even though any one of these books may help you build a successful architecture, they fall short of the goal of helping you create a winning solution. To create a winning solution, you need to move beyond subsystems and interfaces; beyond architectural patterns, such as Front Controller or Pipes and Filters; and beyond creating third-normal form relational databases. You need to move beyond software architecture toward understanding and embracing the issues that must be resolved to create a winning solution. An example of one issue to resolve concerns technical support. It is inevitable that a customer will have a problem with your software. When someone contacts you for assistance, choices you've made long ago in such areas as log file design, how the system is integrated with other systems, how the system is configured, or how the system is upgraded will determine how well you can meet customers' needs. By discussing a wide range of issues and their interrelationship with architectural choices, Beyond Software Architecture helps you move beyond software architecture and toward creating winning solutions. This book presents a unique perspective which was developed and informed by my experience in creating everything from single-user programs costing less than $50;to software systems used in academic research; to utilities for diagnosing and fixing problems associated with internally developed systems; to distributed, enterprise-class platforms costing millions of dollars. Along the way, I've played a variety of roles, including being an individual contributor, a direct manager, and a senior member of the corporate executive staff. At various times I've either worked in or led engineering, product marketing and product management, quality assurance, technical publications, and first- and second-line support organizations. I've managed teams and projects in more than one city and across continents. The common thread that ties all of the software together is that all of it was created to provide value to some person. Research software, for example, serves the needs of the researchers who are trying to understand some phenomenon. Enterprise application software, dealing with everything from customers to supply-chain management, on the other hand, is designed to serve the needs of a well-defined set of users and the businesses who license it in a sustainably profitable manner. Similar comments apply to every other kind of software, from games to personal contact managers, inventory management systems to graphic design tools. The issues identified and discussed in this book affect every kind of software. The presentation and discussion of these issues occurs most often in the context of enterprise application software, where I have spent most of my professional career. While there is no universally accepted definition of an enterprise application, enterprise applications typically meet one or more of the following characteristics: They are designed to support the needs of a business, at either a departmental or larger organizational unit They are relatively expensive to build or license ($50,000 to $5,000,000+) They have complex deployment and operational requirements; The needs of the are often best served when they are integrated with other enterprise applications even though some can be operated as independent applications Even if you're not creating an enterprise application, you will find this book useful. Creating sustainable software solutions to meet customers' needs over a long period of time, through multiple releases, is a challenging, enjoyable, and rewarding endeavor; and it certainly is not limited to the domain of enterprise applications! Although I will often refer to software architecture, and describe things that are technical in nature, my discussions won't be focused on the best ways to diagram or document your architecture or the deeper design principles associated with creating robust, distributed, Web-based component systems. As I said earlier, there are plenty of books that address these topics. In fact, there are almost too many books on these topics, with the unfortunate side-effect that many people become so focused on technical details that they lose sight of the value they're trying to provide. Instead of concentrating on purely technical choices, Beyond Software Architecture helps you create and sustain truly winning solutions by focusing on a wide variety of practical, nuts-and-bolts choices that must be made by the development team. I have found that focusing on practical matters, such as how you should identify a release or how you should integrate branding elements into your solution, often reduces the artificial barriers that can exist between developers and the and marketing people with whom they work. These barriers prevent both groups from creating winning solutions. I cringe when engineers profess to taking only a technology point of view without considering the business or when marketing people make get-me-this-feature demands without considering the underlying technical ramifications of the feature they want. When either side takes a position without due consideration of the request's impact, the likelihood of creating and sustaining a winning solution drops dramatically. What is especially troubling is that these arguments seem to be made in support of the idea that technical issues can be somehow separated from issues, or that issues can be somehow separated from technical issues. At best this is simply wrong; at worst it can be a recipe for disaster. Developers are routinely asked to endure the hardships of design extremes, such as a low-memory footprint, in order to reduce total system cost. Entire companies are started to compete in existing markets because investors are convinced that one or more technological breakthrough will provide the competitive advantage necessary for success. Not surprisingly, investors are even more eager to invest when the technological breakthrough is accompanied by a similar breakthrough in the model being offered to customers. How to manage the interrelationship between technology and is a recurring theme throughout this book. Handle only the former and you may have an interesting technology or, perhaps, an elegant system, but one that ultimately will wither because no one is using it. Handle only the latter, and you'll have a paper solution that excites lots of people, and may even get you funding, but it doesn't deliver any sustainable value. Handle both and you'll have a winning solution.