Architecture or Design

What is design and what is architecture. There are often discussions about this, so I will put my views out there.

Architecture is the technical infrastructure used to deliver value to customers. It is a combination of hardware and software, and to many in the cloud world the hardware is a given. Consider that we write software that delivers user value. People can do stuff with our software. To get this to them we need databases, maybe some frameworks, development languages and so on. This of this a a lorry delivering a load of value. The architectural lorry is built from software as is the value part of the delivery.

Both the architecture and the value need to be carefully designed. How do we build it? How does it fit together? What tools do we need? What does the class model look like? So many questions, so little time. And if the architecture is the delivery infrastructure how do we know that we haven’t over specified it? The picture seems about right.

Let’s do a bit of a deep dive around testing software. The need to test is architectural (IMHO). So therefore things like the way we create testing APIs and allow our test tool to work this APIs is architectural. I would expect that a community of practice or a guild type structure would look after these decisions allowing collaboration. I would also expect that if a team had a special need, they would solve it themselves. But enough religion, once the architecture is in place then we know we can create software that we can test. But how do we test it?

The testing profession is a great source of help for this question. At a unit or component level we can drive test through our API, but need to design these tests so that they test ranges of input data and corner conditions. These tests can verify NFRs such as performance levels and security aspects. To do so we need to design the tests with knowledge of the application.

This analogy works throughout. The software at the architectural and business levels of our application can be specified through stories and feature so that we know what we need. These then need to have more detailed decisions made, and communicated to ensure we implement in a manner that our teams agree meet our quality standards as expressed in the definition of done. The point of this is to ensure a common approach and to prevent the introduction of technical debt, as much as is possible.

So while architecture is the lorry that delivers our software, design is involved in everything and is where we consider and select the means by which we implement the achitecture and the value.

Simple?


Posted

in

,

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *