What is Software Architecture?

To set the context for subsequent posts, I thought we’d start with the topic of “what is software architecture?” Bass, Clements and Kazman’s definition of software architecture  (in essence, the high level structure of the system, described in terms of components and their externally visible properties and the relationships among them) has been very influential. While this definition has resonated with many people, the continuing discussion indicates some remaining uneasiness with definitions proposed so far.  We prefer to use the Bass et. al. definition and focus on the central concerns that software architecture addresses. (You might also like to take a look at Chapter 1: Software Architecture: central concerns and key decisions.) 

Complexity and Cost of Change

We need architecture to manage complexity and cost of change. Grady Booch puts it like this: “all architecture is design, but not all design is architecture. Architecture represents the significant design decisions that shape a system, where significant is measured by cost of change.” Cost of change goes up as scope of impact increases, so this definition covers decisions relating to system decomposition as well as those addressing cross-cutting concerns. Cost of change is also high if a significant chunk of the system has to be revised or rewritten, so this speaks to challenging pieces of the system.

Big Rocks First

We use the “big rocks” metaphor (see slide 6 and 7): If we start with the big rocks, then add the pebbles, and last the sand, we fit them all into our jar. And yes, we could even add water. The point is not that we can always ask developers to do more! The point is that if we start with the sand, add the pebbles, and then try to add the big rocks, we cannot fit them all in the jar. To fit them all in, we must start with the big rocks. Architecture is about getting the big rocks in place first.

But what are the “big rocks”? The architectural elements—the components and their relationships, yes. And architectural mechanisms addressing cross-cutting concerns or systemic properties, yes. Big rocks bear a high cost of change, yes. Is there more?

Architecture Implements Strategy

The architect of early generations of HP OpenView said “Architecture is the translation of business strategy into technical strategy.” This definition focuses on the strategic nature of architecture. What is significant, in this view, is driven by what is strategic, and what is strategic determines how we will compete. How we will differentiate dictates the big things we must get right, what hard problems we will tackle, where we will innovate, and where we must be ahead of competition. And it allows us to accept good-enough along those dimensions where we are not trying to create competitive advantage. Of course, even “good enough” may be challenging, especially when taken in conjunction with where we aim to differentiate.

The business or product strategy needs to establish what differentiating value we will deliver to our customers, our shareholders, our partners in the value network and our people. The architect needs to assess what capabilities will deliver this value. Architecture is about designing system capabilities that deliver the value propositions and reinforce the identity of the system (application, product, product-line, etc.) in alignment with the business strategy.

Architecturally significant decisions are those that must be made by the person or team who has influence and perspective across the system in order to deliver on the strategic objectives of the system.

Architecture Balances Differentiation, Complexity and Cost

The architect needs to balance the need to differentiate, with the lifecycle cost of the features and quality attributes we pursue. What we need to do, just to be in the game, constrains what we can accomplish in order to distinguish our products or services and business. For example, in many systems some level of security, scalability, and disaster recovery are threshold attributes not our avenues for differentiation. So we must develop mechanisms (authentication, encryption and firewalls; load balancing; failover, etc.) to address these challenges. Just delivering the base level of features and qualities is challenging, given the threshold set by intense competition in most markets.

Others will have a say in what our opportunities are to differentiate (e.g., marketing). And others will have a say in identifying the challenges we face to build and field systems in our domain (e.g., development). The architect needs to play a role in balancing what we would like to do, with what we are able to do given our resources and capabilities.

Architecture Expands Our Capability

Moreover, the architecture needs to play a role in increasing what we are able to do, and increasing the value of what we attempt to do, by allowing focus. Focusing attention, enabling specialization and separation, understanding where outsourcing or licensing can be leveraged, reducing complexity and scope where it is not essential to our value proposition. Knowing what to focus on and knowing what we can ignore—both are key to success.

Architecturally Significant Decisions

So architecture helps us manage complexity and cost of change, and deliver differentiating value in alignment with our business and product strategy. Architecturally significant decisions are those that the architect (or architecture team) needs to make in order to address these concerns (strategy, complexity, and cost of change). They generally include the high-level decomposition of the system and address cross-cutting concerns. What we do is driven by our business strategy, how we do it is driven by cost of change.

Furthering the State of our Understanding

Whatever else you might add, I hope that in the commentary on this post, you will share as concretely as you are comfortable with given the public forum (and your level of identity disclosure),

  • what are the major concerns you address through architecture, and
  • what kinds of decisions are architecturally significant for your system?

To set context for your observations, it would be very helpful if you would provide some background, such as

  • what kind of system you are working on (embedded system, e-commerce system, whatever),
  • some indication of complexity (like size of the development team), and
  • what your role is.

7 Comments »

  1. srihari said,

    July 12, 2006 @ 1:54 pm

    I am just starting with learning what is architecture… Want to grow as Software architectural consultant…

    I have some questions that need to be addressed

    1. Is this decision right in terms of earnings.. when I have talent and can grow in any of the dimensions..
    2. What is my need to the world now… Are there any better things I could do to get the life for many

  2. Ruth said,

    July 15, 2006 @ 11:48 pm

    Hello Srihari,

    1. The architect position carries broader responsibility and this is generally associated with higher salary than more narrowly scoped positions. I have lamented some really promising architects being lost to the management track because the salaries and promotion opportunities there were greater (and the opportunities opened up faster). This will presumably change as organizations realize that they need to create incentives for architectural talent to stay in the architect career track, and to attract developers who show promise as system designers into the architect career track.

    2. I’m guessing that in your second question you are asking if architecture is a career in which you can make a contribution in a larger sense. I think we live in exciting times where the cumulative effects of technology advances mean huge and rapid changes for mankind. Further, architects have the responsibility and the opportunity to be innovative, and this is both exciting and opens up opportunities to change the world in small and in big ways.

  3. srihari said,

    July 17, 2006 @ 6:27 am

    am a laymenn in this incentives world.. Do you have rough guesses or numbers around how much would be the salary difference

  4. srihari said,

    July 17, 2006 @ 6:42 am

    http://www.bredemeyer.com/ is a fabulous site who wants to become a software architect. hats off..

    I was just looking for something exactly like this. Just could not get to any one apart from this.

    Thank you. Hopefully, this would be my reference and guide.

  5. Ruth said,

    July 24, 2006 @ 4:00 pm

    Hello Srihari,

    Allan Hoffman has a nice article on the Role of the Architect and he quotes the Robert Half Technology Salary Guide which pegs the architect salary range at $77,250 to $108,000. See Career Spotlight: Software Architect, by Allan Hoffman at http://technology.monster.com/articles/softwarearchitect/

    But architect salaries run a much larger range than that. This is because architects range in decision scope from product/application architect all the way up to chief architect. Even within “chief architect” there is a range. In R&D, there may be a chief architect with responsibility for products in a division or business unit, or there may be a chief architect for the entire corporation. Bill Gates is the most well-known example. I don’t think he was paid $108,000 per year!! :-)

    So you see, the sky is the limit. Good luck!

    Thanks for the compliment on the Resources for Architects site at http://www.bredemeyer.com. We try to make it valuable to the community. Always willing to add new resources that are valuable to architects, so if you come across other resources we should link or reference, please let us know.

  6. Ruth said,

    August 16, 2006 @ 2:45 pm

    For more on architect salary data, see:

    Software Architect Salaries in the UK, on ITJobsWatch.com at http://www.itjobswatch.co.uk/jobs/uk/software%20architect.do

    Average IT Manager Makes $99,000, Staffer $73,000, InformationWeek Survey Finds, by Marianne Kolbasuk McGee, InformationWeek, Apr 24, 2006 at http://www.informationweek.com/news/showArticle.jhtml?articleID=186500737

  7. sanjib pandey said,

    March 1, 2007 @ 10:39 am

    Dear sir,
    i have am just starting with learning what is architecture… Want to grow as Software architectural consultant…

    I have some questions that need to be addressed

    1. when some one have talent and can grow in any of the dimensions and he has not mention his designation and having good skill set of software architech, it is fair to reject any CV with out desination even he have exellent skill set.
    2. What is need to now…to convince our CEO of our company.he is basically booky knowldge man and he could not get the point of tech knoeldge
    so please give good defination of s/w architec did he need desination give me suggestion, so that i can convince my CEO
    thanks
    Regards
    Sanjib

RSS feed for comments on this post · TrackBack URI

Leave a Comment

You must be logged in to post a comment.