Let's craft software. Contact me

Héctor Valls

Sr. Software Engineer

Cover Image for Architecture Characteristics

Architecture Characteristics

In my post about Developers and Architects, I did mention the concept of architecture characteristics. Let’s talk about them.

According Mark Richards and Neal Ford, architecture characteristics are “all the things the sofware must do that isn’t directly related to the domain functionality”. Also, they are independent of the problem domain and describe concerns critical to the success of the architecture. Sometimes, they are also referred as “non-functional requirements” or “quality attributes”.

Here are some examples:

  • Availability
  • Performance
  • Scalability
  • Maintainability
  • Security
  • Privacy
  • Usability
  • Accessibility

...and so on.

An architect must define which ones must be supported by the system, extracting critical information from the domain concerns (by talking to domain stakeholders) and the requirements (e.g. if it’s required to develop a payment gateway, maybe security it’s an important characteristic to be supported).

It’s an anti-pattern trying to define an architecture supporting them all. It leads to greater complexity.; remember the First Law of Software Architecture:

“Everything in software architecture is a trade-off.”

If you want to practice your skills in extracting architecture characteristics from a given problem, Neal Ford’s katas list is an excellent resource to start.