Wie kann die Konsistenz in der Anwendungsarchitektur aufrechterhalten werden, wenn das Team wächst?

46

Als einziger Entwickler in einem Startup hatte ich den Luxus, viele Entscheidungen in der Architektur und den Frameworks unserer Anwendung treffen zu können.

4 Jahre schneller Vorlauf und eine Akquisition später habe ich ein 5-köpfiges Team und oft fühlt es sich an wie der wilde Westen. Menschen, die eine Designentscheidung treffen, die ihnen gefällt: Ganzzahlen und Aufzählungen für DB-Typen an einer Stelle und Zeichenfolgen an einer anderen, dieses Framework für ein Problem und dann ein anderes Framework für dasselbe Problem an einer anderen Stelle usw.

Wie kann ich die Konsistenz durchsetzen? Es fühlt sich für mich wichtig an, aber meine Teammitglieder scheinen die Methode "Wenn es funktioniert, funktioniert es" zu abonnieren.

Ich denke, ein großer Teil meiner Frage ist: Ist es für mich unrealistisch, solche Standards zu erwarten? Ich kämpfe mit der Idee, als Diktator zu wirken, der die Kreativität unterdrückt, aber das zu tun, was sie wollen, scheint nicht skalierbar zu sein.

Deekor
quelle
8
Können Sie uns so viel wie möglich über Ihren bestehenden SDLC-Prozess erzählen? Sind Sie Waterfall, Agile, etc? Verwenden Sie TFS oder Task Management? Führen Sie Codeüberprüfungen durch oder verwenden Sie FxCop oder andere Formen der Codeüberprüfung? Produzieren Sie Konstruktionsunterlagen? Haben Sie eine bestimmte Architektenrolle?
John Wu
1
@gnat: Kein großartiges Duplikat, wenn die Antworten irgendein Hinweis sind.
Robert Harvey
2
Um fair zu sein, sollten diese Standards sehr früh festgelegt worden sein und auf einigen allgemein anerkannten "Best Practices" -Dokumenten basieren, damit sich niemand über Bevorzugung oder Elitismus beschweren kann. Wenn Sie von einer Person einen harten Rückstoß erhalten, müssen Sie überlegen, ob ein Cowboy die gesunde Umgebung für den Rest des Teams wert ist, und diesen ersetzen. Dann denke ich, dass alle unten gegebenen Ratschläge, vor dem Einchecken eine strenge Codeüberprüfung durchzuführen und eine Architekturkomponente hinzuzufügen, Wunder wirken.
Patrick Hughes
1
Das ist der heilige Gral der Softwareentwicklung (abgesehen von dem anderen heiligen Gral, der eine genaue Anforderungserhebung darstellt).
pmf

Antworten:

52

Was macht dich so besonders?

Meine CPU sagt, dass es funktioniert und ich nach Hause gehen möchte. Warum belästigst du mich?

Sie können mit dieser Einstellung umgehen, indem Sie jeden dazu zwingen, Pull-Anfragen zu stellen. Aber jetzt stehen die Fristen vor der Tür. Schlechter Code drückt auf die Tore deines unberührten Schlosses und du gibst endlich dem Druck nach. Oder du gewinnst nur, um zu finden, dass alle gehen und niemand deine unberührte Burg benutzt.

Es gibt viele Tools, die bei diesem Problem helfen. Quellcodeverwaltung, Codeüberprüfungen, Codierungsstandards usw., aber das Herz und die Seele des Problems sind Ihre subjektiven Meinungen darüber, was am besten ist, müssen als relevant angesehen werden. Dafür muss man sich ihren Respekt verdienen und bewahren. Tun Sie das und das ist viel einfacher. Wenn Sie dies nicht tun, werden Sie durch kein Werkzeug oder keine Übung gerettet.

Der beste Weg, dies zu tun, ist frühzeitig zu kommunizieren. Sagen Sie mir nicht "Wir verwenden in diesem Shop keine Zeichenfolgen für unsere DB-Typen", 6 Monate nachdem ich mich für die Idee entschieden habe. Mir zu sagen, dass es seit 2 Jahren in der Dokumentation vergraben ist, ist keine Rechtfertigung dafür, dass ich das zulasse.

Aus welchem ​​Grund auch immer Sie Dinge haben, die Sie interessieren. Wenn Sie sich für sie interessieren und einen Punkt haben, lassen Sie diese Dinge vor, während und unmittelbar nach der Kodierung jedes Moduls klar kommunizieren.

Code-Stalking ist eine wunderbare Praxis. Investieren Sie in die Tools und Vorgehensweisen, die Sie benötigen, damit Sie den Code innerhalb von Minuten nach dem Schreiben überprüfen können. Pair Programm und das Tool ist einfach ein Gaststuhl.

Warum? Jede Sekunde, die vergeht, nachdem ich Code geschrieben habe, erhöht die Kosten für die Änderung. Das liegt daran, dass meine Erinnerung an den Code eine Halbwertszeit hat. Ich fange an, es zu vergessen, sobald meine Blase eine Pause fordert.

Reduzieren Sie die Dinge, die Sie interessieren, auf die zugrunde liegenden Prinzipien. Anstatt mir eine Liste mit 101 zu befolgenden Regeln vorzulegen, geben Sie mir die 10 Grundsätze, gegen die sie verstoßen, damit ich selbst herausfinden kann, welche Regel 102 gelten soll.

Ermächtige mich, meine eigene Vision durchzusetzen, indem du mir hilfst, deine zu sehen, und wir kommen großartig miteinander aus.

ist es für mich unrealistisch, solche standards zu erwarten? Ich kämpfe mit der Idee, als Diktator zu wirken, der die Kreativität unterdrückt, aber das zu tun, was sie wollen, scheint nicht skalierbar zu sein.

Dann diktieren Sie nicht! Machen Sie dies zu einer positiven Erfahrung. Das ist kein New-Age-Hippie-Quatsch. Es ist Grundpsychologie. Sie versuchen, das menschliche Verhalten zu ändern. Zufällig und positiv ist die Verstärkung (fragen Sie einfach Las Vegas). Wenn Sie negativ werden, müssen Sie mit Ihrer Verstärkung im Einklang stehen. Das ist ein unerreichbarer Schmerz. Seien Sie positiv, wenn Sie die Weisheit verbreiten, und Sie können beiläufig sein.

Ich weiß, woher du kommst, weil ich dort war. Sie hatten die Kontrolle und jetzt ist es weg. Du willst es zurück. Na komm drüber hinweg. Jetzt hast du ein Team. Sie müssen nicht kontrolliert werden. Was sie brauchen, ist Führung. Was Sie brauchen, ist keine Kontrolle. Es ist Einfluss. Es funktioniert besser und ist viel weniger Arbeit. Meistern Sie das und entspannen Sie sich. Das sollte Spaß machen.

Wenn Sie es richtig machen, können Sie in den Urlaub fahren und das wird immer noch funktionieren. Wie? Indem wir nicht nur ein Führer sind, sondern auch die anderen dazu bringen, Führer zu sein. Sobald Sie Ihre Vision in das Team eingebracht haben, können sie arbeiten, während Sie weg sind, indem Sie einfach nachahmen, was Sie getan haben. Betreue die Neulinge und ermutige sie, sich zu verbessern und auch andere zu beeinflussen.

Ich weiß dass es hart ist. Wir haben diesen Beruf nicht ausgeübt, weil wir gut mit Menschen umgehen können. Wir kommunizieren am besten mit Code. Das ist gut. Mach es einfach schnell und oft. Zeig mir, warum deins besser ist. Hör zu, wenn ich sage, dass es nicht so ist. Tun Sie dies, während ich noch darüber nachdenke. Ich liebe es zu codieren. Es gibt nur wenige Menschen auf dem Planeten, mit denen ich darüber sprechen kann. Sei einer von ihnen.

kandierte_orange
quelle
4
Es ist ziemlich offensichtlich, was Sie mit "Code Stalking" meinen ... Aber Google gibt mir nichts als das Verbrechensrecht aus der ganzen Welt.
Jeremy
3
füge der Liste "Kodierungsstandards" hinzu
BЈовић
5
Da ich den Begriff einzuführen scheine, werde ich die Etymologie des "Code Stalking" geben. Ich hatte einen Code eingecheckt, der eine abstrakte Factory verwendete, um die Zeitstempel zu erhalten. Eine Peer-Entwicklerin hat versucht, den Code zusammenzuführen (Code einchecken), und hat seit dem Auschecken einen Bildlauf durch die Codeänderungen durchgeführt. Sie bemerkte meine Fabrik und fand sie neugierig. Sie war sich nicht sicher, warum ich das tat. Also ging sie rüber und fragte mich. Als ich verwirrt aussah, sagte sie: "Oh, ich habe dich nur mit Code verfolgt." Facebook verändert unser Vokabular.
candied_orange
1
Wahr! " Ermächtige mich, meine eigene Vision durchzusetzen, indem du mir hilfst, deine zu sehen, und wir kommen großartig miteinander aus. " Ich liebe es, wenn sich Poesie, Code und Philosophie mischen!
Pedro Lobito
@candied_orange: Ich bin ein bisschen verblüfft von der ganzen "Code Stalking" Sache. Hast du sie nur verprügelt? Im Kontext Ihrer Antwort scheint es, als würde sie Sie mit Code verfolgen.
Robert Harvey
23

Lassen Sie zuerst die Leute Dinge pflegen, die sie nicht geschrieben haben. Für Entwickler ist es sehr einfach, sich daran zu gewöhnen, gewohnte Frameworks und Techniken zu verwenden. Es macht Spaß, zwischen Frameworks und Methoden wechseln zu müssen. Wenn jemand gezwungen ist, sich außerhalb seiner eigenen Ecke des Codes zu bewegen und dies häufig zu erleben, wird dies zu einigen Beschwerden und hoffentlich zu einer produktiven Diskussion führen, die dazu führen kann, dass Menschen sich auf etwas standardisieren wollen.

Ziehen Sie als Nächstes Anforderungen und Codeüberprüfungen ab. Lassen Sie niemals zu, dass Code ohne vorherige Codeüberprüfung mit Ihren Hauptniederlassungen zusammengeführt wird. Jeder kann das. Wenn jemand etwas sieht, das anders ist als das, was er getan hätte, kann dies zu Diskussionen und Teamarbeit führen, um eine bessere Lösung zu finden. Es macht auch jeden zum Verwalter der Codebasis, was die Leute (hoffentlich) dazu bringt, sich darum und um den Zustand des Codes zu kümmern, der in die Codebasis einfließt.

Schließlich haben Design-Diskussionen. Sie können formell oder informell sein, haben sie aber. Lassen Sie diejenigen, die teilnehmen möchten, dies tun. Besprechen Sie, welche Frameworks Sie verwenden möchten, welche Vor- und Nachteile Enums vs. Ints usw. Treffen Sie dann eine Entscheidung und dokumentieren Sie sie irgendwo (wie in einem Standarddokument). Dann müssen Sie auf etwas hinweisen, wenn Probleme auftreten. Haben Sie auch keine Angst, eine Normungsentscheidung erneut zu treffen. Die Technologie ändert sich (schnell), ebenso wie Ihre Bedürfnisse als Team und als Unternehmen.

Helfen Sie den Menschen zu sehen, was Sie sehen und fühlen, als hätten sie einen Anteil an der Qualität des Codes. Dann treiben Sie die Diskussionen sanft voran, um einen Standard zu finden, wenn Meinungsverschiedenheiten auftauchen.

Becuzz
quelle
Das Schöne an dieser Methode ist, dass der Manager nicht nur seine Vorlieben aufdrängt, sondern dem Team die Möglichkeit gibt, Entscheidungen zu treffen, und ihnen die Möglichkeit gibt, diese durchzusetzen.
Robin Bennett
6

Führen Sie Codeüberprüfungen jedes Mal durch, wenn jemand Code in die Hauptniederlassung / den Hauptstrang einbinden möchte, und halten Sie die Leute bei der Überprüfung des Codes an diesen Standards fest.

Und ich meine nicht, dass nur Sie die Codeüberprüfungen durchführen sollten. Jeder sollte den Code aller anderen überprüfen. Dies verbreitet das Wissen über das System im gesamten Team, führt aber auch dazu, dass Carol Bobs Code überprüft und sagt: "Ich sehe, dass Sie dort eine Ganzzahl verwendet haben. Ich verwende immer eine Enumeration." Sie entdecken die Diskrepanzen, die Sie gesehen haben, und wenn sie sich darum kümmern, werden sie feststellen, dass jeder auf die gleiche Seite kommen muss.

Die akzeptierten, vereinbarten Standards entstehen, an welchem ​​Punkt Sie sie dokumentieren und sicherstellen, dass die Leute ihnen folgen. Dies würde Dinge wie "Aufzählungen in der DB für ..." usw. beinhalten. Sie können auch dokumentieren, welche Frameworks verwendet werden sollen usw.

Matthew
quelle
Ich denke, ein großer Teil meiner Frage ist, ob es für mich unrealistisch ist, solche Standards zu erwarten. Ich kämpfe mit der Idee, als Diktator zu wirken, der die Kreativität
unterdrückt,
3
@Matthew, obwohl ich Ihnen im Allgemeinen zustimme, würde ich dies in umgekehrter Reihenfolge tun. Entwurfsprüfungen stehen an erster Stelle und Richtlinien ergeben sich aus / während der Entwurfsprüfungen. Wenn Sie die Bürde, alles niederzuschreiben, vorab dem Architekten / Leiter auferlegen, verlagert sich die Bürde auf den Streithelfer .
Nick Alexeev
@ Deekor: Sie müssen Ihre Schlachten auswählen. Finde heraus, worauf du deinen Fuß setzen musst und dokumentiere das. Sie müssen nicht alles
Robert Harvey
2
@ Deekor, Sie können Standards und gängige Codierungspraktiken durchsetzen, ohne "die Kreativität einzuschränken". Das ist sowieso ein falsches Argument. Gemeinsame Kodierungsstandards führen zu einer einfach zu wartenden Software. Free-for-All-Codierung führt zu Albträumen.
Matthew
1
@ Nick Alexeev, ich stimme zu; wird bearbeiten.
Matthew
1

Wo immer möglich, können Sie Tools / Skripte schreiben, um Ihre Projekte automatisch zu analysieren und festzustellen, welche Standards, Tools und Ansätze das Projekt verwendet. Sie können dies tun, indem Sie ein benutzerdefiniertes Tool als Teil eines CI-Builds ausführen.

Lassen Sie die Ausgabe der Tools in ein 'Scorecard'-Dokument schreiben, z. B. ein Google Sheet mit einer Zeile pro Einheit (z. B. pro' Anwendung 'oder Projekt oder API oder was auch immer), wobei Spalten für die verschiedenen Metriken / Standards befolgt werden. Dies gibt den Menschen einen Überblick darüber, welche Standards es gibt, wie gut sie angenommen sind usw. und bringt Ordnung in das Chaos.

Sie können Spalten auch manuell aktualisieren lassen, aber wir wünschen Ihnen viel Glück, dass Sie auf dem neuesten Stand sind: D

mcintyre321
quelle