Luca Colonnello

Principal Engineer, Trainline

How to deal with Front-End

at scale

luca colonnello

Principal Software engineer

@LucaColonnello

Perchè parlare di scalabilità?

⏳ Condividere esperienza

📣  Avviare una conversazione e imparare

👩‍💻 🧑‍💻 Parlare delle opportunità di crescita

nel mondo Front-End

Cosa vorrei portaste a casa

Sfide e problematiche

Conway's law

Pattern / Architetture

Strutture organizzative

Carriera e ruoli

Concetto di ownership

DI CHE

DIMENSIONI PARLIAMO

<10

Più facile da gestire

Meno persone, meno spese

Più veloce in comunicazione ed esecuzione

Più veloce nel prendere decisioni

VANTAGGI DI UN Azienda PICCOLA

Perché le aziende hanno bisogno di far crescere il proprio team?

Più work stream in parallelo

Meno context switching

Diversificazione del business e ROI

🧑‍💻 👩‍💻 Più persone

🤝 Più team

📑 Più progetti

👩‍💼 🧑‍💼 Più management

quali SFIDE
DOVREMO
AFFRONTARE

architettura SOFTWARE tipica

Solitamente monolita

1. Lavorare in 600 allo stesso codice

<10

>100

=>

😞 Facile avere conflitti

😞 Richiede coordinazione delle modifiche sulle stesse parti di codice

😞 Non si sa chi sa cosa e chi è responsabile per cosa

La chiave è un architettura modulare, accompagnata da una chiara ownership

La struttura organizzativa è direttamente correlata all'architettura che scegliamo
e influenza i layer di management e i processi

adattiamo la nostra architettura

open / close principle

 

ownership dei domini


più isolato, meno conflitti

costo condivisione basso

costo manutenzione tooling basso

coordinazione per release


scala in modo totalitario

app indipendenti

ownership dei domini

codice completamente isolato

release indipendenti

scala in modo indipendente

costo condivisione elevato

costo manutenzione tooling elevato

La domanda a cui rispondere deve essere


Qual è il costo di un cambiamento, e quale tipo di cambiamento avviene più spesso?

2. impatto sulla user E DEV experience

Le scelte di architettura nel front-end hanno diretto impatto sull'esperienza utente

Team isolati possono fare scelte diverse,
e questo ha vantaggi e svantaggi

performance

possibile ottimizzare app in modo indipendente

costo di ottimizzazione basso
(0 tech stack coupling)


duplicazione runtime e librerie di utility nel layer condiviso

 

 

Definendo constraints chiari per il tech stack del layer condiviso, possiamo mantenere questo layer il più snello possibile, evitando duplicazione a runtime e quindi impatto alle performance

CUSTOMER LEARNING CURVE

troppo isolamento può portare alla mancanza di allineamento nel processo di design, peggiorando la user experience

Implementando e adottando un design system, possiamo unificare il linguaggio, i pattern e l'esperienza utente (e molto altro)

DEVELOPER EXPERIENCE

autonomia di team e ownership delle scelte

 

possibilità di esplorare nuove tecnologie e portare innovazione

 

on boarding necessario per muoversi di team o creare feature cross domain

Allineando il tech stack, pur mantenendo la modularità e indipendenza dei team, riusciamo a garantire agilità la capacità di spostare persone senza incorrere in costi eccessivi di on boarding

3. Manutenzione / evoluzione / ownership

Più feature e tooling condividiamo, più aumenta il coupling tra le applicazioni

Chi è l'owner di queste feature e tooling, e chi si preoccupa dell'evoluzione e manutenzione?

Come manteniamo tali feature e tooling condiviso aggiornate in tutte le applicazioni?

SHARED OWNERSHIP = NO OWNERSHIP

La manutenzione e l'evoluzione spesso e volentieri passa in secondo piano

Le persone che hanno più conoscenza / esperienza, diventano punti di riferimento, ma non vengono rimpiazzate se lasciano la compagnia

Per evitare questi problemi, se vogliamo avere librerie condivise, dobbiamo accettare il costo di manutenzione e ownership

È preferibile assegnare tali librerie ad uno o più core team, accettando contributions esterne (ispirandosi all'open source)

tenere tutto aggiornato

Questo crea app di prima e seconda classe, con un impatto notevole sulla customer experience nel lungo termine

Possiamo risolvere il problema in diversi modi

Mantenendo l'albero delle dipendenze il più piatto possibile

Semplificando
(sopratutto il tooling)

esbuild

Rome

Installando dipendenze

a runtime

module federations
o semplice HTML SSR

monorepo

opportunità

di crescita

e avanzamento

I problemi di cui abbiamo parlato richiedono un investimento, con persone dedicate che validino e implementino le scelte fatte nel tempo

Questo presenta moltissime opportunità di crescita!

Sul lungo termine, è costoso risolvere gli stessi problemi in ogni team, quindi abbiamo bisogno di astrarre, per risolverli una sola volta e scalare.

Ci si può specializzare in diversi ruoli

UX Engineer

Staff Engineer
(Tech Lead, Principal)
 

Web Architect

astraggono a basso livello la miglior esperienza utente

hanno esperienza di specifica, collaborano con gli architect per validare scelte e definire una path

definiscono l'architettura, la divisione in team, l'ownership, la strategia e la comunicazione fra parti

Per ricapitolare

Scalare il front-end all'aumentare della dimensione di un business, porta innumerevoli sfide

Non è mai una questione solo di tecnologia, ma anche di user e dev experience

Le scelte che facciamo hanno un impatto diretto sulla struttura organizzativa, i layer di management e i processi

Le opportunità di crescita sono moltissime!

qual è la vostra esperienza in merito? parliamone!

Domande?

HOW TO DEAL WITH FRONT-END AT SCALE

By Luca Colonnello

HOW TO DEAL WITH FRONT-END AT SCALE

HOW TO DEAL WITH FRONT-END AT SCALE

  • 216