Sollte Entwicklungsumgebungen eine formale Rolle (intern oder extern) zugewiesen werden, um verschwenderische Komplexität zu kontrollieren?

8

Vor einigen Jahren arbeitete ich für ein kleines Unternehmen, das so weit ging, interne Frameworks zu entwickeln, dass sie ihren erfahrensten Entwickler und ihren Architekten der Entwicklung eines benutzerdefinierten MVC-Frameworks und ORM von Grund auf widmeten. Diese beiden Dinge waren orthogonal zu ihrem Kernprodukt. Leider kam die Unterstützung für diesen Framework-gesteuerten Ansatz von oben und verzögerte die Lieferung von umsatzgenerierender Software - und die produzierten Frameworks waren den Standardalternativen deutlich unterlegen, was die Verzögerungen noch verstärkte. Die Firma verbrannte schnell Bargeld und schließlich wurden alle entlassen.

Ein späterer Arbeitgeber machte einen ähnlichen Fehler - er bekam einen hochtechnisch erfahrenen Entwickler - einen Perfektionisten mit einer starken Grundlage in Unternehmensdesignmustern, um eine Beratungslösung für einen seiner Kunden grob zu überentwickeln und wissentlich einen Verlust zu erleiden, in der Hoffnung, dass Die Lösung könnte für andere Kunden angepasst und erweitert werden. Das Projekt lief deutlich über. Aber keine anderen potenziellen Kunden haben gebissen. Ein vergoldeter strategischer Fehler, der ein kleines Vermögen kostete.

In beiden Fällen gab es einen signifikanten Grad an Überentwicklung. In beiden Fällen waren das Unternehmen und das Projektmanagement Personen mit Domänen- oder Analysehintergrund und nicht mit Programmierhintergrund. In beiden Fällen entwickelten die Softwarearchitekten zu komplexe Lösungen, um den Juckreiz zu lindern und ihre Lebensläufe zu verbessern, wobei das nichttechnische Management mitschuldig war. In beiden Fällen hatten die Architekten kein Interesse daran, die Kosten niedrig zu halten (abgesehen von dem Risiko, ihren Arbeitsplatz zu verlieren, wenn die Unternehmen bankrott gehen - was angesichts ihrer hohen Beschäftigungsfähigkeit kein großes Risiko darstellt).

Meine Erfahrung zeigt, dass es keine ungewöhnliche Falle ist, in die Entwickler-Shops geraten.

Gibt es in Softwareprojekten Platz für eine formale interne oder externe technische kontroverse Rolle - einen "Mengengutachter" -, um eine Gebäudeanalogie zu verwenden, die verschwenderisches Über-Engineering hervorrufen oder verhindern kann? Wer ist am besten geeignet, um diese Rolle zu besetzen?

user104662
quelle
3
Ich bin mir nicht sicher, ob Sie eine Position für jemanden rechtfertigen könnten, der durch ein Stück Papier mit dem Aufdruck "YAGNI" ersetzt werden könnte. ;)
Vaughandroid
2
In einem Entwurf habe ich die Rolle als "YAGNI-Vollstrecker" beschrieben. Leider bedeutet das Bewusstsein für YAGNI nicht, dass es beobachtet wird, insbesondere in nicht agilen Umgebungen.
user104662
3
"Ein Perfektionist mit einer starken Grundlage in Unternehmensdesignmustern, um grob zu
überentwickeln
1
Vielleicht scheint ein Investor oder bedeutender Aktionär mit ein paar Gehirnzellen ein guter Kandidat dafür zu sein. Jemand konzentrierte sich auf Geld, gab das Geld aus, wie schnell werden wir das Geld zurückbekommen. nicht, dass Investoren nicht schlau sind, ich denke, manchmal ist es ihnen auch egal, weil es normalerweise nicht ihr Geld ist.
Andyz Smith
2
Klingt so, als ob die erfahrensten Entwickler (und Architekten, wenn Sie einen haben), die die Projekte überwachen, genau diejenigen sein sollten, die diese Art von Dingen überwachen. In beiden Fällen klingt es auch nach einem Mangel an einem echten Projektmanager, um Entwickler zu motivieren (zu ärgern).
Rig

Antworten:

6

"Komplexität kontrollieren" ist die Aufgabe von:

  1. Der Architekt, dessen Aufgabe es ist, sicherzustellen, dass die System- und Unternehmensarchitektur für die aktuellen Projekte / Produkte geeignet ist ;

  2. Der Entwickler, dessen Aufgabe es ist, Designs und Code zu erstellen, die nicht nur korrekt, sondern auch wartbar sind , und den Code anderer Entwickler zu überprüfen, um sicherzustellen, dass sie ihn verstehen können. und

  3. Der Business / System-Analyst oder Product Owner, dessen Aufgabe es ist, herauszufinden, was das Unternehmen gerade tatsächlich benötigt , was später fertiggestellt werden kann oder was möglicherweise überhaupt nicht zustande kommt.

"Komplexität" ist sowieso ein abstraktes Konzept, und es könnte durchaus argumentiert werden, dass "Komplexität reduzieren" in erster Linie der eigentliche Zweck von Software ist. Daher ist es nicht sinnvoll, eine ihm gewidmete Rolle vorzuschlagen - das ist das Ganze Team sollte schon machen!

Angenommen, ein flüchtiger Blick auf den ROI und die Gesamtbetriebskosten zeigt, dass die Lösung (en) wirklich und wirklich überentwickelt sind, dann muss ich leider sagen, dass die Architekten, Entwickler und Analysten, die daran gearbeitet haben, dies einfach nicht waren sehr gut in ihren Jobs. Und die Verantwortlichen für diesen Aspekt sind die Manager oder Führungskräfte, die sie eingestellt haben. Möglicherweise haben sie eine Kultur des Über-Engineerings gepflegt und sind teilweise schuld, oder möglicherweise haben sie nur schlechte Ratschläge vom Implementierungsteam erhalten.

Ich werde keine Vermutung anstellen, bei welcher, da ich (wahrscheinlich) nicht für Ihr Unternehmen gearbeitet habe, aber ich bin sicher, dass Sie es ziemlich einfach selbst herausfinden können, indem Sie einfach ein Einzelgespräch mit einem oder einem führen einige der genannten Manager.


Im Übrigen ist die Entwicklung interner Frameworks nicht immer schlecht. Es ist nur so, dass diese Rahmenbedingungen im Allgemeinen auf der Beobachtung und Verfeinerung des aktuellen Prozesses basieren sollten. Frameworks oder Bibliotheken, die durch die Umgestaltung von vorhandenem Code entstehen, halten in der Regel lange. Auf der anderen Seite, wenn Leute einfach eintauchen und anfangen , ein Framework ohne Kontext zu entwickeln, wird es normalerweise schnell zur Haftung.

Die Leute müssen in der Lage sein, den Unterschied zwischen Konventionen zu erkennen (die meisten Projekte in einer Organisation verwenden denselben Technologie-Stack mit einer bestimmten Menge an Boilerplate-Code, aber das bedeutet nicht, dass es gut ist, alles in einem "Framework" zusammenzufassen Idee) vs. Vervielfältigung (Menschen lösen buchstäblich immer wieder dieselben geschäftlichen oder technischen Probleme und die Inkonsistenzen führen zu komplizierten Designs und schwerwiegenden Fehlern). Softwareunternehmen können und sollten das letztere Szenario erkennen und aktiv Maßnahmen ergreifen, um die Komplexität zu verringern. Frameworks haben die Komplexität reduzieren , solange sie nicht auf die zu erliegen innere Plattform Wirkung .

Aaronaught
quelle
Gute Antwort. Ich möchte Punkt 4 hinzufügen: Sie benötigen ein Management, das es den anderen Rollen (1-3) ermöglicht, technische Schulden zurückzuzahlen. Dies wird die Entwicklung in den aktuellen Versionen beschleunigen, da 1-3 wissen, dass sie später nach Bedarf umgestaltet werden können. Wenn das Management immer alle verfügbaren Ressourcen für neue Funktionen nutzt, werden Architekten und Entwickler dazu gedrängt, flexible Frameworks zu erfinden, die versuchen, alle potenziellen zukünftigen Probleme zu lösen. Das ist fast unmöglich und schafft die vom ursprünglichen Autor beschriebenen Probleme.
Andreas Huppert
1
@AndreasHuppert: Ich stimme mit Sicherheit zu, dass das Management die Idee des Refactorings verstehen muss und dass Teams nicht 100% ihrer Zeit für neue Funktionen aufwenden können - für gut geführte Teams sollte diese Zahl eher 20% oder sogar weniger betragen. Der Rest entfällt auf Planung, Tests, Codeüberprüfungen, Automatisierung, Refactoring, Debugging usw. und natürlich auf den üblichen Overhead und Unterbrechungen. Aber ich bin mir nicht sicher, ob ich damit einverstanden bin, dass Zeitmangel zu diesen schrecklichen inneren Plattformen führt. Wenn ein Team nicht einmal Zeit zu refactor haben, wo könnte es möglicherweise die Zeit finden diejenigen ?
Aaronaught
1
Weil es möglich ist, Investitionen in eine Plattform / ein Framework als Investition mit einem guten ROI an das Management zu verkaufen. Refactoring hat viel weniger Glamour und ist schwer zu verkaufen.
Andreas Huppert
5

Gibt es in Softwareprojekten Platz für eine formale interne oder externe technische kontroverse Rolle - einen "Mengengutachter" -, um eine Gebäudeanalogie zu verwenden, die verschwenderisches Über-Engineering hervorrufen oder verhindern kann? Wer ist am besten geeignet, um diese Rolle zu besetzen?

Nein, normalerweise gibt es keine solche Position.

Der Trick besteht darin, die richtigen Leute für den Job einzustellen. Leute, die nicht überentwickeln und genau das tun, was nötig ist.

Dies kann mithilfe agiler Ansätze erfolgen (z. B. Implementierung von Anforderungen in Iterationen oder Verwendung von TDD oder BDD). Aber auch hier wird es nicht helfen, wenn die Architektur überarbeitet ist.

BЈовић
quelle