Les points clés de ce retour d'expérience :
- 2 ans de mission Full Stack : Gestion et évolution continue d'une plateforme de location de logements entre particuliers (505 branches de merge au total).
- Montée en compétences DDD : Structuration du code métier, passage aux Task/DTOs et Value Objects pour sortir de la logique enfouie dans les contrôleurs.
- Refonte FinTech (Wise) : Refactorisation complète du tunnel de saisie de coordonnées bancaires multi-pays et sécurisation des flux de versement aux propriétaires.
- Automatisation KYC & DAC7 : Intégration de l'API Veriff pour la vérification d'identité en temps réel et mise en conformité fiscale européenne.
- Écosystème Mobile : Ponts d'interaction et synchronisation des sessions sur Webviews natives iOS et Android, gestion des tokens de push Firebase.
- Méthodologie Agile : Cycle de delivery structuré : Carte Notion → cadrage → implémentation → préprod → validation métier → mise en production.
1. Le Contexte Roomlala & Mon Rôle
De juin 2024 à avril 2026, j'ai travaillé en tant que développeur Full Stack pour WEBALTERIMMO, l'entreprise éditrice de la plateforme Roomlala. Roomlala est un service de location de logements et de chambres chez l'habitant pour moyennes et longues durées, mettant en relation des hôtes et des locataires en France et à l'international.
L'application repose sur un socle Symfony historique, avec des flux financiers réels, des réservations en ligne, de la messagerie et des applications mobiles. Mon rôle consistait à faire évoluer cette plateforme en continu : concevoir de nouvelles fonctionnalités demandées par le produit, corriger les dysfonctionnements, et faire progresser l'architecture sans perturber l'activité en production.
2. Organisation & Méthode de Travail
Au quotidien, le travail d'équipe s'organisait selon une méthodologie Agile pragmatique et rythmée par des tickets Notion. Le workflow de développement suivait un cheminement rigoureux :
- Cadrage & clarification : Prise en main de la carte Notion, analyse des règles métier et échange direct avec le produit pour lever toute incertitude avant de commencer à coder.
- Implémentation locale : Développement de la fonctionnalité ou du correctif, découpage en commits atomiques, rédaction de tests unitaires et vérification de non-régression.
- Déploiement en préproduction : Validation technique du build, intégration continue et mise à disposition de la branche sur l'environnement de staging.
- Recette métier : Validation fonctionnelle par l'équipe produit ou le support.
- Mise en production : Déploiement sécurisé sur l'infrastructure de production.
Sur l'ensemble de ces deux années, cette organisation m'a permis de livrer 505 branches de merge, réparties entre :
- 238 fonctionnalités métier (feat) : Nouveaux parcours utilisateurs, outils d'administration, baux numériques, intégrations tierces et tunnels de conversion.
- 122 correctifs et stabilisations (fix) : Résolution de "edge cases", fiabilisation des flux de données et corrections d'erreurs en production.
- 58 chantiers techniques et d'infrastructure (tech) : Refactorings d'architecture, outillage de test, migrations de dépendances et pipelines de build.
- 87 chantiers d'interface et d'expérience utilisateur (css) : Modernisation responsive, harmonisation graphique BEM et amélioration de la lisibilité mobile.
3. Architecture Logicielle & Modernisation Symfony
L'un de mes plus grands défis au quotidien a été de monter en niveau sur le Domain-Driven Design (DDD) et sur l'architecture logicielle. Sur une application vivante avec des réservations et des utilisateurs au quotidien, refactoriser ne signifie pas tout réécrire de zéro, mais savoir isoler progressivement les responsabilités sans casser l'existant.
Parmi les chantiers de fond menés sur le socle Symfony :
- Dépoussiérage des contrôleurs historiques : Découpage des contrôleurs volumineux qui mélangeaient requêtes HTTP, persistance Doctrine et logique métier. J'ai systématiquement réorienté ces flux vers des objets de tâche dédiés (Tasks), pilotés par des DTOs (Data Transfer Objects) fortement typés.
- Migration vers les attributs PHP 8 : Remplacement progressif des anciennes routes et configurations dispersées dans des fichiers YAML ou XML par les attributs PHP natifs, rendant le code plus lisible et plus simple à maintenir.
- Remplacement des tableaux associatifs par des Value Objects : Sécurisation des données transitant dans l'application pour éviter les erreurs d'index indéfini et garantir l'immutabilité des contextes d'exécution.
- Tests et conteneurisation : Mise en place de suites de tests unitaires avec PHPUnit et conteneurisation de tests end-to-end avec Docker et Playwright pour fiabiliser les parcours critiques.
Pour un aperçu technique détaillé de cette approche sur un composant concret, vous pouvez consulter le cas d'étude dédié : Refactoriser l'envoi d'emails dans Symfony avec les Value Objects EmailVo.
4. FinTech & Refonte du Tunnel Bancaire (API Wise)
La gestion des versements aux propriétaires constitue l'un des piliers de la plateforme. Les hôtes pouvant louer des logements dans différents pays, le système doit pouvoir collecter des coordonnées bancaires hétérogènes (IBAN européen, code BSB australien, routing number ABA américain, transit number canadien) et exécuter les virements de loyers via l'API Wise.
La refonte réussie de ce tunnel de saisie bancaire fait partie des réalisations dont je suis le plus fier. Mes interventions sur ce volet ont couvert :
- Architecture par Country Policies : Découplage complet des règles de validation propres à chaque pays en dehors des vues Twig, avec application dynamique des contraintes de formulaire via les événements Symfony (FormEvents).
- Gestion multi-comptes bancaires : Possibilité pour un bailleur d'associer des comptes bancaires distincts selon ses différentes annonces en location.
- Sécurisation et masquage des données sensibles : Obfuscation systématique des numéros de compte et IBANs dans les vues d'administration et les logs pour garantir la confidentialité des données bancaires.
- Génération des attestations fiscales et baux : Automatisation du calcul des acomptes, génération des reçus de paiement et gestion du cycle de signature électronique des contrats de location.
Le détail complet de cette refonte architecturale est documenté dans l'article : Refactoriser un formulaire bancaire international avec Symfony et l'API Wise.
5. Confiance, Automatisation KYC (Veriff) & Conformité Fiscale (DAC7)
Sur une place de marché d'hébergement, la sécurité et la confiance mutuelle entre membres sont fondamentales. J'ai piloté deux chantiers réglementaires majeurs :
- Automatisation de la vérification d'identité (KYC) : Remplacement d'un ancien processus de modération manuelle en back-office par l'intégration complète de l'API Veriff. Les utilisateurs effectuent leur vérification biométrique en temps réel, et les résultats sont réceptionnés de manière sécurisée via des webhooks signés en HMAC SHA-256 traités de façon asynchrone par Symfony Messenger.
- Mise en conformité européenne DAC7 : Implémentation du parcours de collecte et de validation des identifiants fiscaux (Numéros d'Identification Fiscale - NIF) pour les propriétaires, assurant le respect des obligations légales de déclaration de revenus des plateformes numériques auprès de l'administration fiscale.
Pour comprendre le fonctionnement des webhooks sécurisés et de la file de messages asynchrones, retrouvez le retour d'expérience : Intégrer Veriff pour la vérification KYC dans Symfony.
6. Écosystème Mobile, Notifications Push & Webviews
Le service Roomlala est également disponible sous la forme d'applications mobiles sur l'App Store (iOS) et Google Play (Android), construites sur une architecture hybride combinant des écrans natifs et des Webviews connectées au backend Symfony.
Mes missions sur l'écosystème mobile ont consisté à :
- Gérer la persistance des sessions et des cookies : Assurer la continuité de connexion sans rupture entre les vues natives et les Webviews de l'application, en prenant en compte les politiques strictes des systèmes d'exploitation mobiles (notamment sur iOS).
- Développer des ponts d'interaction (Bridges) : Communication bidirectionnelle entre le JavaScript de la Webview et le code natif (déclenchement du partage natif Android, ouverture de fonctionnalités matérielles, gestion des liens profonds).
- Gérer le cycle de vie des notifications push : Intégration de Firebase Cloud Messaging (FCM), enregistrement et actualisation automatique des tokens d'appareils, et désactivation propre des identifiants lors de la déconnexion d'un compte.
- Mettre en place un mode debug mobile : Création d'outils d'inspection internes pour faciliter le diagnostic des requêtes HTTP et des comportements de session directement depuis les terminaux de test.
7. Intégrations IA, API & Expérience Utilisateur
En parallèle des chantiers d'infrastructure, j'ai également contribué à la modernisation des interfaces utilisateur et à l'intégration d'outils d'intelligence artificielle :
- Standardisation OpenAPI & Agents IA : Documentation et structuration des points d'accès de recherche d'annonces avec NelmioApiDoc (OpenAPI / Swagger). Cette API normalisée a permis à un agent conversationnel sur mesure (GPTs) d'interroger le catalogue d'hébergements en langage naturel de manière fiable et sécurisée.
- Assistance à la rédaction d'annonces : Intégration d'un module d'aide à la génération et à l'amélioration automatique de descriptions de logements pour assister les propriétaires lors de la création de leur annonce.
- Modernisation du tunnel de dépôt d'annonces : Refonte complète des composants de sélection de dates avec un calendrier interactif, mise en place d'un système d'upload de photos multiples avec réorganisation dynamique, et harmonisation des formulaires selon la convention CSS BEM.
8. Bilan & Enseignements d'Ingénierie
Ces deux années passées chez Roomlala ont constitué une expérience particulièrement enrichissante sur le plan technique et humain. Travailler sur un produit en production avec des transactions réelles oblige à développer une rigueur constante : chaque ligne de code modifiée peut impacter une réservation en cours, un paiement de loyer ou la connexion d'un membre sur son smartphone.
Si je devais résumer le principal enseignement que je retiens pour la suite de ma carrière, c'est sans hésiter l'importance d'architecturer le code. J'ai appris à ne plus simplement chercher à faire fonctionner une fonctionnalité, mais à réfléchir à la manière dont elle s'insère dans le domaine métier : comment la découper pour qu'elle reste lisible, comment la tester pour ne jamais craindre de la modifier dans six mois, et comment concevoir des interfaces découplées qui résistent aux évolutions futures du produit.