Today, I learned about Vertical Slices from the Compiler Podcast from Red Hat.
It is an interesting idea to get some initial integration and testing work done.
Initial development design and verification is still done on each block to ensure that it meets its requirements and use cases.
05:11 — Kim Huang Ryan often talks to people about what he says are core concepts of the development process. One of them he talks about at length is called the vertical slice.
05:24 — Ryan Singer This is where we talk about horizontal layers versus doing one vertical slice. And this idea of one vertical slice where there's some backend working, there's something that you can click on, and it does something that we can actually try it out and understand does it do what we thought it was going to do? And getting to that point sooner than later, that's a really great moment for a team.
05:50 — Brent Simoneaux I don't think I quite understand this concept of the vertical slice.
05:54 — Angela Andrews Me either.
05:55 — Brent Simoneaux Can you give me an example of this, Kim?
05:58 — Kim Huang Sure. A vertical slice, if you're thinking about a cake, if you're thinking about different layers, different layers of the stack, if you're cutting something vertically, it's showing all of those layers working in sync. They're all working together. All the flavors of the cake, all the layers, the frosting, the cream in the center, the sprinkles, they're all working together to give you what you should expect from that cake. It's the same thing in development. A vertical slice is showing all those different components that we've talked about over the course of the last few episodes, all working together to bring whatever product that a customer is looking for to life. It's a different vibe from a demo where a lot of the parts of a demo can be simulated. You want to demonstrate to the person who's looking at the demo a slice of reality. That's what a vertical slice is. And that can be used to communicate to different people who work in different areas of the stack, a holistic picture of what the work is now. That can open up discussion for challenges, issues, and even improvements that can be made on future versions of whatever they're building.
Vertical Slices in Payload Systems Engineering
In systems engineering, we often start with a functional decomposition of the system. Subsystems are defined and then broken down into functions and partitions.
What do verticial slices look like when there is custom hardware development, FPGA images, power supplies, etc.?
In the physical domain, the first vertical slice often comes in the form of test beds.
These test beds help connect functional blocks together for the first time, and allow for the first integration and testing of the system. The test bed can be scoped to a single functional block, or it can be a larger system test bed.
For example, the digital test bed could be the computer system on board, along with the physical interfaces (e.g. USB, Ethernet, LVDS, JTAG, SpaceWire, etc.) that connect the partitions within the digital subsytem.
The payload test bed might be the core digital control coupled to the transceiver and the antenna.
The power test bed might be the power supply, the battery, and the power management system.
This is a great way to get a feel for the system (or sub-system) and to start to understand the interfaces between the different functional blocks. It helps teams prove out the pedigree of the interface definition, packet structures, and physical electrical interface compatibility.
How could we improve the speed and efficiency of vertical slices?
Within systems engineering parlance, starting with a digital twin or a digital representation of the model is an excellent start.
If the goal of the vertical slice is discovery and interface definition (often re-definition), early digital models and physical engineering modules (development boards, initial assemblies) will reduce risk and help speed up development iterations.
The sooner you get to a working functioning model, the sooner you can start to iterate and improve the design. Note: This is not static analysis, it needs to run and be execuatable.
More thoughts in a future article!