- Développement
- IA
Une nouvelle génération d’outils d’IA qui propulsent notre efficience en développement logiciel vers le futur
18 novembre — 2024
Chez Mirego, nous avons toujours accordé une grande importance aux choix des outils que nous utilisons lors du développement de produits numériques. Nous croyons que c’est avec les meilleurs outils que se bâtissent les meilleurs produits.
Un des aspects cruciaux dans le choix de ces outils est l’efficience que ceux-ci nous procurent. Au fil des années, nous avons bâti des dizaines de produits en nous appuyant sur des outils qui favorisent une grande efficience lors du développement, par exemple :
- Kotlin Multiplatform et React Native pour le développement mobile multiplateforme, nous évitant de dupliquer de la logique d’affaires ou des implémentations d’interfaces visuelles;
- React, Ember.js et Phoenix Liveview pour le développement Web frontend, nous simplifiant la gestion de state et des interactions entre les composantes;
- Ruby on Rails et Elixir pour le développement Web backend, nous simplifiant les interactions avec la base de données (ORM), l’ingestion de contenu externe et l’exposition des données via REST ou GraphQL.
Ces outils nous procurent une grande efficience en terme de développement, mais la robustesse de ce qu’ils nous aident à bâtir est d’une importance tout aussi grande. Ce n’est pas un choix entre efficience ou robustesse; les deux doivent être présentes.
Pour nous, l’efficience ne veut pas simplement dire « aller plus vite en tournant les coins ronds », c’est « aller plus vite en concentrant nos efforts aux bons endroits, sans sacrifier la qualité de ce qui est produit ».
C’est avec cette vision que nous abordons chaque projet que nous réalisons pour nos clients.
Une nouvelle génération d’outils chez Mirego
La montée en puissance et la démocratisation des nombreux LLMs et services d’IA générative au cours des dernières années ont donné naissance à une nouvelle génération d’outils qui s’appuient sur les capacités de compréhension et de rédaction de code par ces services.
Cette nouvelle génération d’outils inclut entre autres GitHub Copilot, Cursor, Avante, Zed, Continue et Aider.
Ces outils ont à peu près tous la même mission : utiliser l’IA générative pour aider les équipes de développement à être plus efficientes dans leur quotidien sans toutefois sacrifier la qualité ni la robustesse du résultat.
Cette mission cadre parfaitement avec notre vision du futur du rôle de développeur·euse, ainsi qu’avec l’efficience que nous souhaitons créer au sein de tous nos projets.
✦ Nous avons pris la décision d’accélérer l’adoption des outils de développement utilisant l’IA générative dans l’ensemble des projets que nous réalisons pour nos clients chez Mirego.
Évidemment, avant d’aller de l’avant avec cette décision, nous avons pris le temps d’évaluer les enjeux potentiels qui s’y rattachent.
Enjeux et mitigations
Il existe deux enjeux importants par rapport aux données lorsqu’on parle d’outils utilisant l’IA générative en matière de développement logiciel; l’un concerne les données en entrée et l’autre en sortie.
Données en entrée (input)
À une certaine étape dans leur flow d’utilisation, ces outils utilisent du code existant en entrée et l’envoient à un service d’IA générative. Cela n’est pas un enjeu avec du code d’un projet open-source, mais dans le cas d’un projet client, le respect de l’aspect confidentiel du code est un enjeu d’une extrême importance à considérer.
Il est donc primordial d’avoir la garantie que les outils n’utiliseront jamais le code reçu pour entraîner leurs modèles ou même de conserver le code reçu d’une quelconque façon.
Chez Mirego, nous souscrivons à des abonnements corporatifs chez GitHub, OpenAI et Anthropic qui garantissent le respect de cet enjeu.
Pour nos clients qui possèdent des exigences spécifiques par rapport à leur code (par exemple, l’impossibilité d’utiliser des services externes hors du Canada), nous sommes en mesure d’utiliser des LLMs qui sont exécutés localement et qui garantissent également le respect de cet enjeu.
Données en sortie (output)
Si on considère ces outils comme de simples services de génération de code, il est très facile de soulever des enjeux potentiels en termes de qualité (bogues), de sécurité, d’accessibilité et même de légalité. C’est normal puisque ces outils ne sont pas parfaits.
Chez Mirego, ces outils ne remplacent pas des membres de l’équipe de développement, ils les amplifient.
Puisque nos processus de SDLC (software development lifecycle) s’appliquent toujours, aucune section de code dans nos projets n’est « écrite par l’IA ». Nous sommes donc en mesure de garantir que chaque ligne de code d’un projet a été soumise par un·e développeur·euse, assisté·e par l’IA ou pas, et est passée à travers des revues de code, des analyses statiques de code, des balayages de vulnérabilités, une suite de tests automatisés, etc.
Des résultats concrets
Plusieurs études réalisées par GitHub (1, 2, 3) et McKinsey permettent de démontrer les avantages évidents de ces outils sur l’efficience d’une équipe de développement. Ces études tendent à démontrer une augmentation de 20 % à 50 % de productivité sur la réalisation de tâches techniques lorsque des outils d’IA générative sont utilisés.
Contrairement à ce qu’on pourrait penser ou à ce que certaines publications marketing tentent de nous faire croire, ces outils ne sont pas magiques. Il faut prendre le temps de creuser pour apprendre leur fonctionnement, comprendre comment ils fonctionnent, expérimenter avec les différentes techniques pour optimiser leurs résultats, etc. C’est lorsqu’on les maîtrise qu’il est possible d’atteindre un niveau d’efficience optimal.
Concrètement, comment est-ce que cette efficience se traduit dans nos projets chez Mirego?
Projet client - Plateforme numérique
Dans le cadre de la réalisation de ce projet client, l'outil GitHub Copilot a été utilisé pour accélérer la modélisation de données et de la génération de tests automatisés à partir de code existant.
Modélisation de données
Les capacités de génération de code de GitHub Copilot ont permis de réduire drastiquement le temps d'implémentation de code JSON pour un engin de rendu de formulaires à partir d'une spécification en format CSV. Une fois qu'une modélisation JSON initiale a été réalisée manuellement à partir d'un échantillon de la spécification, jusqu'à 60 % de la modélisation restante a pu être effectuée automatiquement par GitHub Copilot en quelques secondes, plutôt qu'en quelques jours.
Génération de tests unitaires
À partir d'un échantillon de tests existants, GitHub Copilot a été en mesure de générer des tests automatisés couvrant le comportement de nouveau code. Par exemple, pour une nouvelle fonctionnalité, 70 % de ses tests automatisés ont pu être générés automatiquement à partir de tests de fonctionnalités existantes, validés par un·e membre de l'équipe de développement et ensuite intégrés au projet.
Projet interne - BugBeam
Dans le cadre de la réalisation de BugBeam, un outil interne d'assistance aux équipes d'assurance qualité, le modèle GPT-4o mini d'OpenAI a été utilisé pour générer un convertisseur d'un format de document propriétaire utilisé par l'outil JIRA (Atlassian Document Format) vers le format Markdown.
À partir d'une simple spécification standard du format, quelques 200 lignes de code complètement fonctionnelles de code Kotlin ont été générées et ont pu être intégrées telles quelles dans le projet, après avoir été validées et testées.
Projet client - La Ruche
Dans le cadre de la refonte du site Web de La Ruche, une plateforme de sociofinancement, un des objectifs principaux était de reprendre le code existant, de se l'approprier et de le faire évoluer rapidement.
L'utilisation de GitHub Copilot par notre équipe a grandement contribué à l'atteinte de cet objectif. Au-delà de son utilisation de base, nous avons poussé ses capacités au maximum pour nous permettre de :
- Faire évoluer la plateforme plus vite en développant un ownership sur le code plus rapidement;
- Limiter le nombre d'enjeux techniques en faisant remonter à la surface des effets de bord potentiels dans le développement de nouvelles fonctionnalités;
- Ultimement, pouvoir passer plus de temps sur ce qui compte vraiment : les fonctionnalités du produit.
Vers le futur
Nous croyons que la mise en place progressive de ces outils au sein de nos projets permettra une plus grande efficience de développement au fil des prochaines années et en fera bénéficier nos clients existants et futurs.
Pour Mirego, investir dans la maîtrise de ces outils (au-delà de leur simple utilisation de base) est capital. Cela passe assurément par de l’exploration, mais également par la remise en question de nos façons de faire et de nos méthodes de travail. Ces outils ne font pas que fournir de la simple génération de code; ils nous forcent à revoir comment bâtir des produits numériques en apportant le plus de valeur possible en tant qu’équipe de développement.
C’est avec cet état d’esprit que notre équipe approche le futur du développement logiciel.