Beratung / Ansatz zum Destillieren von homogenem Code und Erstellen eines gemeinsamen Codes für ein Team

8

Ich arbeite für den Bundesstaat Kalifornien. Mein Programmierteam ist meiner Meinung nach nicht wirklich ein "Team", da wir normalerweise alleine an Projekten während des gesamten Lebenszyklus der Anwendung / Systeme arbeiten.

Das Endergebnis ist, dass viele Entwickler das Rad neu erfinden ... ihre eigenen Datenschichten schreiben, obwohl die überwiegende Mehrheit von uns an derselben Oracle-Datenbank arbeitet ... ihre eigenen Sicherheitsmaterialien schreibt ... die Liste geht auf.

Ich kann die Mentalität meiner Mitarbeiter nicht ändern und habe keine realistischen Ambitionen, unseren Teamprozess zu ändern ... aber mein Ziel ist es, unser Team dazu zu bringen, ein bisschen mehr zusammenzuarbeiten, zumindest um ein gemeinsames Gebäude aufzubauen Blockstücke, die wir alle für die Boilerplate-Funktionalität verwenden können.

Die offensichtlichen Vorteile sind, dass Tests und Support viel besser gewartet werden können, wenn alle Benutzer mit einem gemeinsamen Teil vertraut sind, die Zeit bis zur Produktion kürzer ist, wenn Sie nicht dasselbe Repository schreiben, das bereits jemand anderes erstellt hat, und wir uns darauf konzentrieren können, bessere Lösungen bereitzustellen zu den einzigartigen Problemen, die unsere Apps lösen müssen ... usw.

Ich predige vor dem Chor, da bin ich mir sicher.

Der Trick ist, dass der Staat Veränderungen nicht mag und seine Angestellten auch nicht. Manager ignorieren neue Ideen oft einfach, weil sie Reibungsverluste vermeiden möchten und lieber so weitermachen möchten, wie sie sind.

Es gibt ähnliche Fragen, aber ich suche nach Ratschlägen, wie einer von Ihnen in eine ähnliche Situation geraten ist, und nach einer Richtung, um eine Basisanstrengung zu erreichen, die es einfacher macht, sich dem Management zu nähern.

EDIT: Nur um ein paar Dinge zu klären:

  • Der Umfang, den ich suche, befindet sich im IT-Shop meiner staatlichen Agentur. Ich versuche nicht, mehrere Abteilungen zu koordinieren. Ich habe Leute von den Stützrädern geholt, bevor ich sie gebeten habe, Motorräder zu fahren.

  • Sicherheit ist kein großes Problem, die meisten unserer Anwendungen sind intern und in Windows Forms geschrieben, die auf Citrix verteilt sind (ugh.), Und fast alle verwenden dieselben Unternehmenstabellen in Oracle ... nur sehr wenige, wenn Apps so "klassifiziert" sind sprechen. es sollte die Zusammenarbeit nicht behindern.

  • Ich bin so weit gegangen, einen NuGet-Feed mit ein paar Boilerplate-Codeteilen einzurichten, habe ein paar Repos für Oracle geschrieben, einige E-Mails verschickt, aber wenig Feedback erhalten. Ich habe ungefähr 1/3 unseres Teams, das ReSharper verwendet, und sende von Zeit zu Zeit E-Mails mit Tipps ... wieder nicht viel Feedback.

one.beat.consumer
quelle

Antworten:

3

Die Schwierigkeit ist...

die offensichtlichen Vorteile

ist für die Menschen um Sie herum möglicherweise nicht so offensichtlich, besonders wenn sie keine Entwickler sind. Ich habe sowohl für die Landesregierungen als auch für die Bundesregierung gearbeitet, damit ich mich in Ihre Situation einfühlen kann. Nach meiner Erfahrung müssen Sie ihnen das Geld zeigen . Beginnen Sie, Änderungen an Zahlen ( z. B. Metriken ) gleichzusetzen, und setzen Sie dann Metriken mit Geld gleich. Mir ist klar, dass das keinen Spaß macht und ich weiß, dass du es nicht auch haben solltest, aber das ist oft so. Alle Staaten befinden sich in einer Haushaltskrise und zeigen ihnen, wie sie größere Anforderungen erfüllen können, ohne mehr Geld zu benötigen, je attraktiver Ihre Ideen werden.

Unterwegs werden Sie vielleicht feststellen, dass etwas, das Sie tun möchten, besser klingt ( oder sich besser anfühlt ), aber die Zahlen unterstützen Sie nicht. In diesem Fall beginnen Sie möglicherweise eine technologische religiöse Debatte, die Sie wirklich verärgern kann. oder völlig entgleisen; andere Fortschritte, die Sie machen. In diesem Fall geben Sie es auf und fahren Sie mit der nächsten Idee fort. Kommen Sie zu diesen zurück, sobald alle offener für Veränderungen sind.

Für Metriken ... beginnen Sie mit den Klassikern, sie funktionieren in den meisten Fällen gut.

  • Zeit / Zeitpläne ( Kann die Leistung des Systems beinhalten )
  • Geld ( ausgegeben und gespart )
  • Material
  • Mängel ( Raten, Schweregrad, Sichtbarkeit für Endbenutzer )
  • Zuverlässigkeit ( in Bezug auf die Regierung ist dies Ao [Betriebsverfügbarkeit] und MTBF Mean Time Between Failures )

Viel Glück!

JoeGeeky
quelle
Danke Joe. Ich denke, das ist der Ansatz, den ich verfolgen werde. Ich habe es schon einmal informell versucht, aber ich denke, Sie haben den Nagel auf den Kopf getroffen, dass formelle Konvertierungen / Berechnungen durchgeführt werden müssen, um die Idee wirklich zu verkaufen. Vielen Dank für den Rat, auch nicht zu stark zu pushen. Die Frage ist dann, wie ein IT-Mitarbeiter dem Management ein Kosten-Nutzen-Verhältnis bietet, wenn es im Voraus viele Arbeitsstunden kostet. ROI-Versprechen sind schwer zu fischen, besonders wenn sie pleite sind.
one.beat.consumer
3

Könnten Sie in Betracht ziehen, sich mit einem oder zwei Ihrer Mitarbeiter zusammenzutun, um einen gemeinsamen Rahmen zu schaffen? Das wäre mein Vorschlag für einen Ausgangspunkt, da Sie Verbündete brauchen und einige der Vorteile sich nach einiger Zeit der Zusammenarbeit zeigen können, damit die Dinge nicht so isoliert sind. Möglicherweise müssen Sie einige Gespräche mit Kollegen führen, um zu sehen, wie empfänglich einige für diese Ideen sind und welche Early Adopters Sie verwenden können, um dies auf den Weg zu bringen.

Mein Hauptthema wäre es, hier kleine Schritte zu betrachten. Kleine Änderungen in regelmäßigen Abständen können gut funktionieren.

JB King
quelle
Vielen Dank. Babyschritte sind der einzige Weg, auf dem sich der Staat bewegt. manchmal rückwärts kriechen.
one.beat.consumer
2

Der erste Schritt besteht darin, (unter allen Interessierten, die für denselben Arbeitgeber arbeiten) zu bewerben, was Sie haben .

Lassen Sie sich wie in den Fakultätsbüros der Colleges Poster zeigen, die die Architektur, Funktionalität und Gestaltung der Teile veranschaulichen, die Sie haben. Dies ist das "Inventar" oder "Vermögen" des Staates.


Eine zweite Frage ist, ob Arbeitgeber den Quellcode anderer sehen dürfen. Wenn dies nicht zulässig ist, ist die Zusammenarbeit sehr schwierig (es sei denn, Sie können Unterstützung auf staatlicher Ebene erhalten).


Wenn es um Sicherheit geht, ist es wahrscheinlich, dass der Staat bereits einige Informationssicherheitsmandate hat, die von allen Projekten erfüllt werden müssen. Dies kann ein guter Ausgangspunkt für die Standardisierung sein.


Eine Art von Arbeit, insb. "Anpassungsprojekte" werden immer Einzelarbeiten sein, denn hier gehören sie hin.

rwong
quelle
Guter Rat. Ich werde meinen Kommentar bearbeiten, um ein wenig mehr Details zu liefern ... dies geschieht innerhalb einer IT-Abteilung innerhalb einer staatlichen Agentur ... Ich versuche nicht, die behördenübergreifende Agentur zu koordinieren ... Kalifornien hat eine engagierte Agentur nur für aus diesem Grund und schauen Sie, wie viele ihrer Projekte erfolgreich sind. ; P
one.beat.consumer
1

Zunächst möchte ich sagen, dass ich ein großer Unterstützer und Kreuzfahrer für wiederverwendbaren Code bin und coole, raffinierte und leistungsstarke Bausteine ​​definiere, die mehrere Entwickler verwenden müssen. Ich möchte jedoch auch darauf hinweisen, dass das Rollen Ihres eigenen wiederverwendbaren Codes / Ihrer Bibliotheken / Frameworks manchmal ein sehr scharfes zweischneidiges Schwert sein kann. Und etwas, von dem Sie denken, dass es Zeit spart, könnte manchmal genau das Gegenteil bewirken.

Dies war das Muster, das ich in der Vergangenheit beobachtet habe: Während ein Entwickler weiter an einem Produkt / Features / Releases arbeitet, identifizieren einige von ihnen (vielleicht 10-25%) wiederverwendbare Komponenten oder Klassen, die einfach albern wären, um weiter zu schreiben über und über. Der Rest der Leute kopiert / fügt das Rad weiter ein und erfindet es neu. Vergessen wir die, du bist keiner von ihnen.

Wenn Sie also wiederverwendbaren Code identifizieren, beginnen Sie, Ihre eigene persönliche Bibliothek mit coolen Dingen zu erstellen, die Ihr Leben im Laufe der Zeit immer einfacher machen. Möglicherweise verfügen Sie über Dienstprogrammklassen, mit denen Sie mit XMLs, Threads, Registrierungen usw. arbeiten können. Ich habe dies getan und es jedem gezeigt, der bereit wäre zuzuhören, und einige Leute akzeptierten gerne die Tatsache, dass sie aus einem XML-Dokument mit 6 Codezeilen herausfinden können, was sie benötigen. Andere Menschen sind auf ihre Art eingestellt und lieben es, Hunderte von Zeilen geraden MSXML zu codieren.

Meine Ergebnisse:

  1. Im Laufe der Zeit, wenn sich Ihre Bibliothek verbessert, werden andere sie allmählich verwenden.

  2. Wenn andere anfangen, es zu verwenden, sind Sie jetzt die Support-Person für jedes Mal, wenn sie ein Problem haben, und sie vermuten, dass es Ihr Code ist. Manchmal finden sie einen Fehler in Ihrem Code, weil sie die API etwas anders verwenden als Sie, manchmal ist der Fehler in ihrem Code enthalten, weil sie nicht verstanden haben, wie die API verwendet wird, und manchmal hat der Fehler nichts damit zu tun, aber die Belastung liegt bei Ihnen Sie, weil sie davon überzeugt sind, dass alles funktioniert hat, bevor sie Ihre Bibliothek hinzugefügt haben.

  3. (Dies war eigentlich aus einem anderen Beitrag / Blog, kann aber den Link nicht finden): Wenn Sie einen "wiederverwendbaren Code" geschrieben haben und dafür 3 Wochen gebraucht haben. Im Allgemeinen müssen Sie weitere 3 Wochen damit verbringen, es zu bereinigen, damit andere Personen es konsumieren und eine klare Dokumentation bereitstellen können, und weitere 3 Wochen, um umfangreiche Komponententests zu schreiben und auch allgemeine Verwendungsszenarien abzudecken, nicht nur Ihre Verwendungsszenarien. Andere Leute fanden das Gleiche, Frameworks / Bibliotheken sind dreimal so aufwändig wie die ursprüngliche Entwicklung allein.

  4. Hoffentlich müssen Sie sich dem nicht stellen. Ein Teil meines Codes wurde so wiederverwendbar, dass die Leute ihn tatsächlich in einer breiteren Umgebung verwendeten. Vor ungefähr 9 Monaten hat das Management beschlossen, unser Produkt in zwei verschiedene Produkte aufzuteilen, von denen jedes seinen eigenen Veröffentlichungszyklus hat. Was ist Ihrer Meinung nach mit dieser Framework- / Utility-Bibliothek passiert? Beide Produkte hängen davon ab, aber jetzt müssen Sie vorsichtig sein, wie die Bibliothek geändert wird, wenn Sie Produkt A aktiv entwickeln, während Produkt B kurz vor dem Start steht. Unsere Lösung bestand darin, das Framework selbst zu Produkt C zu machen, das einen eigenen unabhängigen Release-Zyklus haben würde. Also bin ich 9 Monate später hier und spüre immer noch die Nachbeben von all den Problemen, die durch Build / kontinuierliche Integration / Verpackung verursacht wurden.

  5. Sie können äußerst vorsichtig sein, wie Sie Ihre Dienstprogrammklassen geschrieben haben, und Sie verstehen alle Auswirkungen dieser und jener Änderung. Sobald andere Benutzer Ihren Code verwenden, möchten sie ihn irgendwann ändern. Wenn es 20 andere Komponenten gibt, die von Ihrer Bibliothek abhängen, kann jemand, der die Bibliothek ändert, möglicherweise 19 andere Komponenten beschädigen (ich gehe davon aus, dass er die Änderung vorgenommen hat, damit der Code funktioniert). Mit zunehmender Verbreitung von Code wird das Ändern von Code viel teurer.

  6. Obwohl ich alles für Wiederverwendbarkeit bin, gibt es Tage, an denen ich mir zur Mittagszeit wünsche, dass meine persönliche Gebrauchsbibliothek meine persönliche Gebrauchsbibliothek bleibt.

Aufgrund meiner Erfahrung einige Ratschläge, an die ich denken kann:

  1. Suchen Sie nach externen Bibliotheken von Drittanbietern, die das tun, was Sie benötigen, und bauen Sie Ihre Anwendungen so weit wie möglich darauf auf. In jeder dieser Bibliotheken gibt es bereits ein Team von Mitarbeitern, die sie unterstützen. Stellen Sie sie an einem globalen Ort in Ihrer Umgebung vor, an dem jeder sie erreichen kann.

  2. Anstatt alle zu bitten, Ihre Sachen zu verwenden, sprechen Sie Ihre Teamkollegen und andere Ingenieure einzeln an und sehen Sie, wer die gleiche Einstellung wie Sie hat. Ich bin sicher, Sie werden nur wenige andere finden, die Ihre Werte teilen, und Sie könnten ein inoffizielles Kernteam gründen, das auf ein Gemeinwohl hinarbeitet.

  3. Ich weiß nicht, ob dies funktioniert und / oder eine gute Idee ist, aber ich möchte dies in meinem eigenen Unternehmen versuchen: Anstatt Frameworks / Bibliotheken zu erstellen, die global sind und von mehreren Personen / Teams besessen / verwendet werden. Behandeln Sie Ihren gesamten Code als "internes Open Source". Richten Sie ein Repository ähnlich wie Github ein, in dem verschiedene Personen / Teams Bibliotheks- / Dienstprogramm- / Hilfscode einreichen können. Machen Sie das Repository für alle sichtbar, damit jeder Ihren Code nehmen und verwenden kann, wenn Sie etwas Gutes schreiben. Wenn sie sich wie Open Source für eine Änderung Ihres Codes entscheiden, können sie einen eigenen Zweig erstellen, den sie verwalten, oder Sie können die Änderung zurückgeben, um sie wieder in den Haupt-Trunk zu übertragen. Wenn Sie ihrer Arbeit nicht vertrauen oder der Änderung nicht zustimmen, da das Projekt immer noch Ihnen gehört, haben Sie das letzte Wort, wenn Sie es akzeptieren möchten. Wenn ein Team ein Projekt startet und es dann abbricht, ein anderes Team es jedoch für nützlich hält, kann es in sein eigenes Team-Repository verzweigen und die Arbeit fortsetzen. Ich habe versucht, Redmine für so etwas zu verwenden, hatte aber noch keine Gelegenheit, es einzurichten.

DXM
quelle
Hervorragende Beobachtungen und Ratschläge. Ich weiß das zu schätzen, und ja, ich denke, die Art und Weise, wie wir uns dem nähern würden, ist wie Ihr Artikel Nr. 3, wie Open-Source-Chunks, die möglicherweise über ein NuGet-Paket in einem lokalen Feed verteilt werden, aber mit der Art "Sie verwenden es so wie es ist und" Ich werde helfen, Sie optimieren es, es ist jetzt Ihr Kofferraum, um "Richtlinien im Auge zu behalten. Wir werden sehen. Danke nochmal.
one.beat.consumer