Recent from talks
Nothing was collected or created yet.
Vertical slice
View on WikipediaThis article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|

A vertical slice (VS) is a type of milestone, benchmark, or deadline, with emphasis on demonstrating progress across all components of a project.[citation needed] It may have originated in the video game industry.[citation needed]
Overview
[edit]The term vertical slice refers to a cross-sectional slice through the layers that form the structure of the software code base. It is mostly used in Scrum terminology where the work is planned in terms of features (or stories). For example, as a very basic approach, a software project may consist of three layers (or components):
- Data access layer (bottom)
- Business logic layer (middle)
- User interface layer (top)
In this common approach, a vertical slice means a bit of every layer. Again as an example, a new feature request like "showing x information on main screen" would contain these work bits:
- Work in the UX/UI that will display the information
- Work in the service layer to transform the information
- Work in the database layer to store / fetch the information.
So a vertical slice can be defined as "the sum of the work that has to be done in every layer that is involved in getting a specific feature working." A vertical slice doesn't necessarily affect every component in the software. For example, if the solution contains a web service, it would live in the same "floor" as the UI, and a feature like "supporting login/logout in webservice" that involves only the web service does not require a change in the UI, but the business and database access layers.
Vertical user stories
[edit]A vertical user story encapsulates the action of one function.
An example of a vertical user story is, "As an end user I must be able to log into my company portal so that I can perform the functions of my job."
Acceptance criteria
[edit]Acceptance criteria are conditions of satisfaction. This story is "done" when the detailed functionalities are completed.
For example:
- Verify that I can log into the system
- Verify that my login credentials will be remembered
- Verify that I can reset my own password by clicking the "Forgot Password" link
- Verify that I cannot navigate back to the landing page without first logging in
Dissected by layer
[edit]As a developer, you will need to think about every file encapsulated in each layer that needs to be created and/or extended in order to complete this "Login User" story.
References
[edit]- Vertical Slicing Training Deck by Ben Clay (Enterprise Scaled Scrum 2009)
- Built to Thrive by Jay van Zyl
- Horizontal and Vertical User Stories - Slicing the Cake by Ned Kremic
- INVEST IN GOOD STORIES, AND SMART TASKS by Bill Wake
- 6 Brilliant Ways to Slice User Stories by Dominic Krimmer
- User Stories 2.0 by Jeff Sutherland
Vertical slice
View on GrokipediaDefinition and Origins
Core Definition
A vertical slice in software development refers to a complete, thin implementation of a single feature or user story that spans all technical layers of an application, including the user interface, business logic, and data access, to deliver observable end-user value.[4] This end-to-end approach ensures the feature is fully functional and integrable from the outset, enabling early demonstration and feedback.[5] Conceptually, a vertical slice contrasts with layered development by emphasizing functionality over isolated components; rather than building horizontally across layers for multiple features, it integrates vertically to create a cohesive, working unit that provides immediate utility.[3] In agile contexts, this aligns with user stories by breaking down work to span layers in a single iteration, fostering incremental progress.[4] For instance, a login feature as a vertical slice would encompass the UI button for user input, the authentication logic, and database verification, resulting in a fully operational capability rather than partial layer implementations.[4]Historical Development
The concept of the vertical slice emerged in the early 2000s as part of agile methodologies, heavily influenced by Extreme Programming (XP) practices developed by Kent Beck between 1999 and 2000. XP emphasized delivering small, functional increments of working software over extensive upfront documentation, encouraging teams to build end-to-end features that provide immediate value and enable rapid feedback. This approach contrasted with traditional waterfall methods and laid foundational principles for slicing development into complete, testable units rather than isolated components. The term "vertical slice" gained prominence in the mid-2000s alongside the popularization of Scrum frameworks and user story refinement techniques. Descriptions of user stories as vertical slices that cut through all layers of a system—such as user interface, business logic, and data persistence—to deliver a cohesive, valuable increment to the user helped teams avoid horizontal slicing, which focuses on technical layers without user-facing outcomes, and became a standard in agile literature for ensuring iterative progress aligns with business needs. This refinement, building on XP's iterative ethos, influenced widespread adoption in software teams seeking to balance completeness with speed.[6] While the practice of creating end-to-end prototypes predates the term in both software and game development, the specific phrase "vertical slice" appears to have originated in the video game industry around the late 2000s to early 2010s. By the 2010s, vertical slices were adopted in game development as a key practice for milestone demos, evolving from earlier prototyping traditions that prioritized playable builds to test mechanics and secure publisher interest. These early prototypes, often rudimentary but functional segments of gameplay, mirrored agile's focus on demonstrable progress, allowing developers to refine core loops before full production. The approach proved essential for indie and AAA studios alike, enabling risk reduction through iterative validation of artistic, technical, and narrative elements.[7]Vertical Slices in Software Development
In Agile Methodologies
In agile methodologies, vertical slices play a crucial role in breaking down large epics into smaller, manageable user stories that deliver incremental value to the end user.[8] This approach ensures that each user story adheres to the INVEST criteria—Independent, Negotiable, Valuable, Estimable, Small, and Testable—by focusing on end-to-end functionality that spans multiple layers of the system, such as user interface, business logic, and data persistence, rather than isolated components.[9] By structuring stories this way, teams avoid dependencies that could hinder parallel work and prioritize features that provide tangible benefits early in the development cycle.[10] Vertical slices integrate seamlessly into sprint planning, where they form the basis for selecting work items that can be completed within a single iteration, typically lasting one to four weeks.[8] This enables agile teams to gather early feedback from stakeholders during sprint reviews, as each slice demonstrates working software that fulfills a portion of user needs, allowing for rapid adjustments based on real-world validation.[11] Furthermore, by completing features across all architectural layers in one iteration, vertical slices help reduce technical debt, as teams address integration and testing holistically rather than deferring cross-layer issues to later phases.[9] A practical example of this refinement process involves decomposing a "user registration" epic into vertical slice user stories. For instance, one story might specify: "As a new user, I want to sign up for an account so that I can access personalized features," encompassing form input, email validation, password hashing, and database storage in a single, testable unit.[9] This slice delivers immediate value, such as enabling the first user sign-up, while subsequent stories could extend it to editing or canceling accounts, ensuring progressive enhancement without partial implementations.[11]Vertical Slice Architecture
Vertical Slice Architecture is an approach to software design that organizes code around specific features or use cases, known as vertical slices, rather than traditional horizontal layers such as controllers, services, and repositories. In this model, all components related to a single feature—such as user authentication—are grouped together in a dedicated module or folder, encompassing everything from input handling to data access and output generation. This contrasts with layered architectures, where code is segmented by technical concerns, often leading to widespread dependencies across layers. By coupling components vertically along the axis of change for each feature, the architecture minimizes horizontal dependencies and promotes isolation between slices.[3] The concept was popularized by Jimmy Bogard in his 2018 blog post, where he advocated for building applications around distinct requests to encapsulate all concerns from frontend to backend within each slice. This organization aligns closely with Command Query Responsibility Segregation (CQRS), which separates read and write operations. It is often implemented using libraries like the MediatR library, a mediator implementation created by Bogard to handle requests via dedicated handlers.[12][13] In such implementations, each vertical slice typically includes a request object (e.g., a command or query) paired with a handler that encapsulates the full business logic for that feature, including any necessary data access or validation, without relying on shared abstractions like generic repositories. For instance, a "user login" slice might contain aLoginCommand and its LoginCommandHandler, keeping all related logic self-contained and reducing the need for cross-cutting concerns that span multiple features.[3]
This structure enhances maintainability by allowing developers to refactor or extend individual features independently, as new slices add code without modifying shared components, thereby avoiding unintended side effects. In practice, handlers facilitate this by isolating feature-specific logic, making it easier to test and evolve slices in isolation—for example, updating authentication logic in the login handler without impacting other areas like order processing. Overall, vertical slice architecture scales better for feature-driven development, as it reduces the cognitive load of navigating layered dependencies and supports faster iterations on user stories.[3]
