Vertical
The vertical approach takes a slice of functionality of the system that comprises multiple microservices and a team is fully responsible for that functionality, from design to implementation, through deployment and maintenance. Teams operate as silos and communication between them is typically limited and formal. This approach favors aspects of microservices, such as the following:
- Polyglot
- Flexibility
- Independently moving pieces
- End-to-end ownership
- Less formal contracts within the vertical slice
- Easy-to-scale to more vertical slices (just form another team)
- Difficult to apply changes across vertical slices, especially as the number of vertical slices scales
This approach is common in very large organizations due to its scalability advantages. It also requires a lot of creativity and effort to make improvements across the board. There will be duplication of effort between the silos. Aiming for complete reuse and coordination is futile. The trick with the vertical approach is to find the sweet spot, where common functionality is packaged in a way that can be used by multiple silos, but without requiring explicit coordination.