Luca Colonnello
Principal Engineer, Trainline
@LucaColonnello
⏳ Condividere esperienza
📣 Avviare una conversazione e imparare
👩💻 🧑💻 Parlare delle opportunità di crescita
nel mondo Front-End
Sfide e problematiche
Conway's law
Pattern / Architetture
Strutture organizzative
Carriera e ruoli
Concetto di ownership
<10
Più facile da gestire
Meno persone, meno spese
Più veloce in comunicazione ed esecuzione
Più veloce nel prendere decisioni
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
Solitamente monolita
<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
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?
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
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
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)
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
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?
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)
Questo crea app di prima e seconda classe, con un impatto notevole sulla customer experience nel lungo termine
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
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.
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
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!
Domande?