Skip to main content

Command Palette

Search for a command to run...

Architectural Characteristics - Transcending Requirements

Updated
3 min read
Architectural Characteristics - Transcending Requirements

Building a system means meeting a set of requirements dictated by the customer.

But the customer isn't always going to translate what they want into engineering terms.

Even if you say please, they might not even know how.

If they ask for an online ordering system, they probably won't specify that it needs to be available 24/7 and auditable for tax purposes.

Yet these aspects could mean the difference between project success and failure.

Those unsaid aspects are called anything from 'nonfunctional requirements' to 'Architectural Characteristics'.

Aspects of Architectural Characteristics

In their book 'Fundamentals of Software Architecture', Ford and Richards define Architectural Characteristics to have 3 criteria:

  • Specifies a nondomain design consideration

  • Influences some structural aspect of the design

  • Is critical or important to application success

Let's dive into these bullets to better understand them.

Specifies a nondomain design consideration

If you're building an ordering system, then order numbers, customers, items and prices are part of the domain.

Reliability and auditability are not, yet they can be a critical part of the system design - that's what makes them architectural characteristics.

Influences some structural aspect of the design

Let's stick with our original example - reliability and auditability.

Reliability could mean having redundancy to ensure that failures have fallbacks and auditability can mean storing data for some number of years.

So these considerations can significantly change the structure of the system.

Is critical or important to application success

If the system goes down, our customer will lose their customer and they may not come back.

And if the system fails to store tax data, then in the event of a tax audit our customer will be found negligent and could incur significant penalties.

Opportunities for project failure abound, and that confirms that these aspects are architectural characteristics in our example.

Summary

We've come up with a toy example, but hopefully it illustrates the concept at hand.

It's important to identify only critical architectural characteristics to consider for your system because there are more of them than you could incorporate into a system without adding unnecessary complexity.

A best practice is to work with your customer to identify the top 3 most important ones.

Any more and your system will become too complex than it's worth.

You can categorize architectural characteristics into 2 columns: operational and structural.

Operational ACs are things related to operating the system and keeping it running - things like availability and performance.

Structural ACs encompass anything related to how the system can be adapted for differing requirements or environments and for how engineers working on it maintain and improve it - configurability and maintainability for example.

It's a complex and nuanced concept and you'll need to wrestle with it for a while.

But as you do your work, try to distinguish design aspects that fit into the 'requirements' and ones that are 'Architectural Characteristics' using the criteria above.

The distinction will serve you as you're asked to focus more on higher and higher level design.