Le regroupement des problèmes que vous voyez sous une forme structurée liée à leur impact commercial pratique vous aidera beaucoup:
Réfléchissez aux problèmes et aux preuves que vous pouvez trouver, et regroupez-les de cette façon :
- Observations qui suggèrent, si sa mise sur le marché, il échouera dans l'utilisation et le contrecoup . Il ne peut pas être compilé. Il y a des erreurs logiques dans le code. L'entrée n'est pas validée. Les données ne sont pas traitées de manière à garantir une forte probabilité de non-corruption. Les aspects de sécurité ne sont pas en place et les données pourraient être exfiltrées / piratées. Il n'est pas garanti que les fonctions clés fonctionnent pour une bonne raison, ou vous pouvez montrer que les quelques-unes que vous avez vérifiées parmi elles ne fonctionnent souvent pas comme prévu. Ce genre de chose.
- Des observations suggérant qu'il pourrait bien y avoir des problèmes qui ne se révéleront pas lors des tests, mais qui entraîneront un risque important de problèmes s'ils sont mis sur le marché Comme ci-dessus, mais le n ° 1 est ce que vous avez trouvé, c'est une preuve qui suggère que des problèmes non trouvés importants sont à prévoir / anticipés / considérés comme un risque important. Par exemple, si vous avez corrigé des cas extrêmes liés à un mauvais traitement dans certains cas de validation de données, cela suggère que d'autres cas peuvent exister et ne pas être connus, ce qui pourrait entraîner la perte / la corruption des données. S'ils ont utilisé des approches obsolètes / douteuses connues pour un problème, cela suggère qu'ils ont fait de même sur d'autres problèmes. Si la base de données est soumise à des conditions de concurrence / mises à jour non atomiques dans une zone, cela suggère que cela pourrait être un problème dans le code en général. Et s'il s'agit d'un multi-utilisateur mais que le traitement côté serveur ne permet pas aux entrées / processus de plusieurs utilisateurs de se heurter de manière subtile, cela suggère qu'il pourrait tomber sous des charges appropriées.
- Observations suggérant que l'équipage d'origine a trompé la direction (délibérément ou non, ou peut-être simplement en n'étant pas énergique et trop facilement annulée / ignorée: cela aurait pu être la faute de la direction, pas la leur!). À l'heure actuelle, l'équipage précédent est un cadeau de Dieu à la direction car ils ont livré un produit brillant. Vous doutez d'eux parce que même si c'est un excellent produit, vous n'êtes pas heureux, ne pouvez pas le faire fonctionner, ne le comprenez pas, etc. Mais si vous avez des observations qui contredisent directement ce qu'ils ont déclaré, alors celui qui sait ce qui se passe et la chaussure se retourne contre eux. Votre travail devient alors plus facile. Par exemple, s'ils ont dit à la direction que le projet a une sécurité WebUI appropriée et que vous observez des endroits où ils n'ont pas validé l'entrée / les scripts croisés / l'injection SQL, ou la direction pense que le projet peut gérer quelque chose d'important et vous pouvez montrer spécifiquement qu'il peut 't et n'aurait jamais pu le faire, vous pouvez montrer à la direction qu'ils ont été trompés.
- Observations qui montrent que, si elles sont mises sur le marché, les niveaux habituels de suivi / d'attente / de service seront irréalisables / irréalisables, ou les coûts seront beaucoup plus élevés que prévu . Par exemple, si le code est trop pauvre ou manque d'aspects de débogage, alors lorsqu'un client a un problème, il n'y aura aucun moyen pratique de suivre les bogues et quel que soit le problème, cela peut prendre des semaines et non des heures pour y remédier. Si le code est répété, cela signifie que la modification de la validation ou l'amélioration des structures de données ne peuvent pas être effectuées "juste en un seul endroit". S'il n'est pas documenté ou mal structuré, les tentatives de l'améliorer ou de l'améliorer seront gravement entravés car il n'y aura aucun moyen pratique de faire un développement significatif et de s'assurer que les choses ne se casseront pas, sinon la vérification de la casse prendra tellement de temps que être non rentable. Si c'est un mauvais gâchis, une fois sur le marché, ils dépendront de vous personnellement chaque fois qu'un problème se posera; comme vous ne pouvez pas garantir d'être là le week-end et à 23h juste à cause d'une échéance client frappée par un bug, ou vous pourriez tomber sous un bus, que vont-ils faire? Si les données peuvent être déplacées mais nécessitent une attention manuelle excessive, alors en production, votre support peut ne pas être en mesure de s'adapter pour fournir cela, ou pour garantir qu'il peut rester assez simple, de sorte que les erreurs de traitement peuvent être plus risquées. Si cela dépend de plates-formes spécifiques et que ces plates-formes ne sont pas clairement gérées dans le code, alors les modifications apportées aux plates-formes (mises à jour de Windows, versions de navigateur, versions de bibliothèque) peuvent ne pas être réalisables dans les délais habituels ou commerciaux, ou corriger ce qu'ils cassent peut être complexe. , empêchant les clients de maintenir ou d'utiliser leurs plates-formes comme prévu.
- Des observations qui ne font que vous ennuyer . C'est ton travail. S'ils ne relèvent pas des catégories ci-dessus, corrigez-les du mieux que vous pouvez pendant votre temps libre. Le problème de la direction concerne les 4 premiers éléments ci-dessus, pas celui-ci.
Celles-ci vous aideront à aligner votre perspective technique et pratique sur leur perspective commerciale. Si vous pouvez montrer qu'il y a des problèmes dans les 4 premières catégories ci-dessus et les exposer clairement, vous serez sur la bonne voie pour résoudre votre propre problème - en leur montrant de bonnes raisons pour lesquelles c'est leur problème, et non votre manque de
Si vous mettez une liste comme celle-ci ensemble et qu'elle semble convaincante, faites une présentation, présentez-la-leur et expliquez-leur des exemples de problèmes - y compris des extraits de code ou de flux de données spécifiques qui illustrent ce point.
Votre présentation
Pour la rendre efficace,
- Trouvez un autre codeur en qui ils ont confiance - ou demandez la permission de faire venir un collègue pour une journée - et ayez quelqu'un qui est prêt à vous soutenir. De cette façon, ce n'est pas tout ce que vous dites; vous avez quelqu'un d'autre qui peut dire: "Oui, il m'a montré ce code, et je suis désolé, il n'exagère pas le sérieux."
- Attendez-vous à devoir éduquer un peu - brièvement. Ils ne sont pas des codeurs mais ont du bon sens. "C'est pourquoi nous utilisons du code structuré, exactement pour pouvoir effectuer chaque tâche une seule fois, isoler les parties et être sûrs de l'interaction des éléments. Mais ces types ne l'ont pas fait, regardez ici , ici et ici . Le problème se pose donc que dans leur code, vous ne pouvez pas voir comment les pièces interagissent, ou si il y a des erreurs logiques ou des incohérences, et vous ne pouvez pas être sûr que les parties indépendantes sont vraiment indépendantes, ou que tout doit être changé ailleurs si quelque chose doit être changé, ou même qu'il se comportera sous des charges réelles, comme lors des tests. En supposant que nous puissions le tester de manière réaliste et le réparer en moins de 3 ans de travail à plein temps par une équipe de dix, ce qui est douteux. C'est exactement pourquoi les professionnels codent de manière prudente - car nous connaissons le autrement, l'impact commercial est grave. "
- Attendez-vous à être poussé ou forcé à dire que ce n'est pas si mal.
Parlez clairement. "Je suis désolé, quoi qu'ils vous aient dit, ce n'est clairement pas le cas. Je comprends que c'est un choc, mais en tant que professionnel, c'est aussi comme ça." Dites-leur: "Non, ce n'est pas un travail de haute qualité, c'est un travail criminellement bâclé et on vous a menti, jusqu'au bout." (Oui, vous pouvez dire que pour mettre l'accent, ce n'est pas comme si vous disiez que ce sont des criminels !!) Dites "Oui, désolé, mais je suis sûr".
- Entrez avec des détails. Si vous dites simplement "Les clés Ssh sont en texte brut", c'est super pour quelqu'un de votre niveau et le voir comme vous le faites. Pour la direction sous pression et croyant que c'est génial et pourquoi le tapage, c'est beaucoup trop peu spécifique. Au lieu de cela: "Les clés de chiffrement utilisées pour empêcher le panneau de configuration du client pour les utilisateurs distants sont stockées de manière non sécurisée, d'une manière que toute personne ayant une légère connaissance dirait qu'elle est à la limite du délit criminel. (Encore une fois, oui, vous pouvez dire que pour mettre l'accent, c'est pas comme si vous disiez qu'ils sont des criminels !!) . Si vous regardez ici (OK, ils ne peuvent pas suivre le code, mais tirez le code et pointez quand même sur ce bit , pour la crédibilité) vous verrez que la clé est stockée dans un format ouvert. Ils n'ont même pas fait de chiffrement de base des années 90. Mettez ces données en ligne et les données client / utilisateur seront piratées dès que quelqu'un pense que cela vaut le 10 cela prendra quelques minutes. " Montrez-leur "Plus de ici , ici et ici que vous pouvez voir un appel système de routine [API] qui peut ou non être interrompu dans divers cas, car il reçoit des données incorrectes pour l'appel. " Dites-leur "Ce sont des erreurs fondamentales de base. C'est comme ça partout". Montrez-leur "Dans ce module, ils utilisent cette bibliothèque, mais sur ici ils utilisent cette bibliothèque. Mais le fabricant indique clairement que les deux bibliothèques ne sont pas réellement compatibles. Elles ne devraient jamais, jamais être utilisées toutes les deux dans le même code, car cela peut laisser des données incorrectes / peut corrompre des données / parce que la sortie de l'une d'entre elles sera mal traité / corrompu / mal géré s'il est donné à l'autre. " Comme ça, en termes pour qu'ils puissent en comprendre le sens et en voir l'importance. Dites-leur: «Puis-je résoudre le problème? Eh bien, en d'autres termes, si ce problème est si grave, à quel point pensez-vous qu'il est réaliste de refaire toute l'infrastructure de sécurité du projet en moins de 6 mois?» Ce genre d'approche. Faites-leur voir.
- Choisissez une solution pré-pensée. Que feriez-vous à leur place? En fait, optez pour 3 solutions, et des avantages / inconvénients / estimations approximatives de leur impact. N'oubliez jamais que «ne rien faire» ou «allez-y quand même» est une option , incluez-la également (et ses avantages / inconvénients / risques) dans votre liste.
- Donnez-leur du temps être choqué, bouleversé, dans le déni et en mode blâme. C'est humain et eux aussi ont des pressions. Attendez-vous à ce que cela se produise, et soit restez assis à travers, acceptez leur choc, guidez-les au-delà, rappelez-leur doucement que la recherche de blâme et les autopsies peuvent attendre; ils ne résolvent pas réellement les problèmes de l'entreprise. Soyez leur conseiller.
- Si nécessaire, après un certain temps, dites simplement: "J'ai quelques solutions proposées. Aucune n'est idéale - l'idéal serait que ce gâchis n'existait pas. Mais elles sont viables. Prenons 10 minutes / Pouvons-nous nous revoir après une courte pause-café / après le déjeuner / J'ai une réunion, rencontrons-nous après cela, pour nous concentrer sur les solutions et ce que nous faisons pour résoudre ce problème. " dans une réunion séparée après un «changement de décor» mental - même juste de l'autre côté d'une pause-café - aidera beaucoup.
- Dire que vous avez des solutions peut souvent attendre un peu, jusqu'à ce que les premières explosions se produisent, car la réaction humaine sera souvent de l'ignorer ou de nier le besoin, au tout début. Ce n'est qu'une fois qu'ils ont dispersé une partie de leur colère (s'ils sont de ce type) que cela vaut la peine de le dire, car chez tant de gens, ils ne l'entendront tout simplement pas si cela est dit alors qu'ils sont toujours en mode de blâme embarrassé en colère. Si ce n'est pas un problème, passez directement aux solutions après avoir expliqué la gravité / le risque de l'impact, si vous pensez qu'ils écoutent.
Évitez soigneusement tout ce qui pourrait impliquer que vous êtes perfectionniste ou faites pas plus que le minimum pour la viabilité du marché. Rien de plus que l'essentiel, à ce stade, n'est tout simplement pas une priorité.
Solutions et argumentaire à l'avance
En ce qui concerne une solution pré-réfléchie, la mienne serait, des ressources supplémentaires. S'ils ne vous croient pas, tout est mort de toute façon (en supposant que vous avez raison). Le logiciel va tanker et vous serez brûlé par association: cherchez un nouveau travail à partir de maintenant. Mais si après votre présentation, ils vous croient, ils sont inquiets ou ils attendent de vous que vous régliez le problème, cela tourne à votre avantage.
Parce qu'il vous faut une équipe . Présentez quelque chose comme ceci:
"Désolé les gars, mais 1,5 G de code comme celui-ci, sans bases ni documentation, prendra environ un an juste pour comprendre, peut-être 5 ans pour corriger. Peut-être qu'une réécriture le fera être nécessaire et nous pouvons enregistrer ce qui peut être réutilisé, peut-être seulement des parties de l'interface graphique, les concepts de base du flux de données, pour ne pas réinventer la roue, puis refaire le back-end et tout le reste. "
" Le Selon moi, la première priorité est l'évaluation. Je peux voir que c'est mauvais, mais à quel point, et quel est le minimum pour rendre la production en toute sécurité? " [reflète leur préoccupation principale]
"D'après moi, nous devons savoir que d'ici 4 à 6 semaines - je dirais 3 semaines, mais c'est un tâche à part entière et doit être revue ligne par ligne. 4 à 6 semaines avec une équipe de 3, et nous saurons à quel point les dégâts sont graves. " [Si vous ne pouvez pas, ou si c'est trop énorme, remplacez ce qui est sensé à la place]
"Ensuite, nous devons le réparer. Je peux brûler les bougies pour savoir quoi faire , mais j'ai besoin de mains sur des claviers. De 4 à 6 d'entre eux, jusqu'à 6 mois. "
[Le cas échéant, ajoutez: "Et j'ai besoin d'un n ° 2 compétent pour cela. Je ne peux pas revoir tout ce qu'ils ont mis, seul, si je suis également en train de parcourir les problèmes et les correctifs. " ]
"C'est dommage que ce soit aussi grave, mais c'est ce que c'est, et nous devons d'abord creuser le trou, et faire des reproches et des litiges plus tard. Pour cela, donnez-moi deux personnes pour le moment et prévoyez un budget pour encore 2 ou 4 dans environ 4 à 6 semaines, et je vais vous le faire, bien fait. Ou du moins à peine réalisable. " [Encore une fois, si vous ne pouvez pas, ou si c'est trop énorme, remplacez ce qui est sensé à la place]
"Vous pouvez également demander à [nom d'un contact qu'ils connaissent, qui est un directeur dans une entreprise informatique appropriée] pour envoyer quelqu'un pendant une journée, pour vérifier mon point de vue initial, mon approche et mon timing, avant d'engager un budget. Ce sera bien et aussi rassurant. Mais si ça marche, et ça va - alors nous devons agir rapidement, et la seule chose qui nous fera gagner du temps sur le marché est d’y injecter des ressources rapidement et massivement. "
" Ce serait, à mon avis, la solution sensée . Nous ne pouvons pas l'utiliser tel quel, et nous perdons plus en raison des retards et des dommages que nous économisons en payant des sous-traitants ou en retirant du personnel d'autres travaux. "
" Je suis désolé de vous annoncer de mauvaises nouvelles. La bonne nouvelle est que nous pouvons creuser dans le trou. "
" Des questions? "