💳

Modular Payment Processing System

A payment platform re-architected into independent microfrontends so multiple teams could ship in parallel without stepping on each other.

Role
Sr. Product Engineer
Company
iPay Smart (Smart Energy Water)
Timeframe
Feb 2024 — Present
Daily
Deploys (from weekly)
4+
Independent teams unblocked
1 copy
Shared React via singletons
0
Cross-team release blocking

Overview

As the payment product grew, a single monolithic frontend became the release bottleneck — every team waited on the same deploy train. I led the move to Webpack Module Federation, letting each capability ship independently while staying visually and behaviorally consistent.

ReactTypeScriptWebpack Module FederationRedux ToolkitMicrofrontends

The problem

The payment frontend was a single deployable owned by several teams. A change to the wallet module meant coordinating with checkout, reconciliation, and settlements — so releases slowed to a weekly train and small fixes waited days.

Any regression risked the whole app, which made teams cautious and slow rather than fast and safe.

The approach

01

Independent remotes with a stable contract

Each capability became a Module Federation remote, built and deployed on its own cadence and composed at runtime by a thin host shell. Teams owned their remote end to end.

I defined explicit exposed-module contracts so a remote could evolve internally without breaking its consumers.

02

Shared dependencies without duplication

React and the design system were configured as shared singletons, so the app loaded exactly one copy of each — avoiding the broken-hooks class of bugs and keeping bundles lean.

Version alignment was enforced at build time so mismatches failed loudly instead of shipping a silent second copy of React.

03

Resilience by default

Every remote loads behind an error boundary with a graceful fallback, so a single failing microfrontend degrades one panel instead of taking down the whole payment flow.

Highlights

  • Runtime composition via Webpack Module Federation
  • Shared React and design system as singletons — one copy, no hook breakage
  • Per-remote error boundaries for fault isolation
  • Independent CI/CD per team, no shared release train

Impact

Teams went from a shared weekly release to shipping independently, several times a day, with no cross-team blocking.

The real win was organizational: Module Federation turned a coordination bottleneck into parallel, autonomous delivery — the reason to adopt microfrontends in the first place.

Have a project like this?

I'm open to roles and collaborations in frontend architecture, microfrontends, and data-heavy products.

Let's work together

More work