Michel Domenjoud (Staff Engineer) et Nicolas De Nayer (VP of Engineering).
29 Mars 2021 - c'est la 5ème édition de la Duck Conf et nous avons l'honneur d'accueillir une nouvelle fois Doctolib pour cette cérémonie d'ouverture.
David Gageot (Chief Architect) & Nicolas Martignole (Principal Engineer) ont intitulé le talk du jour "Jusqu'ici tout va bien"
A l’épreuve du COVID-19, comment le (gros) système Doctolib a tenu le coup en trafic face à des enjeux sociaux et techniques importants ?
Rappelons les trois missions de Doctolib (2 à valence "sociale" + 1 à valence "tech")
Rétrospective
2019 | __Entre 2020-2__022 |
- 25% de citoyens français ont un compte Doctolib - 80 000 personnels de santé sont utilisateurs de Doctolib - 238 Millions de RDV pris sur la plateforme depuis le jour 1 en 2013 - 120 personnes côté "Produits & Tech" @Doctolib 50 Développeurs 10 Eng managers15 PO10 DevOpsUX, UI, PM, ... | - Doctolib est présent dans 3 pays en Europe : France, Allemagne, Italie - 60 Millions de patients utilisent la plateforme300 000 personnels de santé sont utilisateurs de Doctolib dont 100 000 nouveaux en 2021 - 61 Millions de RDV pris en ligne ou directement en cabinet avec Doctolib (décembre 2021) - 500 personnes côté "Produits & Tech" @Doctolib - Doctolib offre la téléconsultation aux médecins : c'est 14 Millions de vidéo-consultations réalisées jusqu'à maintenant |
Souvenez-vous du 12 et 13 juillet 2021
(pour plus de détail - cf. le CR détaillé de Nicolas sur le Touilleur Express)
Le 12 juillet, Emmanuel Macron fait une allocution afin de lutter contre le variant Delta. Le pass vaccinal entre en vigueur.
De nombreux français se connectent sur la plateforme Doctolib pour prendre un rdv de vaccination. L’enjeu est de taille pour que le consommateur sur le site reste le moins de temps possible.
Les équipes Tech sont sur le pont et très proches du mur. Elles résistent.
A titre illustratif, il y a 10 Millions de transactions par minute réalisées sur la plateforme à plusieurs reprises.
Selon les chiffres publiés par Doctolib, en deux heures trente, 926 000 rendez-vous ont été pris ce lundi soir 12 juillet, puis 1,4 million sur la journée du mardi. Ceci a notamment été rendu possible grâce à 2 ingénieurs SRE de Doctolib.
Architecture Doctolib en 2019
Architecture Doctolib en 2022
Comme vous pouvez le constater, l'architecture de Doctolib a suivi une évolution douce (mais rapide). Elle est toujours très pragmatique.
Sa valeur : « simplicité du build, simplicité du run ».
Son leitmotiv : avoir tout en 1 exemplaire.
En résumé :
Ce qu’il y a toujours | __Ce qu’il y a de nouv__eau |
- 1 repository unique Git - Même stack front-end (JS + React) - Elasticsearch et Postgre PostgreSQL (primaire et secondaire*) : fail*over ou répartition de charge et full-text search) - Des jobs asynchrones avec Resque + Redis | - Desktop + Mobile Wrapper - Passage sur Kubernetes : 1000 conteneurs / pods autoscalés - Base de données : Amazon Aurora (version managée de Postgres - fournie par AWS) - 1 Writer, 13 Replica 23 To (2022) Vs. 10 To (Oct. 2020) |
Rappelons les grands piliers de la Tech chez Doctolib en 2019 - toujours valables en 2022.
Tech Radar : “c’est simple mais pas simpliste”
(*) Pour être plus précis, Doctolib utilise New Relic comme APM (Application Performance Monitoring). Il s'agit d'un outil puissant pour aller détecter plus en amont une dégradation de performance et fournir des informations actuelles et historiques pour aller investiguer (performances des requêtes de la base de données, performances de rendu du navigateur web, …).
La finalité c’est que cela permet d’optimiser et d’améliorer la recherche des disponibilités (le cœur du réacteur Doctolib) des personnels de santé sur la plateforme tout en déduisant les slots déjà occupés sur une zone géographique donnée et en fonction du motif de consultation.
Doctolib reçoit chaque jour un rapport automatisé et va vérifier, sur les 7 derniers jours, tous les end points qui ont pris + 10% sur leur temps de réponse pour permettre de remonter ceux dont la performance a été dégradée.
6 mois : tout va bien
Bien que l’architecture Doctolib soit un monolithe, Doctolib est en capacité d’analyser chaque point d’entrée avec une analyse fine - end point par end point.
Pour y remédier ? Une stack technique simple pour que le développeur soit en capacité d’aller un peu sur le run.
En 2022, il y a 500 personnes côté "Produits & Tech" chez Doctolib répartis sur 3 pays - dont 4 villes (Paris, Nantes, Milan, Berlin) et 250 développeurs.
Les équipes sont modulaires et organisées en mode feature team (cf. Team topologies)
Il y a 8 domaines organisés en stream : 5 produits (Doctolib Patient, Doctolib Practice, Doctolib Team, Patient Healthcare Platform, Sales & Marketing Performance) + 3 supports
L'organisation est bien rodée : pas de nécessité de coordination très forte
La règle d’or : c’est être le plus factuel possible et ne négliger en aucun cas la qualité. Il faut bannir des phrases du type : “Et si jamais on doit…”, “Peut-être qu’un jour…”, “C’est plus propre de…”
Des nouveaux métiers se sont créés :
Sales / Marketing
Data Science (*)
1 site de formation interne pour les nouveaux arrivants (Doctolib Academy) - au bout de 4 semaines, les développeurs sont en capacité de faire partir du code en production.
Quelques chiffres :
Plus de développeurs + plus de tests + plus de produits = les coûts de la CI augmentent de façon exponentielle.
Les challenges sont nombreux :
Pour vous donner une idée du cycle de mise en production chez Doctolib, c’est :
Doctolib va pousser l'approche "monolithe modulaire" afin de rendre le monolithe plus agréable tout en restant monolithe pour :
A titre illustratif, il y a une crise par jour chez Doctolib. Le processus de gestion de crises est rodé. Si un développeur a un doute ou une peur et souhaite déclencher la sonnette d’alarme, il a juste à appuyer sur un bouton rouge. Automatiquement, un SMS est envoyé à l’équipe Tech. Dans la foulée, les gestionnaires d’incidents se mobilisent et vont organiser une cellule de crise.
L’intention au niveau de l’approche est de garder une seule unité, un seul repository, une seule code base. A l’intérieur de la code base, Doctolib va essayer d’identifier plus clairement différents modules fonctionnels et différentes responsabilités. Par exemple, les développeurs vont utiliser des engines Rails en prenant plusieurs tranches d’applications qu’ils vont mettre en production en commun et ainsi obtenir l'application finale (Doctolib s’inspire du modèle Shopify). Cela permet d’avoir un core applicatif et des modules fonctionnels plus proches du découpage organisationnel.
En gardant le principe d’avoir tout en 1 exemplaire, Doctolib créé du modulaire si et seulement si c’est nécessaire.
Il est primordial d’avoir une simplicité dans le design, de faire des améliorations incrémentales et de mesurer constamment la satisfaction.
En résumé / Takeaway