Amener les non-programmeurs à comprendre le processus de développement


66

Lors du démarrage d'un projet pour une société qui n'est pas principalement une société de programmation, l'une des attentes est qu'il y ait un produit fini à la fin, exempt de tout bogue et faisant tout ce qui est nécessaire immédiatement. Cependant, c'est rarement le cas.

Quels sont certains moyens de gérer les attentes et d'expliquer aux non-programmeurs en quoi le développement logiciel diffère des autres types de développement de produits?


Parfois, vous êtes "en contrôle" et vos collègues non techniques sont intelligents à leur manière, pas ignorants, humbles et curieux. De l'autre côté du spectre (comme dans mon cas), vous pourriez travailler avec quelqu'un qui souhaite que la magie soit faite en une heure et vous vous retrouvez en train d'expliquer pourquoi une entreprise doit respecter les développeurs. Inutile de dire que je suis à la recherche d'un emploi. Dans quel environnement êtes-vous, car la réponse pourrait être "Fuyez, fuyez!".
Job

Réponses:


34

Presque tout le monde avec un ordinateur a rencontré le concept de "bugs" ces jours-ci, alors vous pouvez commencer par là. "Quelle est la manière la plus agaçante qu'une application ait jamais échoué? Multipliez ce chiffre par dix et vous aurez l'expérience de nos utilisateurs si nous ne consacrons pas suffisamment de ressources au test et à la maintenance."

Et ne sous-estimez pas l'intérêt d'établir de bonnes relations de travail avec les non-programmeurs. Si vous pouvez établir que votre jugement est digne de confiance, ils vous prendront au sérieux lorsque vous sonnerez l'alarme que X échouera de manière spectaculaire si vous ne le faites pas, même s'ils ne comprennent pas parfaitement votre raisonnement.


+1 pour le signaler. Rien n'est plus dangereux pour un projet si les techniciens et les non-techniciens ont peu ou pas de respect pour eux.
Mhr

28

Une approche que j'ai trouvée réussie est la suivante:

Nous savons tous qu'un ordinateur ne fait que et exactement ce qu'on lui dit de faire.

La programmation est la façon dont nous disons maintenant à un ordinateur ce que nous voulons faire par la suite .

Cela signifie que votre comportement actuel est dû aux intentions combinées de tous les auteurs du code exécuté sur votre ordinateur. Lorsque vous considérez la complexité du système d'exploitation, des pilotes, de l'environnement de programmation, des bibliothèques, etc., il est évident que dans la plupart des systèmes, il doit y avoir plus de 20 000 personnes impliquées et qu'il pourrait y en avoir plus de 100 000.

Le code écrit par chaque personne reflète sa propre compréhension, sa motivation, son intention et ses capacités. Étant donné que le fonctionnement sans faille du système nécessite que tout le code écrit par ces 20 000 personnes interagisse sans erreur - que tout le code doit s'accorder sur le sens et l'interprétation du comportement requis, le fait étonnant n'est pas que nous ayons des bugs, mais que nous en avons si peu.


4
+1 pour "dire maintenant ce que nous voulons plus tard". Également avec l'idée que la plupart des logiciels font de nouvelles choses.

12

OMI, j'ai constaté que la transparence offerte par les processus agiles (Scrum, Crystal, etc.) contribue largement à montrer comment le développement fonctionne pour le joueur moyen.


1
C'est une excellente stratégie si vous effectuez 100% du développement. Si une partie du développement est gérée par une autre partie, vous devrez peut-être faire un peu de compromis.
JBRWilkinson

3

L'explication par métaphore est une abstraction qui fuit, mais voici quelques idées qui fonctionnent souvent pour moi:

Notez qu'aucune de ces explications n'excuse un travail bâclé.

Pensez à un programme informatique en tant que machine, où chaque variable est une pièce en mouvement. Cela fait même un programme trivial une machine composée de centaines de pièces mobiles.

Lorsque cela échoue, je retombe sur le fait que s'il est mathématiquement possible de prouver qu'un programme ne comporte aucune erreur, il prend énormément de temps et ne vaudra pas la peine.

Enfin, je demande si Intel et Microsoft sont incapables d'éviter les bogues, comment s'attendent-ils de nous?


2
Très bon point à propos de Microsoft
Casebash

1
Il n'est pas impossible de prouver qu'un programme fait ceci ou cela. Il est cependant impossible pour un ordinateur de dire si un programme donné va éventuellement arrêter de faire ceci ou cela.

1
-1 @ ThorbjørnRavnAndersen est correct. Ce post est faux. Il est très possible de prouver que les programmes sont corrects (jusqu’à une certaine notion d’exactitude), certains d’entre nous le font tout le temps. Je pense que l’affiche ne comprend pas la conséquence épistémologique du problème qui nous a stoppé et confond ainsi les non-programmeurs avec des affirmations fausses.
Philip JF

2

J'ai répondu à une question similaire de manière plus détaillée , mais l'essentiel est: "La programmation, c'est comme construire une usine ou une chaîne de montage."


C'est triste. Je crois que la programmation est un art. Vous essayez de créer quelque chose qui a beaucoup de fonctionnalités, en vous basant sur de minuscules commandes, méthodes et classes simples. La plupart du temps, vous ne travaillez pas avec un marteau - vous essayez de façonner les choses avec soin comme vous le souhaitez ...
mhr

@ mri - Quiconque a réellement construit une usine vous dira que peu importe la qualité de la conception de la machinerie d'usine, certaines pièces devront être ajustées à la main. Nos outils peuvent simplifier l'ajustement manuel, mais nous (la plupart d'entre nous) ne «fabriquons» plus de code d'assemblage pour tirer parti des cycles et des limites de la mémoire. Tout comme le beau mobilier "artisanal" de style artisanal, il a bénéficié de l'automatisation de son époque.
DaveE

2

La façon traditionnelle de le définir est le triangle de la gestion de projet: les trois critères concurrents de portée, de coût et de calendrier; généralement exprimé comme "pas cher, rapide, bon - choisissez deux".

À la fin d'un processus de conception, de développement et de déploiement, il est parfaitement raisonnable de s'attendre à ce qu'un produit soit relativement exempt de défauts de conception et fonctionne avec une fonctionnalité spécifiée. La même attente est totalement déraisonnable en ce qui concerne un projet, un processus ou une profession.

Ce qui est basé sur les sciences, qu’il soit physique ou physique, ne passe pas par un processus d’exploration, forme des conceptualisations inexactes et imprécises, suit des tactiques non optimales (ou tout simplement fausses), découvre ce qui fonctionne par essais et erreurs, et répète processus maintes et maintes fois jusqu'à ce que les ressources soient épuisées ou qu'un niveau de performance suffisant soit atteint?

Aucun processus n'est jamais exempt de défauts, même s'il peut atteindre de manière asymptotique des niveaux de qualité supérieurs.

C'est le cas de la profession médicale où les tactiques impliquent souvent des conjectures et des protocoles, et une grande partie de l'activité consiste essentiellement à déboguer une machine essentiellement wetware. C'est le cas du génie civil et de l'architecture où les applications de nouveaux matériaux d'ingénierie doivent être validées sur le terrain et peuvent échouer brusquement après des années de service malgré le strict respect des normes. C’est le cas du secteur automobile où l’âge et les modifications des conditions d’exploitation affectent généralement les performances jusqu’au point de défaillance, sans que les services d’ingénierie ou de réparation appliqués n’aient fait défaut. Le développement de logiciels ne diffère pas fondamentalement de ces professions à cet égard, il se concentre principalement sur la conception de nouvelles machines utiles.


Excellent point avec la comparaison automobile, c’est un excellent moyen de souligner l’entretien continu d’une application déployée.
Kingsolmn

0

Si vous connaissez le développement de logiciels hi-rel, tels que le contrôle de réacteurs nucléaires, les communications dans l'espace lointain ou les dispositifs d'implant médical (etc.), expliquez comment le coût et la structure des délais de livraison pour ce niveau de gestion de projet et d'assurance qualité peuvent être des grandeurs supérieures à ce que les entreprises typiques peuvent se permettre pour leurs projets de logiciels.


0

Vous pouvez le comparer à quelque chose qu'ils peuvent voir et, si possible, utiliser tous les jours.

Par exemple, l'automobile. Les voitures ont démarré comme des appareils moins raffinés et moins fiables qu'aujourd'hui. Les voitures sont fabriquées depuis plus de 100 ans, mais les logiciels en sont probablement environ la moitié. Les voitures sont disponibles avec une personnalisation importante, certaines incluses dans le prix (comme le choix de la couleur), d'autres telles que la taille du moteur, le type de transmission, la roue / pneu, le niveau de finition sont des facteurs de coût importants.

Il existe de nombreux inducteurs de fonctionnalités, de qualité et de coûts pour les voitures et les logiciels. Vous pourrez ensuite discuter de la manière dont la technologie logicielle, la disponibilité de l’expertise, voire même le lieu où elle est construite, feront une grande différence. Les cycles de développement appropriés (par exemple, les modèles annuels avec de petites modifications, les modifications de la carrosserie / du moteur / de la plateforme environ tous les trois ans) sont dictés par la combinaison des besoins du client et d'un processus de conception complexe. Certains produits commencent modestement et semblent défoncés (pensez à la Honda Accord), mais s'améliorent chaque année jusqu'à ce qu'ils soient mieux cotés.

Les voitures subissent des rappels (souvent bien plus coûteux que les mises à niveau logicielles) et des améliorations incrémentielles sous la forme de modifications à apporter à leurs listes de pièces (pensez aux corrections de bugs) et nécessitent souvent une assistance à long terme (pensez à la compatibilité en amont / en aval). Une grande partie du coût de votre voiture vient après votre retour à la maison. Une grande partie du coût des logiciels intervient après la version initiale du produit lorsque vous mettez à jour et mettez à niveau les clients.

Dans certains cas, vous pouvez faire référence à des produits bien connus, notamment des logiciels ou d’autres produits logiciels. Par exemple, les téléphones ont un cycle de publication, des mises à jour et des méthodes pour ajouter des fonctionnalités après la vente initiale afin de générer davantage de revenus. Les téléphones sont une excellente illustration de la compatibilité ascendante / descendante. Trop, et les gens ne laisseront pas l'ancien pour en acheter un nouveau. Trop peu, et les clients ont désespérément besoin d’un téléphone qu’ils ne détesteront pas avant la fin du contrat.

Des produits tels que Windows, Microsoft Office, les navigateurs Web et les pages Web sont tous des logiciels pouvant être utilisés lors de discussions. Ils ont été mis à jour tous les ans ou tous les trois ans, mais peuvent avoir des mises à jour automatiques plus souvent. Ils ont des bugs et des failles de sécurité qui affectent les clients à des degrés divers, mais font partie du paysage malgré nos meilleurs efforts. Les clients peuvent obtenir des correctifs gratuitement, mais paient généralement pour des améliorations, souvent sous forme de bundle, parfois sous forme de module individuel ou via une clé de licence.

Les leaders de l'industrie tels que Microsoft, Apple, Google et Amazon fournissent tous des clients relativement peu coûteux aux utilisateurs. Mais ils ont d'énormes dépenses qui ont permis à ces produits. Leur expérience montre que les logiciels sont coûteux, mais précieux et rentables. Ils font souvent des compromis entre qualité, avoir toutes les fonctionnalités souhaitées et pénétrer les marchés au bon moment. Tous les produits qu’ils fabriquent n’ont pas tous un succès et ils font parfois des chiens des gagnants en renommant leurs activités, en améliorant leur marketing et leurs ventes, ou en réduisant leurs pertes et en utilisant ce qu’ils ont appris dans les produits ultérieurs.


0

Essayez peut-être de les guider, individuellement ou en petits groupes, idéalement, en utilisant des exemples de logiciels que vous devez développer. En décrivant les cas d'utilisation, identifiez les points dans le cas où différentes choses pourraient se produire (cas inattendus mais non déraisonnables). Commencez à les énumérer, demandez des éclaircissements et illustrez toutes les décisions et les orientations à prendre ou à adopter, ainsi que les compromis à réaliser. Continuez jusqu'à ce qu'ils soient perplexes et qu'ils ne puissent pas vous donner de réponse. Faites-leur comprendre que ce que vous faites maintenant avec eux est exactement ce que vous faites toute la journée, probablement seul, avec une orientation beaucoup moins claire, à la fois pour décider du cours et pour écrire le code, pour des centaines ou des milliers de personnes. cas d'utilisation qui peuvent ou non être présentés par quiconque. Et quand il y a Dans le cas où vous n’aviez pas pensé à vous-même, vous ne pouvez garantir le fonctionnement du programme. Peut-être qu'il fait la "bonne" chose, peut-être noter. Et c'est ce qu'est un bug. Et c'est pourquoi écrire un logiciel prend du temps. Moins vous avez de temps, moins de cas vous avez eu la possibilité de prendre en compte et d'accommoder, et plus le programme risque de ne pas faire ce qu'il convient de faire dans des circonstances inconnues.


0

Coût et temps.

Temps

Définissez les attentes quant à la livraison de X à Y le temps nécessaire. Il n'aura rien de plus, rien de moins. Puis dites-leur ce que la prochaine version aura dans quelle heure. Au début, ils pourraient être surpris de croire que la construction de X prend Y un certain temps - c’est là que vous expliquez le temps et les complexités de la création d’un logiciel. S'ils ne sont pas surpris, soit vous estimez très peu de temps, soit ils savaient mieux que ce que vous pensez de la construction de logiciels.

Coût

Ceci est extrait du livre Code Compete de Steve McConnel (citant de mémoire, alors excusez-moi si je ne pouvais pas le transmettre avec le même effet) - Il est facile pour les clients de demander de nouvelles fonctionnalités. En tant que chef de produit, vous ne devez pas dire à ce que le client demande. Vous devez estimer les efforts et les coûts nécessaires à la création de cette nouvelle fonctionnalité. Ils comprendront lentement que la nouvelle fonctionnalité ne vaut pas vraiment l'argent / temps ou peut-être qu'ils n'en ont même pas besoin. Je ne suggère pas que vous utilisiez cette arme pour leur faire peur, mais utilisez-la honnêtement et cela pourrait aider à rentrer chez vous.


-2

Les métaphores sont des abstractions qui fuient, mais ce sont de petits pas qui vous rapprochent de la compréhension.

Mon préféré est que le logiciel de construction soit souvent un processus similaire à l’architecture d’une maison. Cependant, il est plus précis de penser à cela comme à la création d'un système qui imprime un plan détaillé d'architecture personnalisée en fonction de certains paramètres et en crée un différent pour chacun de ses utilisateurs. En geek talk, soyez méta-architectes.


-2

J'ai découvert que cela pourrait en fait aider lorsque vous leur montrez ce que signifie écrire du code. Montrez aux parties prenantes la base de code avec laquelle vous travaillez. Même si vous avez choisi de bons noms de variables et de méthodes, la plupart des gens penseront que vous utilisez une sorte de magie noire. Peut-être comprendront-ils pourquoi vous avez besoin de plus que "quelques jours" pour implémenter une nouvelle fonctionnalité de leur logiciel.


Ceci est une mauvaise idée OMI. C'est comme donner une vadrouille au client pour lui montrer à quel point il est difficile de nettoyer un sol humide.
Sundeep
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.