Umgang mit Mitarbeitern bei der Entwicklung, Beratung nötig [geschlossen]

20

Ich habe unsere aktuelle Projektarchitektur entwickelt und angefangen, sie selbst zu entwickeln (so etwas wie, revision 40) .

Wir entwickeln ein einfaches U-Bahn-Routing-Framework und mein Design schien sehr gut zu funktionieren. Mehrere Hauptmodelle, entsprechende Ansichten, Hauptlogik- und Datenstrukturen wurden "wie sie sein sollten" modelliert und vollständig vom Rendering getrennt. Der algorithmische Teil wurde ebenfalls implementiert abgesehen von den Hauptmodellen und hatte eine geringe Anzahl von Schnittpunkten.

Ich würde dieses Design als skalierbar, anpassbar, einfach zu implementieren, hauptsächlich auf der Basis der "Black-Box-Interaktion" interagierend und sehr nett bezeichnen.

Nun, was wurde getan:

  • Ich habe einige Implementierungen der entsprechenden Schnittstellen gestartet, einige praktische Bibliotheken portiert und Implementierungsstubs für einige Anwendungsteile geschrieben.
  • Ich hatte das Dokument, das den Codierungsstil beschreibt, und Beispiele für diesen Codierungsstil (meinen eigenen geschriebenen Code).
  • Ich habe die Verwendung von mehr oder weniger modernen C++Entwicklungstechniken erzwungen , einschließlich no-deleteCode (umschlossen mit intelligenten Zeigern) usw.
  • Ich habe den Zweck konkreter Schnittstellenimplementierungen und deren Verwendung dokumentiert.
  • Unit-Tests (hauptsächlich Integrationstests, da es nicht viel "tatsächlichen" Code gab) und eine Reihe von Verspottungen für alle Kernabstraktionen.

Ich war 12 Tage abwesend .


Was haben wir jetzt (das Projekt wurde von 4 anderen Mitgliedern des Teams entwickelt):

  • 3 verschiedene Kodierungs Stile der ganzen Projekt (ich glaube, zwei von ihnen bereit erklärt , die gleiche Art zu verwenden :) , Gleiches gilt für die Benennung unserer Abstraktionen (zB CommonPathData.h, SubwaySchemeStructures.h) , die im Grunde sind Header einige Datenstrukturen zu deklarieren.
  • Absoluter Mangel an Dokumentation für die kürzlich implementierten Teile.
  • Was ich in letzter Zeit als " single-purpose-abstractionjetzt" bezeichnen konnte, verarbeitet mindestens zwei verschiedene Arten von Ereignissen, ist eng mit anderen Teilen verbunden und so weiter.
  • Die Hälfte der verwendeten Schnittstellen enthält jetzt Membervariablen (sic!).
  • Rohe Zeigerverwendung fast überall.
  • Komponententests deaktiviert, da " (Rev.57) They are unnecessary for this project".
  • ... (das ist wahrscheinlich nicht alles) .

Die Geschichte von Commit zeigt, dass mein Design als Overkill interpretiert wurde und die Leute begannen, es mit persönlichen Fahrrädern und neu implementierten Rädern zu kombinieren und hatten dann Probleme , Code-Chunks zu integrieren .

Jetzt - das Projekt macht immer noch nur eine kleine Menge von dem, was es zu tun hat, wir haben schwerwiegende Integrationsprobleme, ich nehme einige Speicherlecks an.


Ist in diesem Fall etwas möglich?

Mir ist klar, dass alle meine Bemühungen keinen Nutzen hatten, aber die Frist ist ziemlich bald und wir müssen etwas tun. Hatte jemand eine ähnliche Situation?

Grundsätzlich dachte ich, dass ein guter (nun, ich habe alles getan, was ich konnte) Start für das Projekt wahrscheinlich zu etwas Schönem führen würde, aber ich verstehe, dass ich falsch liege.

Yippie-Kai-Yay
quelle
7
Warum haben Sie sich nicht mit den anderen 4 Programmierern zusammengesetzt, bevor Sie in den Urlaub gefahren sind (oder noch bevor Sie mit dem Projekt begonnen haben) und über das Design mit ihnen gesprochen? Ich stelle fest, dass die Menschen die Codestandards und die Designinfrastruktur viel eher respektieren, wenn Sie sie persönlich in die Diskussion einbeziehen und ihnen erklären, warum Ihre Designentscheidungen angemessen sind. Vielleicht ist Ihr Design überarbeitet, vielleicht haben diese Leute einen Punkt (obwohl sie das ursprüngliche Design immer noch hätten respektieren müssen, wenn sie Änderungen vorgenommen haben). Ich denke, du solltest dich sofort treffen und darüber sprechen, was du versuchst zu tun.
Marty B
Können Sie bitte den Titel Ihrer Frage verbessern? Der aktuelle Titel ist vage und charakterisiert Ihre Frage nicht wirklich.
Robert Harvey
1
Hallo Yippie-Kai-Yay, es ist aus Ihrer Frage nicht klar, welches praktische, lösbare Problem Sie uns stellen. Programmers.SE ist kein Diskussionsforum, in dem Sie sich über die Probleme des Tages austauschen können. Können Sie das spezifische Problem identifizieren, bei dem Sie Hilfe von einem erfahrenen Programmierer benötigen, und danach fragen?
1
@Mark Ich denke, wenn mindestens 12 Leute denken, dass dieses Thema nützlich ist und es etwas zu diskutieren gibt, ist es einfach seltsam, es zu schließen.
Yippie-Kai-Yay
1
Ich denke, dies könnte zu einer relevanten Frage geformt werden (anstatt einfach geschlossen zu werden), die sich mit Projektmanagement und Teamarbeit befasst, die wichtige Aspekte der Programmierung und Entwicklung sind.
Ross

Antworten:

18

Refactor gnadenlos aus dem Chaos raus!

Nehmen Sie den Codierungsstil, der den größten Teil des verwendbaren Stils ausmacht, und verwenden Sie ihn für dieses Projekt.

Das Schlimmste ist, dass Sie ein Rollback auf Revision 40 durchführen müssen und Ihre Programmierer eine 12-tägige Schulung hatten, die ihnen ein besseres Verständnis des Themas verschaffte.

Wenn Ihre Programmierer so viel über sauberes Codieren lernen müssen, sind die zwölf Tage die geringste Verzögerung, die Sie haben werden.

DoubleMalt
quelle
Ich denke, dies ist unter den gegebenen Umständen die einzig richtige Antwort.
Robert Harvey
Wenn ich solide Tests habe, zögere ich nicht, alles zu brechen, wenn fehlerhafter Code festgeschrieben wird. Es ist der Schlüssel, um das Projekt wartbar zu halten.
Deadalnix
@dead: Ähm, was bedeutet das überhaupt?
Robert Harvey
@Robert Nun, richtig geschriebene Unit-Tests eignen sich eigentlich sehr gut für das Refactoring, da Sie leicht eine Menge Dinge ändern können und trotzdem sicher sein können, dass Ihr Programm korrekt ist.
Yippie-Kai-Yay
@Robert> Das bedeutet, dass Sie nicht zögern sollten, Code in den Papierkorb zu werfen, wenn er nicht gut genug ist. Wenn Sie solide Tests haben, können Sie Lücken mit besserem Qualitätscode füllen und sicherstellen, dass es sich genauso verhält wie der Rest des Programms.
Deadalnix
10

Um es mit Ihrer Frage zu sagen: "Ich war ein paar Wochen weg und bin nicht einverstanden mit dem, was mein Team getan hat, als ich weg war. Wie kann ich sie dazu bringen, das zu tun, was ich will, wenn ich nicht hier bin?"

Ich sage Ihnen, dass dies kein technisches Problem ist, sondern ein Verwaltungsproblem. Meine Annahme (bitte verzeihen Sie mir, wenn ich mich irre) ist, dass Sie die technische Lösung einer Armee von Schergen diktieren, die aus irgendeinem Grund mit Ihrer Lösung nicht einverstanden oder nicht einverstanden sind oder diese nicht verstehen.

Wenn 12 Tage ausreichen, um Ihrem Design so viel Schaden zuzufügen, muss es einen Grund geben. Ist das Design zerbrechlich? Ist es überentwickelt? oder hat die Mannschaft es einfach aus Trotz getan? Wie sind Ihre Fristen und Lieferungen? Fest? versuchten sie nur, einen zu treffen?

In einem Fall habe ich gesehen, dass der technische Vorsprung dem Spiel so weit voraus war, dass der durchschnittliche Entwickler (ich) nicht mithalten konnte. Der technische Leiter konnte keinen kommerziell brauchbaren Code entwerfen, da er der einzige war, der ihn pflegen konnte. Wenn ein Diplom-Entwickler es nicht warten kann, ist es für die Geschäftswelt zu komplex. In allen anderen Fällen handelte es sich lediglich um einen Mangel an Managementfähigkeiten auf der Managementseite.

Die Teamdynamik ist gebrochen. Sie können (wie von anderen vorgeschlagen) Zeit damit verbringen, das Chaos umzugestalten, und müssen es das nächste Mal wieder tun, wenn Sie sich verabschieden. Möglicherweise müssen Sie Ihre Teammitglieder aufrüsten, aber ich glaube, Sie müssen zuerst die Teamdynamik korrigieren, da sie anscheinend über genügend Fähigkeiten verfügen, um die Arbeit zu erledigen, auch wenn Sie dies für hässlich halten.

mattnz
quelle
Schöne Gedanken, ich muss vielleicht etwas überdenken. Vielen Dank,.
Yippie-Kai-Yay
8

Paar.

Was Sie beschreiben, ist eine Menge, es richtig zu machen, technisch gesehen, solo . Ja, Sie haben versucht zu dokumentieren, haben versucht, Standards durchzusetzen - aber Sie haben (anscheinend) nicht kommuniziert.

Nun, Ihr Team hat gerade mit Ihnen kommuniziert, ziemlich durchschlagend. Sie sagten: "Hey, Yippie - du kommunizierst nicht!" Die mächtigste Form der Kommunikation, die ich kenne, ist das Pairing. Paar. Bis sie es bekommen oder bis sie dich überreden, es anders zu machen.

Carl Manaster
quelle
2
Ich habe viel über Pairing gehört, aber ich habe noch nie von jemandem gehört, der es tatsächlich tut und Vorteile bekommt.
Robert Harvey
4
Es funktioniert nie Wenn Sie zwei Pferde zusammensetzen, wird eines zu einem Ballast, es sei denn, sie haben die gleiche Zugkraft. Bei der Programmierung geht es um technische Fähigkeiten und vor allem um intellektuelle Fähigkeiten. Es kommt sehr selten vor, dass zwei Personen die gleichen intellektuellen Fähigkeiten besitzen, die für eine erfolgreiche Paarung erforderlich sind. Je höher die Intelligenz, desto geringer ist die Wahrscheinlichkeit eines solchen Ereignisses. Es ist nur ein Förderer, der leicht mehrere Teilnehmer nutzen kann, was bei intellektueller Arbeit nie der Fall ist. Alle höchst erfolgreichen Entwürfe waren immer das Ergebnis von einem, sehr selten von zwei oder mehr Gehirnen.
Gene Bushuyev
Es klappt. Es funktioniert, wenn Entwickler über vergleichbare Erfahrungen und Fähigkeiten verfügen, und es funktioniert für beide Entwickler, wenn die Fähigkeiten nicht übereinstimmen. Es ist erstaunlich, wie zuverlässig es Kritiker der Paarung anscheinend nie versucht haben. Ich habe es getan; Ich tue es. Es klappt.
Carl Manaster
@ Carl Manaster> Es funktioniert mit den richtigen Paaren. Ich habe es mehrere Male erfolgreich gemacht, aber im Moment bin ich langsamer und produziere mit meinem eigentlichen Paar schlechteren Code als solo. Es ist also wichtig, wenn nicht sogar das Kapital, sich mit der richtigen Person zu paaren.
Deadalnix
@Carl Manaster - Ich bin immer überrascht, dass die Leute darauf bestehen , etwas zu versuchen - in Fernsehen, Radio, Foren, religiösen Kulten usw. Der Versuch , auch als anekdotischer Beweis bekannt, ist kein Mittel, etwas zu beweisen, sondern ein logischer Irrtum. Machen Sie zuerst einen schlüssigen Fall, dann können Sie über Experimente sprechen.
Gene Bushuyev
7

Wie Brooks uns in den letzten 30 Jahren mitteilte, ist die konzeptionelle Integrität der wichtigste Teil jedes Projekts. Für ein nicht triviales und vollständiges Teilsystem sollte genau eine Person zuständig sein, die für das Design verantwortlich ist und die Befugnis hat, die Implementierung zu steuern. An diesem Teil Ihres Projekts ist ein Fehler aufgetreten. Was auch immer es war, die einzige Lösung ist ein Rollback auf den Code im Repository, der vorher existierte. Ein Verlust von 12 Tagen ist nichts im Vergleich zu den Kosten für die Aufrechterhaltung eines defekten Designs. Ich würde auch darüber nachdenken, wie man die an dieser Untersuchung beteiligten Personen von der weiteren Arbeit an dem Projekt entfernen kann, da sie sich als inkompetent erwiesen haben.

george711
quelle
3

Eine Sache, die ich für den Anfang tun würde, ist, ein gutes Codeüberprüfungstool zu bekommen, das den fehlerhaften Code markiert und dokumentiert, warum es fehlerhaft ist und (konzeptionell) wie es gemacht werden sollte. Soweit ich weiß, wird eine Menge Schlimmes getan, und es wäre eine Menge Arbeit, dies zu überprüfen. Angenommen, Sie sind der einzige, der Fehler im Code feststellt, ist es möglicherweise nicht möglich, alles selbst zu überprüfen. Sie können jedoch die schlimmsten Verstöße markieren und sie in Einträge in Ihrem Fehlerverfolgungssystem umwandeln, die der Person zugewiesen sind, die den entsprechenden Code geschrieben hat.

Der beste Anreiz für das Schreiben von Qualitätscode besteht darin, zu wissen, dass Sie in Zukunft verfolgt werden, wenn Sie dies nicht tun. Ihre Mitarbeiter scheinen sich nicht darum zu kümmern, daher ist es die beste Medizin, sie zu veranlassen, die falschen Teile selbst zu überarbeiten und zu lernen.

Zu gegebener Zeit können Sie andere Teile des Codes, die problematisch sind, erneut aufrufen und dem ursprünglichen (schlechten) Autor erneut zuweisen. Nach einer Weile werden sie beim ersten Mal die Vorteile einer guten Arbeit erkennen.

Ich gehe davon aus, dass Sie ein Rollback zu Ihrer Originalversion nicht für eine Option halten - mit anderen Worten, trotz des schlechten Codes, den Ihre Kollegen geschrieben haben, haben sie einige Funktionen hinzugefügt, und der Nettowert der aktuellen Version ist höher als der des Originals. Ich gehe auch davon aus, dass Sie, auch wenn dies nicht der Fall ist, kein politisches Kapital haben, um dieses Rollback durchzuführen und sie dazu zu bringen, den Code neu zu schreiben (da nur sehr wenige Menschen auf dem Planeten über ein solches Kapital verfügen). Dies und vieles mehr ist die Komplexität der Beurteilung einer Situation, die ich selbst nicht erlebe, aber ich hoffe, dass meine zwei Cent geholfen haben.

Fabio Ceconello
quelle
2

Eine Sache, die ich nicht erwähnt habe, die aber in letzter Zeit aufgetaucht ist, wo ich arbeite, sind die Probleme von "Entwicklersilos" und "Buy-In".

Am Anfang meines aktuellen Projekts habe ich eine Kernbibliothek entworfen, die im Wesentlichen von mir selbst stammt. (Ähnlich wie bei Rev. 40). Dann, als ich es fertig hatte, stellte ich mich dem Rest des Teams vor und sagte jedem, dass er damit beginnen könne. Was in den folgenden Monaten passierte, war, dass die Leute immer wieder dasselbe implementierten, was sich bereits an anderen Orten in dieser Bibliothek befand. Der CTO (der aktiv codiert) weist darauf hin, dass es vom Rest des Teams nie ein Buy-in für die Architektur / Design / öffentlichen Schnittstellen der Bibliothek gegeben habe.

Nun, wir haben gerade eine umfassende Überarbeitung dieser Bibliothek durchgeführt, die das gesamte Design vermutlich verbessert hat, um besser zu dem zu passen, was wir gerade tun, aber wieder nahm ein Entwickler die Bibliothek als ihr einziges Projekt und arbeitete mehrere Wochen daran dann präsentierte es einfach. "Voila! Hier ist es! Ist es nicht hübsch?"

Jetzt, da ich die neue Version verwenden muss und das gleiche Problem vorliegt, hasse ich es, wie er es getan hat. Und er hat Dinge ausgelassen, die notwendig waren, weil er nicht mit anderen zusammengearbeitet hat, während er daran arbeitete. Also wieder beginne ich, dasselbe Material an anderen Orten zu implementieren und für das zu arbeiten, was ich tun muss.

Lange Rede, kurzer Sinn - Wenn Sie möchten, dass die Codequalität steigt und konsistent bleibt, sollten Sie das gesamte Team zusammenbringen, um Standards, Stile usw. festzulegen. Darüber hinaus wird jederzeit jemand eine Grundlage oder ein Kernstück Ihres Codes erstellen Anwendung, würde ich vorschlagen, dass die verantwortliche Person das gesamte Team bei der Gestaltung der Klassen usw. führt, so dass am Ende des Tages das gesamte Team in die gesamte Anwendungsarchitektur einkaufen muss. Wenn sie wissen, wie der Code eines anderen Teammitglieds funktioniert, ist es weniger wahrscheinlich, dass sie ihn erneut auf eine für sie geeignete Weise implementieren.

Noah Goodrich
quelle
1

Sind Sie der leitende Entwickler (oder einer der leitenden Entwickler) in diesem Team? In diesem Fall müssen Sie einige Schulungsseminare zu Best Practices abhalten. Sie sollten wahrscheinlich einen Großteil der geleisteten Arbeit zurücknehmen, ein Meeting mit Ihrem Team abhalten und den richtigen Weg erläutern, um die erforderlichen Funktionen so zu implementieren, dass das vorhandene Design beibehalten wird.

Angesichts der knappen Frist müssen Sie den Code möglicherweise so wie er ist versenden und nach Ihrer Veröffentlichung überarbeiten (umschreiben?).

Es hört sich auch so an, als müssten Sie einige gängige Code-Praktiken definieren und durchsetzen. Haben Sie an Ihrem Arbeitsplatz einen Code-Überprüfungsprozess durchgeführt? Wenn nicht, ist es jetzt an der Zeit, einen zu implementieren. Code-Reviews sind übrigens eine großartige Möglichkeit, um neuere Entwickler über bewährte Vorgehensweisen zu informieren.

BEARBEITEN:

Ich bin kürzlich in eine ähnliche Situation geraten. Das Management meiner Firma bestand darauf, dass wir Vertragsentwickler einsetzen, um einen Großteil unserer Bewerbung zu schreiben. Der Code, den sie produzierten, war schrecklich (um es freundlich auszudrücken), aber wir waren gezwungen, ihn zu verwenden. Bis heute habe ich 80% des Codes umgeschrieben, den die Auftragnehmer für uns geschrieben haben. Es war voller Fehler und unmöglich, mit neuen Funktionen zu erweitern. In ein paar Monaten wird mein Team alles neu geschrieben haben, was das Geld, das in die Auftragsentwicklung investiert wurde, effektiv zur Verschwendung macht.

Schlechter Code kostet wirklich Geld, darüber sollten Sie mit Ihren Managern sprechen, da Sie wahrscheinlich deren Hilfe benötigen, um Codierungsstandards zu implementieren und durchzusetzen.

Nathanael
quelle
1

Sie haben sich bemüht, aber es ist Tatsache, dass niemand das Sagen hat . "Aber ich bevorzuge meinen Codierungsstil", keine Scheiße. Ich möchte den ganzen Tag an meinen persönlichen Projekten arbeiten und werde trotzdem bezahlt.

Hoffentlich können Sie dies den Mächten vorstellen und ihnen zeigen, was hätte gegen die Wild-West-Show getan werden können, die zwei Wochen andauerte. Es scheint, als müssten Sie etwas aus der Tür holen, aber weiterhin das Problem fehlender Kontrollen und Konsistenz verfolgen.

Konzentrieren Sie sich auf die wenigen, die zu Ihrem Plan gehörten, und unternehmen Sie alles, um sie dazu zu bringen, dieses Durcheinander zu beheben und sie in zukünftigen Projekten in Ihr Team aufzunehmen. Möglicherweise müssen Sie den Rest ablehnen, wenn sie ihn nicht zusammenbringen können.

JeffO
quelle