ArsTechnica hosts a number of discussions on software development, and arguably none more important than layering.
Understanding one thing at a time is easier than understanding two things that only make sense when used together … Rules of thumb such as “No cyclical dependencies” or “Dependencies must only reach down one level” simply capture the practically achievable limit of the fundamental idea that one thing at a time is easier to understand than two things.
Whilst interfaces and abstractions buy you immunity to change for a given class/component, a layered architecture buys you the flexibility to swap out an entire layer of technology. That’s something that can happen surprisingly frequently in the corporate world – need to replace MFC with Silverlight then with WFP then with HTML5? No problem if your architecture is layered such that none of the business models need to be re-released for the change. Similarly if a game-changing Hadoop solution is rolled out for your data storage – a well layered architecture can remain impervious. But mix up all that logic so that models source data and user interfaces call into low-level analytics – you’ve got a migration nightmare on your hands.

This is the best book by Jo Nesbo that I’ve read. It stands out due to the quality of the back story that he tells, set during World War I. It’s also set early in the timeline of the lead character, Harry Hole, and includes how he met Rakel (who features heaviliy in other stories including The Snowman).
I picked this book in my local book shop, not having read anything by this author before. It took a couple of attempts before I was hooked, but once the main character, Joe Pickett, had travelled to YellowStone Park and begun his investigations, I really enjoyed it. The character breaks the mold for this kind of thriller: he isn’t particularly violent (and admits to being rubbish with a weapon) – that side of things is left to his side-kick, Nate); he doesn’t seem all that sure of himself (unlike 