FARFETCH — moderniser une application e-commerce en production

Ingénieur Android · août 2021 – avril 2025 · FARFETCH sur Google Play

Problème

FARFETCH est une marketplace de mode de luxe, et son application Android reçoit des commandes de clients du monde entier. En 2021, la base de code charriait des années de décisions accumulées : du MVC dans les écrans les plus anciens, du MVVM dans les plus récents, des dépendances câblées à la main d'un bout à l'autre. Rien de tout cela n'était faux au moment de son écriture, et tout cela rendait le changement suivant plus lent que le précédent.

Le pipeline d'intégration continue prenait quinze minutes par exécution. Quinze minutes, c'est au-delà du seuil où les ingénieurs cessent de le lancer et se mettent à grouper leurs changements — et c'est ainsi que les problèmes d'intégration se découvrent tard, et se paient cher.

Contrainte

Rien ne pouvait s'arrêter. L'application était en production et générait du chiffre d'affaires, sur un train de livraison qui ne s'interrompait pas pour des travaux d'architecture. Chaque changement devait arriver de façon incrémentale, et les anciens comme les nouveaux patterns devaient cohabiter dans la même base de code aussi longtemps que durerait la migration — c'est-à-dire des années, pas des sprints.

Décisions

Résultat

Le temps de build du pipeline est passé de 15 minutes à 2,5 minutes en moyenne — de nouveau sous le seuil où les ingénieurs le lancent à chaque changement plutôt que par lots.

Compose et l'injection de dépendances sont devenus la norme pour tout nouveau développement, et non des expérimentations menées en parallèle. C'est le seul résultat durable qu'une migration incrémentale puisse produire : la nouvelle manière de faire doit être la plus facile, sinon l'ancienne l'emporte par inertie.

Ce que je ferais autrement

Je modulariserais avant de migrer, et non en même temps. Nous avons mené les deux de front, alors que l'argument que j'avance pour le build cache vaut aussi pour la migration : ce sont les frontières entre modules qui rendent un changement incrémental peu coûteux. Sans elles, chaque écran passé à Compose traînait encore tout le graphe de dépendances derrière lui, et la migration a payé un surcoût qui aurait pu être évité. Le travail sur le pipeline l'a démontré — je l'ai simplement démontré dans le mauvais ordre.