It continue to amaze me how willingly people offer their advice on software architecture. Most people would struggle to understand the inner-workings of email, but that doesn’t seem to stop them. And if they do have some experience with the topic – regardless of how long ago – some people think they are experts.
I’d never give advice on corporate accounting; nor how to manage your finances or investments – that’d be illegal without the right training and certification (just ask CBA).
By all means ask questions, get your architect to explain their rationale, and hold them accountable. But don’t do their job for them.
Chris Aitken‘s article “Simplicity is the ultimate sophistication” had me intrigued and well worth a read. If nothing else to acquaint yourself with the described architectural principles and the idea of ‘principle assertions‘ – statements that are either ‘true’ or ‘false’ depending on whether the principle is evident or not in a given architecture specification.
- The Principle of the Separation of Concerns: A design should be comprised of a set of independent components each of which addresses discrete functionality requirements for each defined concern.
- The Principle of Optimisation: A design should provide a complete solution without necessary duplication.
- The Principle of Coherency: All design components should be harmonised.
The architecture design process implicitly defined by the article is clever in its simplicity (no pun intended):
- Separate the solution concern into two (or more) logical concerns
- “Is the concern grouping and separation coherent?” Test each answer using the principle assertions
- “Is the concern grouping and separation optimal?” Test each answer using the principle assertions
- To go 1 if answers to 2 or 3 produce false assertions.
Note: concerns are relative to your stakeholders who may be concerned with requirements, systems, models, operational processes, code quality etc.
The main criticism of the article is the exchanging use of the terms “good design”, “simplicity” and “elegant design”. Is design simplicity really the same as design elegance? And how is this different to a good design?
I had a look in the dictionary for guidance.
Good: to be desired or approved of; having the required qualities; of a high standard.
A “good design” infers a design that meets all concerns for all stakeholders.
Simplicity: the quality or condition of being easy to understand or do; plain or uncomplicated in form or design.
“Design simplicity” infers a design easy to understand by its stakeholder.
Elegant: graceful and stylish in appearance or manner; pleasingly ingenious and simple.
An “elegant design” infers a design that causes the architect to glow of pride, as it is realised to be both good and simple to all relevant stakeholders.
Beauty is in the eye of the beholder, which is why an elegant design is so difficult to achieve. But don’t let that stop you.
You meet Bob at the local coffee shop.
You don’t really know Bob, but one of your acquaintances suggested Bob after you casually mentioned your need for a new mobile phone.
You checked out Bob’s website and you are fairly sure that Bob didn’t write any of the available material himself.
At the coffee shop, you both introduce yourselves. You both order coffee (you pay for both) and after a few pleasantries, Bob starts to ask a few questions about your potential mobile phone purchase.
“So, I understand that you need a new mobile phone?”
“And you’d like to make phone calls?”
“That would be handy…”
“And send messages?”
“Also pretty handy…”
“How many? Eh, not sure… Maybe 50”
Bob shifts chair position.
“In that case, my recommendation is the new iPhone. Most of your colleagues use an iPhone, and it’s the leading messaging phone”. Bob looks confident.
You both get up and walk out. After thanking Bob, you walk down the street to the nearest mobile phone reseller and immediately purchase the most expensive iPhone. Although you are slightly concerned about how Bob knows your colleagues, you do want to be better than them.
You never see Bob again.
If this scenario sounds slightly crazy, then you’d be correct. And of course, this isn’t the way you’d choose a software product.
Names have been changed to protect the innocent.