UI as Part of Each Microservice
Context
Microservices are being adopted. The user interface application(s) are of monolithic nature, each governed by a dedicated frontend team.
Problem
- Introducing new features or changing/enhancing existing ones requires coordination between the frontend team and the microservice teams, leading to coupling between microservices and the user interface application(s).
- APIs are not optimally designed for the backend and/or the microservice team, depending on who drives the API.
- Frequent issues lead to a "we against them" situation between frontend team and microservice teams.
Solution
Make the user interface (UI) part of the microservice.
This design is a continuation of the microservice paradigm to the frontend, often mentioned in the context of Self-Contained Systems (SCS). If the service cut is vertically well aligned, most communication of the UIs with the backend is facilitated with the owning microservice. Co-locating frontend and backend into the microservice teams' responsibility enables independent evolution, flexibility to manage changes avoiding communication overhead and a higher team autonomy. However, the knowledge required to implement this technique needs to be in the microservice team.
As a consequence there are multiple UIs (potentially, one per microservice) that need to be integrated. Consider the following more specific UI integration techniques that guide an implementation of this abstract technique:
- UI Suites when users may see the existence of multiple frontend applications,
- Microfrontends if the existence of multiple technical frontend applications should be hidden from the user.
Maturity
Proposed, evaluation needed.
Sources of Evidence
L8:
- UIs critical component in microservice architectures
- not focus of most advocates => usually focus on backend
- Having monolithic UI can work, but they often inhibit goals of microservices
- downsides of monolithic architecture still exists
- modularization of frontends badly needed
- either associated as part of microservices
- or as a collaborating entity
- need independent from web, native, or hybrid UI
- SCS
- Variant of microservices
- include UI, esp. web UI, as part of service
- rely on frontend integration as much as possible
L16:
- self-containment => front- and backend
- each service provide own UI
- (+) enables independent evolution
L34:
- microservices: isolation; user interaction operate in the scope of a particular service
- changes to microservice => user interface propagation
- UI and microservice should be under control of a single team
- (+) flexibility to manage changes
- (+) avoid bureaucratic negotiation on interface changes
- UI and microservice should be under control of a single team
- SOA: UI can be the integration part or services can interact directly
- Microservices: UI can be integrated into microservice
- Comparison table: UI part of microservice
- (+) avoids communication overhead
- UI may talk to other services, involve data replication instead
- Microservices: UI can be integrated into microservice
- SCS
- UI part of microservice, share same code-base
- Example: Jave EE; multi-module maven project sharing code between UI and microservice; each separately deployable WAR file
- (+) team is familiar with knowledge
- (+) full control of changes and change-propagation
- (+) less overhead since no web services used for given UI scope
- (-) deal with whole dev stack: UI, middleware, database
- (+) change => only redeploy SCS and UI, rest not affected
- need for look-and-feel correlation => unity of system
- Example workflow with SCS
- Routing between UIs
- events to get outside of SCS
- (+) higher autonomy to perform changes, possibly only involving single team
- Microservices without UI => changes can influence UI and other teams
L41:
- Differences to SOA
- SOA not self-contained with data, UI, persistence tool
- Interpretation: Microservices (can) have UI with them
L47:
- joining GUI and backend responsibilities of services => number of services 73 -> 52
LM45:
- Context: interviews and insights from multiple cases on technologies and sw quality in MSA
- C6-S10
- SCS, 20 coarse grained vertically cut services with own UI
Interview E:
- Context: dedicated frontend teams vs. vertical teams?
- if possible: always go for vertical teams
- not everyone has to be full stack developer, but full stack know-how needs to be within team
- currently observing situation with one frontend team, multiple backend teams => frequent problems leading to a "we against them" situation
- easier interface situation due to short communication ways, e.g., adding an entity to a response
- who drives the interface?
- frequently the backend team: more power, know business, were there before
- if UX is focused, would make sense to let frontend teams drive the APIs
- Follows from UX what needs to be part of a call to the backend
- not necessarily entity driven, could also be a few fragments of entities
- example: project in strongly regulated where UX is less important than being conform to the law quickly
- => acceptable that users have to do multiple clicks
- API driven rather driven by backend team