So this is what we had before platform tooling, or before UI PR, as we call it. So every team picked tools that worked best for them. So as you can see here, the JavaScript bundlers that were used across the apps include React Scripts, Vite, Webpack, Gulp. Has anyone here heard of Cracko Cracko? Yeah, but we are using it. Yeah, I see one person. Cool. And it wasn't just about the bundlers. The same story, the same distribution of tools was also for styles, for forms, for tables, for localization, and for any other tooling that you can come up with.
So how did the platform team go from eight different bundlers to one paved road recommendation? This process had three phases for them. Stage, phase one, analyze. Look at the hundreds of applications, at what they're using, what they're sharing, where they disagree, what is app specific, what is monorepo specific, and what you actually need to ship as a common tool. Then second phase is select. When you know all of the tools that are used, you can go through them, you can analyze them, you can decide whatever is best for the entire Netflix applications ecosystem. And start supporting it as a platform. And third stage is that you need to bundle those tools together so that teams can just adopt them in one click, like one-click installation. Of course, it's never always one click, but that's the goal.
So these days, UiPaved Road, or UiPr, stands on two pillars. Web framework and Hawkins design system. So the framework is that first, yeah, it's very bright, the framework is that first pillar, and that's actually that bundler of all of the different tools that are provided to the teams. That's why we call it a framework. Let me show you what adoption of this web framework looked for our team. So this is a very simplified version of one of our applications that we support. So you need a movie search component, and you need this user menu, for example. From the architectural standpoint, it's just a monorepo app that depends on two reusable packages, movie search and user menu. Looks simple, right? But it's actually not that simple, because it's pre-UIPR. So it's before we adopted platform. Instead, this app and the packages depend on another package called application provider. Application provider is like a provider of all of those custom tools, also another custom package that we had in our monorepo. It handled the integration with internal systems like the authentication into Netflix system, and provided some common shared tools like configure GraphQL client, feature flags, telemetry, and many more. Application provider pulled all those things from other custom packages that live inside our monorepo.
Comments