I’ve just started leading an internal workshop on Incremental Development. In the workshop I describe and delve into the difference between orienting development vertically (by use case) versus horizontally (by software layer or service). By use case is the clear winner since it allows progress to be tracked in a user meaningful manner and encourages a smooth flow of client value.
Johanna Rothman describes the different orientations as implementation by feature and implementation by architecture. These are clearer phrases.
I think I’ll be making a few minor edits tomorrow.
While the vertical slice approach can work in some situations, there can also be subtle pitfalls.
A large, nontrivial application really does need an architecture, and some amount of system-wide thought and planning. There are interdependencies and concerns that cut across individual use cases, and developing with too narrow a vertical focus risks integration problems downstream.
The appeal of the vertical slice is obvious for those stakeholders concerned with visibility, and the vertical slice certainly can aid with a tighter feedback loop.
But these considerations must be balanced against life-cycle and system integrity concerns.