Ist es typisch für große Softwareunternehmen, Code nicht zu dokumentieren oder umzugestalten? [geschlossen]

8

Ich habe bei einem großen Softwareunternehmen angefangen zu arbeiten und wurde einem Projekt zugewiesen, das mehr als eineinhalb Millionen Codezeilen umfasst. Es ist Teil einer Programmsuite, die an Kunden verkauft wird (kein internes Projekt), und der Quellcode kann auf Wunsch erworben werden (obwohl dies angesichts der damit verbundenen zusätzlichen Gebühren selten erscheint). Sie machen seit Jahren Software-Design und ihre aktuellen Produkte sollen auf absehbare Zeit fortgesetzt werden.

Zu meiner Überraschung fehlen die anderthalb Millionen Codezeilen fast vollständig in der Dokumentation. Darüber hinaus gibt es einige Bereiche des Codes, die unglaublich chaotisch zu befolgen sind oder die durch Refactoring viel einfacher zu verstehen sein könnten (zum Beispiel kam vor etwa 10 Jahren eine Verbesserung der Programmiersprache heraus, die große Teile des Codes stark machen würde sauberer, ganz zu schweigen von weniger anfällig für Fehler). Es scheint keine Bemühungen zu geben, dies zu korrigieren, und meine Angebote für die Teile, mit denen ich arbeite, stießen auf Widerstand, auf den ich nie wirklich eine klare Antwort bekommen habe.

Sind diese Praktiken in einem großen Unternehmen der Softwareindustrie üblich? Oder ist mein Unternehmen einzigartig in seinem Mangel an Refactoring und Dokumentation?

Nachtrag: Aufgrund einiger Kommentare möchte ich klarstellen, wonach ich suche. Ich verstehe, dass mein Unternehmen technische Schulden hat und das ist schlecht. Ich möchte nicht feststellen, ob es meinem Unternehmen aus diesem Grund schlechter geht oder nicht. Ich möchte nur wissen, ob dieser Mangel an Dokumentation und der Widerstand gegen Refactoring eine Tatsache in der Programmierwelt ist, die ich haben werde zu behandeln, wenn ich weiter daran arbeite.

Donnerschmiede
quelle
4
Schließen. Ich denke, dies wird Meinungen sammeln, keine Antworten.
Michael Durrant
1
... und meiner Meinung nach ist dies die Norm von Dutzenden verschiedener Unternehmen, außer bei brandneuen Startups mit einem neuen Code, der mit modernen Techniken (z. B. in den letzten 5 Jahren) geschrieben wurde.
Michael Durrant
2
Studien? Es bedarf keiner Studie, um zu ziemlich soliden Schlussfolgerungen zu gelangen. Alles was Sie tun müssen, ist sich umzusehen.
Robert Harvey
2
Moderne Techniken beinhalten auch das NICHT-Schreiben von Kommentaren - sie sind schnell veraltet und werden nie gut gepflegt und bewegen sich mehr in Richtung der Bedeutung von Klassen- und Methodennamen (denken Sie an 'pool_of_currently_available_connections' vs. 'pool' und es gibt auch Tests wie " Als Benutzer, der x eingibt, sollte x * 2 angezeigt werden "usw.
Michael Durrant
3
Ja, die meisten Unternehmen sind so, Sie müssen lernen, wie Sie damit umgehen.
Großmeister

Antworten:

13

Es gibt eine Reihe von Gründen, warum Unternehmen aus Sicht der technischen Verschuldung nicht in die "Verbesserung" ihrer Programme investieren:

  1. Durch die Reduzierung der technischen Schulden werden der Software keine neuen Funktionen hinzugefügt. Es wird daher vom Management als nicht monetär angesehen (bis zu einem gewissen Grad zu Recht).

  2. Die Art des Software-Geschäfts zeichnet First-to-Market aus, nicht das Beste.

Ich könnte weitermachen, aber alle anderen Gründe sind nur Varianten dieser beiden. Sie alle summieren sich im Grunde genommen zu kurzfristigem Denken und konzentrieren sich auf unmittelbare Gewinne anstatt auf langfristige Rentabilität.

Alle Unternehmen mit nicht trivialen, aktiven Softwareprojekten haben eine gewisse technische Verschuldung. Kein Unternehmen ist völlig schuldenfrei.

Jedes Softwareprojekt, an dem ich jemals gearbeitet habe, hat im Laufe der Zeit technische Schulden angehäuft - Jeff Atwood .

In Bezug auf die Dokumentation gilt: Je weniger vorhanden ist, desto besser. Dollar für Dollar erzielen Sie mehr Rendite, wenn Sie die Software einfacher zu bedienen und zu warten machen, als wenn Sie mehr Dokumentation dafür schreiben.

Es gibt einige informelle Umfragen zu technischen Schulden und wie Unternehmen damit umgehen. Alles was Sie tun müssen, ist nach ihnen zu suchen. Hier ist einer :

Geben Sie hier die Bildbeschreibung ein

Oder dieser :

Geben Sie hier die Bildbeschreibung ein

Es scheint ziemlich offensichtlich, dass Ihr Unternehmen nicht das einzige ist, das dieses Problem hat. Es kann nicht einmal in der Minderheit sein.

Weiterführende Literatur
Dritter internationaler Workshop zum Management technischer Schulden - Überblick über das
Management technischer Schulden in softwareabhängigen Systemen

Robert Harvey
quelle
Um meine Frage zu beantworten: Ist das typisch für Unternehmen?
Thunderforge
Was meinst du mit "typisch"?
Robert Harvey
Verhalten sich die meisten Unternehmen so, wie ich es beschrieben habe? Ich verstehe technische Schulden, aber Sie haben nicht wirklich geantwortet, ob dies in den meisten Unternehmen passiert oder nicht, oder ob dies nur wenige Unternehmen (wie meine) behandeln.
Thunderforge
1
Fast jeder, der Beiträge veröffentlicht, hat in weniger als 10 oder 15 von Millionen Unternehmen gearbeitet. Es würde also eine formelle Studie erfordern, um es zu wissen. Ich kenne keine. Auch eine Person sauberer Code ist eine andere Spaghetti, so denke ich unbeantwortbar.
Michael Durrant
1
Nach meiner Erfahrung machen gemeinnützige Organisationen im Vergleich zu gemeinnützigen Organisationen, Gesundheitswesen und Beratung, Boston-New York-San Francisco und Städte im Landesinneren einen Unterschied. ymmv
Michael Durrant
8

Eine Perspektive, von der ich glaube, dass sie (noch) nicht in anderen Antworten behandelt wurde, sind die Kosten für Änderungen in drei Bereichen:

  1. testen
  2. Wiedereinweisung
  3. Opportunitätskosten

Ein Unternehmen mit einem großen Produkt muss alle Änderungen testen. Diese Testverfahren müssen über mehrere Achsen verfolgt werden: unterschiedliche Plattformen, unterschiedliche Workloads, unterschiedliche Perspektiven (Leistung, Funktionalität, Benutzerfreundlichkeit, Abwärtskompatibilität).

Die Leute, die in den Bereichen des Codes arbeiten, die Sie ändern, müssen sich dann auch erneut mit dem Code vertraut machen, und es wird besonders umständlich, wenn mehrere Versionen unterstützt werden ("Entschuldigung, welche Version ist das? Ahh, das ist die neue Code und Sie müssen mit Bob dafür sprechen "). In ähnlicher Weise führt das Ändern von Code, um ihn hübsch zu machen, dazu, dass Dinge wie Änderungsprotokolle (Unterschiede, Patches usw.) sehr kompliziert zu lesen sind ... und Probleme bis zu einem bestimmten Zeitpunkt zurückverfolgt werden, als der Fehler eingeführt wurde kann sehr herausfordernd sein, wenn etwas im Codeverlauf alles ändert. Wenn ein Fehler seit langem besteht (diese Dinge passieren), kann er in mehreren unterstützten Versionen Ihres Codes auftreten. Jetzt müssen Sie den alten und den neuen Code auf möglicherweise sehr unterschiedliche Weise beheben.

Schließlich muss oft die Entscheidung getroffen werden, wo Zeit und Geld ausgegeben werden sollen. Dies ist mehr als nur Ihre Zeit, sondern vielmehr das, was Sie lieber mit Ihrer Zeit tun sollten (und welche Auswirkungen dies auf nachgelagerte Ressourcen hat). Wäre es vorzuziehen, die Zeit Ihres Entwicklerteams mit Funktionen zu verbringen, die mehr Umsatz bringen, neue Marktanteile gewinnen und Gewinn generieren können, oder sollte die Zeit / das Geld für Dinge ausgegeben werden, die Endbenutzer nicht bemerken, kann sie nicht eingesetzt werden Marketingmaterial ("Hey, unser bestehender Code ist scheiße, aber wir haben es besser gemacht") und ist reine Kosten (kein Gewinn).

Fazit: Geld . Immer (na ja, fast immer).

rolfl
quelle
5

Ja. Basierend auf den rund 50 Unternehmen, denen ich als Mitarbeiter oder Berater persönlich begegnet bin, und den rund 200 Unternehmen, die ich über Kollegen kenne.

Die Art des von Ihnen beschriebenen Produkts (1,5 Millionen Zeilen) hat Jahre gedauert, und viele der ursprünglichen Entwickler sind weitergezogen (oder wurden Manager).

Die Geschäftsleitung und die großen Stammkunden wollen nur kleine, schrittweise Änderungen: Sie wollen Stabilität. Was wir Techniker für Verbesserungen halten, sind in ihren Augen Risiken. Selbst wenn wir zeigen können, dass sich die neue Version immer noch genauso verhält wie die alte, sehen sie ein Risiko, da das alte System genau die von Ihnen beschriebene Eigenschaft aufweist: Es ist nicht dokumentiert. Für sie könnte es undokumentiertes Verhalten geben, auf das sich Kunden verlassen.

Aus ihrer Sicht: Es ist nicht kaputt, also reparieren Sie es nicht. Sie sehen auch, dass es eine entsprechende Unternehmenskultur gibt. Die Leute, die sich Ihren "Verbesserungen" widersetzen, haben wahrscheinlich dasselbe getan wie Sie, als sie angefangen haben.

Erwarten Sie nicht, "zu gewinnen". Dies ist ein kulturelles Problem und kann nur durch Änderungen auf CEO-Ebene geändert werden.

andy256
quelle
Die Geschäftsleitung und die großen Stammkunden wollen nur kleine, schrittweise Änderungen: Sie wollen Stabilität. - Da bin ich mir nicht so sicher. Kunden kümmern sich verdammt um den Code und darum, wie groß oder klein die Änderungen sind, aber sie sind sehr interessiert an den beiden magischen "kostenlosen": 100% fehlerfrei und kostenlos. Oh ja, und bitte liefern Sie gestern. Die meisten von ihnen haben entweder noch nie von Scope vs. Cost vs. Schedule gehört oder sie vergessen plötzlich ihr Wissen, wenn es um Software geht. In Bezug auf kulturelle Probleme und nicht pleite, stimme ich nicht zu, aber ich verstehe auch das geschäftliche Problem dahinter.
JensG
Für mich wird ein Produkt so, wie es ist, durch die Rückkopplungsschleife, die zwischen dem Unternehmen und seinen Kunden besteht (oder nicht). Verschiedene Kunden, die ein stärkeres Feedback geben und "tiefere" Anforderungen haben, drängen entweder den Anbieter, sich zu ändern, oder sie wechseln zu einem Konkurrenten (falls es einen gibt).
andy256
Letztendlich gibt es einen Fall zu sagen, dass es über das bloße Kulturelle hinausgeht. Nehmen wir an, das Management hat die Entwicklung aller neuen Funktionen gestoppt, um die Top 10% der meisten fehlerhaften Routinen anzugehen. Es müsste sehr sorgfältig verwaltet werden, um nicht zur Arbeit von Sisyphus zu werden.
James Snell
@ JamesSnell: Das ist aber ein guter Punkt. Ich kenne Beispiele, bei denen ein bestimmter Code vor Jahren von Grund auf neu gestaltet und geschrieben werden sollte. Heute haben die Betreuer dieses Codes immer noch Schwierigkeiten, die alten Fehler zu beheben, die immer noch alle zwei Wochen auftreten, geschweige denn die Fehler, die in der Zwischenzeit durch Hinzufügen weiterer Funktionen eingeführt wurden. Wie viel Zeit hätte auf lange Sicht gespart werden können, wenn sie nur vor Jahren beschlossen hätten, die alte, schlecht gestaltete Version wegzuwerfen?
JensG
@JensG Ich stimme dir zu. Mit der Verwaltung technischer Schulden sollte ein gut geführtes Team / eine gut verwaltete Codebasis arbeiten. Die Behebung der technischen Schulden bedeutet jedoch, die Codebasis zu destabilisieren, auch wenn die Absicht besteht, sie zu verbessern. Dies birgt das Risiko, dass sie zu einer unendlichen Aufgabe wird, sobald Sie mit der Umgestaltung beginnen. Der Code hat es vielleicht gebraucht, aber die kurzfristigen Kosten können ausreichen, um das Projekt abzubrechen, bevor langfristige Vorteile eintreten, und kein Manager wird das Boot rocken wollen, während sie sich darin befinden.
James Snell