Stratified Design over Layered Design

Designing software with layers is common — and broken. It’s broken for two reasons: