Solving the 'Floor Problem' in Admin Product Development
Ever start a new admin panel, internal tool, or SaaS back-office, only to find your team spending months building the same foundational features you’ve built countless times before? Authentication, permissions, data tables, forms—it's all essential, but none of it is the actual product. This hidden, repetitive work is what we call the Floor Problem.
The Floor Problem describes the extensive, non-differentiating work required to establish a stable and consistent base for any serious administrative application. It consumes valuable engineering time, delays shipping core product features, and often results in a codebase riddled with inconsistencies. Understanding this problem and adopting deliberate strategies to address it can drastically improve engineering velocity and product quality.
What the Floor Problem actually is
The Floor Problem is the recurring challenge in software development, particularly for administrative products, where teams repeatedly build the foundational components necessary for an application to function, rather than focusing on its unique value proposition. Imagine building a house: the floor isn't the exciting living room or the modern kitchen, but the concrete slab, plumbing, and electrical wiring that everything else rests upon. Without it, nothing can stand.
This "floor" includes a suite of essential features that are critical for any operational system, yet they rarely provide direct business value or differentiation. They are prerequisites, often underestimated in scope and complexity, that must be robust and consistent for the application to be usable and maintainable. The core mechanism is one of unrecognized duplication and incremental complexity creep, where seemingly simple requirements grow into significant engineering efforts.
Key components
Here are the essential components that typically constitute the "floor" in admin product development:
- Authentication & Authorization: Secure user login, session management, token refresh, and robust access control (RBAC).
- Data Presentation: Sophisticated data tables with server-side pagination, sorting, filtering, searching, and user-configurable column preferences.
- Forms & Validation: A consistent form stack for data input, with validation, error mapping from backend responses, and standardized input patterns.
- Application Foundation: Centralized API error handling, notification surfacing, and a unified routing system driving navigation and permissions.
- System Features: Internationalization (i18n), theme switching (light/dark mode), and dynamic feature flags with management UIs.
- Engineering Conventions: Standardized page structures, scaffolding tools, and linters to maintain consistency across the codebase.
The problem often reveals itself slowly, month after month, as the seemingly simple initial setup morphs into a significant undertaking.
- Week 1: You set up a basic login, a sidebar, and a couple of routes. It feels easy, like you're making quick progress.
- Week 4: The humble list of rows evolves into a complex data table that needs server pagination, URL-driven state, persistent column preferences, and a working CSV export.
- Week 8: Basic
if (user.role === 'admin')checks are no longer sufficient. A real permissions system (RBAC) emerges, gating navigation items, route access, and individual action buttons. - Week 12: A stakeholder demands feature flags for a controlled rollout. Now you need a config UI, a flag-checking hook, and robust route guards, pushing initial estimates far past their mark.
Why engineers choose it
Engineers don't choose to rebuild the floor; they are often forced into it because existing solutions fall short for real-world applications. The industry offers various tools to help, but they typically cluster at two ends of a spectrum, neither fully addressing the "Floor Problem":
- UI kits are too granular: Libraries like Material UI or Ant Design provide excellent components (a
<Table>or a<Dialog>). However, they give you the raw parts, not the fully assembled patterns. They provide a table component, not a server-paginated data table connected to your backend with user preferences. The integration and complex logic are left entirely to the development team. - Starter templates are demo-grade: Many templates offer a working layout but often feature fake authentication, simplistic client-side tables with hardcoded data, and rudimentary permissions (e.g., a simple
role: 'admin' | 'user'enum). The moment a real workflow with statuses, sub-resources, or operator queues is introduced, these templates break down, forcing teams to invent complex patterns from scratch. - Low-code platforms are too rigid: These platforms can deliver a functional product quickly, but only if requirements perfectly align with their predefined boundaries. As soon as a requirement deviates even slightly, engineers find themselves fighting the platform, losing the flexibility that custom development offers, and often leading to more complex workarounds than if they had built it themselves.
Because none of these options fully deliver a production-ready "floor" for complex admin products, teams repeatedly rebuild it, each time slightly differently, leading to a proliferation of bespoke conventions and solutions.
The trade-offs you need to know
While building the floor seems like an inevitable first step, it’s crucial to understand that it doesn't remove complexity; it merely shifts it. Ignoring the Floor Problem or addressing it inadequately introduces significant trade-offs:
- Time Sinks: The most obvious cost is the several months spent on non-differentiating infrastructure. This directly delays the delivery of core features that bring business value.
- Hidden Cost of Drift: Without a strong, opinionated foundation, different engineers will implement similar features in subtly different ways. One page might keep business logic in the component, another in a hook, and a third in a Redux thunk. This inconsistency makes the codebase harder to navigate, understand, and extend.
- Decreased Velocity: As the codebase drifts, onboarding new engineers becomes slower, and adding new features requires more effort due to the need to learn and adapt to multiple inconsistent patterns. The third year of the codebase becomes significantly harder than the first.
- User Experience Inconsistencies: Different implementations of tables or forms can lead to subtle variations in user behavior (e.g., pagination that resets in some places but persists in others). This erodes user trust and makes the product feel less polished and reliable.
- Maintainability Nightmares: Debugging issues across inconsistent patterns is time-consuming. Updating or refactoring foundational elements becomes a monumental task, as changes in one area might inadvertently break another due to a lack of coherent design.
When to use it (and when not to)
Understanding the Floor Problem helps you make informed decisions about your project's foundation. It's about being deliberate.
Use it when:
- Building a serious, long-lived admin product: If your application will be an integral part of operations for years, investing in a robust, opinionated foundation is crucial for long-term maintainability and scalability.
- Consistency and engineering velocity are priorities: A well-defined "floor" ensures that all engineers follow the same patterns, accelerating feature development and reducing cognitive load over time.
- Your product handles complex operational workflows: If you need to manage entities with statuses, sub-resources, queues, and decision flows, a demo-grade template simply won't suffice; you need battle-tested patterns.
- You can dedicate resources to build a solid foundation intentionally: Whether building it yourself or adopting an existing one, commit to a high-quality, complete foundation upfront to avoid future pain.
Avoid it when:
- Building disposable prototypes or extremely simple internal tools: For short-lived or low-stakes projects, the overhead of a full foundation might outweigh the benefits. Low-code solutions or quick-and-dirty custom scripts might be more appropriate.
- Assuming off-the-shelf starter templates will scale to complex needs: Many templates are designed for demos. Relying on them for production-grade admin applications will inevitably lead to significant re-engineering down the line.
- Your team lacks a clear plan or consensus on architectural patterns: Without an opinionated approach, attempting to build a custom foundation from scratch will likely result in the very drift and inconsistency the Floor Problem describes.
- Expecting a UI component library to solve foundational integration challenges: While component libraries are essential building blocks, they don't solve the problem of wiring together authentication, permissions, routing, and data patterns.
Best practices that make the difference
Building a solid foundation for your admin product requires deliberate effort and adherence to key principles. These practices help you overcome the Floor Problem and set your team up for long-term success.
Be Opinionated
Define and enforce a single, consistent way to do things across your application. This means one way to structure a page, one way to define a route, one way to wire a data table, and one way to check permissions. Document these conventions explicitly, and use tools like linters or scaffolding scripts to enforce them. An opinionated foundation means new engineers can quickly understand and contribute to any part of the codebase, predicting how the fourth page works after seeing the first three.
Be Complete
A truly effective foundation must integrate all the core pieces: authentication, RBAC, data tables, forms, dashboards, notifications, theming, i18n, and routing. These components shouldn't just exist; they must be wired together seamlessly. Users should be able to sign in, view a list, edit a record, receive a notification, switch languages, toggle dark mode, and have their preferences persist across reloads—all out of the box, without needing to reinvent the integration logic for each feature.
Be Real
The most crucial property of a good admin foundation is that it must be tested against an actual, complex operational workflow, not just a simple CRUD (Create, Read, Update, Delete) demo. Patterns that survive modeling an entity with multiple statuses, sub-resources, and a separate decision flow are fundamentally different from patterns that only look good in an initial demo. This "realness" ensures your foundation can handle the intricate business logic and user interactions of a true operational system.
Adopt a Deliberate Foundation
Instead of mindlessly rebuilding the floor with every new project, make an informed choice. You can build it yourself with deliberate planning and strong conventions, fork an existing opinionated foundation that aligns with your team's stack (e.g., React with Redux/Zustand, MUI/Tailwind), or, for very simple cases, use a low-code platform. The key is to assess foundations not just by their components, but by how well they encode patterns for real-world workflows. Look for proof that the foundation has handled complex scenarios, not just demo screens.
Wrapping up
The Floor Problem is a ubiquitous, yet often overlooked, challenge in software engineering. The months spent rebuilding authentication, permission systems, advanced data tables, and robust forms are a significant drain on engineering resources, slowing down product development and introducing insidious technical debt through inconsistent patterns. It's a problem of invisible complexity and unrecognized cost.
Recognizing that the true unit of admin software is the pattern, not just the component, is key to overcoming this. By being opinionated, building complete, integrated solutions, and validating them against real operational workflows, teams can move past the constant reinvention of the "floor." This deliberate approach frees engineers to focus on the unique, value-generating features that truly differentiate a product.
Investing in a well-thought-out, robust foundation is not a luxury; it's a strategic imperative for any serious admin product. It's the difference between a codebase that decays over time and one that enables sustained velocity and growth. Choose wisely, build deliberately, and your team will spend less time on the floor and more time building impactful features.
Stay ahead of the curve
Deep technical insights on software architecture, AI and engineering. No fluff. One email per week.
No spam. Unsubscribe anytime.