Copy Paste is for Word | Software Construction and more

Software Architecture vs Software Design

I cannot find in the literature a precise distinction between Software Architecture and Software Design. Of course, I did not read all the books about software Architecture available in the market, but I read two great books, which I recommend (mentioned on footnotes below), but neither of them, IMHO, are clear when try to differentiate one from the other.

Fairbanks in his book says: “In practice, you will often find it difficult to differentiate architecture from detailed design”. And also adds: “You will not be alone, since experts generally agree about the broad strokes of architecture but disagree about the fine details, such as where architecture stops and detailed design begins”. Others say that architecture refers to high level details, and Design to low level details.

Where is the line that clearly separates what is Architecture and what is Design? Where Architecture stops and where Design begins? If you are presented with any kind of software diagram, is that Architecture or Design? Also, I have read about Modular Design and Modular Architecture, same concept with a different title, which one is the most appropriate? I will try to answer these questions.

The rule that I think we should use is: If the elements of a software diagram can be mapped one to one to a programming language syntactical construction, then is Design, if not is Architecture.

So, for example, if you are seeing a class diagram or a sequence diagram, you are able to map a class and their relationships to an Object Oriented Programming language using the Class syntactical construction. This is clearly Design. In addition, this might bring to the table that this discussion has a relation with the programming language you will use to implement a software system. If you use Java, the previous example applies, as Java is an Object Oriented Programming Language. If you come up with a diagram that shows packages and its dependencies, that is Design too. You can map the element (a package in this case) to a Java syntactical construction.

Now, suppose your Java application is divided in modules, and each module is a set of packages (represented as a jar file deployment unit), and you are presented with a diagram containing modules and its dependencies, then, that is Architecture. There isn’t a way in Java (at least not until Java 7) to map a module (a set of packages) to a syntactical construction. You might notice that this diagram represents a step higher in the level of abstraction of your software model. Any diagram above (coarse grained than) a package diagram, represents an Architectural view when developing in the Java programming language. On the other hand, if you are developing in Modula-2, then a module diagram represents a Design.

As a final more obvious example, a diagram that represents a layered style system, it is clearly Architecture. There is no way to map the element (layer) to a syntactical construction in any programming language (at least that I’m aware of).

The rule above is applicable to the activity too. If you are creating a Class diagram, then you are working on the Design of your software. And if you are creating a layered picture, then you are working on the Architecture of your software.

I’m happy with this distinction. My thoughts could look pretty obvious, but as I mentioned before, I did not find a precise description in other trusted sources. Welcome to hear your comments.

1) Software Architecture. Foundations. Theory and Practice.Taylor, Medvidovic and Dashofy.
2) Just Enough Software Architecture. A Risk-Driver Approach. George Fairbanks.

  • Acacio

    Well, in our company we call architecture the relationship between different components and systems. By a component we understand everything that can fail independent of other components and, as such, the other components must be resilient enough to cope with its failure without spreading havoc (and possibly gracefully degrading). So when we say architecture we’re actually interested in things like resiliency, failover, replication, etc.
    Everything further then this we call design, even the layers that comprise each individual component. When we talk about design, we’re interested in things like design patterns, best practices, maintenance, etc.

  • Anonymous

    Thanks for sharing your thoughts.

  • http://softwarearchitectureinpractice.com/software-architecture-foundations-theory-and-practice.html Software Architecture: Foundations, Theory, and Practice | Software Architecture In Practice

    [...] architecture, software program style, component-based software engineering, and distributed systems Software architecture is foundational to the development of significant, practical software program…="http://ecx.images-amazon.com/images/I/513UtT4KOBL.jpg" alt="Software Architecture: Foundations, [...]

  • Kamran Ahmed

    This has helped me a very little. Can you please provide some difference between the software architecture model and software design model in bullets? ^_^

 

Essentials