I’ve recently been writing about different approaches to project planning and software architecture, and how they can impact software development projects – for better or for worse. With the evolution of processes and methodologies over the last decade, it’s important to keep up with the latest and greatest, whether it’s to improve your own personal knowledge or evaluate ways to improve your team or product’s efficiency and capabilities.
Splitting initiatives into horizontal or vertical slices at first glance may seem like a methodology for distributing workload, but dig a little bit deeper and the choice can encompass many facets of software development, including architecture, project management, team communications, and technologies implemented.
There are definitely strengths and weaknesses to either approach, and one method may work better for specific environments than the other.
Before discussing horizontal and vertical slices, let’s discuss what is being sliced – the application layers defined within the software architecture.
Defining Application Layers
The slices to be divided are based on the application layers. Traditional software architecture defines the 3 main components of your application to be the Presentation, Business, and Data layers.
The presentation layer contains the user interface and communications to the business layer, also commonly known as the “front end” of applications. Thanks to modern front end development languages, some of the business logic can be offloaded to the presentation layer, reducing the amount of resources utilized by the other layers.
The business layer contains the core functionality of the application, including majority of the business logic for processing and manipulating data received from the data layer. As part of the “back end” of your application, this layer is the middle layer between the presentation and data layer.
The data layer controls the storage and allocation of the data, usually in database tables – although some databases will use non-relational allocation methods. Also considered part of the “back end”, databases in some more modern applications are divided into smaller, more lightweight data stores to provide more efficiency.
Service Oriented Architecture (SOA)
With the growing demand of Software as-a-Service (SaaS) platforms, architecture has become more complex and reliant on web services and APIs – enough so that these services add their own additional layers to SOA design. There are many ways people define SOA layers, but since these additional layers revolve around communications, the layers focus on the services and integration with other internal and/or external components.
Moving onto the next topic of discussion is the layers themselves.
Most people are familiar with the straightforward horizontally sliced methodology. To properly understand this concept, I’ll break down the differences between the more commonly used method of horizontal slice project approach.