There is an architecture business cycle that we must live with: organization goals beget requirements, which beget an architecture, which begets a system. Software-intensive systems are built to satisfy a set of requirements. These requirements dictate the system’s performance, availability, security, compatibility with other systems, and the ability to accommodate change over its lifetime. The desire to satisfy these goals with software that has the requisite properties influences the design choices made by a software architect.
Cost is often a primary concern. Making a rational decision about how to scale down a project is one of the tougher tasks project managers encounter. Getting architecture right, early in the product’s life cycle, sets the stage for everything to come—the system’s development, integration, testing, and modification. Getting it wrong means that the fabric of the system is wrong, and it cannot be fixed by weaving in a few new threads or pulling out a few existing ones, which often causes the entire fabric to unravel. Also, checking and fixing an architecture early in the development cycle is relatively inexpensive; fixing it late can be prohibitively expensive or impossible.
Architectures also improve opportunities for reuse of software components. And, with careful planning, reuse of an architecture can lead to the creation of families of systems, which in turn leads to new organizational structures and new business opportunities. Planning for productive use of a system over a long time period is difficult. Changing conditions in markets, technology, the economy, and the political landscape can reduce a system’s utility. How can organizations manage an uncertain future by planning for system evolution in a way that optimizes ongoing system usefulness?
Architecture represents a critical core competency for organizations that build or acquire software-intensive systems. More and more high-performing organizations are taking steps to ensure that their organizations use architectural practices that lead to a positive development outcome, and that their staffs have the appropriate skills and knowledge to put the power of software and system architecture to work for them.