Andrew Mork UX · Product · Systems
← Back
Nike · Design Systems · Self-initiated

DSM & NACL

One language for design and code · 50+ applications · Nike Digital Engineering

When I joined Nike Digital Engineering, we had 3 UX designers supporting 16+ products. Every team was building the same components independently — buttons, tables, filters, date pickers — each slightly different, none of them shared. The designs didn't always match what shipped. Engineers rebuilt things that already existed elsewhere. Nobody had assigned anyone to fix it.

So I built the pitch, designed the system, and co-created the infrastructure with Engineering. What became DSM and NACL started as an Apollo efficiency decision and ended up as the shared foundation for how Nike Digital Engineering builds internal tools — across 13+ named applications and 50+ products total.

Role & Scope

  • Role: Lead UX/Product Design — self-initiated alongside full Apollo workload
  • Scope: Vision, pitch, design system architecture, DSM library creation, NACL co-creation with Engineering, adoption across Nike Digital Engineering
  • Partners: Engineering leads, product managers, and development teams across Nike Digital Engineering
  • Context: 3 UX FTEs supporting 16+ products in an org still building the case for design investment

The situation we walked into

When I joined Nike Digital Engineering, the UX practice was in early formation: 3 designers supporting 16+ products in an organization still unconvinced of the value of UX investment. There were no consistent design standards across any of the tools. Many projects, owners, and stakeholders — often unaligned. A doing culture that fed the machine without long-term considerations. And a pervasive fear of sudden project death that made it hard to build anything meant to last.

The challenge wasn't just building a component library. It was establishing design as a credible, value-generating function in an organization that had never fully seen what it could do. DSM and NACL were the proof of concept — output that made the argument the words couldn't.

The problem nobody had assigned

The inconsistency wasn't anyone's fault. It was an organizational structure problem. Product teams worked in isolation, each solving the same UI problems from scratch. A button in Apollo looked different from a button in CMS. A date picker in Collections worked differently from one in Monarch. Designers had no shared library to work from. Engineers had no shared components to build from. And every time a designer handed off work to an engineer, the translation introduced drift — what shipped rarely matched what was designed exactly.

  • No shared design language across 16+ products — each team solving the same problems independently
  • Design-to-engineering handoff consistently introduced visual and behavioral inconsistency
  • Engineering time wasted rebuilding components that already existed in other codebases
  • No consistent application of UX patterns — teams unconvinced of the organizational value
  • 3 FTEs supporting 16+ products with no scalable way to maintain quality at that ratio

The pitch

Before building anything, I needed to make the case. The audience was engineering leadership — people who needed to see a business argument, not a design argument. The framing I used: internal tools power all of Nike's digital e-commerce experiences. They have to be as brilliant as the consumer-facing apps. Our employees deserve tools that don't hobble them.

The vision I set: a consistent experience across all Nike Admin Tools. The mission: beautiful tools that maximize productivity through consistent design, standardized patterns, and reusable components. That framing — productivity and consistency as the value, not aesthetics — is what got the investment.

  • Framed the problem in engineering terms: rework, inconsistency, and wasted build time — not design quality
  • Proposed a paired system: one library for designers, one for engineers, mirroring each other exactly
  • Positioned UXD as the connective tissue between engineering and the end user — not a separate function
  • Built executive support before writing a single line of CSS or opening Sketch

The philosophy and the architecture

The system was built on three foundations, layered deliberately:

Google Material Design served as the interaction and component baseline — a proven, well-documented foundation that engineering teams recognized and trusted, which reduced the friction of adoption.

Nike Design Standards sat on top as the brand and visual language layer — ensuring that every component reflected Nike's identity, not just generic Material patterns. The swoosh, the typography, the color system, the iconography — all governed at this layer.

InVision DSM was the shared governance tool that kept both sides synchronized. Designers worked from DSM components in Sketch. Engineers pulled matching React components from NACL. Storybook served as the single living source of truth for both.

The component vocabulary was comprehensive by design: buttons, cards, checkboxes, date pickers, confirmation dialogs, iconography, input fields, menus, modals, navigation, page layouts, and more. Not a minimal viable system — a full enterprise toolkit that teams could depend on rather than work around. Components worked the same way regardless of which application they appeared in, which meant designers could move between products without relearning patterns, and engineers could build with confidence that what they installed matched what the designer intended.

The deeper conviction behind all of it: internal tools deserve the same craft as consumer products. All of Nike's digital commerce experiences are powered by these tools. The people operating them — merchandisers, product creators, operations teams — bring their best every day and deserve experiences as beautiful and performant as anything on Nike.com. They notice when they're not.

Designing the governance

Before a component was built, the governance system had to be designed. What would the page structure look like across CMS, MK, and Apollo? What components would be shared? What interaction patterns needed to be consistent regardless of which application they appeared in? These sessions produced the decisions that made the system coherent at scale.

Whiteboard layout architecture diagram showing page width specifications, panel structure labeled A through I, sortable columns, filter inputs, status icons, buttons, modals, and overlays. Columns on the right map components to CMS, MK, and LA applications.

Cross-application layout architecture

The page structure that would apply across CMS, MK, and Apollo — panel widths, column definitions, component zones labeled A through I. The right side maps each zone to the specific components each application would use. This was the governance work: deciding what was shared, what varied, and what had to be consistent regardless of context.

Whiteboard showing CMS / MK / CA page structure diagram with labeled zones, a standardized header, and component vocabulary below including search, date picker, input, multi-select, buttons, carousel, checkbox, tab navigation, and error states

Shared page structure and component inventory

Defining the page structure that CMS, MK, and Apollo would share — and below it, the component vocabulary that would populate it. Every item on this list became a DSM component and a NACL React element. The list preceded the library.

Whiteboard with two-column component specification list showing header styles, sidebar patterns, field types including Material Design UI styles, input fields, multi-select, date/time picker, chips, button styles, sticky toolbar, workspace dimensions, previews, geo properties, error states, notifications, drop zone, tab nav, and breadcrumbs with application assignments

Component specification — what gets built and for whom

The full component vocabulary specified before engineering began — header styles, sidebar patterns, field types, button styles, navigation, error states. The right column assigns each component to the applications that would use it. This document was the contract between design and engineering: build exactly these components, in exactly these variations, and every application gets consistency for free.

What we built

The system had two paired libraries, designed to mirror each other exactly:

DSM
InVision Design System Manager — the component library for designers, used in Sketch
NACL
Nike Admin Component Library — the React component library for engineers, documented in Storybook

The key decision was making them mirrors of each other. Designers dragged components from DSM into their Sketch files. Engineers pulled the matching React component from NACL. Storybook served as the shared living documentation — the single source of truth that both sides could point to. Consistency stopped being something we enforced after the fact and became something built into the workflow itself.

Two libraries, one language

DSM in InVision/Sketch for designers. NACL in React/Storybook for engineers. Designers and developers working from the same component vocabulary — so what gets designed is what gets built.

How it worked in practice

The workflow was intentionally frictionless. A designer opens the DSM library in Sketch and drags a component — a button, a date picker, a data table — directly into their working file. The component is already spec'd, already styled, already consistent with every other product using the same library. When they hand off to engineering, the developer finds the exact same component in NACL, installs it via npm, and builds with it. No translation required. No drift.

  • 70+ standard components covering buttons, cards, checkboxes, date pickers, modals, navigation, page layouts, and more
  • Starter kit for new engineering teams — up and running with consistent components from day one
  • Storybook documentation showed component behavior, variants, and usage in a single living reference
  • Components worked the same way regardless of which application they appeared in
  • Updates to DSM or NACL propagated across all consuming applications automatically

Storybook — The shared source of truth

Every component documented with variants, states, and usage guidance. Engineers install via npm. Designers pull from DSM. Both point to the same reference.

The reach

DSM and NACL didn't stay inside Apollo. Adoption spread across Nike Digital Engineering as teams realized the value of not rebuilding from scratch. The consistent design language meant products that felt like they came from the same company — because they now used the same building blocks.

A collection of consistent applications

Apollo, CMS, Collections, Food Court, Lexi, Maui, NID Lab, Pax, Perspective, Search Admin, Monarch, Member Access, Laboratory — and more. Different products, same component foundation.

70+
Shared components in DSM & NACL
13+
Named applications shipping consistent UI
30+
Engineering teams with shared component access
50+
Total applications built on the system

The pattern underneath

The architecture behind DSM and NACL — a Core component foundation with a Brand Standards layer on top, governed through a shared tool that kept design and engineering synchronized — is the same structural pattern that underlies modern brand management platforms. What we built at Nike was brand governance at engineering scale: ensuring that any team, on any application, was working from the same component vocabulary and brand language, regardless of who built it or when.

The problem Adobe's brand and asset management team is solving is the same problem, at a different altitude and for a different user. The organizational dynamics, the governance challenges, the tension between standardization and flexibility — those don't change. What changes is the context in which people are trying to express and protect their brand.

What it delivered

  • Eliminated the class of design-to-engineering handoff drift that had been endemic across the org
  • Reduced engineering rework — teams stopped rebuilding components that already existed
  • New product teams could onboard to a consistent design language from day one via the starter kit
  • Design quality improved across products that had no dedicated designer — the system did the work
  • Established UXD as a credible, value-generating function in an org that had been skeptical — through output, not advocacy

What this taught me

Building shared infrastructure in an org that's skeptical of design requires making the value undeniable before asking for permission. The pitch worked because it was framed in engineering terms — rework, consistency, productivity — not design terms. Nobody argues against saving engineering time. The design quality came along for free.

The more durable lesson was about leverage. One designer can only directly influence the products they're working on. But a design system multiplies that influence across every product using it — including products with no dedicated designer at all. That's a fundamentally different kind of impact than shipping another feature.

Born from Apollo, adopted everywhere

DSM and NACL started as an efficiency decision on Apollo and became the shared component foundation across Nike Digital Engineering. The Apollo case study tells the platform story. This is the infrastructure story underneath it.

View Apollo →