Software Architecture "Virtues"

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.

To view or add a comment, sign in

More articles by Ash Isaac

  • DevOps Is For Humans

    Here’s a question I’d like to present for your consideration: Should DevOps adoption influence your decision to work at…

    2 Comments
  • Going Serverless with AWS Lambda? Here's what you should know

    Serverless has gone mainstream now: it's the natural next-step in the evolution of cloud-computing. The value…

  • DevOps In 3 Sentences

    DevOps is a hot topic right now, and amidst the marketing hype and buzzword-frenzy it can be hard to get to the essence…

  • The value of technical leadership

    I've been in technical leadership roles for over a decade and I have to say, in large measure it is quite unglamorous…

    1 Comment
  • Docker Swarm: An overview

    Docker adoption, especially in large-scale companies is on the rise (up 40% apparently, by one estimation). Since v1.

    2 Comments
  • Infrastructure as Code using Terraform

    One of the strategic benefits of Cloud-computing is the concept of programmable infrastructure or "Infrastructure as…

    5 Comments
  • From Monolith to Microservices

    The adoption of microservice-based architectures in enterprise software systems seems to be a growing trend. The…

  • Microservices: The Rationale

    Why Microservices? There is increasing demand that enterprise software systems be Elastic, Resilient and Agile…

  • Concurrency Throttling in Node.js

    Concurrency Throttling in Node.js One of the first things you learn when developing microservices is that they are…

  • The Service Layer Pattern

    One of the key ingredients in managing Enterprise software products is identifying and consistently applying a proven…

Explore content categories