Prieto.Digital

Pixel Grinder. Complexity Tamer. UX Designer.

Many Hands, One System

/

10–15 minutes

How thirty contributors across four DCLI enterprise products went from independent workflows to a single, shared design foundation.

DCLI’s enterprise suite, growing in parallel without a shared foundation

DCLI is the largest provider of marine and domestic container chassis to the U.S. Intermodal Industry. Behind its operations sits a suite of enterprise platforms spanning internal tools and customer-facing products.

As the product suite grew, each platform evolved on its own terms: different teams, different timelines, different decisions. What started as reasonable product-level autonomy gradually became a coordination problem. Interfaces diverged, components multiplied, and gaps compounded.

What follows covers the decisions behind the system’s structure, the governance model we built, and what it took to get it adopted.

Four active products, each moving at its own pace

~10 designers and ~20 engineers contributing across ~4 active products simultaneously, each with its own priorities, roadmap, and approach to design and engineering problems.

Autonomy works well in the short term. But over time, the gaps compound: a table pattern here, a form validation behavior there, a navigation structure that differs by product. The more products you add, the more expensive those gaps become.

By the time the design system initiative kicked off, the inconsistency was slowing down engineering, creating friction for users switching between products, and making onboarding harder than it needed to be.

Fragmented products, duplicated solutions, and the compounding cost of going it alone

The same task could look and behave differently depending on which product you were in.

Inconsistent interfaces

Different layouts, different interaction patterns, different flows for identical operations. For users working across multiple tools, the inconsistency added up to real cognitive friction.

Duplicated components
and logic

Tables, forms, and controls built from scratch in each product independently. Similar enough to cause confusion, different enough to require separate maintenance.

Accessibility gaps

Contrast ratios, focus states, and error feedback each handled differently across products, making consistent WCAG compliance difficult to achieve and harder to audit.

Slower delivery cycles

Without shared components, every new feature meant building from the ground up. Design and engineering re-solved the same problems repeatedly.

Impact

  • Scalability was limited: adding a new product meant inheriting all existing inconsistencies
  • Delivery was slower than it needed to be, across the board
  • Coordination between design and engineering required more effort than the work itself warranted

Examples

Layout

Layout structures diverged across products, with inconsistent grids, spacing, and alignment rules. Similar screens presented different hierarchies, reducing scanability.

Tables, system feedback

Tables solving similar tasks differed in structure, density, and interaction patterns. Feedback mechanisms also lacked consistency, weakening usability and increasing maintenance effort.

Forms

Forms varied in field structure, validation behavior, and feedback states. Users encountered different interaction patterns for similar inputs, increasing friction and error rates.

The north star before any component was drawn

Before a single component was designed, I defined and documented the principles the system would be built on. These weren’t aspirational statements. They were working criteria: if a proposed component couldn’t be justified through at least one, it didn’t belong.

Human-Centered Design

Enterprise tools are often built around systems logic, not user logic. Every component needed to support real user goals, not just technical requirements.

In the system:

Existing product flows were audited before designing anything. Real workflows were the benchmark for validating new components.

Consistency

At the system level, consistency becomes structural: the same component should look, feel, and behave identically regardless of which product renders it.

In the system:

Semantic token roles over hardcoded values. Consistency propagates automatically rather than requiring manual enforcement across teams.

Simplicity

DCLI’s platforms handle complex operational workflows. Simplicity means removing friction that doesn’t serve the task, not reducing functionality.

In the system:

If a component required explanation to use, it needed redesign. The Scale atom is invisible to end users; a single variable for designers.

Accessibility & Mobility

Accessibility was a baseline requirement, not a feature. WCAG compliance was built into the token layer from the start.

In the system:

Semantic color roles, contrast ratios, and focus states were system-level decisions. Accessibility came included, not retrofitted.

Feedback

Operational users need to trust their tools. Ambiguous states break that trust: loading without indicators, submissions without confirmation, errors without context.

In the system:

Loading, empty, error, and success states designed as a unified set, ensuring consistent communication across the suite.

Consolidating fragmented solutions into a shared system that teams would actually use

Extract and validate patterns

We audited what already existed, with a focus on MyRLR as the most mature reference. The goal: identify which UI patterns had genuine reuse potential. Anything too product-specific stayed at the product level.

Define the system architecture

We structured the system using Atomic Design: tokens first, then components, then higher-level assemblies. I introduced the Scale atom at this stage, a custom dimension for adaptive sizing across densities and screen sizes.

Align teams through governance

The system needed a governance model, not just guidelines. We created the Architecture Team: designers, engineers, and product stakeholders evaluating every contribution before it went in. The criteria: reusable, implementable, serving a recurring need. Anything that didn’t qualify stayed at the product level.

Integrate with delivery workflows

The system was never a parallel track. Components were built as part of active product delivery, meaning real usage from day one. That kept design and engineering on the same source of truth and gave immediate signal on what worked.

Four layers, one source of truth

Atoms

Molecules

Organisms

Templates

Pages

Each layer builds on the one below. Two-brand support is handled at the token level, keeping structure shared while allowing variation in color, typography, and copy.

Two brands, one system

DCLI

Green · Red · Navy · Moss

MyRLR – RapidLink Repairs

Safety Orange · Brick Red · Slate

The raw material: tokens that everything else is built on

Typography

Defined through three layers: font families, text styles, and a custom font scale. Text sizes adjust to context rather than being locked to fixed values.For both brands: Font Families, Text Styles, and Font Scale charts.

Color system

Organized into semantic roles: primary, secondary, feedback, and neutral. A color change at the token level propagates across every component that references it. Light and dark mode built in.Top: Light mode. Bottom: Dark mode.

Spacing

A token scale applied consistently across layouts and components. Nothing is arbitrary, and there’s no negotiating values on every new screen.Spacing scale.

Scale

A custom dimension I introduced for adaptive sizing. Predefined ratios let designers adjust density and layout through a single variable. Less visible, but what makes responsive composition manageable.Scale as seen in Figma’s variables panel.

Reusable components with interaction logic, covering the core actions users perform across every product

Buttons

checkbox

Chips

dateselect

File uploader

Icon Buttons

Input-base

Labels

multiselect

radio

Scroll

search

Tabs

textarea

Timer

Toggle

Layout structures that define how components come together on a page

The system supports progressive composition: a page can start blank and grow into a widgetized dashboard without breaking the structure.

Blank

An open canvas with no predefined regions. The starting point for any new page type.

Cover

A split layout that surfaces key information before the user goes deeper. Landing and overview screens.

Basic

A focused layout with a clear primary content area. For tasks that don’t need multiple simultaneous contexts.

Homepage and Dashboards

Multi-zone layout built for overviews: widgets, summaries, and quick-access actions for high-frequency workflows.

List of items

A data-first layout centered on a list or table, with filters, sorting controls, and contextual actions. Built for scanning and bulk operations.

Inner

Detail view combining primary content with contextual panels and actions. Used when a task requires depth without a full context switch.

Full compositions built from system components, with real content and product context

Page-level implementations covered core product flows: payments, user and company management, role assignment, and bulk operations. Across products, the shared structure stays consistent. Variation happens at the brand layer: color, typography, and copy.

Blank

Cover

Basic

Homepage and Dashboards

List of items

Inner

Defining what scales

Not everything belongs in a design system. A pattern earned its place by meeting three criteria: reuse potential across products, frequency in actual workflows, and alignment with recurring design problems. One-time solutions stayed at the product level.

That boundary kept the system focused and prevented it from becoming a catch-all.

Collaboration model

The Architecture Team was the operational backbone of the system. Every contribution went through the same process: identify the need, assess reuse potential, determine the system level, then design, build, and iterate. Having design, engineering, and product aligned on those decisions meant fewer surprises downstream.

Engineering integration

The system connected to a coded component library built on MinimalUI. Shared tokens, component specs, and interaction logic gave design and engineering a common reference point: less handoff friction, fewer implementation drifts.

Working from the same source of truth was what kept the system honest.

Key challenges

Alignment

Engineering prioritized stability; design and product pushed toward more context-specific solutions. Bridging that required shared criteria and ongoing conversation, not a one-time agreement.

Base system constraints

Building on top of MinimalUI introduced its own constraints. Extending it required constant judgment calls: when to work within the base system’s logic, and when to diverge without compromising consistency.

Variation

Supporting two brands without duplicating structure was one of the trickier problems. Brand differentiation was scoped strictly to color, typography, and copy. Identity preserved, fragmentation avoided.

Adoption

Adoption was built into delivery, not treated as a separate initiative. Component needs surfaced during regular product work, went through Architecture Team validation, and were released with documentation before teams were expected to use them.

Architecture reviews, design critiques, and product approvals reinforced usage across teams. The system integrated into the process teams already had.

Outcomes

Assembling complex flows with the system was simple. Take a component, customize it, compose it. What used to take weeks now takes days.

UX Manager, DCLI

Weeks â†’ Days

In production

Consistent interfaces, shared vocabulary between design and engineering, and faster decision-making when a component already existed.

Artifacts

  • Component library in Figma, covering atoms through organisms across both brands
  • Design token and variable architecture, built for light/dark mode and brand-level customization
  • Documentation with usage guidelines and implementation specs