Road to Module Federation | Sumit Arora & Abdella Ali | ng-conf 2023

ng-conf
10 Oct 202321:40

Summary

TLDREl guión de video discute los desafíos de una empresa que utiliza Angular y presenta la Federación de Módulos como solución para mejorar la escalabilidad, manutenibilidad y colaboración entre equipos. La Federación de Módulos permite dividir la aplicación en piezas más pequeñas, cada una desplegable de manera independiente, lo que mejora la experiencia del desarrollador y reduce el tiempo de mercado. Además, se explora la importancia de mantener la consistencia en la UI y la gestión de versiones de bibliotecas. Se destaca la necesidad de un enfoque estructurado y comunicación clara entre equipos para evitar la creación de silos y asegurar una arquitectura sólida y un buen proceso CI/CD para el éxito a largo plazo.

Takeaways

  • 🤝 La **Modularidad y la Federación de Módulos** permiten separar la aplicación en piezas más pequeñas, mejorando la escalabilidad y la capacidad de despliegue independiente.
  • 🚀 La **Implementación de Microservicios** y la federación de módulos pueden resolver problemas de rendimiento y mantenibilidad al permitir despliegues y actualizaciones incrementales.
  • 🏗️ Un **enfoque arquitectónico sólido** es crucial para establecer límites claros entre las piezas de la aplicación y prevenir la duplicación de componentes.
  • 👥 La **Colaboración entre equipos** es fundamental para el éxito de la federación de módulos y la microfinanzas, y se debe fomentar a través de una estructura de equipo adecuada.
  • 🧩 La **Independencia** de los equipos permite una mayor autonomía y capacidad de toma de decisiones sin afectar otras partes de la aplicación.
  • 🛠️ Un **desarrollo paralelo** es posible con la federación de módulos, lo que mejora la experiencia del desarrollador y acorta el tiempo de mercado.
  • 🔧 La **Simplificación del proceso de pruebas y despliegues** se logra al permitir que cada equipo se centre en su propia parte de la aplicación.
  • 🌐 La **Internacionalización** debe ser un aspecto global y consistente en toda la aplicación, no dejando espacio para que los equipos tomen decisiones individuales que puedan afectar la experiencia del usuario.
  • 🔄 La **Gestión de versiones de librerías** se vuelve más fácil con la federación de módulos, reduciendo la complejidad en la administración de dependencias.
  • 📚 La **Implementación de un sistema de diseño** compartido es esencial para mantener la consistencia en la apariencia y experiencia del usuario a pesar de la modularidad.
  • ⚙️ Un **proceso CI/CD bien definido** es fundamental para que cada equipo maneje sus propios procesos de desarrollo y despliegue.

Q & A

  • ¿Qué es la Module Federation y cómo puede ayudar a nuestra empresa?

    -La Module Federation es una técnica que permite dividir una aplicación en módulos más pequeños y autónomos, los cuales pueden ser desarrollados, mantenidos e implementados de forma independiente. Esto puede ayudar a nuestra empresa a mejorar la escalabilidad, la colaboración entre equipos, y la consistencia de la interfaz de usuario, al mismo tiempo que se abordan problemas de mantenibilidad y velocidad de lanzamiento.

  • ¿Por qué nuestra aplicación actual tiene problemas de escalabilidad y mantenibilidad?

    -Nuestra aplicación tiene problemas de escalabilidad y mantenibilidad porque está centralizada en una única base de código, lo que hace que cualquier cambio requiera esfuerzos extensos y la colaboración de múltiples equipos. Esto provoca retrasos en el tiempo de lanzamiento y dificultades en la implementación de actualizaciones.

  • ¿Cómo se relaciona la Micro Frontend con la Module Federation?

    -La Micro Frontend es un enfoque de desarrollo de aplicaciones web en el que la interfaz de usuario se divide en componentes más pequeños y autónomos, similar a cómo la Module Federation divide la aplicación en módulos. Ambas técnicas promueven la independencia y la capacidad de despliegue individual, lo que puede mejorar significativamente la experiencia del desarrollador y el rendimiento de la aplicación.

  • ¿Qué desafíos podría enfrentar nuestro equipo al implementar la Module Federation?

    -Al implementar la Module Federation, nuestro equipo podría enfrentar desafíos como la configuración correcta de la arquitectura, la planificación adelantada para evitar conflictos, y la necesidad de establecer canales de comunicación eficientes para la colaboración entre equipos. También es fundamental mantener la coherencia en aspectos clave como la internacionalización y la gestión de estados.

  • ¿Cómo la Module Federation puede mejorar la experiencia del desarrollador?

    -La Module Federation puede mejorar la experiencia del desarrollador al permitir un desarrollo paralelo en diferentes módulos de la aplicación, lo que reduce la posibilidad de conflictos y mejora la eficiencia. Además, al facilitar la implementación y el testing de módulos individuales, se agiliza el proceso de entrega y se reduce la complejidad en las operaciones de CI/CD.

  • ¿Qué es un monorepo y cómo se relaciona con la Module Federation?

    -Un monorepo es una única base de código que contiene múltiples proyectos o componentes. Este enfoque se puede combinar con la Module Federation para facilitar la gestión de bibliotecas y componentes compartidos, mientras se mantienen los módulos individuales para un despliegue y desarrollo independientes.

  • ¿Cómo se puede mantener la consistencia en la interfaz de usuario a pesar de la descentralización que trae la Module Federation?

    -Se puede mantener la consistencia mediante el uso de un sistema de diseño compartido y una biblioteca de componentes estandarizados. Esto asegura que todos los equipos sigan una guía de estilos y prácticas统一, a pesar de trabajar en módulos independientes.

  • ¿Por qué es importante la comunicación entre equipos en el contexto de la Module Federation?

    -La comunicación entre equipos es crucial para compartir conocimientos, evitar la duplicación de esfuerzos y mantener una coherencia en la estrategia global de la aplicación. También permite un mejor seguimiento de los cambios y una mayor flexibilidad para adaptarse a las necesidades cambiantes.

  • ¿Cómo la Module Federation puede facilitar la internacionalización de nuestra aplicación?

    -Al utilizar la Module Federation, se puede establecer un conjunto compartido de reglas y bibliotecas para la internacionalización, lo que asegura una gestión coherente y uniforme del idioma y la localización en toda la aplicación, evitando así la fragmentación y la incoherencia.

  • ¿Qué tipo de arquitectura de desarrollo es adecuada para una empresa que busca implementar la Module Federation?

    -Una arquitectura que fomente la descentralización y la autonomía de los equipos, pero que también priorice la colaboración y la consistencia global, es adecuada para la implementación de la Module Federation. Esto podría implicar una estructura de equipo cross-functional y un enfoque en la comunicación y la planificación.

  • ¿Cómo se puede demostrar el valor de la Module Federation a los miembros de nuestra organización que no están familiarizados con la técnica?

    -Se puede crear una demostración práctica con conceptos de aplicaciones que muestren cómo funcionan los módulos independientes y cómo se integran en una aplicación más grande. Esto ayudará a visualizar los beneficios de la Module Federation en términos de agilidad, escalabilidad y mejora de la experiencia del desarrollador.

Outlines

00:00

😀 Introducción a la Modulación y Federación de Módulos

El primer párrafo establece el contexto de la discusión, abordando los desafíos actuales que enfrenta una empresa ficticia con su aplicación. El CEO plantea preguntas a Abdullah, el CTO, sobre cómo mejorar la escalabilidad, la mantenibilidad y la colaboración entre equipos. Se introduce la idea de la Modulación y la Federación de Módulos como una solución para estos problemas.

05:01

🧐 Desafíos y Oportunidades de la Federación de Módulos

Este párrafo explora cómo la Federación de Módulos puede ayudar en la escalabilidad y la independencia de los módulos dentro de una aplicación. Se discuten las ventajas de la desacoplación de las preocupaciones y la creación de límites claros entre las piezas de la aplicación. Además, se destaca la importancia de la colaboración entre equipos y cómo la Federación de Módulos puede facilitar el desarrollo en paralelo.

10:01

🤔 Consideraciones para la Colaboración y la Cohesión

El tercer párrafo se enfoca en la importancia de mantener la colaboración entre equipos a pesar de la modularidad. Se sugiere la creación de límites claros para entender qué es responsabilidad individual y qué es de consideración holística. Se discute la necesidad de mantener una biblioteca de componentes compartida y un sistema de diseño para asegurar la consistencia en la aplicación.

15:03

📚 Internacionalización y Consideraciones Globales

Este párrafo aborda la internacionalización y cómo la Federación de Módulos puede manejar la creación y el mantenimiento de una aplicación multilingüe. Se destaca la importancia de tener una consideración holística y una gestión adecuada de las bibliotecas y reglas compartidas para evitar problemas de consistencia y compatibilidad.

20:05

🛠️ Implementación de la Federación de Módulos y Retos Adelantes

El último párrafo discute los desafíos y pasos para implementar la Federación de Módulos. Se mencionan posibles riesgos y la necesidad de una planificación adecuada, la elección de tecnologías consistentes y la formación del equipo. Se ofrece una metáfora de la transición de un edificio a una ciudad de edificios para ilustrar la flexibilidad y cohesión que se busca con la implementación de la Federación de Módulos.

Mindmap

Keywords

💡Modularidad

La modularidad se refiere a la capacidad de dividir un sistema en partes independientes o módulos que funcionan juntos. En el video, se discute cómo la modularidad puede ayudar a mejorar la escalabilidad y la manutenibilidad de las aplicaciones, permitiendo que diferentes equipos trabajen en partes separadas del proyecto sin afectar el resto.

💡Microservicios

Los microservicios son una arquitectura de software en la que un aplicación se compone de pequeños servicios que se desarrollan, se implementan y se escalan de manera independiente. En el contexto del video, los microservicios son un enfoque que se menciona para resolver problemas de escalabilidad y mantener la consistencia en la UI.

💡Federación de Módulos

La Federación de Módulos es una técnica que permite a los módulos de una aplicación web interactuar entre sí de manera independiente. Se destaca en el video cómo esta técnica puede mejorar la independencia de despliegues, lo que es crucial para el tema principal de la discusión.

💡Despliegue Independiente

Un despliegue independiente implica que cada módulo o parte de la aplicación puede ser actualizado y desplegado por sí solo sin afectar el resto del sistema. En el video, se discute cómo esto puede mejorar la experiencia del desarrollador y la agilidad en el lanzamiento de nuevas características.

💡Escalabilidad

La escalabilidad hace referencia a la capacidad de un sistema para manejar el crecimiento en el número de usuarios o la cantidad de trabajo sin degradar el rendimiento. El video explora cómo las técnicas de modularidad y federación de módulos pueden mejorar la escalabilidad de las aplicaciones.

💡Manutención

La manutención de software se refiere a los esfuerzos continuos para mejorar y corregir un sistema existente. En el video, se menciona que la aplicación actual tiene problemas de manutención, y se busca soluciones que faciliten el proceso de realizar cambios sin afectar negativamente al sistema.

💡Colaboración entre Equipos

La colaboración entre equipos es esencial para el éxito de cualquier proyecto de desarrollo de software. El video aborda cómo la falta de colaboración puede afectar negativamente al rendimiento y la calidad de la aplicación, y cómo las prácticas de modularidad pueden mejorar la situación.

💡Consistencia de la UI

La consistencia de la interfaz de usuario (UI) es importante para la experiencia del usuario final. En el video, se discute cómo la falta de consistencia en la UI puede ser un problema y cómo las estrategias de diseño y arquitectura pueden ayudar a mantener una apariencia y funcionalidad coherentes en toda la aplicación.

💡Desarrollo Paralelo

El desarrollo paralelo permite que múltiples equipos trabajen en diferentes partes del mismo proyecto sin interferirse mutuamente. El video destaca cómo la federación de módulos puede facilitar el desarrollo paralelo, mejorando la eficiencia y la velocidad de entrega.

💡CI/CD

CI/CD son las siglas de Integración y Despliegue Continuos, prácticas que automatizan el proceso de prueba, integración y despliegue de código. En el video, se discute la importancia de tener un proceso CI/CD sólido para apoyar la arquitectura modular y el desarrollo ágil.

💡Internacionalización

La internacionalización es el diseño de un software para que sea capaz de soportar diferentes idiomas y regiones sin necesidad de hacer cambios en el código fuente. En el video, se aborda cómo la internacionalización es un aspecto clave que debe ser manejado de manera holística en lugar de dejar la decisión a equipos individuales.

Highlights

The discussion introduces the concept of Module Federation as a solution to scalability and maintainability issues in large applications.

Module Federation allows applications to be broken down into smaller, independently deployable parts.

The approach can improve performance and provide better control over the application's architecture.

Microfrontends enable teams to work in parallel, reducing the complexity of managing a single large codebase.

The CEO and CTO discuss the challenges of frequent releases and the lack of collaboration between teams in the current setup.

Consistency in the user interface is a concern, and Module Federation could help standardize components and design.

The CTO suggests that microservices and Module Federation can lead to more autonomy for teams while maintaining a unified application experience.

Developer experience is considered, with the potential for parallel development and reduced risk of breaking other parts of the application.

Independent deployments can lead to faster time to market, which is crucial for competitiveness.

The conversation addresses the potential complexity introduced to the development process but argues the benefits outweigh the costs.

Cross-team collaboration is emphasized as essential for the success of a modular application architecture.

Component libraries and shared contracts between microservices are highlighted as a means to maintain consistency.

The importance of a shared design system for maintaining a unified look and feel across different parts of the application is discussed.

The CTO proposes a clear boundary between individual team considerations and shared organizational concerns.

The potential benefits of monorepos in conjunction with Module Federation are explored.

Internationalization is identified as a global concern that should be managed consistently across all parts of the application.

The need for a clear plan and the right tooling to enforce consistency in a modular architecture is emphasized.

The CTO presents a proof of concept application to demonstrate the practicality of Module Federation.

The CEO is convinced by the potential benefits and the discussion concludes with a call to action for the organization to start implementing Module Federation.

Transcripts

play00:00

foreign

play00:02

[Music]

play00:18

to take you on the road to module

play00:20

Federation and talk about some of the

play00:23

challenges and aspects of of that

play00:27

so to give you a background I know it

play00:29

has been long day for you all and you

play00:31

have been going through a lot of angular

play00:33

sessions these days so we are going to

play00:36

this uh discuss about

play00:39

we're going to take this talk and

play00:40

discuss about the module Federation

play00:42

amongst us

play00:45

and going back and forth about the

play00:47

aspects of module Federation between me

play00:49

and Abdullah

play00:50

to get started uh we are going to assume

play00:53

that we both work in an awesome

play00:54

Enterprise working with an awesome

play00:56

angular angular framework itself I'm

play01:00

going to assume the role of a CEO of the

play01:02

company and ask the tough questions to

play01:05

CTO Abdullah asked me and who is going

play01:08

to answer all of them

play01:11

like as you know we have been uh having

play01:14

a lot of issues with our application

play01:16

application uh doesn't scale well and

play01:19

it's having maintainability issues even

play01:23

to do a small change we to do a lot of

play01:26

stuff

play01:27

um but to stay competitive we have to do

play01:29

a releases so often and also the

play01:32

collaboration between teams is lacking

play01:35

uh the UI is not consistent so what do

play01:38

you think we can do uh to resolve all

play01:40

these issues

play01:41

yeah that's a that's a tall order it's a

play01:43

long list of things that are kind of uh

play01:45

challenging us right now but you know

play01:46

what I've been looking into some things

play01:48

and I think there's something we can do

play01:50

that can solve quite a few of these

play01:52

problems so have you heard of

play01:54

microfinance

play01:56

probably a little bit Yeah more recently

play01:58

though

play01:59

module Federation

play02:01

in tandem I think we have the exact

play02:04

formula to solve our problems

play02:07

now

play02:09

what is all of that what is microphone

play02:11

and what are microphones what are what's

play02:13

modular Federation well to summarize it

play02:15

in a really quick simple way imagine it

play02:17

as a system in which you can kind of

play02:20

separate out your concerns break up your

play02:21

application into smaller pieces and

play02:24

allow you to have independently

play02:26

Deployable parts of your application

play02:27

working in tandem working in parallel uh

play02:32

to give you a holistic overall

play02:34

experience while also being performant

play02:36

that that really came in with multiple

play02:37

Federation and uh giving you some

play02:40

finding control as well

play02:42

so

play02:44

what I mean by independent deployments

play02:46

are modules so

play02:47

right now our app is struggling here we

play02:51

have we have this one pipeline we have

play02:52

this one narrow pipeline it feels like

play02:54

we releases every two months and six

play02:57

weeks of those two months is planning

play02:59

out the next release it is a pain in the

play03:01

butt and we have like 100 people we have

play03:03

10 teams all working the same code base

play03:05

all jocking to get all their features

play03:07

out some nice long change log of 100

play03:10

things that we all to test and you know

play03:12

make sure it's all working right and get

play03:14

through all the environments and then

play03:16

something goes wrong one of those little

play03:18

lines has a little issue roll back the

play03:21

whole thing and add a couple weeks to

play03:22

the release and repeat I think this is a

play03:26

pain that we felt for a long time and I

play03:27

really want to find a way around this

play03:28

problem now I think this is a thing we

play03:31

can solve with a good strong

play03:33

architecture around microponense and

play03:35

modularation now this is a holistic

play03:39

thing it's not just about you know

play03:40

architecture it's about like you know

play03:41

mentality as well too it's about our

play03:43

team structure it's about our components

play03:44

and our architecture around that as well

play03:46

too we don't do reasonable components we

play03:49

try we try our best we've tried a couple

play03:51

times okay but it always happens you

play03:52

know somebody will take a component

play03:54

they'll move it into that part of the

play03:55

application they'll put in some very

play03:57

context specific code in there that

play03:59

won't work with somebody else's part of

play04:00

the application and it all fall apart so

play04:03

they make our own copy of that and then

play04:04

we have five versions of that component

play04:06

and it's all messy it's all gross it

play04:08

doesn't ever work out it'd be great if

play04:09

we had a nice strong boundary between

play04:11

our application pieces and the Clones

play04:14

themselves and we can have a nice strong

play04:16

clear expectation as to how this should

play04:18

be used and how this will be brought

play04:19

into our application I think we can do

play04:21

that with microfinance and you know this

play04:23

sounds like I'm trying to be really kind

play04:25

of a tyrant about how things have you

play04:27

done and I think that's kind of the

play04:28

problem that people feel right now ready

play04:30

we want to make sure that our teams

play04:31

individually feel autonomous like they

play04:33

can make their own choices about a lot

play04:35

of the application without worrying

play04:36

about

play04:37

um updating a version of a library

play04:40

that's depending on and then breaking

play04:41

another part of the application the

play04:43

teams using the same Library it happens

play04:45

all the time we hate it everyone hates

play04:47

it how can we get around that

play04:49

I think overall this is kind of this

play04:51

discussion around the coupling concerns

play04:52

and decoupling kind of context

play04:54

decoupling pieces of our application in

play04:56

a way that is still providing a nice

play04:59

strong underpinning a framework that

play05:00

connects them all

play05:03

um that sounds promising uh but how does

play05:06

module Federation help in scalability as

play05:09

swapping a single Lego block from a

play05:12

structure is a not that trivial and

play05:16

that's one of the challenges that we are

play05:18

facing as an organization

play05:20

yeah yeah it really is it's really hard

play05:23

I think even if we tried our best it

play05:25

would not be easy this is going to take

play05:27

effort it's going to take concerted

play05:29

considerations I mean

play05:31

there are so many things to consider but

play05:33

in those considerations we also

play05:35

potentially have opportunities like one

play05:37

thing I I like about

play05:39

microfinance and model Federation is

play05:41

something as simple as being able to put

play05:43

your entire

play05:44

micro app into its own folder

play05:46

independent from everything else

play05:48

conceptually mentally visually you see

play05:51

this as a little block of code in fact

play05:52

if you really wanted to you could put

play05:54

this into its own repository and have it

play05:56

be completely separate you know you have

play05:58

options here you can do a couple things

play06:00

but the fact that you have those options

play06:02

are fantastic and I think that it really

play06:05

again aligns with the separation of

play06:06

concerns when you can create those

play06:08

boundaries in your application you can

play06:10

create things like

play06:12

incremental updates where you worry

play06:14

about updating individual parts of your

play06:16

application your change logs aren't 100

play06:18

items long for the whole application

play06:19

they're tied to specific parts of your

play06:21

application small tiny pieces it gets

play06:23

much easier to give you those quick

play06:26

incremental updates that I think we're

play06:28

all trying to move towards right now and

play06:31

this sounds hard to do and it is and one

play06:34

of the things we have to do is make sure

play06:36

that we keep and maintain important

play06:38

parts of our application and our

play06:39

organizations uh strengths cross-team

play06:43

collaboration is an essential part of

play06:44

that if we're not collaborating across

play06:46

teams and we kind of Silo each other all

play06:48

of ourselves off into our own little you

play06:50

know towers and we ignore each other

play06:52

we're gonna have a lot of problems so

play06:53

creating a good framework for crossing

play06:56

collaboration and communication is

play06:58

essential for having success with

play06:59

anything like this

play07:01

so it means we can break our application

play07:04

into smaller modular applications and

play07:08

Each of which can be maintained and

play07:10

developed individually

play07:12

but

play07:13

how about the developer experience right

play07:16

aren't we complicating things by

play07:19

breaking a single application into more

play07:22

modular applications that needs to be

play07:24

maintained and released individually

play07:25

yeah yeah there's no there's no for your

play07:27

lunches out there you know we might be

play07:29

complicating things quite a bit here you

play07:30

know there is Simplicity in that single

play07:33

Focus repository with everything's

play07:35

inside of there

play07:37

but

play07:38

at least in our cases it's not it's not

play07:40

helping us out

play07:41

um we have to kind of move away from

play07:42

that at least for now or let's explore

play07:44

some other options and you know while we

play07:46

do kind of hurt developers in some ways

play07:48

that way if we're not careful we give

play07:50

them a lot of options my favorite thing

play07:52

I'm looking forward to more than

play07:53

anything else is a nice clear easy path

play07:55

to parallel development when you're

play07:57

going to have

play07:58

all 10 teams working in their own pieces

play08:01

of code without worrying about you know

play08:03

am I going to break you know products am

play08:05

I going to break user application Pages

play08:07

I'm going to break the footer who knows

play08:09

right they're all separate they're all

play08:10

they're all removed and that

play08:13

Independence allows for independent

play08:16

deployments everywhere from the

play08:17

development all the way up to deployment

play08:20

and that's that's great for faster time

play08:23

to Market we can really make sure that

play08:24

we can get everything out the door

play08:26

quicker we have to worry about getting

play08:28

the whole Beast out the door at the same

play08:30

time squeezing through that tiny little

play08:31

door I think that this is all a part of

play08:35

a better user experience and sorry a

play08:36

better developer experience developers

play08:38

care about the stuff they care about the

play08:40

faster time out the door the passive

play08:42

deployments they get bogged down by

play08:43

those release processes as much as

play08:44

everybody else does so making sure that

play08:46

we can simplify that we'll make things

play08:49

better and simplify things like testing

play08:50

when you can test only your part of the

play08:52

application you can worry about testing

play08:54

Suites that solve your particular

play08:55

problems and not all problems for all

play08:57

parts of your application and

play09:00

this all gives you this individualized

play09:02

pipeline you can have different CI CD

play09:04

pipelines for each release and in fact

play09:06

if you really wanted to you could

play09:08

have a release with all 10 go at the

play09:10

same time and if only one of those apps

play09:13

breaks roll that one back don't have to

play09:15

worry about everything else breaking

play09:17

that's the kind of Independence and and

play09:19

durability you can get

play09:21

all with a faster deployment process

play09:24

well I think that's what we need to move

play09:27

fast without mitigating the risk

play09:30

but

play09:32

if everyone is working on their own

play09:34

application aren't we compromising on

play09:37

the team collaboration because everyone

play09:39

can work on their own application and

play09:42

have different patterns and

play09:43

architectures between

play09:45

individual apps instead of the whole

play09:47

organization itself

play09:49

yeah I mean that's entirely true you

play09:51

know we run the risk if we're not

play09:53

careful of creating these teams that are

play09:56

just completely removed from each other

play09:57

finding ways to to get ahead of them is

play10:00

important like ironically I think one

play10:04

thing we can do is create a clear

play10:05

boundary and just understand exactly

play10:06

what is individualized consideration

play10:09

what is a you're part of your title app

play10:11

and what is a holistic overall share

play10:13

consideration one is to be I think I

play10:16

everybody in the entire team the entire

play10:17

organization sits down and talks about

play10:19

and what only needs the five six seven

play10:21

people on your team to talk about

play10:22

creating that boundary gives you the

play10:24

opportunity to collaborate in different

play10:26

ways more comfortably you don't have to

play10:28

be in every single meeting you can be

play10:29

the only things that matter to you and

play10:31

you have a good idea as to what matters

play10:33

to other people as well too because you

play10:34

have those boundaries when you don't

play10:36

know you you assume everybody needs to

play10:39

be there all the time right how many

play10:40

meetings are you invited to that you

play10:41

absolutely do not be need to be

play10:43

so we have other things we can do to

play10:46

kind of give us that consistent look and

play10:48

feel too we don't want to lose

play10:49

consistency in our application

play10:51

library is a big part of that you know I

play10:54

mentioned our components are not great I

play10:55

think we're moving it out externally

play10:57

gives us lots of opportunities and

play10:58

benefits we can have better consistency

play11:00

when we really consider components as a

play11:02

big part of that underlying shared

play11:03

architecture that overarching piece to

play11:06

give us the sort of uh

play11:09

architecture the the pipes the the

play11:12

plumbing the electricity for our overall

play11:14

application and while we do all of this

play11:17

stuff we can still give people the

play11:20

flexibility to decide how their teams

play11:22

individually can behave you know that's

play11:24

a really big Challenge and finding that

play11:25

balance is really important we don't

play11:26

want to have teams feel like

play11:28

they have to fall in line toe the line

play11:31

all the lines to make sure that they

play11:33

don't you know rock the boat too much

play11:34

they can do what they want to do to some

play11:36

degree to you know explore experience

play11:38

and and push things forward

play11:40

um as long as we have the right

play11:41

architecture to kind of support those

play11:43

efforts and have a shared effort as well

play11:45

and like I said between all of this we

play11:47

need to have improved communication we

play11:49

need to create clear guidelines for how

play11:52

we can keep it about certain things if

play11:53

it's a shared consideration do we have

play11:55

the right channels communicate across

play11:56

those I don't think we do right now I

play11:58

think everything is kind of global

play12:00

things need to be kind of considered in

play12:02

their own hierarchies in that regard

play12:04

so that's great with everything in place

play12:07

uh teams can collaborate and share

play12:09

components between each other but still

play12:12

like they can share the contracts of the

play12:15

components between each other but still

play12:18

can design each of these components

play12:20

differently giving users a bad user

play12:23

experience

play12:24

yeah that's a good point I mean you can

play12:26

take a photo down from the library and

play12:27

do whatever you want to it and inline

play12:29

style it whatever you want we need to we

play12:32

need to consider how we want to

play12:34

kind of Architects are designed with

play12:36

everything else a design system is a big

play12:39

part of what I think we need to do going

play12:41

forward it's not just about having

play12:42

components that are shared it's about

play12:43

having styles that are shared it's about

play12:45

having processes and ideals that are

play12:48

shared fundamentally and that covers uh

play12:51

such a wide range of topics that you'd

play12:53

be surprised so having having this idea

play12:56

of exactly what is shared and not shared

play12:59

it doesn't just mean code doesn't just

play13:01

mean even CSS it means conceptually what

play13:05

do we want to consider as a team versus

play13:06

individuals and design and consistency

play13:09

is a big part of that

play13:11

and when we talk about user experience

play13:14

we have to consider not just

play13:16

visualization in ux performance as well

play13:18

too if we're going to move towards uh

play13:21

modular Federated system micro front end

play13:24

that's a big part of what we can

play13:25

potentially risk if we're not careful

play13:26

but if we do it right we can have

play13:28

fantastic opportunities especially with

play13:31

multiple Federation they really resolve

play13:32

some of the issues that came out across

play13:35

with micropriators in the past things

play13:36

like Library versioning becomes much

play13:38

easier to manage and we have some

play13:40

flexibility there too we can even do

play13:42

things like mono repos with much

play13:44

Federation and microfinance you can mix

play13:46

them all together and do all kinds of

play13:47

cool things

play13:48

and like I said you know we need to make

play13:51

sure that our teams have the opportunity

play13:53

to communicate with each other when we

play13:55

can have

play13:57

ux communicate with the back end team

play14:01

communicate with the front-end developer

play14:03

all together all of their own

play14:05

performance considerations can be

play14:06

communicated in a clear way so I think

play14:08

this is one of the nice things about

play14:09

having a smaller team it's really hard

play14:10

to do that when you have huge teams

play14:12

where everyone's kind of stressed all

play14:13

the time I really loved and miss the

play14:16

days of our smaller company when we had

play14:17

everyone on the same table talking about

play14:19

things and sharing and and communicating

play14:21

we can get some of that back with the

play14:23

right team structure and all of this all

play14:26

of this is dependent upon having a good

play14:29

CI CD process we need to think about

play14:31

that very clearly and make sure we

play14:32

decide how each team owns processes and

play14:36

thinks about their development

play14:38

employment it's not no longer a separate

play14:40

concern each team considers that

play14:42

separately okay uh so it seems like

play14:44

model Federation can solve a lot of our

play14:48

issues that we are facing right with

play14:50

independent deployments and all that's

play14:52

done but one last question

play14:55

what about internationalization right

play14:57

you know our application is being used

play15:00

by users of different regions and we

play15:02

have multiple languages how do we solve

play15:04

around that

play15:06

yeah you know I think

play15:08

I think when we think about things like

play15:10

internationalization

play15:12

um it's a great example of one of those

play15:13

things that we really don't want to have

play15:15

individual teams making very important

play15:17

decisions for it's a great example of

play15:19

something that should be holistically

play15:20

across the application consistent If We

play15:22

Had Each team for example using a

play15:24

different

play15:25

i-18n library and they have different

play15:28

rules for either handle things like

play15:29

pluralization that could be a problem

play15:31

but if we have a shared set of rules and

play15:35

a shared hierarchy of of asset sharing

play15:38

for example we can really create the

play15:41

right pipeline to not get in each

play15:43

other's way but also ensure that we are

play15:45

using things to really benefit each

play15:47

other and to benefit the application as

play15:49

a whole we need to make sure that we we

play15:51

um we enforce consistency through

play15:55

the tooling itself and not through kind

play15:57

of browsing people and you know there

play16:00

are a lot of things that should be

play16:01

globally considered this way not just I8

play16:03

and N State Management maybe even Global

play16:06

error messaging there's probably quite a

play16:08

few things that fall into the same

play16:09

category so you're right I think I eat

play16:11

and internalization is an important

play16:12

thing that should be a global

play16:13

consideration and we need to make sure

play16:14

we have a list of all those important

play16:16

things and a clear plan for how to

play16:18

handle them

play16:19

okay that sounds quite interesting but

play16:23

implementing the module Federation isn't

play16:26

it that hard like we might end up taking

play16:29

that effort and implementing a lot of

play16:31

stuff uh without getting or seeing any

play16:34

tangible benefits in

play16:37

yeah it's it's not it's not going to be

play16:39

easy

play16:40

um there are risks involved you know

play16:42

there's the first one right away is if

play16:45

you've ever tried to set up a

play16:46

microfinant or any sort of like

play16:49

complicated multi-team architecture you

play16:53

have to make sure your configurations

play16:54

are set up correctly is to make sure

play16:55

that you really plan out in advance

play16:57

otherwise it's just gonna be a lot of

play16:59

pain off the bat luckily things are

play17:01

getting easier now there's a lot of

play17:02

great guidelines on how we can handle

play17:04

different kinds of architectures that we

play17:06

might want to consider uh to solve our

play17:09

particular needs so making sure that we

play17:10

really have a good idea on what we want

play17:13

in that regard is important and making

play17:14

sure we have the right consistent

play17:16

Technologies to use as well too if we

play17:18

want to have a shared we want a library

play17:19

or have a shared

play17:21

um I can end Library whatever it may be

play17:24

that we don't want to have be different

play17:25

across applications that can be clearly

play17:27

set and specified and different

play17:29

architectures can even enforce this like

play17:31

I mentioned if we want to have a mono

play17:32

rebuild architecture we can have more

play17:34

specification that's exactly how we want

play17:36

all of our libraries and all of our

play17:38

teams rather to share their libraries

play17:41

and yeah like this doesn't require

play17:43

training it's gonna require alignment it

play17:46

doesn't require performance optimization

play17:47

can require so many different things but

play17:50

the effort is worth it

play17:52

okay well that's quite a big task and I

play17:56

trust you with that uh so can you can

play18:00

can you summarize all of this uh again

play18:02

to me so that uh we can talk to the

play18:05

organization and come everyone on board

play18:08

and start implementing that quickly

play18:10

okay okay let me try let me try to

play18:13

summarize this in a nice

play18:15

absorbable way imagine right now we are

play18:18

working in this one giant office

play18:20

building

play18:21

and you know we're all staff we're all

play18:23

maintaining we all work in it and we

play18:25

want to change the lobby if three teams

play18:27

want to do that they have to wait in

play18:28

line one of the other you can't have

play18:29

them all in there at once let's say

play18:31

somebody pulls a fire alarm everybody in

play18:33

the building has to leave all at once

play18:35

you create these dependencies that maybe

play18:36

you don't necessarily want to have

play18:38

um but what if you had more of a sort of

play18:40

city with multiple buildings all working

play18:43

individually but still sitting on top of

play18:46

the same infrastructure we have to

play18:49

decide what that looks like we said you

play18:50

want to share gas electricity water

play18:53

services like

play18:56

firefighters and all that stuff but once

play18:58

we have a clear plan for what is shared

play19:00

and what is individual we can create

play19:02

systems that are really going to provide

play19:04

the flexibility to allow people to

play19:06

individually deploy their buildings

play19:08

whenever they want to individually have

play19:11

the flexibility and to have the

play19:13

creativity to to get their buildings

play19:15

their own individual Flair while still

play19:18

giving a consistent look and feel

play19:20

through a design system kind of like

play19:21

having the same architecture to all the

play19:23

buildings the same bricks that you have

play19:25

to use the same Granite whatever it may

play19:26

be find a good way to create these

play19:29

contracts between all of our teams is

play19:31

going to give us everything we need to

play19:34

give us a beautiful city while hiding

play19:36

all the wires underground let's say

play19:41

it's quite interesting I

play19:43

sure I can convince uh everyone uh to

play19:47

start working towards that but it will

play19:49

be really handy uh if you can show

play19:52

something to us

play19:53

all right cool have a quick prove a

play19:55

concept apps I've been working on real

play19:57

quick but I hope they give us a good

play19:58

idea of how this works if I can move my

play20:01

mouse in the right way let's see uh okay

play20:04

here it goes

play20:06

uh okay

play20:10

I feel like I'm doing surgery right now

play20:12

[Laughter]

play20:15

am I mirroring I am mirroring

play20:18

I do this first perfect and

play20:22

all right yes

play20:24

I'm done happy with that right there but

play20:27

we have a nice little app and you know

play20:30

we had this little outline to kind of

play20:31

highlight that these separate pieces are

play20:33

actually

play20:34

um their own little micro apps you can

play20:37

have the structure all in one page looks

play20:39

nice and simple looks the same and you

play20:41

know little links here for example click

play20:43

on to Do's I have my tutors right there

play20:45

they just popped right in but what if I

play20:47

wanted to see that individually without

play20:49

the whole out there at once well I just

play20:51

had to go to localhost

play20:53

think it's three thousand now one

play20:56

yes that's where it was and you can see

play20:58

it's its own application by itself

play21:00

this allows us to have our individual

play21:02

yeah

play21:04

our individual micro applications

play21:08

considered thought of view tested

play21:10

without worrying about the whole

play21:12

application but it comes together in a

play21:14

nice beautiful app when it's all done

play21:16

right

play21:18

that's good that's great right okay

play21:21

um I think that

play21:22

I am convinced that module Federation is

play21:25

where to go for our organization uh

play21:28

and clear about that

play21:30

so thanks everyone thank you thank you

play21:32

if you have any questions just come talk

play21:35

to us at our booth

play21:38

thank you thanks again

Rate This

5.0 / 5 (0 votes)

Étiquettes Connexes
ModularidadDescentralizaciónDesarrollo ÁgilAngularEscalabilidadColaboraciónMicro FrontendFederación de MódulosCTOCEOArquitectura de Software
Besoin d'un résumé en anglais ?