Shipping In Layers
A product development approach for maximum velocity
Shipping velocity is one of the leading indicators of a healthy product. It doesn’t guarantee product success, there are way too many factors that play into that equation, but success is harder to find if you're missing it.
You're either here because you really love shipping velocity or you know that yours can be better. So let's get to it. Here is a framework for how you can increase not only your shipping velocity, but product quality as well.
The Critical Skill
There is one skill that is critical when it comes to shipping velocity, and it has nothing to do with writing code.
Surprise!
It’s your ability to take a product/feature and break it down. To disassemble a large group of ideas, decisions, and expectations and identify the smallest “complete” solution you can use to validate the success of the whole project.
I call this the Core, but I love this article by Jason Cohen that talks about creating products that are “Small Lovable Complete” (SLC). He talks about it as a philosophy for building products, but that mindset is what makes you an effective software builder on any task that lands in front of you.
The Core is tightly scoped while being complete enough to start validating the entire project as early as possible.
You can build it quickly, you can ship it out just as quickly, and if you feel like it you can ship it quietly…🤫
Okay, I did that. What now?
This is where the layers come in.
Now that you have a functional core, you layer on all of the non-essential features you left out. The key to a good layer? Keep it thin. Don't pack a lot of enhancements in and try to ship the kitchen sink. Prioritize. Pick a single improvement or small group of related improvements and ship them before starting another layer.
Using this approach builds your shipping muscle. Pushing features and enhancements to production will feel second nature and before you know it your product will be getting incremental improvements at a consistent velocity.
The Hidden Benefits of Layers
Velocity is the main goal of shipping in layers, but it is not the only one you will get from this approach. Not by a long shot.
Every layer is an opportunity
Layers open up integration points with your work. Each layer is an opportunity for new marketing, for connecting with interested users, and one benefit that will take an okay layer and turn it into a great layer.
At the start of this project you had a big plan for a product/feature that had all the bells and whistles, remember? But instead of shipping the whole thing to your customers immediately you’ve shipped something smaller, more focused for them. Now you have something you didn't have before…
User Feedback!
Shipping in layers allows you to influence the trajectory of a project based on real usage. You don't fall into the trap of shipping “The Big New Thing” only to find out you missed the mark and what your customers actually need is different.
With every layer you can evaluate how your feature is resonating and instead of your launches looking like this:
With layers they look more like this:
Back to the part about doing it quietly
The concept of shipping in layers doesn't just apply to WHAT you build, but also to WHO sees it.
Feature flags let you quietly launch new features to a controlled set of users. It can be internal team members, a few customers you know have specifically been requesting the feature, or just a random sample.
With a smaller surface area you can target your feedback efforts and makes sure you hear from the users with the most valuable opinions first. That cycles back in and influences the next layer of improvements releasing to a wider pool of users until you're confident it is ready for full public consumption.
By the time you're putting it on maximum blast you have momentum and feedback across many layers and are working with a very stable and polished release for any marketing and sales actions you cook up.
Layers in action
I don't want to make this article eternally long, but I do want to make sure that you can see what shipping in layers looks like in action. I have written up how we shipped in layers to launch the Scheduler feature on CrunchyData.
Let's wrap this up
Shipping in layers opens the door to increasing your product velocity, but you have to do the work of deconstructing and building what that looks like for every project that lands in front of you. That takes practice.
You may be surprised how easy it is once you start. A lot of product work uses the same concepts, and just shifting your mental model for how you ship work will feel natural. However, if you have any questions you are welcome to shoot me a message.
Appendix
Stacked PRs
This is a very interesting technical approach that supports the idea of shipping in layers for how you write and review code. Thanks for sharing Connor Lindsay!
I hope you enjoyed
There is a lot more coming...
If you want to get updates when I publish new guides, demos, and more just put your email in below.