CAS D’ETUDE
Développement d’une Application Android à Forte Audience avec Kotlin
OBJECTIFS
Dans le cadre de cette nouvelle mission de développement mobile, notre objectif est d'intégrer tout un ensemble de nouvelles fonctionnalités au sein d'une application à très fort trafic permettant à ses utilisateurs d’interagir directement avec des professionnels de tous les secteurs (achats in app, messaging, etc.)
MISSION
Pionnier dans son secteur, notre client développe des solutions de mise en relation entre clients et professionnels, allant du simple référencement à l’achat d’articles et de services. Notre mission est d’intégrer tout un ensemble de nouvelles fonctionnalités à son application mobile à fort trafic.
-
Analyse du besoin
Dans le but de moderniser et d'améliorer ses services, notre client souhaite intégrer un ensemble de nouvelles fonctionnalités à son application mobile. Ces fonctionnalités étant nombreuses et complexes, il pourrait s'avérer compliqué de les intégrer et de les maintenir sur la base du code existant datant de plus de 10 ans. Dans un premier temps, nous procédons donc, d'une part, à l'analyse de faisabilité de sa maintenance et, d'autre part, à une seconde analyse du cas du développement d’une nouvelle application from scratch avec pour objectif d'explorer les deux options. Le temps et les ressources nécessaires sont estimées dans les deux cas au moyen de POC.
-
Développement de l’application
Après analyse, l'équipe de développement part sur le choix d'une nouvelle application qui sera développée from scratch. Certaines des nouvelles fonctionnalités seront néanmoins développées au sein de l’application actuelle, le temps que la nouvelle soit prête à prendre le relai. Pour cette nouvelle application, nous avons choisi d’organiser notre code façon clean archi et de favoriser la simplicité afin qu'elle reste maintenable et scalable. Pour ce faire, nous arrêtons nos choix des technos sur Kotlin, avec ses coroutines, Koin pour l’injection, du Data Binding pour les vues et un pattern MVVM - Usecase - Repository pour gérer l’I/O des données et la logique métier. Le tout est développé sous forme de librairies (instant feature) afin que chaque feature team puisse travailler sur une base de code parallèle.
-
CI et Test
Faisant suite à des ateliers visant à définir la stratégie de testing et à des ateliers de formation aux bonnes pratiques et au TDD pour l’ensemble des équipes, le développement se fait en TDD. En plus des tests unitaires, des tests fonctionnels sont écrits afin de tester chaque feature, ainsi que des tests instrumentés en bout de chaîne et utilisant notamment Espresso. Pour garantir une qualité de code, d’autres outils sont aussi utilisés. Un “lint” sévère force le développeur à respecter les conventions de codage choisies par l’équipe et une code review est systématiquement faite afin de valider une modification du code. La chaîne d’intégration continue de l’ancienne application est utilisée pour le déploiement du nouveau code.
-
Performances
Dans le cadre de notre mission, notre principal challenge est lié aux performances de l’application. L’ancienne application présentant des défauts et des soucis de performance tels que le launch time, la fluidité des transitions ou encore la compilation, nous mettons en place une stratégie pour garder une application fluide et très rapide grâce aux choix précautionneux des outils, des librairies et des packages à intégrer. Pour chaque nouvelle librairie à intégrer, des tests mesurant le “launch time” sont exécutés pour vérifier que le code à embarquer n'alourdisse pas l'ensemble de l'app, ainsi que des rapports sur les temps de compilation.
STRATEGIE
Afin de pouvoir démarrer le développement de la nouvelle version de l'application de notre client, le développement et la maintenance de l’ancienne application sont confiés à des équipes basées à l’étranger. Cette passation se fait en trois temps. Dans un premier temps, un refactoring du code de l’application existante est effectué, en passant notamment sur une base façon clean architecture. Cela a pour effet de rendre le code plus simple à maintenir et plus scalable. Une fois la base simplifiée, la phase d’accompagnement des équipes offshore démarre pour durer plusieurs semaines. Une fois ces équipes autonomes, nous pouvons désormais nous concentrer sur le développement de la nouvelle application, tout en continuant de superviser les modifications apportées à l'ancienne.