Connect with us

Leaders d’opinion

Mythes de productivité en ingénierie logicielle

mm

Au cours de plus de deux décennies, le concept de productivité a évolué et s’est étendu dans toutes sortes de directions au sein de l’ingénierie logicielle, souvent avec des résultats confus ou contradictoires. Au début de ma carrière dans ce domaine, j’avais tort de penser que plus d’heures de travail, plus de lignes de code et plus d'”activité” signifiaient automatiquement de meilleurs résultats. Mais cette vision de la productivité, du développeur au chef d’équipe et au manager d’ingénierie, ne semblait fonctionner que contre les objectifs qu’elle était censée atteindre, nuisant non seulement à la qualité du code mais également ayant un impact grave sur le bien-être des développeurs.

Dans cet article, je partagerai certaines des idées fausses que j’ai rencontrées et démonterai les mythes les plus persistants entourant la productivité dans l’industrie technologique. En tirant parti d’histoires personnelles, d’expériences d’équipe pratiques et d’observations étayées par la recherche, je soutiendrai que la véritable productivité a moins à voir avec des sprints frénétiques et des heures supplémentaires et plus à voir avec une concentration ciblée, des routines de travail saines et une culture organisationnelle équilibrée. J’espère que, en luttant contre ces illusions, nous pouvons commencer à repenser la gestion des projets logiciels et la façon de traiter les personnes qui les créent.

L’illusion des heures supplémentaires

L’un des premiers mythes de productivité que j’ai découverts est le fait que travailler des heures supplémentaires prolongées apporte nécessairement de meilleurs résultats. Au début de ma carrière, j’avais pris en charge une grande mise à niveau du système de paiement d’une organisation, avec très peu de temps. En raison de cette échéance proche, me sentant poussé contre le mur, j’ai convaincu mon équipe de travailler tard le soir et les week-ends pendant près de deux mois.

Mais puis les fissures ont commencé à apparaître six mois plus tard. Des bogues subtils, probablement introduits lors des sessions de codage nocturnes épuisantes de l’équipe, ont commencé à apparaître en production. Ces problèmes, une fois résolus, ont nécessité du temps et des ressources supplémentaires, mais la confiance du client a également été dégradée. Pire encore, cet effort d’heures supplémentaires héroïque n’a été possible que parce que deux membres clés de l’équipe ont brûlé et quitté leur emploi après avoir invoqué l’épuisement professionnel et le mécontentement. Alors, il est devenu clair que le succès à court terme pour respecter les délais était venu à un grand coût à long terme. Ainsi, le mythe selon lequel les heures garantissent la productivité s’est avéré désastreux.

Qualité de temps plutôt que quantité de temps

La créativité et la résolution de problèmes, deux compétences essentielles en ingénierie logicielle moderne, sont fortement réduites par la fatigue. En utilisant des outils de suivi du temps tels que RescueTime et Toggl au fil des ans pour étudier les modèles de travail de mes équipes, j’ai obtenu des résultats révélateurs : notre code de la plus haute qualité est produit lorsque les développeurs bénéficient de blocs réguliers de 4 à 5 heures de concentration ininterrompue. Lorsque les individus s’engagent dans des journées de 10 ou 12 heures, le taux d’erreur augmente souvent, et les reprises peuvent consommer encore plus d’heures à la fin. En adoptant des horaires plus mesurés, nous avons constaté une diminution marquée des bogues, une augmentation de la satisfaction de l’équipe et, finalement, des délais de livraison plus prévisibles.

La fausse idée de la concentration

Un autre mythe profondément ancré est que les développeurs doivent être “branchés” et taper à chaque minute pour être considérés comme productifs. Cette mécompréhension peut amener les entreprises à mettre en œuvre des systèmes de surveillance d’activité draconiens, obsédés par les frappes au clavier ou le temps d’écran. J’ai vu des organisations encourager une culture dans laquelle apparaître “en ligne” pendant le maximum d’heures possible est considéré comme un signe d’engagement. Cette perception passe complètement à côté des activités intangibles essentielles qui font partie du développement logiciel, comme la planification, la discussion, la recherche et la conception conceptuelle.

Avancées loin du clavier

L’une des démonstrations les plus frappantes de ceci est survenue l’année dernière, lorsque mon équipe était en pleine bataille avec un problème d’architecture de microservices complexes. Pendant deux semaines, nous avons tapé du code avec frustration, essayant de déboguer un réseau complexe de services. Finalement, nous nous sommes retirés dans notre espace de pause pour une conversation plus informelle. Au cours d’un café, nous avons dessiné une solution sur un tableau blanc qui était radicalement plus simple, éliminant une grande partie de la complexité avec laquelle nous avions lutté. Ces 30 minutes de conversation nous ont sauvés de ce qui aurait certainement été des mois de refactoring douloureux. C’était un rappel puissant que la résolution efficace de problèmes se produit souvent bien en dehors des limites d’un IDE.

Repenser les métriques de productivité

Si les “heures travaillées” et l'”activité” constante sont des métriques erronées, que devrions-nous suivre à la place ? Les mesures traditionnelles de productivité en ingénierie logicielle se concentrent généralement sur les sorties superficielles : lignes de code, nombre de validations, ou de tickets fermés. Même si celles-ci peuvent fournir certains aperçus de haut niveau, elles sont sujettes à une utilisation abusive. Les développeurs peuvent valider moins de modifications logiques ou peuvent opter pour des moyens plus verbeux pour atteindre un objectif de lignes de code. En général, ces mesures ne sont pas très efficaces pour suivre la progression du développement, car de nombreuses mesures sont contraires à la minimisation des problèmes de maintenance.

Une approche plus holistique

Pendant de nombreuses années, mes équipes et moi avons essayé de trouver des mesures significatives de production qui nous donneraient l’assurance que nos efforts se traduiraient par de véritables gains.

  1. Temps de mise sur le marché pour les nouvelles fonctionnalités
    À quelle vitesse pouvons-nous livrer une fonctionnalité qui est vraiment utile aux utilisateurs réels ? C’est une façon plus fiable de mesurer le débit que les modifications de code brutes, car cela nous amène à considérer si les fonctionnalités que nous livrons sont vraiment utiles.
  2. Nombre d’incidents de production
    Un faible taux d’incidents implique une meilleure qualité de code, des tests plus approfondis et des décisions architecturales saines. Des incidents de production fréquents signalent des dettes cachées ou des raccourcis dans le développement.
  3. Notes de maintenabilité de code
    Nous utilisons des outils automatisés comme SonarQube pour détecter la duplication, la complexité et les vulnérabilités potentielles. Des scores stables ou améliorés au fil du temps indiquent un code plus sain, avec une culture respectueuse de la qualité à long terme.
  4. Partage de connaissances de l’équipe
    Au lieu de se concentrer uniquement sur la production individuelle, nous vérifions combien de connaissances circulent. Les paires prennent-elles des tâches ensemble, effectuent-elles des revues de code approfondies et documentent-elles les décisions architecturales majeures ? Une équipe bien informée peut prendre collectivement des problèmes.
  5. Évaluations de satisfaction client
    En fin de compte, les logiciels sont pour les utilisateurs. Les commentaires positifs, les volumes de tickets de support faibles et les taux d’adoption d’utilisateurs forts peuvent être d’excellents indicateurs de véritable productivité.

En nous concentrant sur ces mesures plus larges, nous encourageons non seulement de meilleures décisions sur la façon d’écrire du code, mais nous nous assurons également que nos priorités restent alignées sur les besoins des utilisateurs et les solutions maintenables.

Le pouvoir de la paresse stratégique

Je pensais autrefois que les grands développeurs étaient ceux qui écrivaient des milliers et des milliers de lignes de code chaque jour. Avec le temps, j’ai découvert que cela peut être le contraire. En fait, les meilleurs ingénieurs pratiquent ce que j’appelle la “paresse stratégique”. Plutôt que de plonger dans une solution élaborée qui prend du temps, ils prennent le temps de créer ou de trouver une alternative plus élégante – qui nécessite moins de code, moins de dépendances et moins de maintenance future.

Je me souviens d’un projet où un développeur junior a passé trois jours à travailler sur un script de traitement de données – pesant près de 500 lignes de code. C’était juste maladroit, mais cela fonctionnait. En revenant et en revisitant plus tard cet après-midi, un développeur principal de mon équipe a pu montrer une solution serrée, de 50 lignes, plus propre, et potentiellement plus performante.

Outils et techniques pour une véritable productivité

Construire un environnement de véritable productivité – plutôt que de simple “travail acharné” – nécessite à la fois les bons outils et la bonne mentalité organisationnelle. Au fil des ans, j’ai expérimenté divers cadres et découvert une poignée de stratégies fiables :

  1. Technique Pomodoro modifiée
    Les segments traditionnels de Pomodoro de 25 minutes peuvent sembler trop courts pour les tâches de programmation approfondies. Mes équipes utilisent souvent des blocs de concentration de 45 minutes suivis de pauses de 15 minutes. Ce rythme équilibre des périodes prolongées d’attention continue avec le temps de repos requis.
  2. Hybride Kanban/Scrum
    Nous combinons le flux de travail visuel de Kanban avec des cycles itératifs de Scrum. En utilisant des outils tels que Trello et Jira, nous limitons les éléments en cours de réalisation et planifions les tâches en sprints. Cela empêche la surcharge de commutation de contexte et nous garde concentrés sur la fin des tâches avant d’en commencer de nouvelles.
  3. Suivi du temps et analyse des résultats
    La consignation des heures avec des outils tels que Toggl et RescueTime fournissent des informations sur les heures de productivité naturelles d’un développeur. Équipés de ces informations, les tâches critiques pour chaque personne sont planifiées pendant leurs heures les plus productives et non confinées à des créneaux rigides de neuf à dix-sept heures.
  4. Examens de code et programmation par paires
    Une culture collaborative tend à créer de meilleurs résultats que le comportement ermite. Nous nous donnons souvent des examens de code, nous nous associons de temps en temps, ce qui nous aide à détecter les problèmes plus tôt, à répartir les connaissances et à maintenir la cohérence de notre base de code.
  5. Intégration continue et tests
    Les tests automatisés et les pipelines d’intégration continue protègent contre les vérifications hâtives et négligentes qui peuvent dérailler un projet entier. Les tests correctement configurés signalent rapidement les régressions et encouragent les changements réfléchis et incrémentiels.

Construire une culture d’ingénierie saine

Peut-être que le mythe le plus préjudiciable de tous est que le stress et la pression conduisent automatiquement à de meilleures performances. Certains dirigeants insistent encore sur le fait que les développeurs excellent sous des délais serrés, des sprints constants et des versions à haute tension. Selon mon expérience, même si un délai serré peut créer un élan d’effort à court terme, le stress chronique conduit finalement à des erreurs, à des problèmes de burn-out et à des problèmes de moral qui peuvent retarder un projet encore plus.

Sécurité psychologique et attentes durables

J’ai vu de meilleurs résultats lorsque la sécurité psychologique est assurée et que les développeurs se sentent à l’aise pour exprimer leurs préoccupations, proposer une autre solution et déclarer leurs erreurs tôt. Nous promouvons cette culture en ayant des rétrospectives régulières, qui n’accusent personne mais explorent comment nos processus peuvent être améliorés. Nous établissons également des attentes réalistes en termes d’heures de travail, permettant à nos membres d’équipe de prendre des pauses et des vacances sans culpabilité. C’est contre-intuitif, mais les équipes bien reposées et appréciées écrivent constamment du code de meilleure qualité que les équipes sous pression constante.

Journées sans réunions et blocs de concentration

Ce qui a fonctionné avec l’une de mes équipes précédentes était l’introduction des “mercredis sans réunions”. Les développeurs ont passé la journée entière à coder, à rechercher ou à tester sans interruptions. La productivité a augmenté ces mercredis, et tout le monde dans l’équipe a aimé ce bloc de temps calme. Nous avons contrebalancé cela avec un calendrier de réunions essentielles les autres jours, en les gardant courtes et au point pour ne pas nous laisser prendre dans une accumulation de discussions prolongées.

Leçons tirées d’études de cas du monde réel

Il existe de nombreux exemples dans l’industrie technologique plus large qui illustrent comment l’adoption d’un modèle équilibré et axé sur la qualité conduit à de meilleurs produits. Des sociétés comme Basecamp (anciennement 37signals) ont parlé publiquement du concept de travail calme et concentré. En limitant les heures de travail et en décourageant les heures supplémentaires, ils ont publié des produits constamment stables comme Basecamp et HEY avec une conception réfléchie. Contrairement aux startups à haute pression, ils itèrent sans se précipiter pour publier des fonctionnalités buggées et brûler la bonne volonté des développeurs sur leur chemin.

J’ai vu une équipe vraiment prendre cela à cœur. Elle a réorganisé tous les horaires autour d’elle, en insérant des pauses et en mettant une limite stricte d’heures. Au cours d’un trimestre, les scores de satisfaction des développeurs ont bondi – mais mieux encore, les tickets de support entrants ont diminué de plusieurs ordres de grandeur.

Repenser le sens de “productivité”

Finalement, mes expériences m’ont amené à définir la productivité en ingénierie logicielle comme : livrer une valeur durable aux utilisateurs finals tout en maintenant un environnement sain pour l’équipe de développement. Il est très facile de se laisser tromper par des sorties pseudo, comme des backlogs de sprint complètement remplis ou une longue liste de messages de validation. Mais au-delà de la surface, un code solide et maintenable nécessite de la clarté mentale, une collaboration stable et une planification réfléchie.

Une équation équilibrée

La formule du succès durable équilibre des objectifs clairs, les bons outils et une culture de soutien qui se soucie à la fois du bien-être du développeur et des besoins de l’utilisateur final. Nous pouvons encadrer cette vision avec trois principes directeurs :

  1. Travail efficace plutôt que travail prolongé : ce qui compte vraiment, c’est ce qui est livré, et non le nombre d’heures que l’équipe a passé devant un écran.
  2. Mesures axées sur la valeur : suivre les métriques en fonction des résultats, tels que la maintenabilité, les taux de défauts ou la satisfaction des utilisateurs.
  3. Amélioration continue de la culture : la véritable productivité vient d’améliorations incrémentales de la façon dont le travail s’écoule, les équipes collaborent et le code est écrit. Les rétrospectives, la planification flexible, le partage des connaissances – c’est ce qui rend le rythme durable possible au fil du temps.

Conclusion

La véritable productivité en ingénierie logicielle n’a rien à voir avec le fait de fourrer plus d’heures dans chaque journée ou d’écrire des lignes de code par centaines pour impressionner un manager. Plutôt, cela signifie créer des solutions robustes, bien testées qui ont une valeur réelle pour les utilisateurs et résistent à l’épreuve du temps. Il est temps de remettre en question ces mythes, comme l’idée que les heures supplémentaires conduisent au succès ou que la programmation constante sans pauses est le plus grand honneur, et de redéfinir ce que la productivité signifie pour notre domaine.

Le voyage personnel m’a enseigné que les “heures travaillées” ou les “tickets fermés” – de telles mesures peuvent être alarmamment trompeuses. La productivité réelle vient des équipes qui sont énergisées, écrivent du code responsable et des fonctionnalités en ligne avec les besoins réels des utilisateurs. Cela nécessite une approche holistique : une planification réfléchie, des métriques significatives, une paresse stratégique et une forte culture d’ingénierie qui valorise la clarté, la collaboration et la créativité. Si nous restons ouverts à l’investigation de nouvelles méthodes, en rejetant les hypothèses qui ont dépassé leur temps, nous pouvons construire une industrie technologique où la productivité favorise non seulement de meilleurs logiciels.

Denis Ermakov, un ingénieur logiciel chez Techflow, est certifié Professional Scrum Master et coach ICF ACC. Ayant commencé sa carrière en travaillant sur le balisage HTML à l'époque de Netscape Navigator, il a géré des équipes de logiciels pendant 15 ans. Déçu par l'industrie, il a maintenant trouvé un nouveau rôle en tant qu'ingénieur logiciel contributeur.