Entwerfen Sie in einem Team, programmieren Sie in einem anderen

28

Ich werde an einem Projekt beteiligt sein, bei dem das gesamte Softwaredesign von einem lokalen Team erstellt und diese Entwürfe zur Codierung an ein Offshore-Team gesendet werden.

Es ist das erste Mal, dass ich einem Projekt mit diesen Merkmalen gegenüberstehe, und für mich ist es merkwürdig: Die Manager erwarten, dass wir sehr detaillierte Konstruktionsdokumente erstellen, damit das Offshore-Team keinen Platz für Fehler hat. Aus meiner Sicht lassen sie uns auf Papier codieren, während wir dies in einer IDE tun können.

Meine Frage ist also, ob dieser Ansatz gut oder richtig ist. Was sind die Hauptaspekte, die unser Softwareprozess haben muss, um in unserem Projekt erfolgreich zu sein?

Carlos Gavidia-Calderon
quelle
5
@mike: Spacecraft-Software ist ein bisschen anders als die meisten anderen Programme. Es muss die ganze Zeit einwandfrei funktionieren, sonst kann es zum Verlust von Leben und extrem teuren Vermögenswerten kommen. Siehe fastcompany.com/28121/they-write-right-stuff
Robert Harvey
9
Ich denke, das Offshore-Team ist billiger, ist es auch doppelt so groß wie das Designteam? Hat es einige echte Vorteile gegenüber dem Inhouse-Team? Sprechen sie z. B. die natürliche Sprache der Endbenutzer, während Sie dies nicht tun? Haben sie irgendein Talent, das Sie nicht im Haus haben? Wenn nicht, hat Ihre Firma einen schlimmen Fall von PHB- Vergiftung.
ZJR
1
@mike: Ich denke, es wäre genauer zu sagen, dass in den meisten Programmen eine kleine Anzahl von Fehlern als akzeptabel angesehen wird, da fehlerfreie Software eine Asymptote ist und es sehr teuer ist, die verbleibenden Fehler zu beseitigen.
Robert Harvey
9
Ich schlage vor, dass Sie sofort nach einem anderen Job suchen. Programmierer sind keine austauschbaren Zahnräder, was die zugrunde liegende Annahme dieser Art von Anordnung ist. Die Trennung von Design und Entwicklung auf diese Weise - Onshore oder Offshore - garantiert eine Trennung zwischen dem Kunden und den Entwicklern, was einen Ausfall sehr wahrscheinlich macht.
Steven A. Lowe

Antworten:

36

Meine Meinung:

Wenn alles, was Sie den Offshore-Leuten geben, Dokumente und Diagramme sind, werden Sie eine Menge Missverständnisse und Enttäuschungen haben .

Meine Empfehlung

  • Geben Sie ihnen nicht so viele Dokumente, sondern Interfaces und abstrakte Klassen, um sie in Ihre Designziele zu integrieren .

  • Fordern Sie sie auf, einen bekannten Namensstandard zu verwenden.

  • Fordern Sie sie auf, Komponententests durchzuführen.

  • Schicken Sie einen Ihrer Designer / Architekten ins Ausland, um den Prozess zu überwachen. Es ist immer noch billiger als das interne Codieren, aber Sie erhalten bessere Ergebnisse.

Tulains Córdova
quelle
2
Offshore-Teams arbeiten nicht so wie Onshore-Teams. Sie müssen sehr, sehr genau wissen, was Sie wollen, sonst bekommen Sie nicht, was Sie wollen.
Robert Harvey
32
... Aus diesem Grund kehrt ein Großteil der Entwicklung an Land in die USA zurück. Für diesen Ansatz, Onshore zu entwerfen, Offshore zu entwickeln und dann wieder Onshore zu debuggen, müssen Sie über die gleichen Onshore-Ressourcen verfügen, die Sie in erster Linie für die Entwicklung der gesamten Suppe zu Nüssen verwenden würden. In jedem anderen Produktionsprozess, in dem die direkten Materialien und der Arbeitsaufwand für die Herstellung des Dings hoch sind, ist der Offshore-Ansatz sinnvoll. Wenn das Design für das, was Sie herstellen, nicht nur den größten Teil Ihrer Kosten ausmacht, sondern auch das Endprodukt sein kann, wird die Offshore-Entwicklung offensichtlich überflüssiger.
KeithS
@ KeithS Toller Kommentar. Ich stimme% 110 mit Ihnen überein.
Tulains Córdova
2
Sie zu zwingen, Klassen und Schnittstellen zu verwenden, die Sie erstellt haben, ohne selbst Code geschrieben zu haben, ist ein Rezept für eine Katastrophe.
Mike Weller
2
@Euphoric Es gibt einen langen Zeitraum zwischen dem Schreiben abstract void calculateDroneTrajectoryBasedOnCNNNewsFeed()und der tatsächlichen Implementierung.
Tulains Córdova
26

Es heißt Big Design Up Front, auch bekannt als Wasserfall. Es wird nicht allgemein als sehr erfolgreiche Methode angesehen. Aber ich habe gesehen, dass es funktioniert, und wenn es funktioniert, funktioniert es sehr gut. Es ist sehr teuer, es richtig zu machen.

Es ist auch, was Ihre Arbeitgeber Sie gebeten haben, zu tun.

Offshore-Teams arbeiten nicht so wie Onshore-Teams. Sie müssen sehr, sehr genau wissen, was Sie wollen, sonst bekommen Sie nicht, was Sie wollen.

Robert Harvey
quelle
Können Sie etwas genauer auf "sehr spezifisch" eingehen? Musste ich auf die Ebene der Include-Methode Pseudocode kommen?
Carlos Gavidia-Calderon
8
Pseudocode erhöht Ihre Chancen, Code vom Offshore-Team genau so zu erhalten, wie Sie es möchten. Wie andere betont haben, kann der Prozess der erfolgreichen Durchführung von Offshoring kostspieliger sein, als nur die gesamte Arbeit im Unternehmen zu behalten. Aber das ist nicht deine Entscheidung.
Robert Harvey
2
Sollte das nicht sein It's very expensive when it goes wrong. :-)
LarsTech
@LarsTech: Aus diesem Grund ist der zusätzliche Aufwand für die richtige Ausführung gerechtfertigt.
Robert Harvey
Pseudocode mag den gleichen Aufwand wie das Schreiben von echtem Code, + Offshore-Kommunikation Overhead
Web Devie
16

Das letzte Projekt war ich der Software-Designer. Die gesamte Entwicklung war offshore. Wir waren erfolgreich Dieser Prozess kann also funktionieren.

Ich habe eine Menge Dokumentation erstellt, diese war jedoch keineswegs umfassend und keineswegs schrittweise oder detailliert bis auf Klassennamen, Funktionsnamen usw. Ich habe beispielsweise Sequenzdiagramme, Anwendungsfälle, Workflows, Systeme und Integrationen erstellt Diagramme sowie eine detailliertere Konstruktionsdokumentation nach Bedarf.

Es hängt wirklich davon ab, wie sehr Sie der Offshore-Entwicklung vertrauen. Ich vertraue darauf, dass mein Offshore-Team kompetente Entwickler sind. Trotzdem habe ich die allgemeine Richtung vorgegeben, ihnen aber Spielraum für die Umsetzung eingeräumt, was das Offshore-Team als angenehm zufriedenstellend empfand. In der Vergangenheit wurden sie eher im Mikrobereich verwaltet. In bestimmten Situationen führte ich sie nach Bedarf anhand der Entwurfsmuster. Ich habe außerdem regelmäßig Codeüberprüfungen und -analysen für den von ihnen geschriebenen Code durchgeführt und empfahl, den Code zu überarbeiten oder zu bereinigen. Da ein Teil des Teams Unfälle mit Freizeitfahrzeugen hatte, habe ich einige der Storys während der Implementierung codiert, da uns einige Ressourcen fehlten.

Darüber hinaus denke ich, dass dieser Prozess wirklich nur aufgrund der Stärke Ihrer technischen Leads im Projekt und der Kommunikation zwischen Unternehmen, Designern, Leads und Entwicklern erfolgreich ist. Wir haben viel Zeit damit verbracht, die einzelnen Features und Storys durchzugehen und sicherzustellen, dass die Offshore-Leads / -Ressourcen mit den jeweiligen Anforderungen bestens vertraut sind. Wenn sie während der Überprüfung des Features / der Story keine Fragen stellen, erwarten Sie einige Probleme. Auch die Arbeit wurde erst als abgeschlossen betrachtet, als es eine Geschäftsfreigabe gab. Das machte jeden zur Rechenschaft, da alles in einem Tool verfolgt wurde, das die agile Entwicklung verwaltete.

Wie eine der anderen Antworten bereits angedeutet hat, umfasste der Entwicklungsprozess Benennungsstandards (eingebaute Resharper-Regeln), Testfallabdeckung (es wurde TDD, Mocking usw. verwendet). Wenn also ein guter Kodierungsprozess und eine gute Prozedur vorhanden sind, werden diese erhöht Ihre Chancen für ein erfolgreiches Projekt.

Jon Raynor
quelle
Verwenden Sie einen bestimmten agilen Prozess? Eine maßgeschneiderte vielleicht?
Carlos Gavidia-Calderon
2
Es war nicht rein agil, eher wie geplante Iterationen. Alles wurde im Voraus geplant und dann in zweiwöchige Iterationen aufgeteilt. Wir haben für jede Interaktion agile Prozesse verwendet. Verwendete Geschwindigkeits- und Abbrandtabellen, tägliche Stand-up-Zeiten, gefolgt von ein oder zwei Stunden Telefonanruf vor der Küste. Verbringen Sie auf jeden Fall viel Zeit am Telefon, um vor der Küste zu sein, aber unser idealer Entwicklungstag war 6 Stunden, um die Kommunikationszeit zu berücksichtigen.
Jon Raynor
2
Hinweis für sich selbst: Entfernen Sie Freizeitfahrzeuge aus zukünftigen Software-Iterationen.
Robert Harvey
Glauben Sie, dass Ihr Erfolg mehr mit der Auswahl des richtigen Offshore-Teams zu tun hat, oder einfach mit dem Vertrauen, dass sie ohne Mikromanagement das Richtige tun? Denken Sie, dass Ihre "geplanten Iterationen" für Ihren Erfolg entscheidend waren?
Robert Harvey
1
@Jess - Nein, das Team ist nur für die Bereitstellung genehmigter Storys und Features (Funktionen) verantwortlich. Zukünftige Funktionen werden nicht bereitgestellt, obwohl das Design der Software normalerweise eine gewisse Flexibilität zulässt. Wir liefern jedoch nur das, was gewünscht wurde.
Jon Raynor
2

Die Hauptkosten der Offshore-Entwicklung sind die Kommunikationskosten. Dokumentation ist eine Art der Kommunikation, jedoch können Dokumente normalerweise nicht alle Details und möglichen Änderungen abdecken.

Nicht sicher, wie groß Ihr Projekt ist. Ich gehe davon aus, dass es groß ist, sonst ist es nicht wertvoll, das Offshore-Entwicklungsteam einzusetzen. So ist meine Erfahrung

  1. Definieren Sie den Skelettcode, die öffentliche Schnittstelle, die Dienstschnittstelle usw. und überprüfen Sie sie gemeinsam
  2. Definieren Sie die Abnahmetests mit der anderen Seite
  3. Teilen Sie das große Dokument in kleine Geschichten auf, und arbeiten Sie basierend auf den kleinen Geschichten. Das große Dokument ist nur ein Gesamtbild des gesamten Systems
  4. Richten Sie die Kontrollpunkte der Geschichten ein, eine Woche oder zwei Wochen

In 1 und 2 geht es eigentlich um die Entwicklung, um sicherzustellen, dass die andere Seite die Anforderung gut versteht und beide Seiten dasselbe Muster verwenden. 3 und 4 sind Teil der agilen Entwicklungsmethodik, aber für die Offshore-Entwicklung ist es schwierig, den vollständigen agilen Prozess zu verwenden.

alistairw
quelle
1

Ich denke, bis zu einem gewissen Grad arbeiten wir alle so. Jemand entwirft irgendwo etwas und wir codieren etwas, das Teil des Systems ist oder mit ihm arbeitet. Beispiele sind das Erstellen von Apps auf der Basis eines Frameworks, z. B. Anwendungen, die keine Spiele sind, auf Mobilgeräten. Viele Entscheidungen über die Benutzeroberfläche wurden vom Designteam der Personen getroffen, die das Framework erstellt haben. Sie kontrollierten alles vom Lernen, eine App zu schreiben, bis zum Verkauf Ihrer App. Wenn Sie wissen möchten, warum dieses Modell erfolgreich war, schauen Sie sich die Dokumentation und die Tools einiger Anbieter an.

Ein weiteres Beispiel sind Webanwendungen, bei denen viele versuchen, den REST-Stil zu implementieren. Dieser Teil erklärt nicht wirklich, wie etwas implementiert werden soll, obwohl es Spezifikationen für die Verwendung von HTTP gibt. Wie auch immer, es gibt Spezifikationen und Richtlinien, die befolgt werden müssen. Wenn Sie sehen, wie viele Diskussionen über die REST-Implementierung beim Stapelaustausch oder am Arbeitsplatz geführt werden, ist das so, als ob ein Architekt die Leute auffordert, etwas auf bestimmte Weise zu implementieren. Es ist immer noch ein erfolgreiches Modell, denke ich, mit so vielen Leuten, die dem Stil folgen.

An diesen beiden Beispielen können Sie sehen, wie Designs verbreitet werden, einige als Papierspezifikationen, andere mit Büchern, Werkzeugen und Beispielen. Sie können sehen, wie Leute nachfragen (in Volumen) und versuchen, das Verständnis in unterschiedlichem Maße zu verbessern, je nachdem, welchen Standards / Designs sie folgen möchten. Gehe einfach auf stackoverflow und schau;)

Wenn Sie mir Ihre Spezifikation geben, werde ich fragen. Wenn Sie mir einen Komponententest geben, werde ich codieren und testen.

imel96
quelle