#4 Reduce Risk: Deliver Vertical Slices
Minimizing costs and maximizing impact is extremely important, especially in this day and age, when money is viewed from all sides. Why take unnecessary risks when vertical slices can reduce it?
What is a vertical slice? Before we look at the definition, it is worth looking at a common software development process. There is a feature to implement - let's say this is a file upload. Pretty popular, right?
Estimates and planning for the next few weeks. In the end, after 1.5 months of work, we have an entire feature that contains the following:
Upload of a single file
Upload of multiple files
15 supported formats, including images and videos
Modal for the selection of files to upload
Drag and drop for upload of files
Support of large file upload (> 1GB)
In theory, everything seems to be okay. In theory.
Analyzing user traffic, we found that almost no one uses the modal to upload files. 95% of files are smaller than 1 GB, and few formats are used, such as PNG, JPG, JPEG, MOV, and MP4.
What does this mean? You have overdelivered.
The market does not need it. Now you have two options. First, keep it inside the application, which means a higher maintenance cost. Second, drop it but that means you just burned your hard-earned money.
Instead, the feature of the upload can be approached with vertical slices. The vertical slice provides a fully usable portion of the whole functionality. You can imagine it as a slice of the cake.
When you translate each layer of the above cake into software development, this piece contains everything that is needed to start using it as an end customer:
UI
API
Business Logic
Infrastructure (like database, queue, etc. )
This contrasts the horizontal approach, where we first provide the database, then in another task API, in another business logic, and so on.
It's time for a real example based on the upload feature. Signals from the market say that users would like to be able to upload a profile picture inside your application. So, you decide to define the first vertical slice:
Upload of a single, small file
Only .PNG, .JPG and .JPEG
Upload is done through modal
After development, you are ready to release and validate it. Different scenarios might happen:
The first users will love it; everything will work without issues—a perfect situation. You do not need to do anything else.
In general, it looks fine, but uploading through the modal is not user-friendly, and it would be great to drag and drop instead. It’s time to decide what to do. One solution is to replace the modal with drag-and-drop, and another is to extend the current solution with it. In either case, you have another vertical slice.
Looks like the market signals were false and almost no one uses this feature. Just drop it.
In scenarios 1 and 3, you saved a lot of money. You can now focus on other features. Scenario 2 results in another vertical slice. After implementation, you release it and repeat the validation process. There might be other vertical slices like:
It would be great to upload multiple files (vertical slice number 3)
It would be nice to upload .MP4 files (vertical slice number 4)
And so on. It is an iterative way to add a fully functional piece of software. Finally, you need to remember that every slice you add should allow your end user to fulfill the process.
One of the easiest ways to split is to think about the user manual - try to define the minimum process that is understandable and doable by the end user.
The list of benefits related to vertical slices is quite long:
Validate your ideas with real users
Do not overwhelm your users with tons of new features at once
Save money
It helps to start short-living branches
Quality can improve due to the limited scope of focus (fewer edge cases) and iterative test coverage
Decrease the time of release
Decrease the number of reported bugs (limited scope)
If you would like to train your skills related to vertical slices outside of your application, one of the easiest options is to open any web application that you know, select the area of your interest (e.g., shopping cart, training, or anything else), and try to analyze how you would split the work on it if it were your application.
How about you? Do you prefer an approach that focuses on the entire feature scope or plan it step-by-step based on market feedback?