Backend-Driven UI that’s 6× faster to develop

MY Role

Product Design Lead

TEAM

Product Design Team

Frontend Developer Team

stakeholder

FinOps department at VK Tech, a large IT-company

Description

Project focused on developing a backend-driven UI to speed up layout implementation in design and front-end development, while reducing the number of mistakes during design-to-code handoff

KEY Results

6× faster development

Reduced development costs

Standardised user experience for more than 10 B2B digital products

Context

VK Tech is a large IT company that develops digital B2B products.

FinOps is a department within VK Tech that focuses on financial and operational platforms. In many FinOps products, users work with entities such as risks, requests, control procedures, documents, and more. Entity interfaces account for over 60% of all product interfaces.

over 6

products

in the FinOps product line

≈10

efforts

per year

60%
interfaces

of all product interfaces

1000+ entities

per product

Each of these entities has its own interface, allowing users to view the details and perform different actions with it.

Building each interface for every entity from scratch, first, takes a lot of time and resources on both the design and front-end sides. Second, it’s a repetitive task that often leads to small mistakes and inconsistencies when handing off the design to development.

Main Hypothesis

If we systematise the interfaces of all entities across different products, we can create a standard interface with an API (backend-driven UI) that will significantly speed up layout implementation in both design and front-end development — Entity Card Interface.

Research

I analysed more than 15 types of entities, along with their user stories, use cases, and user flows, and found that they have much more in common than different. I realised that if we take the 5 most diverse entities and break them down into parameters, we get a set that covers over 90% of any other entity in the system — whether it already exists or not.

During the analysis and structuring process, I identified all the information that affects interface design and grouped it into three main categories:

  • characteristics of the entity’s structure,

  • information about the entity and its data,

  • actions related to the entity.

Within these categories, the information was further divided into subgroups.

As a result, there are four levels of detail, but for the purposes of this case, I’ll only present the basis for how the first two grouping levels were defined

The next step was to design a unified interface where all entity’s parameters would fit and remain flexible to support different variations of each one.

Designing the Universal UI

Screen Architecture

I divided the screen of the universal entity card interface into two parts to display different types of information based on their type and level of importance.

Main Page, which includes:

  • Header — individualising and high-level information

  • Toolbar — entity-level information and actions

  • Entity Structure — the structure of the entity

  • Tab Content — content of the entity section; the main content

  • Footer — technical information

Sidebar, which includes:

  • Sidebar Header — title of the sidebar

  • Sidebar Sections — sections of the sidebar, additional content

  • Sidebar Footer — secondary technical information

Header & Toolbar

Each entity always has a name, which is usually how a person identifies it — the name is displayed on the left side of the entity card header. On the right side of the header are the controls for managing the sidebar.

An entity usually also has a status and an additional identifier (a tag) — both are shown on the left side of the entity card toolbar. On the right side of the toolbar are the action buttons for working with the entity.

Entity structure

Entities can be either simple (with a single tab) or complex (with multiple tabs that can be grouped in different ways). To allow the interface to support any structure, we reserved space on the left side of the entity card for a customisable hierarchy — entity structure:

  • If the entity is simple, there is no hierarchy at all

  • If the entity is complex but not hierarchical, all elements in the hierarchy are on the first level

  • If the entity is both complex and hierarchical, the hierarchy includes grouped levels

Entity tabs can have different editing types:

  • Non-editable — meant for viewing information only

  • Editable but optional — can be edited if the user chooses to

  • Editable and required — must be edited to complete the task

  • Unavailable for editing or viewing — hidden until the user does something, like filling another tab

In addition, to display various extra information and perform certain actions with the entity, I added a sidebar. It can be opened or closed, and in some cases, it may be completely hidden.

Entity Sections (Tabs)

Tabs can vary a lot, but I found that they usually serve one of the following purposes:

  • Showing information about a single object or section — single form

  • Showing information about multiple objects or sections — multiple forms and/or a table

  • Performing actions (including extra actions in modals) — multiple buttons and controls

  • Adding objects, data, or files — multiple buttons and controls

Since a tab can contain a lot of information, some interface elements may be hidden inside collapsible sections.

I approached the systematisation of business actions not from the perspective of their business meaning, but by looking at the type of actionwhich part of the entity it relates to, and where in the interface it takes place.

This approach allowed us to include all the necessary controls and their combinations in the entity card interface.

Then, I prioritised all actions relative to each other and, based on factors like importance and frequency of use, defined where each action should appear in the entity card interface.

Sidebar

I paid special attention to standard actions that run in parallel to working with the entity and have their own business meaning and even their own step-by-step flow — like commenting or attaching files.

It’s clear that these actions need a dedicated space in the interface, but placing them inside the entity’s structure wouldn’t make sense. That’s why I decided to use the sidebar for them, adding the ability to switch its content — depending on the mode, the sidebar shows different content.

Universal Interface

As a result, I created a universal entity card interface that allows us to display any type of entity across all our products in a consistent and predictable way:

Developing

Developing

Unfortunately, due to tight deadlines, I didn’t have the chance to run user testing before developing the universal interface. Instead, I used mockups to make sure that a wide range of entity types and use cases fit well into the structure, and then moved on to building the API.

The universal interface API is designed in a way that allows full flexibility — the entity card can be customised by simply enabling or disabling different parameters, essentially allowing the interface to be drawn directly from the backend (backend-driven UI).

First Impressive Results

Right after development, we used the universal entity card interface to build screens for a new feature — in order to meet a very tight deadline for one of the projects.

Thanks to the entity card interface, we achieved an incredible development speed:

In design

195 mockups /

24 person-hours

≈ 7 minutes per screen

On the front end

195 screens / 

280 person-hours

≈ 1.5 hours per screen

That’s roughly 6 times faster than our average screen-building speed at that time!

Additionally, we significantly reduced the number of mistakes during design handoff to the frontend and eliminated the need for design reviews.

For a typical interface, it's enough to define and verify all UI parameters (such as spacing, border radius, sizes, etc.) once — after that, they can be reused consistently and without mistakes.

User Testing & Continued Application

We continue to actively use the universal entity card interface as a fully integrated template-level component of our design system to ensure high development speed and a consistent user experience.

In addition to the API documentation, we created extensive internal documentation that describes the entity card as a UX/UI pattern and shared it with the entire team. This shared documentation helps us stay aligned, keep all current knowledge about the interface in one place, and store our ideas for future improvements.

We also have a development plan for the interface — we’re aware that it’s not perfect and we know what our next steps should be to make it better.

In addition, we’ve conducted user testing and identified some usability issues that we plan to address in the near future.

Takeaway & Reflection

This is one of my favourite projects because it clearly shows the power of the things I deeply believe in:

  • Formal logic, as well as systems and analytical thinking, are essential in design

  • When a designer and a front-end developer are aligned and work toward the same goal, real magic can happen at the point where they meet

  • Reusing template-level components from a design system is incredibly effective and brings amazing speed

  • Documenting components and UX/UI patterns is a necessary and very valuable part of the development process

But the most important thing — this project gave me a completely new perspective on design!