DEV Community

Ash Isaac
Ash Isaac

Posted on • Edited on

Software Architecture "Virtues"

Software architecture is all about appropriate compromises. For small projects, having a highly involved software architecture is probably an overkill. For large enterprise applications, it becomes a necessity.

Finding a suitable software architecture for a project requires both technical and domain knowledge: you need to have a solid grasp on the problem your client needs you to solve AND understand the technical trade-offs involved.

Here is a shortlist of architectural virtues to think through when evaluating various architectural patterns and frameworks:

1. System Comprehensibility

Does this architecture enable developers and business owners explain, understand and collaborate well? Does it hide away less-important implementation details and help accurately frame the problem domain?

2. Modularity (Separation of Concerns)

Does this architecture allow for the problem domain to be broken out into smaller, more easily managed parts? Does it promote the healthy isolation of components? Does this allow component reuse and recombination? Does it reduce unnecessary coupling and make dependencies explicit?

3. Testability (Mockable Dependencies)

Does the software architecture facilitate testing at the unit, integration and system level? Does it allow mocking and stubbing of services and infrastructure? Does it allow testing failure modes?

4. Hexagonality (Infrastructure Agnosticism / Domain Isolation)

In this architecture, is possible to isolate the domain (or business) logic from implementation details? Can you segregate and swap out the transport or persistence layer without needing to make major internal changes to the system?

5. Aspect-orientation (Cross-cutting concerns)

Does the architecture allow for uniform, centralized handling of cross-cutting concerns? Can logging, caching, authorization, serialization etc be handled independently from the core logic?

6. Plugin-orientation

Does the architecture allow decoupled and optional processing? Does it allow for integration with external systems as and when needed? Does it offer hooks into it's internal operations without compromising security?

7. Scalability

Does the architecture framework allow for room for growth at least for the foreseeable future? Does it facilitate the measurement and monitoring of system performance?

There are, of course, many more issues to think about... but this is a pretty good set of parameters to think through while making architectural choices.

Top comments (6)

Collapse
 
imben1109 profile image
Ben

"Software architecture is all about appropriate compromises. For small projects, having a highly involved software architecture is probably an overkill. For large enterprise applications, it becomes a necessity."

I totally agree with you.

Do you recommend any architecture pattern for large enterprise application? How do you think of microservice architecture?

Collapse
 
solo474 profile image
Krishna Sagar R • Edited

Agreeable. Some time back I thought software architecture is like an ego of personality of the software system. From freud's theory of physiology. courses.lumenlearning.com/boundles...

Collapse
 
cristianscaueru profile image
Scăueru Cristian-Ștefăniță

Is there any book that you would recommend to read about all these principles ?

Collapse
 
gernotstarke profile image
Dr. Gernot Starke

just released - an overview of topics relevant in software architecture education:

leanpub.com/isaqb-foundation-study...

(disclaimer: I'm one of the authors).

Other great books are from Michael Kealing (Design It!) and Neil Ford (Modern Software Architectures).

Collapse
 
ashokisaac profile image
Ash Isaac

Most of these are well-known topics that people have written about in-depth. Unfortunately, I've not come across a book that integrates them all together.

Collapse
 
_2082ca7cc65434467c4fb profile image
袁官东

If you need to design 3D software architecture diagram, you can try iCraft Editor : icraft.gantcloud.com/editor