Tag Archives: Complexity

Disassembling Software Architecture

modelt

Disassembled Model T - Henry Ford Museum

I've been time traveling after seeing a great O'Reilly Video by Mark Richards on Software Architecture Patterns http://goo.gl/vAQloM. He includes some well thought out metrics as well.

Mark describes 4 of the 5 architectures in his book(s):
1) Layered
2) Event Driven (brokered and not-brokered)
3) MicroKernel
4) MicroServices
5) Space Based

I remember the early days of IC design (70's-80's) when product ideas became components in future products (the engine of exponential growth). The 1T DRAM, 6T SRAM, PLA's, ALU's started out as chips on boards but eventually were microcoded together to create a microprocessor, then SOC etc.

In the mid 90's I saw Mr. Silicon Graphics and Netscape Jim Clark (I consulted with Jim in 1983 when his "Geometry Engine" ran slower than simulation) at a Stanford Hot Chips conference. He forecast...

1) "We used to build small/consumer products by cost-reducing components for big systems"

2) "In the future we will build big systems from cheap components developed for small/consumer systems"

He spotted the pattern.

After the video I compared Mark's 5 patterns to  "Software Architecture in Practice", Bass et al,  a Stanford U. early 00's Software Architecture class textbook.   Chapter 18 of 19 is "Building Systems from Off-the-Shelf Components". I'm struck by how software architecture has moved from case studies to building with off-the-shelf components Just like early IC's.

Fast forward to the mid 00's when I ran a SaaS company warehousing chip measurement data. The product started with a 3-layer architecture (browser + "big ball of engine" + OracleSQL). We bogged down trying to add new features. How do we dis-assemble and re-factor the engine while the car is in the race?  A recent piece by Mat Stine at http://pivotal.io/ pointed to two recipes from SoundCloud http://goo.gl/nluAmU and Karma http://goo.gl/HpUOSp . Nice to see my problem dis-assembled 10 years later.

TAKEAWAY: BUILD SIMPLE SYSTEMS FROM SIMPLE STANDARDIZED BUILDING BLOCKS. Unless you're on the bleeding edge of speed, the benefits over a product's lifecycle outweigh any monolithictarball  approaches appear to bring. For you scrummy, lean and agile folks, kludge a prototype but don't evolve a prototype into a platform.

George Whitesides does a TED talk http://goo.gl/YGd6ta about the same idea (importance of building complexity from simple building blocks) to build pieces of paper that diagnose diseases... Same movie different actors...

So there... at the "right" level of abstraction you can re-factor West Side Story into  Romeo and Juliet by changing the UI.

The Connection Machine

The Connection Machine -space based architecture