Skip to content
#Architecture

[1/2] Teaching Software Architecture Design - Building Intuition (Category Architecture)

#Architecture #Software #Engineering #SelfDevelopment

I read an interesting one recently. whitepaper Architecture training from Gaurav Agerwala, Len Bass. I was interested in this article because of its author, Len Bass, who co-authored the classic book Software Architecture in Practice and teaches at Carnegie Mellon University. And I can say that I was not disappointed - the authors' approach to learning is somewhat similar to the system design interview process that we practice in our company:) By the way, the description of the approach is on Github

Now let’s move on to the article itself.

The researchers in the article talk about their method and the structure of the course, which aims to demystify the process of software design and help students think analytically, while developing intuition, about compromise decisions made at the design stage. But it all starts with an introduction, where the authors recall different design processes.

  • ACDM (Architecure Centric Design Method) Iterative approach from the middle of two thousandth to software design, which puts design at the center of development processes. More details can be read here
  • ADD (Attribute Driven Design) System methodology from the beginning of two thousandth for software design, which focuses on the implementation and prioritization of quality attributes (quality attributes) simultaneously with functional requirements. The goal is to create an efficient architecture that meets both functional and non-functional requirements.

Len Bass was involved in both approaches, but he decided to do the SADM process for students. (Software Architecture Design Method)which is available on GitHub It focuses on key activities in identifying and analyzing top-level requirements-based design. In this it is similar to ADD, but it is less formal and focuses on helping students develop intuition. The focus here is not on the individual steps of a complex process, but on the practical design of complex systems where there are many unknowns. The very essence of the SADM method is to give the designer a tool to work with these unknowns. SADM is a method for decomposing a system or component that looks like this.

  • We have requirements at the entrance.
  • We're building a context diagram. Select the scope for decomposition We offer a hypothesis on how to make a decomposition Ensure that we meet the functional requirements (scenario) We check that we satisfy the attributes of quality. (By the way, in Github repositories presentations about such attributes as availability, performance, observability, security, modifiability, integrability) If we have unknown moments, we put them in a table with process steps to deal with them later. This decomposition goes on until we have decomposed the system into parts so as to cover all requirements.

And now a little bit about the process steps, where we moved the moments that required additional work. In fact, there might be 3 activity - Deferred decisions These are decisions that we've put off until new information emerges. For example, use a DBaaS solution or deploy custom technology. This decision can be made after a number of iterations of the SADM process. - Research activities Additional information collection and search by external sources may be required, for example, options for connected devices to a smart home when designing an IoT system - Testing activities Some decisions should be made after building a prototype and testing hypotheses on it.

Continuation of the review of the article in next post.

#Architecture #Software #Engineering #SelfDevelopment