R2D2 to BB8

35
Migration vers Symfony 3 d'une application B2B de LaFourchette R2D2 to BB8

Transcript of R2D2 to BB8

Page 1: R2D2 to BB8

Migration vers Symfony 3 d'une application B2B de LaFourchette

R2D2 to BB8

Page 2: R2D2 to BB8

Paulo Coelho

Page 3: R2D2 to BB8

Vincent Chalamon

Lead Developer chezLes-Tilleuls.coop

@vincentchalamon

github.com/vincentchalamon

Page 4: R2D2 to BB8

Guillaume Voisin

Lead Developer chezLaFourchette

@guillaumvoisin

github.com/guillaumevoisin

Page 5: R2D2 to BB8

450krésas par mois

12++ pays

32krestaurants

70++développeurs

Page 6: R2D2 to BB8

Nombreux usages

Utilisateurs++

Internationalisation

Page 7: R2D2 to BB8

R2D2La V2 actuelle

Page 8: R2D2 to BB8

The ForkManager V2

R2D2 > La V2 actuelle

Contenu

Réservation

Plan de salleMarketing& CRM

Stats

8

● Application à destination des restaurateurs

● Gestion de services depuis le restaurant

● Outil de communication auprès des clients

Page 9: R2D2 to BB8

The Fork Manager V2

R2D2 > La V2 actuelle

Dette techniqueconséquente

Difficultés demise à jour

Nombreux projets inter-dépendants

Fonctionnalités obsolètesnon ergonomiques

9

Page 10: R2D2 to BB8

The Fork Manager V2

R2D2 > La V2 actuelle 10

Page 11: R2D2 to BB8

BB8La V3

Page 12: R2D2 to BB8

The ForkManager V3

BB8 > La V3

Contenu

Plan de salleMarketing& CRM

Stats

Réservation

Page 13: R2D2 to BB8

Partir sur de bonnes pratiques

BB8 > La V3

Sémantique

Approche MVPPenser durable :refactos

Proposer des POC

Échouerc’est cool !

Qualité : TU, TF

13

Page 14: R2D2 to BB8

BB8 > La V3

TwGit

14

API

SPA

Et pour les fronts…

Page 15: R2D2 to BB8

BB8 > La V3

V2

APP

Loaders

Transformers

Double écriture

15

V3

Page 16: R2D2 to BB8

LegacyBundle

BB8 > La V3

Isoler les développements

16

Désactivation du LegacyBundle

Mapping entités V2

Page 17: R2D2 to BB8

BB8 > La V3 17

Données importées

Restaurant

RéservationsDescription

Horaires ouverture

Horaires fermeture

Clients

Page 18: R2D2 to BB8

Loaders

Page 19: R2D2 to BB8

● Commande Symfony● 1 loader par entité● Priorité définie pour

chaque loader

Loaders

Loaders

Registry Loader

19

Page 20: R2D2 to BB8

V2

Loaders

INSERT INTO v3.restaurant…SELECT v2.restaurant…

Loaders

20

V3

Page 21: R2D2 to BB8

Loaders

Loaders

Penser jetable MVP : importer uniquement le nécessaire

Savoir se passer de Doctrine

Refacto, vous avez dit refacto ?

Gestion des erreurs / doublons

21

Page 22: R2D2 to BB8
Page 23: R2D2 to BB8

Compliqué parfois le Loader peut être

Page 24: R2D2 to BB8

Exécution des loaders en production

Loaders

● Charger l’intégralité des données = 9 jours

Migration progressive

24

Interruption de service

Page 25: R2D2 to BB8

V2

Loaders

Client 3 Client 1Client 2

25

V3

Migration progressive

Page 26: R2D2 to BB8

Transformers

Page 27: R2D2 to BB8

Transformers

V2

V3

27

Transformers

Page 28: R2D2 to BB8
Page 29: R2D2 to BB8
Page 30: R2D2 to BB8

Double écriture

Page 31: R2D2 to BB8

Double écriture 31

V2

APP

TransformersV3

Double écriture

POST http://api.tfm3-lafourchette.com/restaurants PUT http://api.tfm3-lafourchette.com/restaurants/legacy/3

Page 32: R2D2 to BB8

Bilan

Page 33: R2D2 to BB8

Bilan

Bilan

> 300tests unitaires

> 80%couverturede code

1 an de dev

33

LegacyBundle :75% des devs

> 10 contributeurs

> 150tests fonctionnels

Page 34: R2D2 to BB8

Conseils de Jedi

Bilan 34

“Une étude approfondie du Legacy tu feras”

“En conditions réelles tu testeras”

“Prudent tu seras”

Page 35: R2D2 to BB8

@TheFork_tech

https://joind.in/talk/e08a1

Michiel VanWerkhovenProduct Owner

Olivier VersanneScrummaster

Mickael LabrutBackend lead developer

Guillaume VoisinBackend lead developer

@guillaumvoisin

Vincent ChalamonBackend lead developer

@vincentchalamon

Gregory CopinDirecteur technique @gregcop1

Dimitri HautotFrontend developer@Dhautot

Matteo ReinerioFrontend developer@zippymat

Alexis TondelierFrontend lead developer @AlexisTondelier

Cédric DéservilleBackend lead developer @talumn

#MayTheForkBeWithYou

@coopTilleuls