Ich bin jetzt seit über 3 Jahren Entwickler und habe in meinem Team Vertrauen in meine Programmierfähigkeiten aufgebaut. Kürzlich war mein Team bei einem Unternehmen beschäftigt, das unseren Risikokapitalgebern gehört, in das wir integriert wurden und an dem wir jetzt arbeiten.
Ich habe keine Erfahrung mit Java und obwohl ich weiß, wie man in C# usw. codiert und ich mit APIs vertraut bin, habe ich kürzlich ein großes Problem verursacht, als ich meinen Code in unser Quell-Repository eingecheckt habe.
Ich wurde ins kalte Wasser geworfen und gebeten, Änderungen an einer bestehenden API vorzunehmen (mein Team ist sich meiner Gefährdung und Fähigkeiten bewusst). Nachdem ich die Änderungen verstanden und die Lösungsumgebung auf Verweise auf die API selbst überprüft hatte, nahm ich die Änderungen vor, testete sie mit Einheitentests und Postman auf die Antwort usw.
Alles schien in Ordnung zu sein. Mein Wissen über die Lösung insgesamt und andere Dinge ist jedoch nicht so gut wie das der anderen Back-End-Entwickler in diesem Projekt. Ich bin der einzige Full-Stack-Entwickler, der sowohl Front- als auch Backend macht. Das Problem war, dass auf die API in einer BPMN-Workflow-Datei verwiesen wird, die nicht angezeigt wurde, als ich in der IDE nach den Referenzen oder dem API-Namen als Text gesucht habe.
Dies verursachte ein 4-tägiges Problem, bei dem zwischen 2-4 Back-End-Entwickler untersuchten, warum der Build zu einem bestimmten Zeitpunkt während des Arbeitstages fehlschlug. Während ich zu meinem Fehler stehe und die Verantwortung für ein so großes Problem voll und ganz übernehme, bin ich jetzt sehr enttäuscht von mir selbst und bezweifle noch mehr, dass ich mit so wenig Wissen über Java und die Lösungsstruktur das Backend weiterentwickeln sollte . Ich kann auch nicht umhin, mich schuldig zu fühlen, weil ich so viel Zeit und Geld für etwas verschwendet habe, was ein Fehler war und lange Zeit gedauert hat, es zu finden.
Ich würde zwar gerne Zeit verbringen und mich mit einigen Back-End-Entwicklern zusammensetzen, um es durchzugehen und vollständig zu verstehen, aber sie haben im Moment einfach keine Zeit. Was kann ich noch tun, um sicherzustellen, dass ich in Zukunft keine Fehler mache oder weitaus weniger wahrscheinlich mache, geschweige denn solche kostspieligen?
Ich sollte hinzufügen, dass ich meinen Änderungscode auch von einem der Back-End-Entwickler überprüfen ließ, der sicher gefragt wurde, ob die API irgendwo anders referenziert wird. Da meine Suche und Überprüfung nichts in der IDE zeigte, da sie keine BPMN-Dateien überprüft, antwortete ich mit nein.
Was sollte ich noch tun und was sollte ich tun, um das Risiko, in Zukunft ähnliche Fehler zu machen, zu minimieren?
Zusätzliche Anmerkungen zu den Kommentaren und Antworten:
Code-Reviews: Ich werde immer mit dem Entwickler zusammensitzen und den Code mit ihm besprechen und verstehen, während wir ihn erklären.
Wir führen tägliche Scrums durch. Ich habe dies erwähnt, als ich daran gearbeitet habe, aber es wurden keine Bedenken geäußert, obwohl ich sicher bin, dass wir es morgen im Scrum oder in der nächsten Retrospektive besprechen werden.
Ich sollte klarstellen, dass das Problem darin bestand, dass der Build fehlgeschlagen ist, und ich verstehe, dass ich wahrscheinlich alle Änderungen in meinen Zweig ziehen und bauen und einen letzten Test durchführen sollte, bevor ich ihn festlege, was ich nicht getan habe.
Wenn mehrere Entwickler Änderungen an derselben Codebasis vornehmen (und nicht immer auf dem neuesten Stand sind), werden diese Dinge passieren. Ich bin selbst Entwickler; Es ist nichts, woran man sich aufhängen sollte, es wird uns allen mindestens einmal passieren. Es gibt jedoch ein paar Dinge, die Sie tun können, um das Risiko eines erneuten Auftretens zu verringern.
Aus dem Kontext sieht es so aus, als hättest du alles lokal getestet und es hat gut funktioniert. Erst später ging etwas schief. Dies deutet darauf hin, dass entweder Ihre eigene Codebasis leicht veraltet war und/oder jemand anderes veralteten Code hatte, als er seine eigenen Änderungen festlegte. Das Beste, was Sie tun können, bevor Sie Ihren Code festschreiben, ist, alle kürzlich vorgenommenen Änderungen aus Ihrem Repository (oder wie auch immer Sie es nennen) abzurufen, damit Sie sicher sein können, dass Ihre Änderungen mit dem aktuellsten Code funktionieren. Wenn alle Tests bestanden sind, können Sie guten Gewissens zusagen.
Ich würde auch vorschlagen, gegenüber Ihren Kollegen etwas lauter zu sein. Wenn Sie Änderungen an einem kritischen System vornehmen, teilen Sie es ihnen mit. Selbst wenn es sich um eine einfache Anfrage wie „Ich bin dabei, diesen wichtigen Teil zu ändern, haben Sie Zeit für eine Codeüberprüfung?“ . Auf diese Weise verbringt Ihr Team nicht Tage damit, das Problem zu finden, falls es eines gibt, und Sie können beruhigt sein, da Sie wissen, dass Sie UND Ihre Kollegen von den Änderungen überzeugt sind. Einige Entwicklungsteams veranstalten tägliche Stand-ups, in denen sie äußern, woran sie arbeiten. Es hilft dem Team, besser zu wissen, woran Sie arbeiten und ob die Gefahr besteht, dass Ihre Änderungen mit denen anderer kollidieren.
Du lernst, indem du es tust. Wenn Sie sich mit Sprachen wie C# auskennen, lernen Sie Java vielleicht schneller kennen, als Sie denken!
Diese Situation passiert von Zeit zu Zeit - Sie tun etwas, das unvorhergesehene Auswirkungen auf etwas anderes hat, von dem Sie vorher nichts wussten.
Die Tatsache, dass Sie nicht sofort entlassen oder auf einen PIP gesetzt wurden, bedeutet, dass das Unternehmen erkennt, dass Fehler passieren, sie aussortiert werden und das Leben entsprechend weitergeht.
Was können Sie dagegen tun? Informieren Sie sich über diese Konsequenz und prüfen Sie, ob es etwas anderes gibt, das Sie hätten berücksichtigen sollen, oder ob Sie ein anderes Team zu den Folgewirkungen einer API-Änderung hätten befragen sollen.
Das alles gehört zum Sammeln von Erfahrungen dazu und sollte Sie nicht davon abhalten, weiterzumachen.
Die Möglichkeit, dieses Problem zu vermeiden, bietet Ihnen auch die Möglichkeit, einen wesentlichen Beitrag zu Ihrem neuen Unternehmen zu leisten: Die Wurzel dieses Problems sind unzureichende Tests, nicht Sie (es sei denn, Sie waren auf eine Weise fahrlässig, die in Ihrem Beitrag nicht auftaucht).
In allen Entwicklungsumgebungen sollte es möglich sein, vor dem Einchecken herauszufinden, ob die von Ihnen vorgenommene Änderung einen größeren Fehler verursachen wird, und herauszufinden, ob der Code den Build beschädigen wird. Während es sicherlich peinlich ist, derjenige zu sein, der ein so klaffendes Ganzes in den Prozessen des Unternehmens findet, können Sie jetzt führend sein, wenn Sie versuchen, einen solchen Prozess in Ihrem neuen Unternehmen zu etablieren.
Sie können vorschlagen, dass das Team mit dem Schreiben von Unit-Tests beginnt und mit der Einrichtung einer kontinuierlichen Integrationsumgebung beginnt, die das Projekt neu erstellt und die Unit-Tests jedes Mal ausführt, wenn Code eingecheckt wird, und in der die Tests einzeln vor dem Einchecken ausgeführt werden können. Die Einheitentests erfordern Engagement des Teams, aber eine grundlegende CI-Umgebung kann ziemlich schnell aus Open-Source-Projekten eingerichtet werden, solange Sie eine VM oder einen Server dafür bereitstellen können.
Bearbeiten: Code-Reviews sind eine weitere gute Programmierpraxis, die diese Art von Fehlern minimieren kann und auch ziemlich einfach in Gang zu bringen ist.
TL;DR nutzen Sie diese peinliche Gelegenheit, um die Entwicklungsprozesse Ihres Unternehmens zu modernisieren. Du wirst nach Rosen riechen.
Das Problem tritt auf, dass die API in einer BPMN-Workflow-Datei referenziert wird, die nicht angezeigt wurde, als ich in der IDE nach den Referenzen oder dem API-Namen als Text gesucht habe.
Was haben die Teams in Bezug auf diesen Vorfall rückblickend herausgefunden? Welche Abteilungsverfahren könnten eingerichtet werden, damit sich dies nicht wiederholt? Was ist nach Ansicht des Teams beim Onboarding neuer Entwickler notwendig? Und welche neuen Onboarding-Verfahren sollen entwickelt werden?
PS In den oben genannten Bereichen proaktiv zu sein, ist eine großartige Möglichkeit, zu lernen und zu führen.
Wo wurden die BPMN-Dateien gespeichert, sodass sie bei der Suche nach anderen API-Konsumenten nicht sichtbar waren?
Das Problem hört sich so an, als ob Sie nicht alle API-Konsumenten kannten/auf sie Zugriff hatten.
Wenn sie nicht Teil Ihres standardmäßigen Entwicklungsarbeitssatzes sind und aus irgendeinem Grund nicht hinzugefügt werden können, müssen alle APIs, die bis dahin verwendet werden, in gleichwertigen Kopfzeilenkommentaren für Methodenaufrufe dokumentiert werden. Je nachdem, wie formal Ihr Überprüfungsprozess ist, kann die ausdrückliche Bestätigung, dass sie nicht betroffen sind, eine gültige Prozessänderung sein.
Das Problem, dass Sie nicht über alles außerhalb der Codebasis, an der Sie arbeiten, Bescheid wissen, muss bei Ihrem nächsten Standup/Ihrer nächsten Retrospektive von Ihnen angesprochen werden, wenn Ihre Kollegen dies nicht tun. So etwas sollte im Rahmen Ihres Einstiegs in das Projekt behandelt worden sein.
Du musst deine Denkweise ändern.
Sie haben keinen „kritischen Fehler“ gemacht. Sie haben nach besten Kräften gearbeitet; Sie waren offen für die Arbeit in einer unbekannten Umgebung; Sie waren transparent in Bezug auf Ihr Wissen und alles andere, davor und danach; Sie haben mit den anderen Jungs zusammengearbeitet, um das Problem zu beheben, Sie haben vermutlich keinen Wutanfall im Büro bekommen. Nach dem Debakel kommen Sie hierher und versuchen, sich noch weiter zu verbessern.
Kurz gesagt: Ich würde mir die Finger lecken, mehr Mitarbeiter wie Sie zu haben.
Zur Beantwortung Ihrer Frage:
Unabhängig davon, was Sie oder andere tun, um Fehler zu minimieren, Fehler werden passieren .
Natürlich gibt es technische „Best-Practices“, die helfen, und ja, es gibt all die Plattitüden über das Lernen aus Fehlern. Aber das hast du alles, wie es scheint. Trotzdem fühlst du dich immer noch so schlecht wegen des Vorfalls, dass du dir die Zeit genommen hast, es auf jobs.stackexchange.com zu schreiben?
Ich denke, es gibt etwas Greifbares, das Sie tun können, das Ihnen und den anderen helfen wird, sich bei dieser ganzen Sache besser zu fühlen.
Das Beste, was Sie tun können, ist, die Freundlichkeit und Großzügigkeit, die Ihnen gezeigt wurde, zur Kenntnis zu nehmen und sich dafür zu bedanken .
Anstatt sich noch ausgiebiger zu entschuldigen und schnell vergessene „Nie wieder“-Versprechungen abzugeben, nehmen Sie sich die Zeit, den Leuten, die bei der Lösung des Problems geholfen haben, und denen, die Ihnen Unannehmlichkeiten bereitet haben, persönlich zu DANKEN. Wenn es angebracht ist, bringen Sie zum Beispiel eine Schachtel Donuts mit ins Büro und ergänzen Sie Ihre Kollegen.
Und wenn dann das nächste Mal etwas passiert und jemand anderes einen Fehler macht, sei nett zu ihm, hilf ihm und erwidere die Freundlichkeit, die dir zuteil wurde . Das ist es. Ihr werdet wegen solcher Dinge ein besseres Team sein.
Machen Sie Ihre Commits so klein wie möglich und wenn Sie nach jedem Push vom Build-Server bauen können. (Wenn es nicht oft gebaut wird, möchten Sie vielleicht auch vor Ihrem Push bauen!)
Das wird Ihnen nicht helfen, keine Fehler zu machen, aber es wird sie viel weniger kritisch machen. Wenn Sie wissen, welches Commit/welche Gruppe von Commits den Build zum Absturz gebracht hat, ist es trivial, es zurückzusetzen, während Sie an dem Problem arbeiten, und wenn Commits so klein wie möglich sind, ist es einfacher, die Ursache des Problems zu finden.
Wenn Sie git verwenden, gibt es sogar einen Befehl, der dabei hilft: git-bisect , mit dem Sie eine binäre Suche durch eine Gruppe von Commits durchführen können, um denjenigen zu finden, der das Problem verursacht.
Maskierter Mann
Thorbjørn Ravn Andersen
li x
Alex
Monika wieder einsetzen
J. Chris Compton
Im-Harrison
JimmyB
J. Chris Compton