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