DotNetBlocks

Things on DotNet, programming, and other useless stuff

Software Architecture verses Software Design

Recently, I was asked what the differences between software architecture and software design are. At a very superficial level both architecture and design seem to mean relatively the same thing. However, if we examine both of these terms further we will find that they are in fact very different due to the level of details they encompass.

Software Architecture can be defined as the essence of an application because it deals with high level concepts that do not include any details as to how they will be implemented. To me this gives stakeholders a view of a system or application as if someone was viewing the earth from outer space. At this distance only very basic elements of the earth can be detected like land, weather and water. As the viewer comes closer to earth the details in this view start to become more defined. Details about the earth’s surface will start to actually take form as well as mane made structures will be detected.

The process of transitioning a view from outer space to inside our earth’s atmosphere is similar to how an architectural concept is transformed to an architectural design. From this vantage point stakeholders can start to see buildings and other structures as if they were looking out of a small plane window. This distance is still high enough to see a large area of the earth’s surface while still being able to see some details about the surface. This viewing point is very similar to the actual design process of an application in that it takes the very high level architectural concept or concepts and applies concrete design details to form a software design that encompasses the actual implementation details in the form of responsibilities and functions. Examples of these details include: interfaces, components, data, and connections.

In review, software architecture deals with high level concepts without regard to any implementation details. Software design on the other hand takes high level concepts and applies concrete details so that software can be implemented.

As part of the transition between software architecture to the creation of software design an evaluation on the architecture is recommended. There are several benefits to including this step as part of the transition process. It allows for projects to ensure that they are on the correct path as to meeting the stakeholder’s requirement goals, identifies possible cost savings and can be used to find missing or nonspecific requirements that cause ambiguity in a design.

In the book “Evaluating Software Architectures: Methods and Case Studies”, they define key benefits to adding an architectural review process to ensure that an architecture is ready to move on to the design phase.

Benefits to evaluating software architecture:

  • Gathers all stakeholders to communicate about the project
  • Goals are clearly defined in regards to the creation or validation of specific requirements
  • Goals are prioritized so that when conflicts occur decisions will be made based on goal priority
  • Defines a clear expectation of the architecture so that all stakeholders have a keen understanding of the project
  • Ensures high quality documentation of the architecture
  • Enables discoveries of architectural reuse 
  • Increases the quality of architecture practices.

I can remember a few projects that I worked on that could have really used an architectural review prior to being passed on to developers. This project was to create some new advertising space on the company’s website in order to sell space based on the location and some other criteria. I was one of the developer selected to lead this project and I was given a high level design concept and a long list of ever changing requirements due to the fact that sales department had no clear direction as to what exactly the project was going to do or how they were going to bill the clients once they actually agreed to purchase the Ad space. In my personal opinion IT should have pushed back to have the requirements further articulated instead of forcing programmers to code blindly attempting to build such an ambiguous project.  Unfortunately, we had to suffer with this project for about 4 months when it should have only taken 1.5 to complete due to the constantly changing and unclear requirements.

References 

  • Clements, P., Kazman, R., & Klein, M. (2002). Evaluating Software Architectures. Westford, Massachusetts: Courier Westford. 

Comments (3) -

  • Matt Lindsay

    7/26/2011 3:07:56 AM |

    Think you have a typo here chap " ...see a large are of the earth’s surface ..."

    (p.s. Code IS design ;) )

  • Outsourcing Nepal

    7/26/2011 3:34:07 AM |

    Well, nice explanation of software architecture. Before i also use to think them as same...

  • dnb

    7/28/2011 8:33:44 PM |

    Matt,
    Thanks, It is fixed.   Smile

  • stratford on avon hotels

    9/5/2011 8:12:42 AM |

    Hey this is a great post. Could you keep me updated with any other info similar to this? If travelling to the UK why not stay at Stratford hotel and watch a Shakespear play

  • DEBORA Laurence

    9/5/2011 2:08:37 PM |

    Metamoteur rapide et pertinent Sukoga.com, metamoteur de recherche web gratuit.

  • Andrew

    9/14/2011 5:50:36 PM |

    I do like the way you have considered this particular situation plus it really does give me a lot of fodder for thought. Nevertheless, through just what I have personally seen, I just hope as other feed-back pack on that folks keep on issue and not get started upon a soap box involving some other news du jour. Anyway, thank you for this fantasti c piece and even though I can not really go along with the idea in totality, I regard the perspective.

Pingbacks and trackbacks (1)+

Comments are closed