ChatGPT - How Long Till They Realize I’m a Robot?

I tried it first on December 2nd... ...and slowly the meaning of it started to sink in. It's January 1st and as the new year begins, my future has never felt so hazy. It helps me write code. At my new company I'm writing golang, which is new for me, and one day on a whim I think "hmmm maybe ChatGPT will give me some ideas about the library I need to use." Lo-and-behold it knew the library. It wrote example code. It explained each section in just enough detail. I'm excited....It assists my users. I got a question about Dockerfiles in my teams oncall channel. "Hmmm I don't know the answer to this either"....ChatGPT did. It knew the commands to run. It knew details of how it worked. It explained it better and faster than I could have. Now I'm nervous....It writes my code for me. Now I'm hearing how great Github Copilot is - and it's built by OpenAI too...ok I guess I should give it a shot. I install it, and within minutes it'

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'.

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

  • Specifies a nondomain design consideration
Let's dive into these bullets to better understand them.

Aspects of Architectural Characteristics

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.


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.


  1. Extremely useful information which you have shared here about Online Food Ordering Platform for us .This is a great way to enhance knowledge for us, and also beneficial for us. Thank you for sharing an article like this.


Post a Comment

Popular posts from this blog

Why are Distributed Systems So Hard?

Notes on Effective Java 2nd Edition