How the Flow-Screen-State-Section framework solves the chaos of design-to-dev handoffs.
Let's be honest: most projects don't have a naming convention; they have a collection of insufficient naming habits that leads to chaos. The Atlas Outline is the framework that replaces those bad habits with a clear map and a unique address for every single screen.
Everyone has their own logic for organizing files. It works perfectly—until you join a team. Suddenly, that "obvious" system requires lengthy explanations, and the project descends into a mess of long file paths, confusing names, and wasted time. This is the unspoken chaos at the heart of many design-to-dev workflows, a problem that text-based names and complex folder structures have failed to solve.
But what if there was a framework that was almost self-explanatory? That's why I created The Atlas Outline. This isn't a theory; it's a battle-tested system I've been refining for nearly 30 years, from the early days of Information Architecture to modern workflows in Figma. It’s a simple, powerful solution designed to bring lasting order to your projects by giving every view a unique and memorable address.
The framework is built on four words: Flow, Screen, State, and Section. In this article, I'll break down the simple rules behind each component. By the end, I promise you will have internalized the system, understood its benefits, and be ready to use it on your very next project.
Before we dive into the solution, let's agree on what a successful naming convention must achieve. Over the years, I've found that any system that lasts must be built on four key principles. It's not enough for a system to be organized; it has to be robust, intuitive, and future-proof.
Here are the principles that separate a temporary fix from a permanent solution:
A great system doesn't require a decoder ring. A new team member, whether a designer, developer, or project manager, should be able to look at a screen's name and understand its context and purpose with minimal explanation. Clarity is the foundation of efficient communication.
The biggest flaw in most ad-hoc systems is that they break under pressure. A convention must work just as well for a simple MVP as it does for a complex, multi-platform application. It shouldn't become more confusing as the project grows.
This is the ultimate test. There must be a way to create a distinct, unambiguous address for every screen, including all its possible variations—pop-ups, error messages, loading animations, and disabled states. If two different states share the same name, confusion is inevitable.
Any system that fails on even one of these principles will eventually collapse into chaos. Now, let's look at a framework designed from the ground up to excel at all four: The Atlas Outline.
The Atlas Outline gives every screen a unique, logical address using a simple four-part structure. It’s designed to be read like a set of coordinates, moving from the broad user journey down to the finest detail of the interface.
The format is: [Flow]-[Screen]-[State]-[Section]
Let's break down each component.
The [Flow] is the highest-level identifier. It doesn't represent a single page, but rather a complete user journey or a core feature of your application. Think of it as a major chapter in your product's story.
The [Screen] identifies a specific, unique view or page within a Flow. This is the primary "map" in our Atlas that shows where the user is.
The [Screen] identifies a specific, unique view or page within a Flow. This is the primary "map" in our Atlas that shows where the user is.
The [Section] is your secret weapon for complex pages. It’s an optional identifier used to pinpoint a specific region or component within a single Screen.
A quick but important clarification: When we say "Section," we mean a conceptual area defined during the design phase—not necessarily the HTML <section> tag. Think of it as a logical grouping like "the payment form" or "the order summary." This approach keeps the design logic separate from the final code implementation, ensuring the system remains stable and flexible.
By combining these four components, you create a system that is not only clear and scalable but also incredibly stable and capable of uniquely identifying every possible view in your application—fulfilling all four of our guiding principles. I should mention that you can use of course also a label to make it easier, but that is optional and the name can be changed, the screen identifier however always stays the same. If you named the first screen “1-00 Home” to “1-00 Start”, this would absolutely be possible, because you don’t change the unique id. The label just acts as a reminder or hint.
But wait, there is one more thing (to quote Steve Jobs).
When designing screens and developing a user flow, you might need to experiment with different variations of the exact same screen. How do you deal with this? The Atlas Outline uses the underscore at the end and capital letters. If you add _A or _B at the end, then it becomes clear that this is a variation. Once one of the variations becomes the final one, you delete (!) the underscore for that particular one, but you leave it with the others. This way you don’t have to delete them and will always be able to reference it back. I have often experienced the scenario, that an old idea was discussed again and I could then show that we already tried this.
Software evolves over time and so does the user interface. In software development, we use what is called semantic versioning. Version 1.0 is normally the release version of a software and by the time version 1.1 is in the works, there are very likely already changes to the User Interface. We want to be able to track these and keep the old screens as reference. This requires us to be able to rename the old screens or mark a screen as future release.
For the screen design, we also have the need to give our screens a version. To differentiate it from the semantic versioning, we will use Date Versioning in the format JJMMDD.
How do we combine these, if there is ever a need?
This addresses an advanced, real-world scenario where a design iteration (identified by date) is specifically targeted for a software release (identified by semantic version).
To combine both, we use a single versioning suffix (@) with a clear internal separator. This keeps the format clean and groups all versioning information together logically.
The recommended format would be: @[SemanticVersion]|[DateVersion]
The pipe symbol (|) is a great separator because it's not used in either semantic versioning or the YYMMDD date format.
Let's take a screen for a password-reset dialog, 1-01-02-00.
This single, clear identifier tells the team: "This is the design iteration from September 12th, 2025, which is intended for the software version 2.2.0."
For applications that rely heavily on user input, such as forms and complex interactions, we can add an optional layer of organization to our State Legend. This "Transfer Convention" reserves specific ranges of numbers for user inputs and system outputs.
Adopting this convention makes your State Legend instantly familiar across different projects and teams. It standardizes how we map the "conversation" between a user and the system.
The Atlas Outline ID is the stable, unique identifier for any view, but it should always be paired with a clear, human-readable label for context. The label acts as a helpful hint or reminder of what the ID refers to.
The best practice is to create a full, contextual label that describes the entire path of the ID. This ensures that even when viewed in isolation—like in a Jira ticket or a Figma comment—the reference is instantly understandable without needing to look it up.
This complete label should be the standard for naming your frames in design tools. A key strength of this convention is the separation of the ID and the label. The numeric ID is permanent and never changes. The descriptive label, however, is flexible. You can refine it over time—for instance, changing "1-00 Home" to "1-00 Start"—without ever breaking the link to the unique ID.
This means the full, final structure of the Atlas Outline, including all optional suffixes, would be:
[Flow]-[Screen]-[State]-[Section]_[Variation]@[VersionInfo]
Here is an example showing every component in use:
1-01-02-00_A@2.2.0|250924b
This approach allows you to layer additional metadata onto the core ID in a way that is structured, unambiguous, and handles even the most complex versioning needs.
Adopting a new system requires a conscious effort, so what's the return on that investment? The Atlas Outline isn't just about keeping your files tidy; it's about fundamentally improving the way your team collaborates. It’s a small change that delivers significant, cascading benefits throughout your entire workflow.
Here are the four key benefits you can expect:
Imagine writing a Jira or Asana ticket that says, "Fix the validation bug on 2-03-06-02." The developer knows instantly and precisely where to find the error: in the Checkout flow, on the Payment screen, in the CVV section. This level of precision makes documentation clearer, bug reports more effective, and the entire management process more efficient.
Ultimately, these benefits lead to faster development cycles, fewer bugs, and a more aligned and collaborative team environment.
We began this journey by acknowledging a familiar problem: the chaos that comes from having no real and consistent naming convention.
The Atlas Outline offers a clear path forward out of this chaos by providing a simple, memorable address for every flow, screen, state, and section. It transforms your project from a tangled wilderness into a world that can be easily and confidently navigated by everyone on your team.
This framework builds a durable bridge between the worlds of design and development. Investing a small amount of effort in this structure upfront will pay you back tenfold in saved time, fewer bugs, and a truly collaborative workflow.
Here are a few examples that hopefully make it easier to understand how to use the Atlas Outline.
To see the Atlas Outline in action, let's map out a familiar example: a standard corporate website with a clear information architecture.
The site's navigation is organized into three distinct areas:
1. Main Menu (Primary user navigation)
2. Info Menu (Legal and company information, often in the footer)
3. User Menu (For account management)
Here is how you get started.
The most important first step is to group pages by user journey (Flow), not by their visual position in the navigation menus. This ensures the numbering system remains stable even if you redesign the menus later.
Based on the scenario, we can define four logical user flows:
With the flows defined, we can now assign a unique address to each page. For these examples, we'll primarily use the default state (-00).
This is the entry point for this flow.
This structure provides a clear, logical, and scalable map of your entire website. Even if you were to move the "Contact" page from the main menu to the info menu, its number (1-03-00) would remain the same because its purpose hasn't changed.
To demonstrate the Atlas Outline on a dynamic application, let's use a familiar example: Microsoft To Do.
This app, while seemingly simple, involves numerous states, panels, and dialogues—making it an ideal candidate for precise mapping.
We'll consider the following key areas and interactions:
This scenario involves different view states, modals, and dynamic content, which are great tests for the system. First, let's establish the logical user flows.
Based on the interface and actions described, we can define three primary flows:
With these flows, we can now map out the specific screens and states of the Microsoft To Do application.
This flow covers the main application window and all its variations.
This flow begins when the user clicks their account icon and enters the preferences area.
This example highlights how the Atlas Outline cleanly separates different contexts (task management vs. settings) and handles changes in the screen's state (like selecting a task or searching) without needing to create confusing, duplicative names for each variation.
Not at all. The beauty of the Atlas Outline is its scalability. For a small project, you might only ever use the first three components (Flow-Screen-State). The system provides a solid foundation that grows with your project, so you never have to waste time inventing or reorganizing a system later. It's about building a good habit from the start.
Treat any view that takes over the user's primary focus as a new Screen within the current flow. For example, if a user is on the "Product Detail Page" (1-01.1-00) and clicks "Write a Review," the pop-up modal would be a new screen in that hierarchy, such as 1-01.2-00. This keeps the logic clear: it's a new, focused interaction related to the previous screen.
This is a core design choice for three reasons:
This is handled by creating a "template" number. In your design, you would create a single, generic screen for "User-Created List View" and assign it a number like 1-10-00. In your documentation and design system, this number then represents the template for any list the user creates. It's a way to number the functionality, not every piece of individual content.
Not necessarily. The Atlas Outline is a communication and referencing system, not a strict file-naming convention for code. Code has its own organizational logic (e.g., Atomic Design, feature folders). The Atlas Outline number is the bridge between the two worlds. You would use it in your Jira tickets, design documentation, code comments (// Corresponds to Atlas Outline ID: 2-01-06), or Storybook to link a specific design to a specific component.
No, and this is a key strength of the system. The numbers are tied to the function of a screen, not its visual order. If your "Services" page (1-02-00) moves above the "Products" page (1-01-00) in the main menu, their numbers do not change. This stability ensures that a simple UI refresh doesn't break your entire project's documentation.
We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.