WhoBuilt

Feature Driven Design: Microfrontends’ Best Friend (Chase App)

Sep 25, 2023· 27 min· 1.7K views·Watch on YouTube

Speaker

Sandra Jurek, design system lead at Chase UK, explains how feature-driven design supports microfrontend architecture at React Native EU 2023, hosted by Callstack.

Why the monolith became hard to manage

Jurek traces how a React Native project can grow from a simple app structure into a monolith divided by screens, hooks, and helpers. That approach can work for a small project, but becomes difficult for larger teams: builds take longer, defects are harder to trace, and teams can conflict when changing shared code.

The cost of shared package sprawl

Chase’s shared packages had confusing exports and cyclic dependencies, which made behavior and builds unpredictable. Moving files to break cycles reduced some problems but grew the project to more than 80 packages, making ownership and testing difficult. Changes to core packages could require coordinated releases across nearly the whole project.

Organize packages around product features

Jurek proposes grouping the project around product areas such as Mobile Home, Mobile Chat, and Mobile Accounts. Teams can own those areas, while shared flows and utilities are organized by their feature origins, such as Shared Payments or Shared Onboarding. She says this approach reduces package count and relationships.

Apply feature ownership to flows and utilities

A payment flow can be reused inside account closure, while its origin remains Shared Payments rather than the feature that launched it. The same principle applies to utilities: a UK mobile number sanitizer first used in onboarding belongs with that feature even if servicing later uses it. This makes code easier to locate and ownership clearer.

What the structure enables

Jurek says feature-driven organization gives teams clearer CI errors, stronger ownership, and room to decide when a feature is ready to release. It also creates a shared vocabulary for developers, designers, and product owners. Packages can be deployed with fewer internal dependencies, reducing the burden on teams that consume them.

Takeaways

  • Keep a monolith simple for small projects, but reassess it as teams and features grow.
  • Track and reduce package cycles; breaking them by creating more packages can increase maintenance costs.
  • Use product areas to guide package boundaries and make ownership visible.
  • Place reusable flows and utilities according to their feature origin so teams can find and maintain them.
  • Aim for packages that can be tested and released with few internal dependencies.

Mentioned in this talk

Search inside this talk

What was claimed 9

Show all 9 facts

Related talks