Simplicity, Design Elegance and Architecture

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.

I have summarised the principles below.

wpid-notes-6.png.png

  • 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):

  1. Separate the solution concern into two (or more) logical concerns
  2. “Is the concern grouping and separation coherent?” Test each answer using the principle assertions
  3. “Is the concern grouping and separation optimal?” Test each answer using the principle assertions
  4. 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, cost etc.

The only slight problem that I have with the article is the interchanging 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.

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

“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 and therefore difficult to achieve. But don’t let that stop you.

Bob, iPhones and software vendors

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?”

“Yes, potentially…”

“And you’d like to make phone calls?”

“That would be handy…”

“And send messages?”

“Also pretty handy…”

“How many?”

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

Epilogue

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.

Conway’s Law and Technical Debt

Everyone wants to be agile. It is the catch cry of the day, along with cloud computing, big data and payments processing.

Agile software development boils down to do more with less, and communicate more with less. Do more with less is about using fewer but better suited tools to improve productivity. Communicate more with less is about increasing the design discussion and feedback loops without the overhead of maintaining large documents – note the difference between “discussion” and “documenting what we built”, something many projects confuse.

But I’d postulate that all software development methodologies still fundamentally view software development as a single team activity; despite our typical work environment consisting of multiple teams; multiple delivery structures.

Yes, every project manager has the list of external dependencies on other teams and other systems, but it is just a milestone tracking list. It doesn’t help us become more agile. Similarly, the Scaled Agile Framework is more about making the project management office or the enterprise release management teams more agile than addressing the multiple team challenge.

So what’s the problem?

The below diagram illustrates three projects tasks to deliver three solutions. The three teams must leverage existing corporate assets (e.g., an inventory system or general ledger system) to avoid causing trouble, but the trade-off is overlaps between the three solution spaces. Secondly, the trade-off agreement between team “A” and team “B” will in all likelihood impact the possible trade-off agreement between team “B” and team “C”.

Solution overlaps

Conway discussed this problem back in 1968 and framed it as the correlation between organisational structures and software structures. Bass and others have found similar evidence of projects getting into trouble due to “architectural misalignment”; that is the difference between the organisational enabled communication structure versus the communication structure needed to solve complex architectural problems. This “structures correlation” problem is commonly referred to as Conway’s Law, although “structure” does need to be understood more in context of Bass’ design problem discussion than Conway’s original and more literal computer code structure context.

While we probably don’t have a good answer for dealing with Conway’s Law, it struck me that Martin Fowler’s Technical Debt Quadrant is useful for illustrating the four phases of (what I have coined) the Conway’s Law Denial:

  1. Your company’s methodology calls for identification of project interdependencies; dutifully noted as part of the initial planning efforts.
  2. Early design work uncovers overlaps with other projects (hopefully on your list). But we are all polite and work together, as schedules haven’t yet been tightened (too much); aka we send a few emails with draft designs attached.
  3. The true complexity of the “structures correlation” problem arrives and full-blown denials starts
  4. Final stage of full-blown denial

Projects and TD

And why does all of this matter; other than stop annoying colleagues?

Teams disconnected by organisation, location and/or time cannot make appropriate trade-offs and the scene is ripe for piling on the technical debt.

References

Mel Conway, “How do committees invent?“, 1968

Bass, M. et al, “Architectural Misalignment: An experience report“, 2006

Kwan et al., “Conway’s Law Revisited: The Evidence For a Task-based Perspective“, 2012