Sind Pull-Anfragen der Platz für die Ausbildung von Junioren

11

Wir haben das Konzept, dass der gesamte Code in einer Pull-Anfrage in den Master produktionsbereit sein sollte. Dies ist sinnvoll und meiner Meinung nach eine faire Aussage.

Die Idee dabei ist, dass Sie nach dem Erstellen der PR angeben, dass Sie dies in den Master übernommen hätten, aber dass einige Rezensenten einfach mit Ihnen übereinstimmen und alles erkennen sollen, was Sie zufällig verpassen.

Da wir nur Menschen sind, machen wir Fehler und hoffen, dass andere Prüfer Elemente finden, die Unit-Tests nicht finden konnten - Rechtschreibfehler, falsche Javadocs usw.

ABER, ist eine Pull-Anfrage der Ort, an dem wir Entwicklern ein gewisses Maß an Unterstützung / Schulung bieten sollten, und wenn ja, auf welchem ​​Niveau?

Jedes Mal, wenn Sie neue Änderungen vornehmen, müssen Prüfer Ihre Änderungen erneut überprüfen, was sich in ihrer Entwicklungszeit niederschlägt und dazu führt, dass Änderungen erneut überprüft werden.

Also, wie viel Training wird erwartet, sollte in Pull Requests erlaubt sein? Ein Teil von mir hat das Gefühl, dass es von Junioren zu Senioren unterschiedlich ist. Ich bin jedoch auch der Meinung, dass dies nicht der richtige Ort sein sollte, um eine Vielzahl von Problemen zu finden - selbst für Junioren.

Hat jemand anderes Probleme damit, Entwickler dazu zu bringen, das Ziel "Meine Pull-Anfrage sollte produktionsbereit sein" zu erreichen?

Riaan Schutte
quelle

Antworten:

13

Pull-Anfragen sind nicht der Ort für Schulungen. Ihr Team hat die richtige Idee. Eine PR bedeutet "Ich denke, es ist gut zu gehen. Kann ich einen zweiten Blick darauf werfen, falls ich etwas verpasst habe. Ich bin schließlich ein Mensch." Und ich vermute, genau das macht Ihr Lehrling. Sie denken ehrlich, es ist gut zu gehen.

Hier ist eine extreme Idee (Wortspiel beabsichtigt). Koppeln Sie das Programm mit dem Lehrling, der Ihnen Sodbrennen verursacht. Als älteres Teammitglied ist es Ihre Aufgabe, sie hochzuheben und produktiv zu machen.

Badeente
quelle
Danke @RubberDuck. Paarprogramm ist eine großartige Idee und wir machen es - irgendwie. Ich vermute, wir sollten das mehr tun. Einige geeignete Metriken oder Werkzeuge, um zu messen, ob einer Ihrer "Tropfen" im Ozean wiederholt dieselben Fehler macht, helfen jedoch zu wissen, wer diese Paarprogrammierung ebenfalls benötigt. Ich bin mir sicher, dass sich dieses Problem bei größeren Teams verschlimmert!?
Riaan Schutte
2
Nun, ich würde argumentieren, dass wir uns die meiste Zeit alle paaren müssen . Einer unserer Auszubildenden hat mehr als ein paar meiner Fehler aufgefangen und ich bin einer der älteren im Team. Sie könnten wahrscheinlich nach der Anzahl der Kommentare zu Pull-Anfragen fragen, aber ich würde es nicht empfehlen. Etwas über Individuen und Interaktionen ... Im Ernst. Es ist Ihre Aufgabe, diesen Entwickler hochzuheben. Holen Sie sich eine Kopie von Clean Code oder so.
RubberDuck
1
An einem Arbeitsplatz, an dem jeder Entwickler an zitierten Arbeiten für einen Kunden arbeitet (keine internen Projekte, die sich selbst finanzieren), ist die Paarprogrammierung nicht so einfach, bleibt aber wichtig! Es scheint etwas zu sein, in das das Unternehmen möglicherweise nur investieren muss, wenn wir produktivere Entwickler für zitierte Arbeiten wünschen.
Riaan Schutte
1
Hmm ... warum ist es nicht so einfach? Bekommt der Kunde nicht genauso viele Arbeitsstunden und vor allem ein besseres Preis-Leistungs-Verhältnis? Viel Glück Kumpel. Beruhigen Sie das Kind.
RubberDuck
3
Das ist ein weit verbreitetes Missverständnis @Andy. Es ist einfach nicht wahr. Ja, es ist nicht intuitiv, ich weiß.
RubberDuck
9

Wenn Code, der gegen grundlegende Designprinzipien oder -standards des Teams verstößt, die Pull-Request-Phase erreicht, sollte er dort unbedingt angesprochen werden. Und Codeüberprüfungen können ein gutes Mittel sein, um die Standards und Entwurfspraktiken des Teams zu kommunizieren.

Aber ist es der beste Ort? Hier sind einige Gründe, warum ich nicht sagen würde:

  1. Wenn mehrere Codeüberprüfungsiterationen erforderlich sind, um einen grundlegenden Konstruktionsfehler oder ein großes Problem zu beheben, besteht die starke Versuchung, die oben genannten kleineren Probleme aufgrund von Fristen oder allgemeiner Erschöpfung bei der Überprüfung zu übersehen. Im Idealfall wäre das Team belastbar genug, um dieser Versuchung zu widerstehen, aber es ist wahrscheinlich am besten, keine Situation zu schaffen, die dazu führen würde.
  2. Das Erhalten einer Codeüberprüfung mit einer großen Anzahl von Kommentaren ist für einen Junior- / Neueinstellungen-Entwickler keine großartige Erfahrung. Ja, das Antworten auf Feedback ist eine Fähigkeit, die sie entwickeln müssen, aber es stimmt auch, dass Entwickler nicht immer in der Lage sind, taktvoll auf Code zu reagieren, den sie nicht mögen.

Paarprogrammierung und Designüberprüfungen sind bevorzugte Orte für ein größeres Feedback.

Das heißt, es wäre noch schlimmer, den Code durchlaufen zu lassen, aus Angst, dass das Adressieren während der Codeüberprüfung "falsch" ist, und es kann einige Umstände geben (z. B. entfernte Teams), in denen dies das Beste ist, was Sie tun können. Beheben Sie in diesem Fall die Probleme bei der Codeüberprüfung und auch die Probleme in Ihrem Entwicklungsprozess, die bisher aufgetreten sind.

Das Auffinden des Problems während einer Pull-Anforderung ist zwar möglicherweise nicht ideal, aber sicherlich besser als beim Testen oder bei einem Produktionsproblem.

JohnMcG
quelle
5

Ich würde es eher so ausdrücken, da Pull-Anfragen nicht der einzige Ort sein sollten, an dem Sie Menschen schulen. Außerdem sind Junior-Entwickler nicht die einzigen, die möglicherweise eine Schulung für eine Pull-Anfrage benötigen. Auftragnehmer, Open-Source-Mitarbeiter, Entwickler aus anderen Abteilungen, die mit den örtlichen Vorschriften oder Standards nicht vertraut sind, und selbst erfahrene Programmierer müssen gelegentlich daran erinnert werden, wenn sie selbstgefällig werden.

Es ist sehr kostengünstig, eine Pull-Anfrage für eine Weile offen zu halten. Geben Sie so viel oder so wenig Feedback, wie Sie möchten, von so vielen Personen, wie Sie möchten, und lassen Sie es dann in Ruhe, bis die Autoren Sie erneut benachrichtigen, dass sie glauben, dass es zum Zusammenführen bereit ist. Eine Pull-Anfrage ist ein großartiges zentrales Tool für die Kommunikation über vorgeschlagene Codeänderungen, unabhängig davon, ob diese vollständig bereit sind oder viel Arbeit erfordern.

Einige Überprüfungen von Pull-Anfragen stellen sich als wenig mehr als ein Stempel heraus, und andere, bei denen es sich um externe Einreichungen an ein Team handelt, können einen Monat dauern. Die erste Art ist schön, wenn man sie bekommen kann, aber das bedeutet nicht, dass die zweite Art nicht wertvoll ist. Der Versuch, die Leute dazu zu bringen, ständig perfekte Pull-Anfragen einzureichen, wird für alle nur frustrierend sein.

Karl Bielefeldt
quelle
Danke für deine Antwort @ Karl-Bielefeldt. Einverstanden, dass etwas Training erwartet werden kann, aber die Frage ist, wie viel angemessen ist, auf welchem ​​Niveau. Ihre Aussage "... ob sie fertig sind oder viel Arbeit brauchen." Ich würde sagen, dass eine PR, die gemeistert werden muss, niemals viel Arbeit erfordern sollte. Viel Arbeit impliziert Design- und Implementierungsfehler, anstatt mir zu helfen, das zu erkennen, was ich verpasst habe. Ich stimme jedoch zu und habe die Erfahrung gemacht, "Der Versuch, die Leute dazu zu bringen, ständig perfekte Pull-Anfragen einzureichen, wird für alle nur frustrierend sein."
Riaan Schutte
2

Ich hatte immer das Gefühl, dass eines der Kennzeichen eines guten Leads jemand ist, der in jedem Entwicklungszyklus die erforderlichen zusätzlichen Schulungen anbietet. Für mich bedeutet das, dass ich nicht nur mich selbst codiere oder Code überprüfe, sondern mit mehr Nachwuchsentwicklern zusammen sitze und mit ihnen programmiere, um die Art von Landminen zu vermeiden, auf die ich getreten bin.

Hauptsächlich mache ich mir keine Illusionen darüber, dass unser Hauptziel Bildung ist - es ist nicht so. Egal, ob Sie ein Senior, ein Lead oder ein Junior-Entwickler sind, das Ziel ist nicht Ihre Erbauung. Ziel ist es immer, dem Kunden einen Qualitätscode zu liefern. Am besten pünktlich, im Rahmen des Budgets, tun, was sie wollen. Ich erkenne jedoch, dass es für mich unmöglich ist, die gesamte Arbeit selbst zu erledigen. Daher obliegt es mir, allen zu helfen, dem Team zum Erfolg zu verhelfen. Und das bedeutet, Trainingsmöglichkeiten zu erkennen, wenn sie in der Natur auftreten.

Auf Ihre Frage, ob Pull-Anfragen der richtige Ort für die Ausbildung von Junioren sind, muss ich sagen, dass es nicht ungewöhnlich ist, dass während dieser Zeit lehrreiche Momente auftreten. Hey, du wirst dich mit deinem ersten Zusammenführungskonflikt befassen müssen, lass uns das nach der Überprüfung durchgehen. Oh, sehen Sie, Sie haben keine Komponententests für Ihr DAO aufgenommen. Wir werden Ihre Überprüfung verschieben, bis wir die Gelegenheit hatten, diese neuen Methoden zu behandeln. Warum war es Ihrer Meinung nach besser, bei dieser Finanzberechnung doppelte Grundelemente zu verwenden als BigDecimals? Ja, das ist nicht wirklich ungewöhnlich.

Ich würde zwar sagen, dass dies sicherlich passieren kann, aber es ist eindeutig nicht das Hauptziel einer Pull-Anfrage. Ich habe auch nicht das Gefühl, dass der Code in einer Pull-Anfrage produktionsbereit ist. Oft ist es nicht.

Wenn Sie Feature- und Release-Zweige in einer Verzweigungsstrategie im Gitflow-Stil verwenden, werden Ihre Pull-Anforderungen eher zu Release-Kandidaten. Nicht produktionsbereit, aber etwas näheres. Sie wissen, dass Ihr Code kompiliert wird (rechts), und Sie haben genügend Test-Covfefe, um eine anständige Behauptung aufzustellen, dass er die Ziele der User Story erfüllt. Und da Sie bereits mehrere Integrationstests in Ihrer Entwicklungsumgebung durchgeführt haben, steht Ihnen eine großartige Demo zur Verfügung, falls Sie aufgefordert werden, Ihre Änderungen bei der Überprüfung Ihrer PR zu demonstrieren.

Letztendlich bin ich der Meinung, dass wir bei Überprüfungen der PR Unterstützung leisten sollten, aber diese Unterstützung bezieht sich nicht auf die allgemeine Kodierung. Stattdessen wird der vorgeschlagene Code für die Aufnahme in eine funktionierende Basis von Code in Produktionsqualität vorbereitet. Die PR bietet Entwicklern die Möglichkeit zu demonstrieren, dass sie für jede Änderung, die sie in die PR aufgenommen haben, eine Rechtfertigung und ein solides Verständnis dafür haben. Und selbst dann - selbst nachdem wir sie mit Unit-Tests, Demos und vielen Fragen belastet haben - ist nicht zu erwarten, dass die vorgeschlagenen Änderungen für die Produktion bereit sind.

Der Code ist nach all dem geschlossen. Aber dann lassen wir die Qualitätssicherung quälen.

Michael Peacock
quelle
Vielen Dank für Ihre Antwort @ Michael-Peacock. Was Sie sagen, gilt für Unternehmen mit einer separaten QS-Abteilung oder für Tester, die die nächste Phase durchlaufen. Aber wenn die Entwickler auch die Tester sind, begleitet die PR alles von der Entwicklung über das Testen bis zum Zusammenführen mit dem Master. In diesem Workflow muss der Code produktionsbereit sein, sobald die PR genehmigt wurde. Ich nehme an, die Frage enthält auch eine Annahme darüber, welchen Workflow Sie verwenden.
Riaan Schutte
Ich würde argumentieren, dass es noch wichtiger ist, sicherzustellen, dass Sie Ihrem Workflow Integrations- und / oder Abnahmetests hinzufügen und Zeit für mögliche Nacharbeiten einplanen, falls zusammengeführter Code Ihre Tests nicht besteht, auch wenn Sie kein dediziertes QS-Team haben. Sie könnten einige der Abnahmetests mit Selenium und Cucumber automatisieren, um die Entwickler zu entlasten, aber ich denke, es ist wichtig, nicht davon auszugehen, dass der Code produktionsbereit ist, bis Sie dies durch Tests nachgewiesen haben.
Michael Peacock
Ich stimme vollkommen zu, weshalb wir alle Code die damit verbundenen Tests erfordern. Wenn Sie dann den Master vor dem Zusammenführen neu starten, können Sie sicher sein, dass die Tests erfolgreich sind und der Code wie erwartet funktionieren sollte.
Riaan Schutte
2

Ich möchte allen für ihren Beitrag danken und mir helfen, zu verstehen, was die Leute zu diesem Thema zu sagen haben.

Dies ist meine Antwort nach dem gegebenen Feedback und mein Verständnis basiert jetzt auf den erhaltenen Antworten und Kommentaren. Vielen Dank an alle.

Zusammenfassung

  • Keine perfekten Pull-Anforderungen des Schlägers zu erwarten oder durchzusetzen, da dies nur für alle Beteiligten frustrierend wird.
  • Aber machen Sie es weiterhin zu unserem Ziel für perfekte Pull-Anfragen.
  • Erwarten Sie ein gewisses Maß an Zusammenarbeit / Unterstützung bei Pull-Anfragen. Schließlich fordern Sie dies im Wesentlichen an, indem Sie eine Pull-Anforderung erstellen.
  • Wenn es aufgrund von Design- oder Implementierungsfehlern etwas zu viel wird, verbringen Sie Zeit mit diesem Entwickler und führen Sie eine Paarprogrammierung durch, um sie aufzubauen und ihren Code näher an das Ziel zu bringen . Dies ist die Rolle aller leitenden Entwickler.
  • Junioren benötigen mehr Paarprogrammierungssitzungen als fortgeschrittene Entwickler. Erwarten Sie also, dass Pull-Anforderungen diese Anforderung widerspiegeln.
  • Ermutigen Sie die Entwickler, vor dem Berühren des Codes Entwurfs- / Implementierungsbesprechungen abzuhalten, um die in Pull-Anforderungen identifizierten Nacharbeiten zu reduzieren.
Riaan Schutte
quelle
1
Wunderbare Zusammenfassung & Antwort. Ich wäre überhaupt nicht beleidigt, wenn Sie sich das Häkchen geben würden.
RubberDuck
Danke @RubberDuck, aber meine Zusammenfassung könnte nicht ohne die Antworten und Kommentare aller auf meine Frage existieren. Prost.
Riaan Schutte
0

Können Sie mehr über Ihre Unternehmenskultur in Bezug auf die technischen Teams sagen? Wenn Sie mit der Idee zu kämpfen haben, dass Code für die Produktion bereit ist, wenn ein Entwickler in die Hauptlinie einfließen möchte, was sagen Sie dann Ihren Entwicklern wirklich? Sie sagen ihnen, dass es in Ordnung ist, wenn ihre Arbeit "erledigt" ist, wenn sie nicht funktioniert? Ist es okay, wenn es das System kaputt macht? Wenn sie technische Schulden hinzufügen, ist das vielleicht in Ordnung, wenn sie dies rechtfertigen können und wissen, was sie tun, und zeigen, dass sie später zurückkommen und das Refactoring durchführen können. Aber wenn sie nicht wissen, warum sie etwas Gefährliches tun, wie oft werden Sie es passieren lassen?

Wenn Sie einen Junior-Entwickler haben, werden die ersten Pull-Anfragen offensichtlich Probleme haben. Schließlich sollten sie den Dreh raus bekommen. Wenn Sie feststellen, dass sie weiterhin Probleme haben, weisen Sie ihnen möglicherweise Arbeiten zu, für die sie noch nicht bereit sind?

Oder müssen Sie einen Ersatzjunior einstellen und denjenigen entlassen, der es nicht herausgefunden hat?

Weißt du was ich gesehen habe? Menschen, die keine kompetenten Entwickler sind, arbeiten jahrelang in einem Unternehmen, nur wegen Vetternwirtschaft. Daher erfordern ihre Pull-Anfragen natürlich mehrere Überprüfungen. Im Lean-Sprachgebrauch sind sie "Verschwendung" - eine Belastung für das Team und eine Belastung für das Endergebnis.

Sie müssen sich also selbst entscheiden: Wie viele Pull-Anfragen benötigen Ihre Junioren, um Kompetenz zu zeigen, und haben Sie den Mut, diejenigen loszulassen, die dies nicht tun?

RibaldEddie
quelle
Vielen Dank für Ihre Antwort @RibaldEddie. Wir gehen davon aus, dass die Entwickler Unit-Tests geschrieben, ihre eigenen Arbeiten manuell getestet und überprüft haben, bis zu dem Punkt, an dem sie behaupten würden, dass dieser Code großartig ist, und wenn er es ihnen überlassen würde, würden sie ihn in Master zusammenführen. aber wird 2 Rezensenten bekommen, um es zu überprüfen und hoffentlich diese Aussage zu bestätigen. Wir akzeptieren keine technischen Schulden und entfernen uns vollständig von Korrekturen zugunsten von Lösungen. Die Erwartung ist also, dass der Code diese Anforderungen erfüllt.
Riaan Schutte
@ Riaan wer sind die Rezensenten?
RibaldEddie
Jeder von technischen führt zu Junioren. Normalerweise ist es ein Senior / Intermediate Reviewer zusammen mit einem Junior / Intermediate Reviewer. (2 Rezensenten)
Riaan Schutte
@ Riaan dann würde ich im Laufe der Zeit erwarten, dass sich die Junior-Mitglieder des Teams differenzieren. Sie werden erkennen können, wer gewissenhaft und wer lakonisch ist. Ich finde, dass Softwareentwicklung eine Aktivität ist, die sich gut für eine detailorientierte Mentalität eignet. Einige Leute sind möglicherweise nicht in der Lage, dies durchzuziehen. Sie müssen entscheiden, was mit ihnen geschehen soll. Grundsätzlich sollten Sie jedoch erwarten, dass Entwickler, die Code zusammenführen, sicher sind, dass er wie beabsichtigt funktioniert und produktionsbereit ist. Selbst wenn Sie ein großes, hochentwickeltes QA-Team haben, sollten Ihre Entwickler produktionsbereiten PR-Code erstellen.
RibaldEddie