Skip to content

Commit 49afd7f

Browse files
authored
Docs/blog post - story behind o2s (#234)
* docs: new blog post - Our experiences from Hycom projects and the story behind Open Self Service
1 parent 3a60e96 commit 49afd7f

File tree

5 files changed

+150
-0
lines changed

5 files changed

+150
-0
lines changed
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
---
2+
slug: rethinking-frontend-architecture-for-composable
3+
title: Rethinking frontend architecture - from enterprise pain points to composable frontends you can use too
4+
date: 2025-09-15
5+
tags: [tech, frontend]
6+
authors: [jan.jagoda]
7+
---
8+
9+
Over the past few years, we’ve worked on many large-scale solutions. E-commerce applications, customer support portals,
10+
B2B service hubs - all combining content, integrations (PIM, search, e-commerce, ERP, IAM, custom APIs) and user-facing functionality,
11+
where delivering strong user and customer experience has always been a key priority.
12+
13+
14+
Many of those platforms were built on top of enterprise products. These provided headless backend APIs and, in some cases,
15+
their own frontend layer as well.
16+
17+
Usually in practice, the frontend quality was rarely good enough.
18+
19+
![o2s-arch-article-front.png](o2s-arch-article-front.jpeg)
20+
21+
<!--truncate-->
22+
23+
What we kept seeing was:
24+
25+
- limited modularity, leading to slower development, duplicated work, and higher maintenance effort
26+
- outdated tech stack, making onboarding harder, limiting integration options, and increasing technical debt
27+
- no standard way to integrate with multiple backend APIs, leading to complete vendor lock-in and solution scaling related issues
28+
- performance bottlenecks, especially on integration-heavy pages
29+
- no proper UI library, which made consistent design hard to achieve
30+
- poor accessibility, often falling short of WCAG requirements
31+
32+
In real-world projects, the impact of these issues became even clearer. Here are a few stories from systems we took over after previous vendors.
33+
34+
## Real project stories
35+
36+
### Performance in enterprise storefronts
37+
38+
Recently, we conducted performance audits for headless and enterprise e-commerce frontends for two clients. In both cases,
39+
Core Web Vitals scores were below 10/100, even though the frontend was supplied by products licensed for hundreds of thousands of euros.
40+
41+
![o2s-arch-article-perf.png](o2s-arch-article-perf.png)
42+
43+
Looking at the results, was this cost justified? Could the client have chosen a better solution?
44+
45+
### Lack of reusable UI components
46+
47+
In one project we observed that the application was built without a proper set of reusable UI components. Each new feature
48+
introduced its own styling and markup, which quickly led to inconsistencies across different areas of the interface.
49+
Even when some components already existed, there was no documentation in a tool like Storybook. As a result, teams —
50+
especially newly onboarded developers — often did not know where to find them, which led to further duplication.
51+
The lack of a shared library made it hard to maintain visual consistency and slowed down development.
52+
Small UI adjustments required repetitive work in many places, increasing the chance of introducing regressions and visual bugs.
53+
This not only affected developer velocity but also the overall user experience.
54+
55+
### Coupling frontend and backend
56+
57+
In another project we took over from a different vendor, integrations with backend systems were implemented directly in the frontend layer.
58+
Each frontend component communicated with APIs in its own way, without any form of backend-for-frontend or integration middleware.
59+
60+
![dxp-article-fe-be-coupling.jpeg](o2s-arch-article-coupling.jpeg)
61+
62+
As a result, every change introduced by backend teams required parallel updates in multiple frontend components.
63+
This was time-consuming, error-prone, and caused dependency bottlenecks between teams. Instead of being able to work independently,
64+
teams often had to wait for each other, which slowed down delivery and raised the risk of introducing breaking changes into critical user-facing flows.
65+
66+
### Vendor lock-in
67+
68+
Another client faced rising costs for a headless SaaS API they used. Due to that, they wanted to switch to an alternative.
69+
The integration was so tightly coupled with the frontend that migrating would have been very costly and carried the risk of disrupting critical functionality.
70+
71+
This illustrates a broader issue: when the frontend is too tightly bound to specific backend services, the cost of change becomes overwhelming.
72+
Instead of being able to adapt and evolve, companies find themselves locked into technology choices that no longer fit their needs.
73+
74+
### Clients' doubts
75+
76+
Faced with such complexity, many clients began asking the same question: **is migration even possible without disrupting the frontend experience?**
77+
78+
The answer is far from simple.
79+
80+
How to build something without introducing the same problems?
81+
82+
How do you avoid rebuilding the same UI over and over again or at least do it to a lesser extent?
83+
84+
How do you design something that is fully decoupled from the backend and more resilient to its changes?
85+
86+
We also started asking ourselves those questions project after project. And as we looked for better ways to approach frontend in composable architecture, we gradually built a solution - improving it along the way.
87+
88+
## Turning challenges into practical solutions
89+
90+
The difficulties we observed were not isolated cases. As a team working together for years at [Hycom](https://hycom.digital/),
91+
we’ve gained extensive experience across industries, delivering and evolving large-scale customer-facing platforms.
92+
Over time, the same patterns and pain points kept reappearing.
93+
94+
We’ve implemented self-service platforms for the energy sector, a digital platform combining customer support and sales features,
95+
B2B e-commerce and self-service portals for manufacturing, as well as e-commerce and customer support solutions for telecom.
96+
Along the way, we worked with clients such as **Orange Energia, Fortum, Dormer Pramet, T-Mobile, Osadkowski, and Salzburg AG.**
97+
98+
These projects gave us a unique perspective: while the use cases varied, the underlying architectural challenges were very similar.
99+
Performance bottlenecks, lack of modularity, vendor dependencies, and integration complexity kept slowing down teams and increasing costs.
100+
101+
## Our open-source approach to modern composable frontends
102+
103+
The result of all that experience is an open-source development kit we’ve been building to support modern frontend applications.
104+
**It focuses strongly on customer self-service and support portals.** At the same time, **it can power digital platforms that combine
105+
multiple capabilities such as content, commerce, and customer engagement.** All of this is based on composable architecture.
106+
107+
We called it **Open Self Service (O2S)**. It brings together best practices around modularity, performance, and accessibility,
108+
and introduces a consistent way to integrate with multiple backend APIs. O2S makes it easier to migrate or replace backend systems without
109+
disrupting the frontend layer, helping teams avoid vendor lock-in and stay in control of their architecture.
110+
111+
### How O2S addresses the challenges
112+
113+
- **Performance bottlenecks** → The Next.js-based foundations are optimized for Core Web Vitals with SSR/ISR, caching and best practices that directly address performance issues seen in enterprise frontends.
114+
- **Lack of reusable UI components** → A set of modular, CMS-driven components with Storybook documentation helps maintain consistency, speed up development and avoid duplication.
115+
- **Coupling frontend and backend** → A backend integration layer (NestJS-based) acts as a backend-for-frontend or middleware, decoupling frontend from backend changes and reducing cross-team dependencies.
116+
- **Vendor lock-in** → By isolating integrations behind a consistent API layer, backend services can be swapped or extended without disrupting the frontend code.
117+
- **Accessibility issues** → UI components are designed with WCAG compliance in mind, making accessibility a core part of the architecture rather than an afterthought.
118+
119+
### Application starters
120+
121+
To make all these capabilities easier to adopt, we develop [**application starters**](https://www.openselfservice.com/docs/app-starters/overview).
122+
This is one of the crucial parts of the project - starters are preconfigured frontend apps with ready-to-use integrations and UI components for specific use cases.
123+
Starters cover the most basic features for each use case, so they help start your implementations faster. You can freely extend or customize them.
124+
125+
The first one we built was dedicated to [customer portals](https://openselfservice.com/), providing out-of-the-box features with room to expand into adjacent areas.
126+
More recently, we introduced a [starter for content-driven digital platforms](https://openselfservice.com/dxp),
127+
which offers a foundation for large-scale DXP setups and can be extended towards self-service or even commerce scenarios.
128+
129+
![Open Self Service - application starters](o2s-arch-article-starters.jpeg)
130+
131+
### Wrapping up
132+
133+
This is just the beginning. We continue to evolve both the framework and the starters, adding new features and integrations,
134+
and improving documentation and developer experience along the way.
135+
136+
In our own projects, this approach has already made a difference. We can build faster, adapt to backend changes more easily,
137+
and deliver better user experience.
138+
139+
And since the project is open-source, you can use it too.
140+
141+
If you’re working on digital platforms, especially those that offer customer self-service features, and wonder whether the **composable architecture**
142+
concepts from commerce could also work in your world - maybe this is a good starting point?
143+
144+
---
145+
146+
**Customer portal starter:** [https://www.openselfservice.com/](https://www.openselfservice.com/)
147+
148+
**DXP frontend starter:** [https://www.openselfservice.com/dxp](https://www.openselfservice.com/dxp)
149+
150+
**Open Self Service Docs:** [https://www.openselfservice.com/docs](https://www.openselfservice.com/docs)
136 KB
Loading
112 KB
Loading
20.5 KB
Loading
209 KB
Loading

0 commit comments

Comments
 (0)