Comment une personne non technique peut-elle apprendre à écrire des spécifications pour de petits projets?
Un de mes amis tente d'externaliser un certain développement sur un projet de statistiques.
En particulier, il fait beaucoup de travail dans Excel et veut externaliser la création de scripts pour faire ce qu'il fait maintenant à la main.
Cependant, mon ami est extrêmement non technique. Il est pauvre à la rédaction de spécifications techniques.
Lorsqu'il écrit une spécification, il est écrit comme vous la décririez de faire quelque chose dans Excel (allez à cette cellule, puis copiez la valeur à cette cellule). Il est également trop verbeux et exemples plusieurs fois. Je ne suis pas sûr s'il décrit correctement les cas d'angle.
Le premier projet qu'il sous-traité était un échec. Je pense qu'il a surdrédé des détails, mais des cas d'angle sous-traités. Cela et/ou le codeur qu'il a embauché ne pensait pas à travers les cas de coin et poser des questions appropriées. Je ne suis pas sûr. Je suis devenu im avec lui et cela m'a pris une demi-heure pour creuser une description qui aurait dû prendre cinq minutes ou moins à décrire. J'ai écrit les scripts pour lui à la fin, mais je n'ai pas examiné pourquoi son processus avec le codeur a échoué.
Il m'a demandé de l'aide. Cependant, je refuse de m'impliquer, car la prise de ses spécifications et la traduire en exigences claires est de 10 fois plus de travail que d'exécuter sur une spécification clairement écrite.
Quelle est la bonne façon pour lui d'apprendre? Y a-t-il des ressources qu'il pourrait utiliser? Y a-t-il des moyens qu'il peut apprendre de petits projets de pratique basse pression avec des codeurs?
La plupart de ses scripts sont axés sur la statistique et le traitement des données. par exemple. Prenez cette colonne et exécutez une moyenne sur elle. Supprimez ces lignes dans ces conditions. Le défi est donc différent de la spécification d'une application Web.
Je vois deux bonnes approches possibles à ce problème. Cependant, il est important de réaliser deux choses. Premièrement, l'ingénierie des exigences est un travail difficile - transformer une idée en une spécification formelle suffisante pour construire un système prend beaucoup de temps, d'effort et de pratique. Deuxièmement, si vous avez de bonnes exigences (dans n'importe quel format, d'une spécification formelle à des histoires d'utilisateurs moins formelles et à des cas d'utilisation), il sera beaucoup plus facile, moins cher et plus rapide de construire le logiciel (et de la construire juste plus tôt).
Si votre ami va être de demander de nombreux outils logiciels à construire ou d'avoir l'intention de les contracter, il devrait apprendre à écrire des exigences logicielles, au moins au niveau des objectifs commerciaux et du concept d'opérations. Les deux principaux livres sur l'ingénierie des exigences logicielles sont de Karl Wiegers - Configuration logicielle (2e édition) et en savoir plus sur les exigences logicielles: problèmes épineux et conseils pratiques . Je m'attendrais à ce que la plupart des gens qu'il embaucherait voudrait une sorte de document décrivant le système, au moins à un niveau d'objectifs commerciaux ou de concept d'opérations, et ces livres entrent dans cela. Ils entrent également dans la manière dont et pourquoi d'autres aspects des exigences en génie des exigences que je soupçonnerais un bon développeur passerait au début du projet.
La deuxième option serait d'embaucher une personne avec une expérience de développement de logiciels et d'ingénierie de configuration (et peut-être même une sorte d'ingénierie de systèmes ou d'architecture système) pour comprendre l'espace de problème et déterminer où des solutions logicielles sont nécessaires et où des solutions logicielles ne seraient pas Bénéficiaire, écrivez les documents et peut-être même surveiller ou effectuer l'effort de développement. Toutefois, cela serait probablement plus coûteux et constituerait un recrutement de logiciels à temps plein pendant une période prolongée pour développer non seulement le système demandé, mais également les exigences et l'architecture nécessaires.
Honnêtement, je ne pense pas ce que votre ami ressent est que cela est rare pour quelqu'un qui ne comprend pas le processus de développement logiciel. Je ne pense pas non plus que le blâme se trouve entièrement sur lui non plus. Si le premier projet logiciel n'avait pas de bonnes exigences, le (s) développeur (s) qu'il était externalisé devrait avoir clarifié, raffiné et documenté les exigences. Franchement, je ne suis pas sûr que vous soyez la bonne personne à participer non plus, si vous n'êtes pas disposé à mettre dans le temps ni à l'effort de travailler avec l'utilisateur/client non technique et développez de bonnes spécifications techniques (cette est un rôle clé de toute personne effectuant des exigences en ingénierie dans toute discipline d'ingénierie).
Je pense que la solution optimale est vraiment une combinaison de mes deux options. Je pense que votre ami (et peut-être vous aussi) devrait découvrir ce qui est impliqué dans l'ingénierie des exigences et les avantages qui disposent de solides exigences peuvent apporter à un projet. En tant que développeur de logiciel, vous devez également devenir plus familier avec l'ingénierie des exigences et sur la manière de susciter, de documenter, d'analyser et de gérer les exigences, le cas échéant pour les projets logiciels - c'est vraiment une compétence précieuse pour quiconque travaille dans n'importe quelle partie du cycle de vie du logiciel.
Lorsque j'ai besoin de spécifications d'un client non technique, je leur demande habituellement d'écrire en langage clair, qu'est-ce qu'ils veulent exactement accomplir. Comme dans "l'application devrait faire un à B quand j'appuie C, mais seulement si d". Bonus supplémentaire pour "parce que d signifie que ...".
En fait "Prenez cette colonne et courez la moyenne sur elle." est une étape dans la bonne direction. Une meilleure explication serait "Le tableau contient ceci et que" (si la structure est prédéfinie); "Obtenez une moyenne de x". Fondamentalement, la manière la moins technique possible sans perdre les détails.
En d'autres termes, décrivez l'idée, pas la mise en œuvre.
Ensuite, un programmeur A soin devrait être capable de comprendre la réelle but de ce qu'il a chargé de faire et de choisir ses bonnes mesures lui-même, posant des questions à quelque chose de non-évident.
S'il n'y a personne qui se soucie suffisamment et comprend le processus, le projet échouera dans tous les cas.
Il peut essayer d'utiliser l'approche approche de storyboard .
Demandez-lui écrire une liste de choses ( histoires ) L'application va devoir faire et dans cette liste, élaborer plus loin sur la fonctionnalité de chaque histoire .
Il peut utiliser un outil comme Asana pour éliminer la portée et la fonctionnalité du projet, et même interagir avec son développeur.
La traduire en exigences claires est de 10 fois plus de travail que d'exécuter sur une spécification clairement écrite.
Amen. Cela explique également pourquoi:
le codeur qu'il a embauché ne pensait pas à travers les affaires de coin et poser des questions appropriées.
La compréhension des exigences est la partie la plus difficile (et la plus chère) de la plupart des projets de programmation. Lorsqu'une personne non technique écrit des exigences, il ne documente souvent que le travail qui souhaite remplacer ("Open Excel, cliquez sur Cell B3 ..."). Les meilleurs qu'ils puissent espérer est une duplication exacte de leur difficulté actuelle!
La manière la plus productive que je connaisse travailler autour de cela est d'encourager cette personne à écrire cas d'utilisation ("Utilisez" des comptines avec "lâches"). Au lieu d'écrire des exigences, décrivez comment le système sera utilisé. Cela laisse le développeur de la salle de Wiggle pour suggérer une meilleure solution que ce que l'utilisateur fait maintenant.
On dirait que ce problème est exacerbé par des compétences de communication écrites médiocres de la part de votre ami. Il/elle doit soit mettre le travail dans la communication efficace de leurs idées, soit payer le programmeur de pêcher les informations. L'un ou l'autre processus est douloureux et prend beaucoup de temps, mais le faire vous-même est moins cher que de payer quelqu'un pour le faire avec vous.
En tout état de cause, il s'agit d'une difficulté commune et frustrante dans laquelle les créateurs ont une idée incomplète ou sont incapables de la décrire en moins d'un million de mots. Cette personne devrait essayer de trouver un programmateur extrêmement patient et perspicace qui est prêt à aller au fond de ce qu'ils essaient vraiment de faire et de le faire arriver.
Le codeur qu'il a embauché n'a pas ... Posez des questions appropriées
C'est une recette pour la catastrophe. Cela, et aussi l'attente que le codeur sera demander. Les codeurs aiment coder, ne pas communiquer, les attendant à briser leurs habitudes sans une incitation est assez irréaliste.
Si votre ami veut faire passer un emploi, ils mieux établir un processus impliquant une communication continue avec le codeur - et c'est votre ami qui doit jouer un rôle actif dans cela, pas le codeur. "Montrez-moi ce qui se fait tous les lundis et mis en place deux heures pour en discuter tous les mardi", des choses comme ça.
D'après mon expérience, le moyen le plus fiable d'obtenir des travaux logiciels que vous souhaitez que les clients non techniques devaient communiquer et itérer des descriptions de caractéristiques de manière permanente, sans essayer de le préciser à mort dans un coup.
La plupart de ses scripts sont axés sur la statistique et le traitement des données. par exemple. Prenez cette colonne et exécutez une moyenne sur elle. Supprimez ces lignes dans ces conditions. Le défi est donc différent de la spécification d'une application Web.
C'est différent - il semble beaucoup plus simple que de spécifier une application Web. C'est un processus logique. C'est la chose facile.
Votre ami a tout simplement besoin d'écrire les étapes qu'il prend lorsqu'il exécute ce processus. Il peut le faire cependant qu'il veut, mais les choses essentielles à se concentrer sont la précision, la concision et la clarté. Il n'y a aucune raison que cela ne peut pas être fait purement dans le texte comme un manuscrit; Cela bénéficierait d'une division logique de composants ou de tâches et ferait probablement bien fonctionner comme un organigramme ou un diagramme.
Maintenant, votre ami devrait trouver un analyste/développeur compétent et engager la pièce de leurs services par pièce. Il doit énoncer ses attentes - quotidiennement ou au moins plusieurs fois par semaine, votre ami devrait rencontrer le développeur et voir la démonstration de progrès. Votre ami paiera le développeur pour son temps pendant ces manifestations, mais cela en vaudra la peine de veiller à ce que le projet soit exécuté à des spécifications. Toute modification de la spécification - c'est-à-dire des choses que votre ami omis - doit être négocié et probablement ajouté au prix indiqué.
Notez que j'ai dit "compétent" - ce n'est pas la même chose que "moyenne", car il existe de nombreux développeurs "moyens" qui ne sont pas compétents. Si votre ami reçoit simplement le codeur le moins cher, ou trouve simplement quelqu'un en ligne, il devrait s'attendre à des problèmes. Je ne suggère pas que les personnes qui trouvent du travail en ligne ne sont pas bonnes, mais vous n'observirais pas quelqu'un sans recommandation.
Votre ami doit simplement trouver la bonne personne. Dans tout projet logiciel, il est nécessaire d'analystes, de programmeurs, d'administrateurs de systèmes, de testeurs et de gestionnaires de projets. Plus de ces rôles que votre ami veut "externaliser", plus le fournisseur sera qualifié et plus votre ami devrait s'attendre à payer.
Désolé d'être celui de vous briser cela, mais ce n'est pas un travail d'une personne non technique d'apprendre à écrire des spécifications formelles. C'est le travail du développeur d'interviewer la personne non technique, essayez de distiller ce que la personne vous dit sur ce qu'ils sont après, déterminez ce que le client veut vraiment (par opposition à ce qu'ils pensent qu'ils veulent, qui N'est-ce pas toujours la même chose), construire un document d'exigences relativement informel (un qui est bien structuré mais qui tente d'éviter le jargon que le client ne comprendra pas) et examinez ce document avec le client.
Une fois que le client est satisfait du document des exigences informelles, vous pouvez utiliser cela comme base pour la rédaction d'une spécification d'exigences plus formelles qui commence à entrer en détail plus technique sur ce qui est nécessaire.
Tout ce processus est appelé "capture des exigences" et constitue la première étape du processus d'ingénierie logicielle. En fait, écrire le logiciel n'est qu'une partie relativement petite de l'ingénierie logicielle, un fait que beaucoup de développeurs de logiciels oublient. Une autre chose qu'ils semblent oublier, c'est qu'il est fort nécessaire de communiquer avec le client et de conserver un dialogue en place pendant tout le processus afin de vous assurer que les choses restent sur la bonne voie.
En ce qui concerne la communication avec des personnes non techniques, il est essentiel d'éviter d'utiliser le jargon des ordinateurs et du développement de logiciels en leur parlant. S'ils utilisent des termes de jargon de leur propre domaine, il est important de comprendre ce que ces termes signent pour que vous puissiez choisir un glossaire de projet pour obtenir des définitions formelles pour ces termes. Vous travaillez pour eux après tout, il est donc important de comprendre d'où ils viennent.
au lieu de jargon, vous devriez essayer d'utiliser des moyens non intimidants de communiquer avec votre client, les documents écrits en anglais clair sont une aide, mais beaucoup de personnes dans l'entreprise de logiciels sont utilisées pour écrire pour des ordinateurs plutôt que pour les humains et peut le trouver. difficile. De plus, les clients n'aiment pas lire à travers de grandes piles de papier, quelle que soit la qualité de leur langue, vous voudrez peut-être recourir à des aides visuelles. Les diagrammes, les fils métalliques et les storyboards sont des outils utiles ici.
Mais en bref, le point essentiel est que ce n'est pas le travail de votre client d'apprendre votre langue, c'est à vous d'apprendre leur langue.