Architecture at different levels of abstraction

This week I am attending the O'Reilly Architecture Conference in NYC with my team and I had the pleasure of attending a two day training on Building Evolutionary Architectures presented by Neal Ford and Rebecca Parsons.

During this session, on of the things we talked about extensively was coupling. We looked at dependency maps for different architectural styles including the big ball of mud. We saw something like the following and almost everyone agreed, "That is a bad architecture."

Big Ball of Mud

This reminded me of something I has seen elsewhere before, and after a quick search, I found it:
Netflix Death Star Architecture

The ball of mud is considered obviously wrong by most architects, but the death star seems to be held up as an ideal by just as many and likely most of the same architects. Why is this?

  • Are afferent coupling (inbound dependencies) and efferent coupling (outreaching dependencies) only important at a certain scale?
  • Is it a matter of getting things done? We feel more productive when we are doing something, and reports suggest that individual teams are regularly delivering software at Netflix. (Are they delivering value?) 
  • Is it more obvious that teams are struggling to deliver value in a smaller scope? At a larger scope, we can see a lot of activity so the investment required to get progress seems more acceptable?
  • Maybe we're impressed by the tooling that Netflix has created to manage this death star?
  • In the end is this a case of bike shedding?
I am not trying to indict a major media company for their choices. I happily pay them my monthly subscription for the entertainment they bring into my house. I want to know what makes these design choices wrong at one scale but somehow right at another scale. Is this the architecture you would choose for your system?


Popular posts from this blog

TFS to SVN Conversion with History