111-560x345

« Ce site est assez simple. Tout ce que vous avez à faire, c'est de réaliser X, Y, Z. Vous semblez très compétent techniquement, donc je pense que vous n'aurez pas besoin de passer beaucoup de temps pour le construire. »

Je reçois des e-mails comme celui-ci de temps en temps. Presque toutes les personnes qui écrivent ces e-mails sont soit non techniques, soit travaillent sur leur premier produit. Au début, quand j'entendais des gens dire des choses comme ça, j'étais toujours très agacé. Qui étaient-ils pour discuter du temps que prend le développement logiciel ? Mais plus tard, j'ai réalisé que même moi, je suis perdu lorsque j'essaie de prédire combien de temps de développement mes propres projets prendront. Si je n'en suis même pas capable moi-même, pourquoi devrais-je être agacé contre ces personnes ?

Ce qui me déprime vraiment, ce n'est pas l'erreur dans leurs estimations. Le problème, c'est qu'ils croient réellement pouvoir faire une estimation correcte. En tant que développeurs, nous constatons souvent que, lorsqu'il s'agit de développement logiciel, une personne extérieure va naturellement estimer des choses complexes comme étant très simples.

Ce n'est pas une excuse pour notre colère. Mais cela soulève une autre question intéressante : pourquoi notre capacité innée à prédire la complexité échoue-t-elle lorsqu'il s'agit de problèmes de programmation ?

Pour répondre à cette question, examinons comment notre cerveau estime les choses. Certaines choses sont faciles à estimer correctement, même pour des personnes inexpérimentées, mais d'autres ne le sont pas.

Pensons au fait de regarder quelqu'un jouer de la guitare. Même si vous n'avez jamais joué de la guitare, après avoir regardé une interprétation à la guitare de « Mary avait un petit agneau », vous pouvez à peu près deviner que c'est simple et qu'une personne n'a pas besoin de compétences très avancées pour la jouer. De même, après avoir regardé quelqu'un jouer le Canon de Pachelbel en ré majeur, vous pouvez facilement en déduire que c'est complexe et que cela nécessite une longue pratique pour être joué.

Pourquoi pouvons-nous estimer rapidement et avec précision la complexité de ces deux morceaux ? Cela est lié aux méthodes que nous utilisons pour juger si quelque chose est simple ou complexe. Notre cerveau dispose de certains schémas tout faits pour accomplir ces tâches, et le premier est basé sur la vitesse. Dans ce cas, le cerveau identifie ce qui est joué par seconde. En fonction de la quantité jouée par seconde, nous pouvons facilement avoir un jugement intuitif de la complexité du morceau. Parce que jouer une chanson à la guitare est un processus physique, une activité sensorielle, notre cerveau peut facilement en déduire la vitesse, puis la convertir en complexité.

Nous avons aussi une autre base innée pour l'estimation : le volume. Pensez à comparer une tente avec un immeuble d'habitation. Même si une personne n'a jamais étudié l'architecture, elle peut vous dire que concevoir et construire une tente est généralement plus simple que concevoir et construire un immeuble d'habitation. Pourquoi ? Parce que nous utilisons instinctivement le volume physique comme indicateur de la complexité d'une chose.

Bien sûr, ces deux types d'analyse logique ne sont pas toujours efficaces à 100 %. Mais dans la plupart des cas, c'est ainsi que les gens procèdent, et avec beaucoup de succès. Dans la plupart des situations, lorsque nous évaluons des processus physiques, notre cerveau établit des associations efficaces avec des objets physiques, sans avoir besoin de s'appuyer sur une expérience préalable.

Parlons maintenant des logiciels. Lorsqu'une personne non technique tente d'estimer le temps de développement d'un logiciel, deux indicateurs intuitifs très élémentaires l'aident : la complexité mesurée par le volume et la complexité mesurée par la vitesse. Mais elle ne se rend pas compte que le logiciel n'est pas ce qu'elle imagine. Le logiciel n'est fondamentalement pas une substance tangible. Il n'a ni volume ni vitesse. Ses minuscules composants peuvent parfois traverser furtivement l'écran de l'ordinateur. Pour cette raison, lorsqu'il s'agit de développer une application web (ou tout autre type de logiciel), nos sens intuitifs élémentaires sont pris en défaut.

Le premier point, la vitesse, est de toute évidence totalement inutilisable par un profane pour évaluer un logiciel. Aussi, naturellement, on a tendance à utiliser l'indicateur de volume pour évaluer. Que ce soit d'après le nombre de pages du document de spécification, ou d'après le nombre de cas d'utilisation ou de fonctionnalités du logiciel.

Parfois, cette méthode d'évaluation fonctionne vraiment ! Face à un site web statique sans exigences de conception particulières, une personne extérieure peut facilement estimer le temps de développement de cette manière. Mais généralement, pour le développement logiciel, le volume ne peut pas réellement et efficacement refléter la complexité.

Malheureusement, la seule façon efficace d'estimer la complexité d'un logiciel repose sur l'expérience. Et elle ne fonctionne même pas toujours bien. En tant que programmeur, je sais que, d'après des fonctionnalités similaires que j'ai développées auparavant, je peux estimer combien de temps de développement chacune des fonctionnalités actuelles prendra. J'additionne ensuite le temps total, ce qui me donne une estimation approximative de la durée totale du projet. Cependant, en réalité, chaque projet rencontre deux ou trois goulots d'étranglement pendant le développement. Ces goulots d'étranglement peuvent absorber sans ménagement d'énormes quantités de temps d'un programmeur, et vous ne pouvez pas les prévoir avant de les rencontrer. Ils peuvent bloquer tout le projet, le retardant de semaines, voire de mois.

Ce sont des choses que les personnes inexpérimentées ne comprendront pas lorsqu'elles estimeront la complexité. Elles ne comprennent pas pourquoi les méthodes qui fonctionnent bien pour d'autres choses ne fonctionnent pas lorsqu'elles sont appliquées au développement logiciel. Alors, la prochaine fois que vous entendez quelqu'un dire « Je pense que vous pouvez le développer en quelques jours », peu importe qui le dit, ne vous énervez pas. Respirez profondément, montrez-leur l'adresse de cet article, et retournez à ce que vous étiez en train de faire.

[Texte original anglais :Je suis sûr que cela ne vous prendra que quelques jours à coder ]