How to manage hundreds of view templates?

How to manage hundreds of view templates?

Damien Cuny
Maeva Oudji

Let’s dive together into the depths of a large scale template versioning for a white label streaming application.

The context

Today, at Bedrock, we are providing a streaming service on:

Each of these platforms has their own guidelines and usage (interaction, screen sizes, etc) and is managed by a dedicated team in our organization. They also have their own native design components which our implementations rely on to offer the best possible experience.

Bedrock has several clients (M6+, Videoland and others), that all have their dedicated application on each platform. But they also have their own design expectations and branding guidelines.
We provide them with a design system: a set of visual assets they can use to render pages. These components follow the atomic design model, which means that each layer is a composition of the previous one. Here is the list of the layers with their name and some items that belong to it:

Hereunder are some sample screens composed of design system components for different customers:

:-:|:-:|:-:
| |

This results in approximately one hundred design elements per client. However, not all components are always specific, and an inheritance system is in place to allow clients to reuse default atoms, molecules, or organisms while applying the tokens corresponding to their brand.

The objectives and expectations regarding the design vary greatly among clients, resulting in numerous graphical element evolutions. Managing the creation and progression of these elements through different processes is a major challenge in tracking designs across each platform. These demands sometimes lead to different integrations. Whether or not the default design is inherited is crucial information to avoid manually comparing the app designs with documentation, which can lead to misunderstandings and wasted time during validation and approval processes.
To achieve all these objectives, we need to be able to carefully follow the evolution of the design system on each plateform.

One versioning to rule them all

Therefore, implementing a versioning system became essential to continue enriching and evolving our client’s design systems.
To ensure its interest and effectiveness, this system had to address several issues:

Exemple of a Design System release note:

Release note of the design system

Initially, the design team started by versioning its releases and all available components, which are accessible to technical teams in our online design documentation (hosted on zeroheight). This versioning is common to all platforms and all clients if there are no specificities for the component in question. Ultimately, versioning helps product and technical teams track the delivery progress of new designs. The version number follows these rules:

Code statusStageRuleExample
First releaseNew collection1.0.01.0.0
Documentation update without impact on the anatomy of design elementDocumentation updateIncrement the third digit1.0.1
New backward-compatible featureMinor releaseIncrement the 2nd digit and reset the third1.1.0
Change on element that breaks backward compatibilityMajor releaseIncrement the first digit and reset the second and the third2.0.0

Each frontend team were then responsible for implementing an equivalent versioning system representing the state of their platform. This was done through a feature team including all front-end teams, design system managers, and the product team. This organization brought numerous benefits:

Case study: Android versioning challenges

For Android, we sometimes have different component implementations between mobile and TV, evolving at different paces. This required two separate versionings to represent them. Moreover, we currently use comments to track the migration to Google’s new view system (Compose), which is happening alongside graphical evolutions.
Each client has its versioning file containing all the components available on the targeted platform. Regarding component inheritance from the default design system, there are two possibilities:

Default Versioning fileCustomer Versioning file

From these versioning files, we have been able to generate reports for each platform containing only the available graphical elements and their version, whether inherited or not. To track their growing number, we opted for automatic generation of these reports with each build using a Gradle Plugin integrated on our continuous deployment and integration (CI/CD): Bitrise. Now, they are generated using a Mkdocs plugin to be published online automatically with our technical documentation.

Automatically generated template versioning report for M6+:

Template versioning report for a customer

Conclusion

Design system versioning reports offer a quick and exhaustive overview of the design system at any given moment for any of our customers and simplifies the QA teams validation work. It is now an essential tool for tracking design progress across all supported platforms.

However, improvements are always possible:

These last improvements will perhaps be the subject of a follow-up to this article. Thank you for reading, we hope you found some useful information that can help you to better follow the graphical evolution of your project. Do not hesitate to contact us if you have some questions or suggestions.