Design System | Product Interaction | Enterprise SaaS | Fintech | Agile/Scrum

Enterprise Design System

Defining a Shared Interaction Contract for a Modular Fintech Platform.

My role

Design System Designer - product interaction

Product

Modular enterprise fintech SaaS · Shared users · Shared data · Multi-module architecture · Live platform under active feature development

Domain

Fintech · Security · Access Control

Environment

Angular · Kendo UI · Agile/Scrum

Team

3 UI Designers · 3 Frontend Engineers

Timeline

Oct 2021 — Dec 2024

Design system developed and adopted in parallel with active product delivery.

Confidentiality

Company, client, and system details removed. Visuals anonymised. Approach and outcomes accurate.

Design System cover

The project in 30 seconds

Challenge

  • the same user action produced different system outcomes across modules
  • high-effort data could be lost in edit flows depending on the context
  • three validation behaviours for the same form type
  • duplicated interaction logic increased delivery effort

Role

  • interaction model for owned product flows
  • audit reframing from component library to interaction contract
  • design QA in Storybook and production
  • supporting adoption during feature delivery

Key decisions

  • edit mode as a protected system state
  • modal used only for irreversible user actions
  • submit always active with post-action validation
  • interaction behaviour embedded in component definitions
  • reusable cross-module interaction patterns

Impact

  • predictable and learnable product behaviour
  • platform-wide reuse of interaction logic
  • reduced handoff interpretation and rework
  • safe editing of high-effort data by design

My role

Design system designer responsible for the interaction model.

Within the shared design system initiative, I led the definition of interaction rules, edit flows, validation behaviour and modal usage across the platform.

My responsibility included:

  • cross-module behaviour audit
  • defining interaction rules
  • designing reusable interaction patterns
  • embedding behaviour in component definitions
  • design QA in Storybook and production
  • alignment with frontend implementation
  • supporting adoption during feature delivery

Product & Scale

  • multi-module enterprise platform
  • shared data model
  • independent delivery streams
  • interaction patterns reused across 15+ modules
  • gradual rollout between 2021 and 2024

The design system functioned as a shared interaction layer connecting the product platform, documentation, and implementation across modules.

Context

The product was a large platform composed of multiple modules developed by different teams.

Many workflows — including editing forms — appeared across several modules of the product.

Because modules evolved independently, interface behaviours and interaction patterns were implemented differently across the platform.

The design system was introduced into this environment while the product was actively evolving and new features continued to be delivered.

The product platform consisted of multiple independently developed modules.

Goals & constraints

  • design system introduced into a live platform under active development
  • no redesign freeze
  • existing Kendo implementation in production
  • independent module roadmaps
  • audit and backend validation requirements
  • Zeroheight used as the central documentation source
  • cross-module scalability required

The design system was developed within multiple technical and organisational constraints of the existing platform.

The problem

User actions did not have consistent system consequences.

Users could not predict

  • whether their data was safe
  • how leaving edit mode would affect their data
  • how validation responds

For delivery this meant

  • duplicated interaction logic in code
  • inconsistent implementation effort
  • no shared estimation model

Local UI fixes did not change platform behaviour.

The product had no shared interaction contract.

Local UI fixes did not change platform behaviour.
The product had no shared interaction model.

The same system action triggered different behaviours across modules.

The key design-driven moment

Reframing the question.

The audit showed that documentation and visual consistency were not the core issue.

User actions produced different outcomes depending on the module, introducing data-loss risk and unpredictable delivery.

During the audit, I focused on interaction behaviour across modules, which revealed that the real problem was not documentation, but the lack of a shared interaction model.

Initial request

Create and document a design system and align it with implementation.

Reframed as

How do we ensure that the same user action always produces a safe and predictable system outcome across the platform?

From that point, the design system became the shared interaction model embedded in delivery.

Process

The work started with a cross-module audit focused on interaction outcomes rather than visual inconsistencies.

The goal was to understand how the same user actions behaved across modules and where behaviour diverged.

Behaviour analysis

Each pattern was analysed to define system rules
that could be embedded in the design system:

  • user effort and risk
  • system response
  • implementation logic in code

This helped identify where interaction behaviour diverged across modules and translate those findings into consistent system rules.

Analysis method

Example: leaving edit mode

The analysis revealed that the same user action - leaving edit mode - produced different outcomes depending on the module.

User impact

  • users could unintentionally lose unsaved changes
  • behaviour was unpredictable across modules

System response

  • some modules triggered a confirmation modal
  • others allowed navigation away from the form
  • some blocked submission entirely

Implementation logic

  • behaviour was implemented locally in each module
  • no shared rule defined how edit mode should end

Leaving edit mode - produced different outcomes depending on the module.

Integration into delivery

Interaction rules were introduced incrementally, following the model I defined during the audit.

Each rule followed the same integration path:

  • observed behaviour
    (eg. inconsistent interaction across modules)
  • define interaction rule
    (e.g. leaving edit mode requires confirmation)
  • component definition
    (rule embedded in reusable component behaviour)
  • Implementation
    (behaviour implemented in product features)
  • review
    (design and frontend validation)
  • system update
    (documented and reused across modules)

Delivery flow

Component architecture

The interaction decisions defined how the system should behave.

The design system architecture ensured these rules could be implemented consistently across modules.

I aligned interaction rules with the token architecture to ensure consistent behaviour across modules:

  • primitives defining raw values (e.g. dominant-800)
  • semantic tokens defining system meaning (e.g. base-800)
  • mapped tokens connecting meaning to component roles (e.g. icons-and-text-headers)
Primitives: dominant-800
Semantic: base-800
Mapped: icons-and-text-headers

Responsive collection

Responsive behaviour was handled as a separate layer where values such as typography scaled depending on the viewport without changing their semantic role.

Heading H1
Desktop: Size/64
Tablet: Size/56
Mobile: Size/40

Figma variables enabled global, consistent changes.

Frontend implemented its own token structure aligned through shared components and regular reviews.

The system was introduced through real features and validated in Storybook and production.

Audit
Interaction rule
Component
Module (sreen)
Review
System update

Example component: Notifications

The notification component illustrates how system feedback rules were implemented in the design system.

It standardised how system events and validation results are communicated across modules.

Interaction rules were embedded directly into reusable components.

Each component defined visual states, validation behaviour and system responses so that the same user action would always produce a predictable outcome.

Component variants (Figma)

Components were designed as variant sets capturing different interaction states, allowing the same behaviour to be reused consistently across modules.

Textbox Input - component in Figma

Notifications - component in Figma

Documentation (Zeroheight)

System behaviour and component usage were documented for both designers and developers.

Zeroheight served as the central knowledge base, while Storybook validated component behaviour in implementation.

Notifications - overview

Notifications - anatomy

Notifications - variants (colours)

Notifications - variants (interaction)

Notifications - usage

Notifications - usage

Notifications - usage

Notifications - usage

Notifications - usage

Notifications - content guidelines

Core product decisions

01

Treat edit mode as a protected system state

Problem

Records were opened from a table into a details that supported two modes: view mode and edit mode.

However, edit mode was not treated as a protected system state.

When users attempted to leave edit mode, the system behaved differently depending on the module:

  • some modules discarded unsaved data silently
  • others blocked navigation with a confirmation modal
  • some modules disabled submission
  • anothers showed validation errors after submit

As a result, the same user action could lead to different outcomes across the platform.

Trade-off
  • continue delivering features with inconsistent behaviour
  • or redefine edit mode as a protected interaction state

The same system action produced different outcomes across modules.

Alternatives considered

Edit with navigation lock:
The table column stayed visible but inactive, occupying critical screen space and creating a false affordance for navigation

Autosave:
Rejected due to audit requirements and backend validation dependencies

Solution

Full-screen edit as a dedicated system state with controlled exit.

Every action leaving edit mode triggers the same confirmation pattern - modal.

Edit mode presented as a dedicated editing state. The user attempts to leave edit mode.

Confirmation dialog triggered when the user attempts to leave edit mode.

Gained
  • elimination of silent data loss
  • predictable navigation behaviour
  • reusable interaction logic across modules
Accepted
  • refactoring the detail view structure
  • short-term delivery delay

02

Restrict modals to irreversible actions

Problem

Modals were used across the platform for different system behaviours.

  • validation
  • navigation blocking
  • informational messages
Trade-off
  • keep using modals as generic interruption messages
  • or assign modals a single clear behavioural meaning

Validation modal

Navigation blocking

Informational modal

Because the same component represented different behaviours, users could not predict what a modal actually meant.

Alternative considered
Using modals for all blocking interactions

Modals appear whenever the system requires user acknowledgement (include validation errors, warnings or workflow interruptions).

Modal used for validation feedback
This ensured visibility of errors but interrupted workflows and reduced interaction predictability.

Solution

Modals were reserved exclusively for actions with irreversible consequences, including:

  • discarding unsaved changes
  • deleting records
  • triggering system-level operations

This rule was documented in the design system and applied consistently across modules.

Zeroheight - Dialog - overview

Zeroheight - Dialog - anatomy

Zeroheight - Dialog - usage

Zeroheight - Dialog - content guidelines

Gained
  • modal as a clear system signal
  • reduced cognitive interruption
  • consistent implementation rule
Accepted
  • refactoring existing validation and error communication

03

Define structured system feedback rules

Problem

Large enterprise forms (40–80 fields) used three different validation models:

  • submit button disabled until required fields were filled
  • active submit returning multiple blocking notifications
  • validation triggered only on field focus
Result
  • users could trigger errors but had no efficient recovery path
  • finding a single missing field in long forms required manual scanning
  • the same task behaved differently across modules
Trade-off
  • prevent invalid submissions by blocking the submit action
  • or allow submission and guide users through error recovery
Alternatives considered

Disable submission until the form is valid:
- prevents sending incomplete data
- but in long forms users must manually find the missing field

Keep submission always active and return only global errors:
- action is possible
- but users do not see what needs to be corrected

Solution

Submission as the single completion trigger with guided recovery:

  • submission is always available
  • after submission, incorrect fields are marked inline
  • the view moves to the first error
  • one clear global message informs that the form contains errors
  • fields provide immediate feedback on focus loss where possible and do not block submission

Form in progress — submission always available

Submission reveals all errors and guides correction

Gained
  • task completion no longer depends on finding errors manually
  • one consistent recovery pattern across all forms
  • the same validation behaviour across modules
  • reusable form logic for implementation
Accepted
  • submission is no longer blocked upfront
  • some errors appear only after submission

System Adoption & Integration

The design system operated as a structural product layer within a delivery-driven environment, enabling teams to ship features while maintaining consistent interaction behaviour.

Integration in Feature Delivery

  • developed alongside feature delivery under delivery pressure
  • prioritised by the design team as a structural investment
  • introduced through real feature work rather than a one-time migration
  • extended incrementally across modules as new patterns emerged

Continuous Alignment with Implementation

  • shared ownership across the design team within their product areas
  • alignment with frontend on behaviour, token mapping and technical constraints
  • Storybook review before release
  • Design QA in production against system rules
  • structural decisions discussed before commitment

The shared interaction model defining how user actions translate into system responses and outcomes.

Impact

The shared interaction model improved both product behaviour and feature delivery across the platform.

Impact was observed through Design QA tickets, implementation issues and release feedback rather than formal measurement.

Delivery

  • fewer design–development inconsistencies (~30%) observed through reduced Design QA issues and implementation corrections
  • less UI rework in release cycles (~20%) as teams reused established interaction patterns
  • faster feature implementation due to predictable component behaviour and interaction rules

Product

  • consistent and learnable interaction model across modules
  • elimination of silent data loss in edit flows
  • unified validation and modal behaviour for complex forms
  • the system evolved through new patterns introduced alongside real feature delivery

Reflections

Design systems define product behaviour — not just UI.

New features started from the interaction model instead of redefining flows.

Interaction logic scales only when it becomes part of the system.

Embedding it in components enabled reuse across multiple product areas.

Documentation works only when it stays aligned with implementation.

Continuous validation in real features prevented system drift.

The system evolves through product work.

New patterns extended the shared model instead of becoming local exceptions.

Wybrane Projekty

Zobacz też inne projekty.

Design System

Zobacz Case Study
Design System cover

Iconography System

Zobacz Case Study

Security & Access Management

Zobacz Case Study

Pro Hair Lab

Zobacz Case Study

Design System

Zobacz Case Study
Design System cover

Iconography System

Zobacz Case Study

Security & Access Management

Zobacz Case Study

Pro Hair Lab

Zobacz Case Study