Oh Mann, das ist eine Menge, wenn du wirklich meintest, dass dir alles passiert ist!
WARNUNG : In vielen der folgenden Punkte haben Sie möglicherweise das Gefühl, dass ich Sie kritisiere und dass ich Sie für die Missgeschicke verantwortlich machen und externe Faktoren nicht berücksichtigen möchte. Ich nicht. Es ist nur so, dass Sie nicht viele Details angeben, und ich stelle nur Checklisten mit Maßnahmen zur Verfügung, die ergriffen werden müssen, um sicherzustellen, dass nichts schief geht. Ich weiß, dass ich selbst viele Fehler gemacht habe (jeder macht es) und wir werden nur besser, wenn wir daraus lernen. Und um daraus zu lernen, müssen wir anfangen, sie als Fehler zu betrachten und Verantwortung für das zu übernehmen, was auf unserer Seite schief gelaufen ist. Zur Hölle, übernimm die Verantwortung für das, was in anderen Teilen schief gelaufen ist, du kannst auch daraus lernen.
Ihr Projekt ist fehlgeschlagen
Sie können jetzt nicht viel tun, um dies zu mildern.
Sie können jedoch viel tun, um zu verhindern, dass sich das in Zukunft reproduziert. Ich würde vorschlagen, Ihre Projekt- und Zeitmanagementfähigkeiten zu verbessern.
Eines der Bücher mit dem besten Verhältnis ((gültige Ratschläge) / Seiten), das ich zu diesem Thema gelesen habe, obwohl es vielleicht nicht das beste ist, ist Rob Thomsetts Radical Project Management .
Sie spezifizieren nicht wirklich, was Ihr Projekt gescheitert ist, aber ich würde eine Kombination von Dingen annehmen, die zu einem Ungleichgewicht im üblichen Kosten / Zeit / Qualitäts-Dreieck geführt hat . In meinen Augen ist es der wichtigste Faktor, das Projekt und die Entwicklung zu leiten und dabei stets mit Ihren technischen Akteuren (Entwicklern und Testern), aber auch mit Ihren Stakeholdern in Kontakt zu bleiben. Viel zu viele Projekte scheitern, weil sie nicht auf Sponsoren oder Interessengruppen hören und sie nicht dazu drängen, sich in den Prozess einzubringen.
Wenn sie nicht beteiligt sind, können Sie nicht wissen, was sie wollen. Wenn Sie nicht wissen, was sie wollen, können Sie es nicht liefern. Wenn Sie es nicht liefern, werden sie unglücklich sein. Das ist ein Misserfolg. Wenn Sie Ihre Stakeholder nicht einbeziehen, sind sie von der Realität des Software-Engineerings abgekoppelt, was bedeutet, dass sie Ihre Probleme nicht verstehen. Wenn sie häufig mit Ihnen in Kontakt treten, haben sie einen besseren Überblick darüber, mit was Sie zu tun haben. Sie werden es besser verstehen, wenn Sie ihnen sagen, dass eine "kleine" [Lach-] Funktion Monate dauern wird. Sie können Ihrer Planung besser vertrauen, weil sie beim Aufbau geholfen haben. Ein Projekt kann nicht nur mit "Spezifikationen am Anfang, Entwickeln, Testen, Ausliefern am Ende" erfolgreich sein. Das tut es einfach nie. Sie könnten liefern, was in den Spezifikationen gefragt wurde,
Am wichtigsten ist es auch, eine Retrospektive zu machen und sicherzustellen, dass es kein Ego ist und kein Schuldspiel. Identifizieren Sie einfach Probleme.
Was Sie tagelang programmiert haben, wurde von Ihrem Team abgelehnt
Ich war in dieser Situation. Auch hier können Sie nicht viel tun, um dies zu mildern, außer:
- Bewahren Sie es für später im SCM auf.
- Versuchen Sie vielleicht, kleine Teile und Teile schrittweise in die Hauptcodebasis zu verschieben, anstatt eine umfangreiche Umgestaltung vorzunehmen.
Aber es gibt wieder Dinge, die Sie tun können, um diese Art von Situation zu verhindern:
- Warum ist es passiert? Was ist der Grund für die Ablehnung?
- Die meiste Zeit, wenn ich das sehe (und das war auch für mich der Fall), bedeutet dies, dass der Entwickler solo oder im Cowboy-Codierungsmodus gearbeitet hat und Dinge produziert hat, nach denen nie gefragt wurde. Code, der nicht aus geschäftlichen Anforderungen stammt, ist vielleicht schick und "besser", aber oft eine Verschwendung von Zeit und Geld. Außerdem wird es noch mehr kosten, wenn Sie es integrieren, da es erneut getestet werden muss. Denken Sie wie die Leute, die Ihnen das Geld geben: Sie müssen auch auf dieser Ebene effizient sein.
- War die Qualität der produzierten Software zufriedenstellend? Entsprach es den in Ihrem Unternehmen geltenden Standards und Konventionen?
- Haben Sie den direkten Managern regelmäßig (und häufig!) Darüber berichtet? Haben Sie sich gelegentlich mit anderen Entwicklern des Teams ausgetauscht? Wenn nicht, wissen sie nichts darüber, es ist ein enormer Zeitaufwand für sie, es jetzt zu bewerten und zu überprüfen. Es wird am Ende NICHT zur selben Zeit abgerechnet. Es ist so, als würde man immer versuchen, die Reinigung einer Mietwohnung aufzuschieben und erst dann zu versuchen, wenn man auszieht: Es ist ein beschissener Job, es ist anstrengend, es ist schwieriger, als wenn man es regelmäßig gemacht hätte, und es wird oft nicht gemacht richtig.
- Haben Sie Produkttests produziert? Unit-Tests? Integrationstests?
- Wurde Ihr Code regelmäßig im SCM eingecheckt? War es in einer anderen Branche? Benötigte es einen anderen Zweig oder hätte es im Kofferraum gemacht werden können? Das Aufschieben von Code ist normalerweise ein schlechtes Zeichen. Offensichtlich sind Sie manchmal versucht, es zu tun, aber Sie schießen sich einfach in den Fuß.
Niemand hört in Ihrem Unternehmen auf Ihre Ideen
Nun, hier gibt es zwei Möglichkeiten, und wir werden uns beide ansehen:
- Ihre Ideen waren schlecht.
- Ihre Ideen waren gut.
Lassen Sie uns annehmen, dass sie schlecht waren (wieder einmal, dass es schwierig sein könnte, sich selbst darüber Gedanken zu machen und Ihre Idee einfach nur schlecht zu akzeptieren). Was tun Sie, um das zu ändern?
- Warum bist du auf die Idee gekommen? Was ist das Grundprinzip ? Besteht ein wirklicher Bedarf daran, was Ihre Idee auf den Tisch zu bringen versucht?
- Wie bist du auf die Idee gekommen? Hast du es alleine gemacht? Hast du geteilt? Brainstorming? Planen? Prototyp? (Tun Sie dies in der richtigen Reihenfolge. Wenn es auf dem Weg fehlschlägt, verwerfen Sie die Idee, machen Sie nicht weiter. Oder zumindest nicht in Ihrem Arbeitsplan.)
Ideen sind nur Ideen. Wenn Sie sie nur als Ideen vorschlagen und sie abgelehnt werden, verstehe ich nicht, warum Sie sich dabei schlecht fühlen würden. Wenn Sie jedoch auf sie einwirken, ohne jemanden zu benachrichtigen, und dann nur Ihre Ideen einreichen und sie abgelehnt werden, fühle ich offensichtlich die Frustration in der Zeit verschwendet. Und Ihre Manager tun das auch!
Vorausgesetzt, Ihre Ideen waren gut:
- War Ihre Präsentation gut?
- War Ihre Art, die Präsentation zu halten, gut? (Ich bin ein Entwickler, ich weiß wovon ich spreche: Wir sind mürrische, arrogante , pedantische PITAs, die immer Recht haben und mit denen es schwierig ist, wegen unserer oft unverhältnismäßigen Egos zu arbeiten. )
- Haben Sie einen Plan, um es umzusetzen? Haben Sie über Kosten und Zeit nachgedacht? Haben Sie darüber nachgedacht, welchen Nutzen dies für Benutzer / Kunden hat? Haben Sie darüber nachgedacht, wie sich dies auf den Verkauf auswirkt? Haben Sie gedacht, wie sich die Arbeit an dieser Idee auf andere Projekte und Prioritäten auswirken könnte? Sie werden mir sagen: "Warum sollte ich all das tun, sie sind die Aufgabe meines Managers und der Marketing- oder Verkaufsteams ?!" Außer im Moment versuchen Sie, einen Teil ihrer Arbeit zu erledigen.
Das Designmuster, das Sie in Ihrem Team mit Gewalt eingeführt haben, hat ein Durcheinander verursacht
- Warum haben Sie das Muster eingeführt?
- Wenn es ein Durcheinander verursacht hat, dann ist es wahrscheinlich entweder:
- war nicht das richtige muster,
- wurde nicht richtig umgesetzt,
- war nicht richtig integriert.
- Wie hast du es vorgestellt? Wie genau definieren Sie den Zustand "Durcheinander"?
- weniger lesbarer Code?
- weniger wartbar?
- Builds sind kaputt?
- Es gibt verschiedene Arten von "Chaos". Zu wissen, was das Chaos ist, kann helfen, den Fehler zu ermitteln und festzustellen, ob das Entwurfsmuster daran schuld ist.
Ich bin auch ein bisschen überrascht von der Herangehensweise an sich. Sie mussten tatsächlich darauf drängen, ein Entwurfsmuster einzuführen? Das scheint ziemlich seltsam. Entweder ist bereits ein Muster vorhanden, oder Sie müssen einen Teil Ihrer Lösung entsprechend dem Muster umgestalten. Sie haben nicht schieben es , wie Sie würde die Annahme eines Rahmen oder Technologie (wie Menschen geschoben wirklich schwer XML überall zu haben, und jetzt wie Menschen drängen beginnen zu können , schreiben HTML5 in den großen hellen Buchstaben auf ihre Abdeckung des Geräts).
Warum musstest du pushen? Warum gab es Widerstand? Vielleicht war es gerechtfertigt.
Können Sie Beispiele nennen, die zeigen, dass dieses bestimmte Muster dazu beiträgt, die Codebasis in erheblichem Maße zu verbessern (z. B. indem es mit einem Beispiel für das Umgestalten auf Muster abgeglichen wird ) ?
Völlig abseits des Themas, aber daran dachte ich zuerst, als ich den Titel der Frage las, weil ich dachte, er beziehe sich auf Softwarefehler ... Ich hatte eine Software, die eine BlackHole-Klasse implementiert hat, um eine ganz besondere Art von Ausnahmen in einer der zu verwalten Komponenten. Es mag wie ein offensichtlich seltsamer und schmutziger Hack erscheinen (und ist es auch wirklich), aber die Benennung selbst war so hervorragend, dass wir alle es für eine ziemlich coole Art und Weise schätzten, mit einem Fehler umzugehen! :)