A brief overview about Software Design and Software architecture

What is Software Design and Architecture? How they relate and differ each other?

To try to understand Software Design/Architecture, we can do an analogy using a project of a house, for example:

Software Architecture

As an architect, you would have high level concerns, such as:

These are higher level questions and show interactions of many “components” on a wide scope.

So during the architecture we need to know:

What is a quality trade-off?

A tradeoff happens when to make an improvement you must sacrifice some other quality, for example: Adding security layer even if it costs some performance, makes the application safer.

What are important skills for a Software Architect?

As an Architect it is necessary to interact, collect feedback and meet the stakeholders expectations.

Who are the Stakeholders and how the Software Architect interacts to them?

Software Design

Still considering the house project as example, the “Design” involves a low level scope, which means, we can can go on details for a given component.

Considering we need to build the kitchen, now the questions are:

When we enter in “implementation” details of a “component” we are talking about the design.

But what are the Stages of the Software Design?

Stage 1: Conceptual Design

This part is closer to the software behavior and functional validation.

What is CRC (Class Responsibility Collaborator)?

This technique helps you see the relations between classes or components.

Stage 2: Technical Design

This part is closer to the software implementation.

Categories of objects

During the technical design, many types of objects will be evidenced: