Développer, tester et déployer rapidement avec confiance

Par Eric Pinet | 5 May, 2018

Introduction

Le développement logiciel est et doit être au service des besoins de l’entreprise ou des utilisateurs. Tous les efforts de développement et les décisions devraient être dirigés vers les utilisateurs.

Un des besoins les plus répandus est la rapidité de disponibilité des nouvelles fonctionnalités ou tout simplement, le Time to market. Cet enjeu est majeur, car il permet de garantir un retour sur investissement rapide ou d’attaquer un nouveau marché en premier. Mais ce besoin vient en contradiction avec le besoin de faire des logiciels de qualité.

Time to market: mesure de capacité d’une entreprise à mettre en oeuvre des innovations.

Comment arrimer ces deux besoins pour être capable de développer/tester et déployer rapidement et surtout avec confiance. Voici une piste de solution …

L’agilité

Un des premiers changements majeurs à mettre en place est de remplacer les anciens modèles de projet Waterfall où chaque équipe était responsable de son étape, une à la suite de l’autre. L’idée est de briser les silos et faire du travail en parallèle. Toutes les spécialités sont maintenant réunies.

L’agilité apporte avec elle les petites équipes multidisciplinaires autonomes capables de développer et tester les fonctionnalités à ajouter au produit. L’agilité n’instaure pas qu’une structure d’équipe, l’agilité amène une culture de recherche de la valeur ajoutée pour le client. Les équipes développent l’instinct et les réflexes pour mettre toutes les énergies sur ce qui a de la valeur pour le client.

Les fonctionnalités sont séparées en plus petites tâches pour commencer à livrer rapidement au client des petites parties de la fonctionnalité. Le client obtient donc rapidement un retour sur investissement.

Les équipes apprennent également à identifier les gaspillages (surproduction, surqualité, temps d’attente ou sous-utilisation) et à trouver des solutions pour les éliminer.

Les éléments dont vous devriez tenir compte pendant l’instauration de l’agilité dans votre équipe:

1. Ne pas minimiser le changement

Le changement à l’agilité est un changement majeur pour les organisations. Il amène énormément d’incertitude chez plusieurs personnes habituées aux anciennes méthodes. Il touche également les rôles et responsabilités des individus. Les départements de RH et la haute direction doivent être impliqués et en appui au changement.

2. Mettre l’effort sur les individus

Concentrez-vous sur les individus. Ils vous diront de quoi ils ont peur, de quelles formations ils ont besoin, etc… Avant, pendant et après le changement, gardez à l’esprit que vous devez rester à l’écoute de votre équipe et tenter de répondre à leurs besoins.

3. Formation, Formation et Formation

Préparez de la formation pour vos équipes. Restez à l’écoute de leurs besoins et de leurs demandes pour ajuster vos formations. Même si l’agilité peut sembler simple au premier regard, prenez le temps de bien décrire comment elle sera déployée dans votre organisation. Cette étape est essentielle pour garantir une meilleure adhésion au changement, mais également pour s’assurer que tout le monde travaillera dans la même direction.

DevOps

Si vous instaurez un environnement de travail agile, mais que vous n’incluez pas la portion DevOps, votre changement ne sera qu’en partie bénéfique.

Vous vous rendrez compte assez rapidement que vos développeurs vivront une frustration constante, car leurs principaux freins de productivité viendront de l’environnement de développement, de tests et de déploiement.

« Le DevOps est une philosophie qui vise à assurer une cohérence entre le développement et le déploiement des applications ».

Donc, pendant que vous planifiez votre changement de culture vers l’agilité, travaillez en parallèle vos processus de développement pour les automatiser au maximum. En particulier vos tests et la mise en “staging”.

Vous devez mettre en place une CI (continuous integration)/CD (continuous deployment) efficace pour supporter l’agilité qui arrivera bientôt dans votre organisation.

Ne sous-estimez pas cette étape cruciale. Elle est la pierre angulaire pour supporter votre processus agile. Sinon, tout votre processus sera ralenti par les étapes de compilations, de tests et de déploiements manuels.

Vous devriez couvrir l’ensemble des aspects suivants:

1. Gestion du code source

La gestion du code source avec un outil permettant le travail collaboratif qui est un essentiel maintenant. Git et Mercurial sont certainement les plus utilisés au moment d’écrire ces lignes. Des outils tels que GitLab, GitHub ou Bitbucket vous permettent d’utiliser Git ou Mercurial.

2. Compilation/Tests unitaires RAPIDE

Les temps de compilation et d’exécution des tests unitaires doivent être rapides. Cet enjeu peut devenir critique si votre base de code utilise un langage de programmation qui nécessite une longue compilation tel que le C++.

Plus votre équipe est grande, plus ce point est important. Avec plus de 100 développeurs, visez un temps de compilation et d’exécution des tests inférieur à 5 minutes. Sinon, vous serez toujours en attente des résultats des “merges”.

Pensez à mettre des métriques pour suivre l’évolution de votre temps de compilation, de votre couverture de tests et du temps d’exécution des tests. Lorsqu’un commis vient allonger le temps d’exécution ou brise des tests, vous pourrez rapidement l’identifier et corriger le problème.

3. Revue de code

Utilisez des outils permettant de faciliter les revues de codes entre programmeurs. Cette étape met en place un premier filet de sécurité contre les erreurs. Portez-y une attention particulière pour en tirer le maximum de bénéfices. Les Pull Requests de GitHub et les Merge Requests de GitLab sont d’excellents exemples d’outils permettant une bonne révision du code.

4. Déploiement

Pour faciliter vos déploiements, pensez à utiliser les outils de conteneurs tels que Docker et Kubernetes ou des outils d’infrastructure gérés par le code tel que Terraform. Ces outils permettent de simplifier et de standardiser le déploiement de vos applications.

La pièce manquante

Après tout ça, vous vous dites probablement que tout est en place pour garantir un succès, mais il reste quand même une dernière chose qu’il faut considérer. L’architecture de votre application. Si celle-ci est déficiente, vous aurez beaucoup de difficultés à mettre en place un bon processus de développement logiciel.

Une architecture logicielle qui devient de plus en plus populaire est l’architecture en microservices. Vous pouvez trouver un excellent livre qui traite du sujet gratuitement ici.

Les microservices sont un style d’architecture logicielle à partir duquel un ensemble complexe d’applications est décomposé en plusieurs processus indépendants et faiblement couplés.

En résumé, cette architecture vise à séparer les applications complexes en un ensemble de petits services indépendants et spécialisés communiquant ensemble par un protocole standard (souvent REST-API).

Imaginez la force de cette architecture si en plus vos équipes sont séparées en plusieurs petites équipes agiles travaillant avec des outils de conteneurs tels que Docker ou même en environnement “Serverless”.

Chaque équipe est maître de son ou de ses microservices et responsable de son développement, ses tests et son déploiement. Enfin une méthode de développement qui permet de répondre au besoin le plus important: minimiser le “Time to market”.

comments powered by Disqus