In un contesto Agile i Feature Teams sono una delle strutture organizzative più efficaci per sviluppare un ecosistema complesso in modo rapido, mantenendo alta la qualità e basso il TCO (total cost of ownership). Spesso questi team sono però vincolati da architetture monolitiche, o a lasagna/spaghetti, che non consentono di operare end-to-end sulle feature, creando dipendenze tra team, colli di bottiglia e frustrazione. Lo stile architetturale a Microservizi (sì, è uno stile e non un pattern e quindi va interpretato a seconda dei casi) da una mano a questi team ad essere più indipendenti tra loro e li aiuta a lavorare tutti con lo stesso scopo: generare valore per gli utenti finali in modo continuo. In questo talk vedremo come organizzare più team che lavorano su uno stesso prodotto e come lo stile architetturale a Microservizi supporti questa organizzazione evolvendo con l'evolversi dei team.
3. Chi ha bisogno di supporto
L’esperto sommerso di
lavoro
time-to-market rallentato, stress, bassa qualità,
aumento degli imprevisti, caos, no controllo
Attesa!
3
27. Team Backend
Team Frontend
A B
Features
C
?
!
OK
Resolution time
Tempo che spendo per fare un lavoro che
si può interrompere
27
28. La difficoltà per creare
questa situazione è riuscire
a sincronizzarsi tra 2 o più
team.
Non si hanno sotto controllo
tutte le dinamiche di tutti i
team e gli imprevisti ci sono
sempre. Soprattutto
quando il software è in
produzione.
Per cui la situazione di
attesa ci sarà spesso e
questo a cascata crea
questo coas!
28
31. FE A B C
API
BE A B C
Feature Team 1 Feature Team 2
Il team è completamente
autonomo su tutta
l’architettura verticale:
● UX/UI
● Frontend
● Backend
● API
● Logiche di business
● Test
● Deploy
● Ops
31
37. FE
BE
Android
A Catalogo prodotti
B
C
Acquisto prodotti
Review dei prodotti
Team 2
Web Web Web
Componenti
Cart Checkout Reviews DB
Reviews
Analytics
Review Rank
iOS Android iOS iOS Android
Product DB Product Img
Product
Availability
Team 1
Componenti
Payment
37
38. FE
BE
Team 2
iOS Android
Web
iOS Android
Web
iOS Android
Web
Product DB Product Img
Product
Availability
Team 1
Componenti
Componenti
A Catalogo prodotti
B
C
Acquisto prodotti
Review dei prodotti
Cart Checkout
Payment
Reviews DB
Reviews
Analytics
Review Rank
Per mancanza di know-how e skills
spesso i features teams si
trasformano in component teams.
38
39. Qualsiasi organizzazione
che progetta un sistema
(definito in senso lato)
produrrà un disegno la cui
struttura è una copia della
struttura di comunicazione
dell'organizzazione
— Melvin E. Conway
https://en.wikipedia.org/wiki/Conway%27s_law
e-Commerce
A Catalogo prodotti
B Acquisto prodotti
E Pricing
D Disponibilità prodotti
C Review dei prodotti
F Delivery
H Recommendations
I Product highlights
G Customer support
Feature Team 1 Feature Team 2
39
41. A B
ED
CF
H
I
G
Product Microservice Customer Support Microservice
A Catalogo prodotti
B Acquisto prodotti
E Pricing
D Disponibilità prodotti
C Review dei prodotti
F Delivery
H Recommendations
I Product highlights
G Customer support
41
42. A B
ED
CF
H
I
G
Product Microservice Customer Support Microservice
I team sono dedicati ad un’area di
business. Se usano nativo
probabilmente un team è più Mobile
e uno più Web.
I servizi sono raggruppati per team.
Si parte piccolo e già disegnandoli
modulari e con pattern port/adapter.
Web
Team 2
iOSAndroid
Team 1
ATTENZIONE: ci sono ancora
dipendenze dirette tra i team!
iOSAndroid Web
42
43. Introducendo il concetto di
Backend-for-Frontends ogni team
può disegnare la propria esperienza
utente adattando le API generiche
esposte dai Servizi per le esigenze di
logica di prossimità dei device (una
tabella o un wizard su mobile hanno
una logica diversa di interazione con
l’utente e quindi hanno bisogno dei
dati in ordine diverso).
I BFF consentono anche di non
bloccarsi quando il servizio dell’altro
team non è ancora pronto.
Mobile BFF Web BFF
A B
ED
CF
H
I
G
Product Microservice Customer Support Microservice
iOSAndroid Web
Team 1 Team 2
43
44. Nel tempo i microservizi
possono spezzarsi in
ulteriori servizi. Questo
succede quando:
● Parti del servizio
devono scalare
diversamente da
altre
● La loro complessità
è aumentata
● Il loro ciclo di vita è
molto diverso dagli
altri componenti
del servizio
Mobile BFF Web BFF
A B
Product & Buy
Microservice
CG
Customer Support
Microservice
iOSAndroid Web
Team 1 Team 2
HI
Recommendation
Microservice
Microservices Event Broker
Pricing &
Availability Service
ED F
Delivery
Microservice
Team Logistics
44
API Gateway
51. Team Products Team Customer
Component
Lib
Service
Frontend
Ops
Mantainers
Users
Come gestire le
dipendenze tra
microservizi?
51
52. Team Products Team Customer
Chiedendo Aiuto!
Ask for an improvement
52
Component
Lib
Service
Frontend
Ops
53. Team Products Team Customer
Ma non sempre è
possibile sincronizzarsi
Ask for an improvement
53
Component
Lib
Service
Frontend
Ops
54. Team Products Team Customer
Il codice è di tutti, per
cui lo modifico
rispettando le regole
che ci siamo dati
ispirate ai Modelli Open
Source!
Implement the improvement
54
Component
Lib
Service
Frontend
Ops
55. Team Products Team Customer
Pull request
Implement the improvement
Il codice è di tutti, per
cui lo modifico
rispettando le regole
che ci siamo dati
ispirate ai Modelli Open
Source!
55
Component
Lib
Service
Frontend
Ops
56. Team Products Team Customer
In questo modo la
conoscenza si
distribuisce e
l’ecosistema evolve in
piattaforma.
Pull request
Delivery new version
Implement the improvement
56
Component
Lib
Service
Frontend
Ops
Potremmo aprire un tema sui micro frontend
e quando usarli. Ma non oggi!
58. Come si governa una
organizzazione di
questo tipo?
Allinearsi sugli obiettivi
e far emergere dalle
persone come
raggiungerli!
58
F. Team 1
F. Team 2
F. Team 3
Product
Backloge-Commerce
1 PO, 1 Backlog, 1 Prodotto, N Feature Teams
PO
Coordinamento e Focus sul Valore di Business generato
Mob programming e Code Reviews
Mob Code Reviews
Standard emergenti
Unconference
Condivisione della conoscenza ed esposizione delle idee
Kata
Esercitarsi in modo continuo
59. ● I Feature Teams consentono di accelerare il business riducendo i
tempi di attesa ed eliminando il caos organizzativo
● I Microservizi sono uno stile architetturale che consente di separare le
responsabilità favorendo il lavoro e la conversazione tra Team
● Il codice è di tutti e si lavora con un processo ispirato all’ Open
Source Software per farlo evolvere
59
L’organizzazione e l’architettura emergono ed evolvono
da una buona conversazione tra le persone!