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.
quelle
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.
quelle
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.
quelle
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:
Im Laufe der Zeit, wenn sich Ihre Bibliothek verbessert, werden andere sie allmählich verwenden.
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.
(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.
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.
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.
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:
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.
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.
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.
quelle