On m'a dit qu'il fallait

tout réécrire

Un projet legacy ?

On m'a dit qu'il fallait tout réécrire

  • En production

  • Ancien

  • Difficile à maintenir

  • Pas (ou peu) de tests

  • Les devs d'origine sont parti(e)s

Stratégies possibles

On m'a dit qu'il fallait tout réécrire

  • Ne rien changer

  • Tout réécrire de zéro

  • Tout jeter par la fenêtre

  • La réponse D

Ne rien changer

On m'a dit qu'il fallait tout réécrire

Inconvénients :

Avantages :

  • Démotivation des équipes
  • Risque de turn-over
  • Syndrome du dessous de tapis
  • Tous les inconvénients d'un projet legacy
  • La prod reste active pendant le dev
  • ?

Tout réécrire

On m'a dit qu'il fallait tout réécrire

Inconvénients :

Avantages :

  • Long
  • Onéreux
  • Première mise en prod risquée
  • Nécessite énormément de connaissances sur le domaine métier
  • Structure moderne
  • Motivation accrue
  • Tests dès le départ (possible)

Tout jeter par la fenêtre

On m'a dit qu'il fallait tout réécrire

Inconvénients :

Avantages :

  • Les clients ne sont pas contents
  • Vous mettez tout le monde au chômage
  • Vous prenez votre retraite pour élever des wombats dans le Tarn

La réponse D

On m'a dit qu'il fallait tout réécrire

La réponse D

La migration progressive

Inconvénients :

Avantages :

  • Le vieux code reste là encore longtemps
  • Besoin de connaissances métier
  • Les "old top talents" peuvent être un frein
  • La prod reste active pendant le dev
  • Les tests sont rajoutés en cours de route
  • Nouvelle structure possible
  • Pas besoin de connaître tout le métier
  • Moins cher (car coût sur la durée)
  • Les effets sont visibles plus rapidement

La migration progressive

On m'a dit qu'il fallait tout réécrire

Conseils

Pas de rush !

➡ Auditer le code

La migration progressive

On m'a dit qu'il fallait tout réécrire

Audit

Le code souvent modifié

Éléments à identifier

Git, tickets, etc.

Monitorer la prod

Le code
mort

Monitorer la prod, supprimer le code commenté, archiver les vieux dépôts, etc.

Le code  externe 

Dépendances,

versions,

langage,

O365, GCP, LDAP, FTP, etc.

Le code souvent utilisé

La migration progressive

On m'a dit qu'il fallait tout réécrire

C'est parti !

La migration progressive

On m'a dit qu'il fallait tout réécrire

L'encapsulation

La migration progressive

On m'a dit qu'il fallait tout réécrire

L'encapsulation

La migration progressive

On m'a dit qu'il fallait tout réécrire

L'encapsulation

La migration progressive

On m'a dit qu'il fallait tout réécrire

L'encapsulation

La réécriture progressive

On m'a dit qu'il fallait tout réécrire

La réécriture progressive

On m'a dit qu'il fallait tout réécrire

La réécriture progressive

On m'a dit qu'il fallait tout réécrire

La réécriture progressive

On m'a dit qu'il fallait tout réécrire

Example avec PHP/Symfony

On m'a dit qu'il fallait tout réécrire

Workflow d'exécution

On m'a dit qu'il fallait tout réécrire

Avant

On m'a dit qu'il fallait tout réécrire

Workflow d'exécution

Après

On m'a dit qu'il fallait tout réécrire

Workflow d'exécution

Après

On m'a dit qu'il fallait tout réécrire

Workflow d'exécution

Après la réécriture d'un seul endpoint

La migration progressive

On m'a dit qu'il fallait tout réécrire

Les tests "basiques"

Smoke testing

💻

🖰

🔥

On m'a dit qu'il fallait tout réécrire

Smoke testing

On m'a dit qu'il fallait tout réécrire

Golden Master

On m'a dit qu'il fallait tout réécrire

Continuous integration

Github Actions

CircleCI

Gitlab CI

Atlassian Bamboo

Jenkins

AppVeyor

On m'a dit qu'il fallait tout réécrire

Stop talking, start migrating!

On m'a dit qu'il fallait tout réécrire

@pierstoval

Alex Rock

Freelance dev, architect, coach & trainer

Merci !