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'
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.
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.
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.
Isn't it true you can just write deterministic code and if you do it right and work to fix all the bugs, eventually you'll have a simple that never does the wrong thing? If that's not the case then why not? Computers are deterministic - they're predictable and they only ever do exactly what you ask them to do and nothing more...right? It's complicated. On a single node (computer) most failures mean the entire node completely stops working - for example the power supply fails, the disk dies, or the motherboard gets fried. These types of failures are easy to detect because the node won't be in a 'partially failed' state where sometimes it performs the functions it's asked and sometimes it doesn't. In a network, you have multiple nodes - possibly hundreds or thousands. When one node fails, it is impossible to be 100% sure that node is completely down. And if you can't be sure that a node won't come back to life, then you can
Chapter 3 - Methods Common to All Objects Item 8 : Obey the general congract when overriding equals - page 33 If you decide to implement equals, make sure it is reflexive: for all x, x.equals(x) symmetric: for all x & y, x.equals(y) iff y.equals(x) transitive: for all x, y, z, if x.equals(y) and y.equals(z), then x.equals(z) must be true consistent: for all x & y, multiple invocations of x.equals(y) return the same result provided nothing used in equality is changed in either x or y for all x, x.equals(null) must return false Item 9 : Always override hashCode when you override equals Item 10 : Always override toString Item 11 : Override clone judiciously Item 12 : Consider implementing Comparable Chapter 4 - Classes and Interfaces Item 13 : Minimize the accessibility of classes and members accessibilities private package-private (default) protected public classes with public mutable fields are not thread-safe Item 14 : In public classes, use
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.
ReplyDelete