Architecture

Prerequisites

Haskell

Ch 01

Definition of coupling and cohesion
The example on thinking about cohesion is super cool
It is true that interfaces are not enough constraining in some stuff. For example you cannot ensure that a method is not going to have side effects due to exceptions being thrown
Using types to build dsls to explore the domain
When you have q clear separation of pure and impure code your design patterns change