niksilver.com
Horizontal vs vertical slicing
Recently I’ve been thinking again about how we divide up work, and the choices between tackling it in horizontal or vertical slices.
To recap, delivering in vertical slices is when each small step (a user story) adds a bit to each layer of the product to produce some incremental change that’s generally visible to the end user. Horizontal slicing is when each small step builds from the bottom up, starting with the foundations, and it’s only toward the end that end users see anything new.
There are other ways to think about delivering incrementally, too, which are compatible with both these approaches.
Delivering in vertical slices is certainly the more successful approach, but it’s important to recognise where it isn’t superior. I can think of a few ways.
One is in the planning stage. I’ve found that many teams and individuals find horizontal slicing much easier to plan. If we have a picture of the whole system in our head then it’s quite natural to want to construct it starting with the foundations and building up from there. Even the word “foundations” suggests building a house, and it seems reckless to build a house without first making sure the foundations are sound.
But that’s just an analogy; building software is not building a house. Software is soft, by definition, and code already written can be changed quite easily. However we do need the right scaffolding for that, including automated tests.
Planning to build in vertical slices is less natural, and I’ve found that people who are used to the horizontal approach will often say that for their particular project it’s impossible to do otherwise. I’ve also found that persistence, patience and imagination proves otherwise. And it gets easier with practice, to the point where it even becomes natural.
A second way in which vertical slicing isn’t superior is when the end state is unarguable or irrelevant. More specifically, if we are interested only in reaching some very specific target, then neither approach is faster than the other. In terms of time, vertical slicing is no faster than horizontal slicing, everything else being equal.
But that phrase “everything else being equal” is doing a lot of work here, and it’s best explained by clarifying what I mean by the end state being “unarguable or irrelevant”. I mean that everyone agrees with all the details of what we’re building and that we won’t change our mind (unarguable) or that we don’t care about whether the end state is actually worthwhile (irrelevant). That last case might seem implausible, but it can happen if the build is being undertaken by a third party who simply wants to fulfil a contract and has no stake the value that the product will produce. That’s clearly not desirable, but it can happen.
The problem with an “unarguable” goal is that our vision of a product at the start of a build is, in practice, imperfect. This is often captured by the acronym VUCA—volatility, uncertainty, complexity, ambiguity. We are imperfect, the world changes, our expectations may be confounded, and we can misunderstand each other. So we do get to our target end state at the same time with either approach, but the resulting product doesn’t produce the value we expected.
If we use vertical slicing then each slice allows user feedback that we can use to check expectations, alter our plans and steer ourselves to a more successful outcome—a product that does produce the value we wanted. If our end state is unarguable or irrelevant then that feedback, and our ability to steer, isn’t needed.
The third way in which horizontal slicing is just as good as vertical slicing is if we aren’t interested in delivering value early. If our stakeholders absolutely believe and insist that it has to be all or nothing, then no vertical slices are going to be released until everything comes together at the end.
I’ve found many stakeholders do insist on all or nothing—they want to launch a product that they can shout about in its entirety, and are confident enough that smaller groups of early users won’t offer any real value to them. But I’ve also found that if delivery overruns, which is common, or pressure on them changes then they quickly change their minds. Suddenly, getting most of a product out by a deadline is more important than getting everything they wanted out much later. Unfortunately horizontal slicing doesn’t allow that option.
So there are ways in which horizontal slicing is no worse than vertical slicing, and when it comes to ease of planning it’s actually better.
In practice most people find the uncertainties of the world (VUCA) are far too great to ignore. If we can put in the initial effort and imagination to create a plan that vertically slices the work then that has significant benefits, and allows us to steer around many crises.
That said, there are situations when the key stakeholders are quite relaxed. Perhaps the stakes are low, the goal really is clear and straightforward, and the timescales aren’t significant. In that case, either approach is fine.
In practice vertical slicing is almost always the optimal approach. But we need to be honest about where it isn’t better, and recognise there can be situations where the difference doesn’t matter.
_Photo by Indiana Public Media_
### Share this:
* Share on LinkedIn (Opens in new window) LinkedIn
* Print (Opens in new window) Print
* Email a link to a friend (Opens in new window) Email
* Share on Tumblr (Opens in new window) Tumblr
*
Like Loading...