I just had a tiresome sery of arguments with friends regarding the design of a tool or small system that will be used for directly manipulating the master/referenced data in the production environment. The argument is all about which design is more suitable or simpler between Design A and Design B.
The thing that makes this kind of argument complicated is each person tends to have his or her own views and levels of “simplicity” differently from one another. Although both designs can serve the functional requirements very well, we still have some different point of views in the suitable architecture. The problems are hidden in the priorities of quality attributes.
So I decided to note down this lesson learnt about the most influential quality or non-functional attributes that could be the most influential to our design:
- Needed availability and resiliency level.
- Needed security, safety, and controllability level.
- Needed level of workloads and concurrency e.g. requests per second, no. of concurrent connections, no. of jobs per batch, …
- Needed performance (e.g. response time, update rate, transactions or batches per second, …) per the expected workload or concurrency level.
The first two is very critical in defining the style/pattern/topology that will be used in your architecture from both static and dynamic views. While the latter two points will help you define your architecture in more details especially from the dynamic views (or processing and threading view in 4+1 method).
