Celtra Design System

Celtra Design System

In:
6 min read
0-1 development of a custom design system. We unified UI components and visual language across three diverging codebases while simultaneously overhauling the platform one project at a time.

Context

Company: Celtra
Timeframe: 2017 - 2018
Role: VP of Product

With the company’s fast growth and an influx of new features, the platform quickly outgrew its original design. Some new projects had to be built with legacy UI components for pragmatic reasons; on others, the team was innovating with new visual languages.

Furthermore, the three main parts of the platform were built using different front-end technologies, which prevented us from using the same UI components across the board. We were accumulating technical debt and losing grip on user experience, yet we couldn’t afford to stop and consolidate because business circumstances dictated new features over tooling.

Mission

The opportunity finally arose when engineering got the approval for rewriting the platform’s core with Vue.js. I partnered up with engineering leads responsible for the overhaul and devised a strategy for finally consolidating visual language and user experience with a design system.

Contributions

I initiated the design system and was responsible for it from conception to the production rollout.

Hands-on contributions:

  • Researched leading design systems and best practices
  • Designed the stack and production workflow architecture
  • Designed the foundation of the component library

Throughout the 18-month gradual rollout, I rallied and directed a team of three designers to establish the DesignOps function and worked closely with engineering leads and other product teams to support adoption with active development projects.

Results


Highlights

Stack research and architecture

Our objective was to achieve a lean production workflow, ensure long-term interoperability, and be rational with licensing costs.

The 2017 tooling landscape was mid-upheaval. We were bullish on Framer X’s vision of designing with live codebase components, but unfortunately, it was incompatible with our Vue.js stack. InVision’s Studio was fresh in beta, buggy, and its import of Sketch files was unreliable. Figma seemed promising; however, at the time it had limited features for managing component libraries, no desktop app, and requiring the entire team to learn a new tool would be a hard sell.

Design Version control Prototyping and animation Handover Icons Style guide
• Sketch
• Framer X
• Figma
• InVision Studio
• Adobe XD
• InVision DSM
• Abstract
• Plant
• Framer
• Principle
• Marvel
• Flinto
• Origami Studio
• LottieFiles
• Kite Composer
• Sketch Cloud
• Zeplin
• InVision Inspect
• Nucleo
• Streamline
• FontAwesome
• Noun Project
• VUEDS
• Fractal
• Catalog
• Patternplate
• Bit
• zeroheight

We decided on the combination of Sketch, Abstract, and Principle. It was a safe bet that wouldn’t require convincing the rest of the organization to change the stack, and it left the door open for migrating to Framer, InVision, or Figma in the future if necessary. Within Sketch, the Overrideit plugin alleviated the pain of finding components within dropdown menus, and a clever hack gave us auto-resizable button symbols (before the native auto-layout features).

The longer-term ambition was a system relying on code as the single source of truth, with Airbnb’s React Sketch.app generating Sketch components and VUEDS generating the documentation.

Whiteboard sketch of a unified system for design and code implementation

Form vs. function

The biggest initial challenge was finding consensus on diverging views on optimum between aesthetics, functional requirements, and simplicity. It took several months of incremental progress and stress-testing (with more than 10 shades of blue) to arrive at a solution that ticked off all the boxes.

We opted for the underline form elements style to reduce the number of nested rectangles and borders, which make the UI harder to comprehend due to visual noise. As a B2B product with technically savvy users, we could afford the clarity trade-off associated with this style on the component level to make the whole clearer.

Legacy design of campaign management dashboard

Luminosity and contrast

Another area where we had to find optimal balance was color space. Grayscale and semantic colors used for text had to pass the WCAG AAA requirement, while for decorative colors and background shades, the AA rating was sufficient.

Bright and Dark grayscale
Color system optimized for functional same values in both modes and tonal harmony

Type system

To support our customers globally, we required the UTF-8 charset. A custom webfont in at least three font weights would translate to a significant payload. Using the OS’s native type family was an obvious choice to get premium typography and full accessibility while staying within the performance budget.

System fonts weights comparison table
Latin 1 character set specimen comparison layout
Type scale with tracking optimization applied to normalize differences in character width and default kerning
Overlay test ensuring minimal differences in line widths and breaks and thus cross-platform layout consistency

Scale

To achieve clear visual hierarchy and optimize the user experience for the entire spectrum of devices (from 27" external displays to smartphones), we would need every UI element in three sizes: condensed, normal, and fat.

Campaign management dashboard UI design with responsive behavior
Standard 4px grid and multiplier spacial scale

Iconography

Nucleo icon library

Open-standard and media partners ad product categories

Ad formats line-up

Components

Drop down menus variants

Data-driven design

We often run into dilemmas where accommodating a wide range of edge case scenarios would require big trade-offs. By analyzing live data (e.g., quantity of list items, length of titles, time ranges, frequencies, etc.), we were able to optimize UI decisions for realistic value ranges.

Implementation and rollout strategy

The operational constraint of developing a design system while simultaneously using it in production was incredibly challenging but proved extremely effective. It expedited our learning about the platform’s intricacies, enabled us to stress-test elements before rolling out the entire system, and prevented us from creating design fiction.

Within the next year and a half, we meticulously directed all roadmap projects to ensure all ongoing projects were using the correct components and were aligned with the platform redesign big picture. The rollout continued past my tenure.

New Creative dialog with multitude of configuration screens
Selection of platform screens after redesign

Credits

Design: A. Venta, A. R. Urankar, G. Furcolo
Engineering: U. Pirnat, M. Tribušon