Wie balancieren Sie in Ihrer täglichen Arbeit zwischen „mach es richtig“ und „mach es so schnell wie möglich“? [geschlossen]


180

Ich denke immer wieder über diese Frage nach. Ich möchte die Dinge richtig machen: sauberen, verständlichen und korrekten Code schreiben, der einfach zu pflegen ist. Am Ende schreibe ich jedoch Patch für Patch. Nur weil es keine Zeit gibt, Kunden warten, ein Fehler sollte über Nacht behoben werden, das Unternehmen verliert Geld für dieses Problem, ein Manager drängt hart usw. usw.

Ich weiß sehr gut, dass ich auf lange Sicht mehr Zeit mit diesen Patches verschwenden werde, aber da diese Zeit Monate der Arbeit umfasst, kümmert es niemanden. Wie einer meiner Manager sagte: "Wir wissen nicht, ob es langfristig dauern wird, wenn wir es jetzt nicht reparieren."

Ich bin sicher, dass ich nicht der einzige bin, der in diesen endlosen Real / Ideal Choice-Zyklen gefangen ist. Wie gehen Sie damit um, meine Programmierkollegen?

UPDATE: Vielen Dank für diese interessante Diskussion. Es ist traurig, dass so viele Menschen täglich zwischen einer Quantität und einer Qualität ihres Codes wählen müssen. Überraschenderweise denken viele, dass es möglich ist, diesen Kampf zu gewinnen. Vielen Dank für diese Ermutigung.


12
Ganz einfach: Mach es richtig und mach es schnell
ren

158
@ren: Nun, ich nehme an, Sie sind kein Programmierer, Sie sind ein Manager :-)
Flot2011

44
Obligatorisch. xkcd.com/844
MikeTheLiar

5
Mach es SO SCHNELL WIE MÖGLICH. Wenn Sie dann noch Zeit haben, machen Sie es richtig.
Laurent Couvidou

8
Wie Onkel Bob sagt: Der langsame Weg ist der schnelle Weg. Nehmen Sie sich Zeit, um diese Komponententests zu schreiben, und schreiben Sie Ihren Code gut. Dies kann dazu führen, dass die Implementierung der Funktion etwas länger
dauert

Antworten:


106

Tatsächlich ist dies eine sehr schwierige Frage, da es keine absolut richtige Antwort gibt. In unserer Organisation haben wir bessere Prozesse eingeführt, um besseren Code zu produzieren. Wir haben unsere Codierungsstandards aktualisiert, um zu reflektieren, wie wir als Gruppe Code schreiben, und wir haben eine sehr starke Test / Refactor / Design / Code-Schleife eingeführt. Wir liefern ständig oder versuchen es zumindest. Zumindest müssen wir den Stakeholdern alle zwei Wochen etwas zeigen. Wir fühlen uns als Software-Handwerker und die Moral ist hoch. Trotz all dieser Prüfungen leiden wir unter dem gleichen Problem wie Sie.

Letztendlich liefern wir ein Produkt an einen zahlenden Kunden. Dieser Kunde hat Bedürfnisse und Erwartungen, realistisch oder nicht. Oft bringt uns das Verkaufsteam in Schwierigkeiten, nur um eine Provision zu erhalten. Manchmal hat der Kunde Go-Live-Erwartungen, die unrealistisch sind oder Änderungen erfordern, obwohl wir einen Vertrag abgeschlossen haben. Timelines passieren. PTO und Ausfalltage während eines Sprints können vorkommen. Alle möglichen kleinen Dinge können in einer Situation gipfeln, in der wir gezwungen sind, das Rätsel „Mach es richtig“ oder „Mach es so schnell wie möglich“ zu lösen. Fast immer sind wir gezwungen, es so schnell wie möglich zu tun.

Als Software-Handwerker, Entwickler, Programmierer, Leute, die für einen Job programmieren - es ist unsere natürliche Neigung, "es richtig zu machen". "Mach es so schnell wie möglich" ist das, was passiert, wenn wir arbeiten, um zu überleben, wie es die meisten von uns tun. Das Gleichgewicht ist hart.

Ich beginne immer damit, mich an die Geschäftsleitung zu wenden (ich bin Director of Software Development und ein aktiver Entwickler in dieser Gruppe), um den Zeitplan, das Team und die geleistete Arbeit zu verteidigen. Normalerweise wird mir dann gesagt, dass der Kunde es jetzt haben muss und es funktionieren muss. Wenn ich weiß, dass es keinen Raum für Verhandlungen oder für Spenden gibt, gehe ich zurück und arbeite mit dem Team zusammen, um zu sehen, welche Ecken gekürzt werden können. Ich werde nicht auf die Qualität der Funktion verzichten, die den Kunden dazu zwingt, sie so schnell wie möglich zu bekommen, aber es wird etwas passieren und sie wird in einen anderen Sprint getrieben. Das ist fast immer in Ordnung.

Wenn Sie nicht liefern können, weil es so viele Fehler gibt, die Codequalität schlecht und schlechter wird und die Fristen kürzer werden, dann befinden Sie sich in einer anderen Situation als von mir beschrieben. In diesem Fall können aktuelle oder frühere Misswirtschaft, schlechte Entwicklungspraktiken, die zu einer schlechten Codequalität führten, oder andere Faktoren Sie auf den Todesmarsch führen.

Meiner Meinung nach tun Sie hier Ihr Bestes, um guten Code und bewährte Methoden zu verteidigen und Ihr Unternehmen aus den Gräben herauszuholen. Wenn es keinen einzelnen Kollegen gibt, der bereit ist, zuzuhören oder gegen das Management für die Gruppe zu kämpfen, ist es möglicherweise an der Zeit, sich nach einem neuen Job umzusehen.

Am Ende trumpft das wirkliche Leben alle. Wenn Sie für ein Unternehmen arbeiten, das verkaufen muss, was Sie entwickeln, werden Sie täglich auf diesen Kompromiss stoßen. Nur wenn ich mich bemühe, frühzeitig gute Entwicklungsprinzipien zu erreichen, habe ich es geschafft, der Codequalitätskurve einen Schritt voraus zu sein.

Das Hin und Her zwischen Entwicklern und Verkäufern erinnert mich an einen Witz. "Was ist der Unterschied zwischen einem Gebrauchtwagenhändler und einem Softwareverkäufer? Wenigstens der Gebrauchtwagenhändler weiß, dass er lügt." Halten Sie Ihr Kinn hoch und versuchen Sie dabei, "das Richtige zu tun".


14
"Oft bringt uns das Verkaufsteam in Schwierigkeiten, nur um eine Provision zu erhalten." - Ab wann sollten Sie den Verkauf für den Verkauf von Dingen verantwortlich machen, die das Unternehmen nicht liefern kann - vorausgesetzt, es gibt eines? Haben Sie Beispiele, bei denen sie die Grenze zwischen aggressivem Marketing und Überverkauf überschritten haben?
Tom W

8
@TomW Ich habe einige Beispiele im Haus, Einzelheiten, die ich hier nicht veröffentlichen konnte, aber wenn es passiert, passiert es fast immer, wenn wir ein Referenzkonto benötigen oder gegen Ende des Quartals. Wir haben einige sehr gute Verkäufer und einige nicht so gute. Vor kurzem gab es eine große Verschiebung im Reinigungshaus, als festgestellt wurde, dass die Entwicklung nicht das Problem war und sich die gesamte Vertriebsstruktur zum Besseren wandelte. Die Dinge sind seitdem wunderbar gelaufen. Ich würde gerne genauer sein, aber ich kann nicht.
Akira71

9
+1 - "Ich werde nicht auf die Qualität der Funktion verzichten, die die Kunden benötigen, um sie so schnell wie möglich zu erhalten, aber es wird etwas passieren" ... das war fantastisch.
Joel B

59
@TomW - Ich möchte immer darauf hinweisen, dass der Chef-Marinearchitekt der Titanic, der vor Kostensenkungen warnte (Thomas Andrews), mit dem Schiff unterging, während der Top-Verkäufer / Marketing-Typ, der Kostensenkungen und schnellstmögliche Erledigungen forderte (Bruce Ismay), entkam in einem Rettungsboot.
Jfrankcarr

4
Ich hätte es geliebt, wenn die Zeit eine Antwort wie diese eingegeben hätte, aber ich habe einen Kunden, der mit meinem Chef telefoniert. "Oft bringt uns das Verkaufsteam in Schwierigkeiten, nur um eine Provision zu erhalten." Das selbe hier ... aber irgendwie bekommen sie immer noch diese Boni!
Kenzo,

62

Eine Sache, die ich in meiner Karriere erkannt habe, ist, dass es immer Zeit gibt, es richtig zu machen. Ja, Ihr Manager drängt vielleicht. Der Kunde könnte sauer sein. Aber sie wissen nicht, wie lange die Dinge dauern. Wenn Sie (Ihr Entwicklerteam) es nicht tun, wird es nicht erledigt. Sie halten alle Hebel.

Weil Sie wissen, warum Ihr Vorgesetzter Sie oder Ihren Kunden wirklich verärgert? Schlechte Qualität .


43
Normalerweise bleibt Zeit, um gute Arbeit zu leisten, aber normalerweise fehlt die Zeit, um diese Arbeit perfekt zu erledigen. Es gibt einen großen Unterschied zwischen den beiden.
Donal Fellows

2
@DonalFellows natürlich. "Richtig" bedeutet immer "Best Practices zu befolgen und dabei unser bestes Verständnis für das Problem zu diesem Zeitpunkt nach besten Kräften einzusetzen". Menschen machen Fehler. Anforderungen ändern sich. Best Practices ändern sich. Ecken nicht schneiden und Refactoring , wenn Sachen passieren.
Telastyn

3
@DonalFellows - "Der Feind der Exzellenz ist die Perfektion". Ein Programm, das auf wartbare Weise geschrieben wurde, die Anforderungen des Kunden erfüllt und dies mit akzeptabler Leistung tut, ist ein Programm, das "fertig" ist. Nichts Elfenbeinturm.
KeithS

1
@DonalFellows Niemand hat das Wort perfekt verwendet, eine perfekte Lösung ist eine falsche Lösung, Telastyn spricht von einer richtigen Lösung. Die richtige Lösung ist diejenige, die die Anforderungen erfüllt und in Zukunft wahrscheinlich keine Probleme mehr verursacht, während sie in jedem Fall einfach zu handhaben ist. Absolutes ist immer falsch.
Jimmy Hoffa

7
+1 - Für Telastyn, während alle Kunden ihre Sachen jetzt erledigen möchten. VIEL MEHR Kunden möchten, dass ihre Produkte besser funktionieren als jetzt. Es scheint, dass jeder, der mit Telastyn nicht einverstanden ist, behauptet, dass er einen Kunden verlieren wird, wenn dies nicht schnell erledigt wird. Das ist bei weitem die Ausnahme und nicht die Regel. Was die Regel ist, dass die meisten Menschen, die nicht einverstanden sind, ignorieren, dass sie durch die Lieferung minderwertiger Produkte viel mehr Kunden verlieren werden. Die Behauptung, dass der Kunde es jetzt will, ist die übliche Entschuldigung von Menschen, die sich nicht für Qualität interessieren. Ich bin also skeptisch gegenüber dem behaupteten Risiko.
Dunk

21

Das läuft auf das hinaus, was ich mir als "The Eternal Conflict" (zwischen Business und Engineering) vorgestellt habe. Ich habe keine Lösung, da es sich um ein Problem handelt, das nie verschwindet, aber Sie können Maßnahmen ergreifen, um Abhilfe zu schaffen.

  • Wert kommunizieren

Was die Leute oft nicht merken, ist, dass wir als Ingenieure einfach davon ausgehen, dass das Problem des "erfolgreichen Geschäfts" immer eine Selbstverständlichkeit ist. Wir möchten, dass unser Code schön und ordentlich ist und gewartet werden kann, damit wir neue Funktionen hinzufügen und bestehende schnell und mit einem Minimum an Kunden, die für uns die Qualitätssicherung übernehmen, optimieren können, indem wir bizarre Randfälle entdecken, die durch besseren Code vereitelt worden wären. Kunden zu halten und einen Wettbewerbsvorteil mit Funktionen und Finessen zu erzielen, die niemand sonst schnell genug erreichen kann, sind beides Geschäftserfolge, zu denen guter Code direkt beiträgt und die viel darüber informieren, warum wir überhaupt besseren Code wollen.

Also buchstabiere es. "Wir möchten X in unserer Codebasis implementieren, da sich dies, wenn wir dies nicht tun, negativ auf das Geschäft auswirkt" oder "... weil dies unsere Wettbewerbsfähigkeit verbessert, indem wir unsere Fähigkeit verbessern, neue Verbesserungen und Funktionen schneller umzusetzen . "

Geben Sie Ihr Bestes, um konkrete Beweise dafür zu erhalten, dass Verbesserungen funktionieren. Wenn das Verbessern einer Teilmenge einer App zu einer schnelleren Funktion / Verbesserung geführt hat, überprüfen Sie, welches Backlog-Tool Sie möglicherweise verwenden, um Beweise dafür zu erhalten, und weisen Sie bei entsprechenden Besprechungen darauf hin.

  • Holen Sie sich das Team auf die gleiche verdammte Seite

Egos sind oft ein Problem. Eine Sache, die Ingenieurteams dringend benötigen, ist es, den Wert eines einheitlichen Ansatzes zur Lösung bestimmter Arten von Problemen zu ermitteln, den jeder hat, der seine eigene Tasse Kool Aid d'jour trinkt, weil er es besser weiß. Es ist in Ordnung zu glauben, dass die Präferenz des anderen schlechter ist als Ihre, aber Wertekonsistenz über mehr Recht, wenn sein Ansatz funktioniert und es ein Argument ist, das Sie nicht gewinnen können. Kompromisse aus Gründen der Konsistenz sind der Schlüssel. Wenn die Dinge konsistent sind, ist es schwieriger, sie falsch zu machen, da der konsistent festgelegte Weg normalerweise auch der schnellste ist.

  • Wählen Sie die richtigen Werkzeuge

Es gibt zwei Schulen von Frameworks / Toolsets / Bibliotheken / was auch immer. "Setze 99% davon für mich ein, damit ich sehr wenig wissen / tun muss" oder "um mir aus dem Weg zu gehen, wenn ich dich dort nicht haben will, aber hilf mir sehr schnell und konsequent mit Sachen, die ich eigentlich will auf der Karotte anstatt Peitsche Prinzip zu verwenden. " Bevorzugen Sie den zweiten. Flexibilität und granulare Kontrolle sollten auf dem Altar des schnellen Turnaround niemals geopfert werden, da die Frage "Wir können das nicht, weil uns unsere eigenen Tools nicht lassen" niemals eine akzeptable Antwort ist und die Frage immer für Nicht-Experten auftaucht. Trivial / Einweg-Produktentwicklung. Nach meiner Erfahrung werden unflexible Werkzeuge fast immer weit aufgerissen oder unelegant bearbeitet und verursachen ein großes, nicht zu wartendes Durcheinander. Meistens nicht, Die flexiblen / einfacher zu modifizierenden Lösungen sind auf kurze Sicht genauso oder nahezu genauso schnell. Schnell, flexibel und wartbar sind mit den richtigen Werkzeugen möglich.

  • FFS, wenn Ingenieure sich nicht entscheiden, lassen Sie sich zumindest vom Ingenieur bei der Auswahl der Werkzeuge beraten

Ich habe das Gefühl, dass dies eine Frage aus Entwicklersicht ist, aber ich war in viel zu vielen Situationen, in denen Technologieentscheidungen ohne Ingenieursaufwand getroffen wurden. Was zum Teufel ist das? Ja, irgendjemand muss letztendlich den letzten Anruf tätigen, aber wenn Sie kein technischer Manager sind, sollten Sie sich eine qualifizierte Meinung einholen. Alles, was verspricht, Geld zu sparen, weil die Leute nicht so schlau sein müssen oder weil es die Entwickler vor sich selbst schützt, ist eine schmutzige, schmutzige Lüge. Stellen Sie Talente ein, denen Sie vertrauen können. Sagen Sie ihnen, was Sie von einem Stack oder einer anderen technischen Lösung erwarten, und nehmen Sie deren Input ernst, bevor Sie sich für einen technischen Zug entscheiden.

  • Fokus auf Design über Implementierung

Die Tools sind für die Implementierung gedacht und können Ihnen als solche helfen. Oberste Priorität muss jedoch die Architektur haben, unabhängig davon, welches Spielzeug Sie für die Erstellung dieser Architektur haben. Am Ende des Tages sind KISS und DRY und alle hervorragenden Philosophien, die von dieser Angelegenheit ausgehen, wichtiger als die Frage, ob es sich um .NET oder Java handelt oder um etwas, das sowohl kostenlos als auch nicht scheiße ist.

  • Protokollieren Sie Ihre Bedenken

Wenn die Geschäftsleitung darauf besteht, dass Sie es falsch machen, speichern Sie diese E-Mail, insbesondere den Teil, in dem Sie angegeben haben, warum es Sie kosten würde. Wenn alle Ihre Vorhersagen zutreffen und schwerwiegende geschäftsschädigende Probleme auftreten, haben Sie eine Menge Argumente, um die Bedenken der Ingenieure ernst zu nehmen. Aber pass mal gut auf. Inmitten des lodernden Infernos ist eine schlechte Zeit für ein "Ich-habe-dir-so" beim Befolgen des Feuerkodes. Löschen Sie das Feuer und bringen Sie Ihre Liste der zuvor ignorierten Bedenken zu einer nachträglichen Besprechung / Konversation. Versuchen Sie, sich weiterhin auf technische Bedenken zu konzentrieren, die geäußert und ignoriert wurden, und begründen Sie, warum sie ignoriert wurden, und nicht auf die Namen der tatsächlichen Personen die Entscheidung zu ignorieren. Du bist ein Ingenieur. Bleiben Sie bei den Problemen, nicht bei den Menschen. " Wir äußerten Besorgnis über X, weil wir befürchteten, dass dies zu Y-Problemen führen würde. Uns wurde gesagt, Z und damit fertig zu werden. "


Sehr nette und ausführliche Antwort. Darf ich hinzufügen, dass ich bereits einen schlechten Fall von Auswahl der richtigen Werkzeuge erlebt habe , der zu einer großen Zeitverschwendung geführt hat. Wir könnten das Produkt einen Monat später versenden, nachdem die Entscheidung getroffen wurde, dass wir dieses Produkt aufgeben und etwas verwenden, das uns nicht aussperrt.
21.01.13

1
Ich fühle mich wohl bei dieser Antwort, aber ich habe gerade meinen ersten Job gefunden, bei dem sich die Fachleute und die Entwickler nicht ständig gegenseitig an den Kehlen sind und die Wirkung sehr erfreulich ist. Wir erledigen einfach alles. Nicht immer so schnell, wie wir es möchten, aber wir berücksichtigen die Zukunft. Dies zeigt sich sowohl im Produkt als auch in unserer Fähigkeit, es zu modifizieren, wenn sich die Bedürfnisse ändern. Unvermeidlicher Big Ball of Mud ist eine Lüge, IMO.
Erik Reppen

19

Es gibt nur eine Lösung. Reservieren Sie ungefähr 10-20% der Projekt- / Arbeitszeit für das Refactoring. Wenn es schwierig ist, das Management davon zu überzeugen, dass es sich um eine vertretbare Aufgabe handelt, geben Sie ihnen das einzig wahre Argument: Ohne Refactoring werden die Kosten für die Codewartung mit der Zeit exponentiell ansteigen. Es ist gut, ein paar Metriken / Artikel / Forschungsergebnisse zu haben, um diese These während des Treffens mit dem Manager zu untermauern :)

Bearbeiten: In diesem Whitepaper werden einige gute Ressourcen zum Thema "Refactoring im Vergleich zu steigenden Wartungskosten" aufgeführt: http://www.omnext.net/downloads/Whitepaper_Omnext.pdf


12
Es gibt eine bessere Option: Machen Sie das Refactoring zu einem Teil Ihrer normalen Codierungsgewohnheit. Täglich Stündlich. Wann immer Sie eine Funktion hinzufügen oder ändern. Sie müssen also keine zusätzliche Zeit dafür reservieren oder das Management "überzeugen".
Doc Brown

Dies gilt nur, wenn Sie sich nicht mit bereits geschriebenem Code befassen müssen. Es ist eine häufige Aufgabe, dem alten / alten / geerbten Quellcode einen neuen Wert hinzuzufügen. Aber wenn Sie sich diesen Code ansehen, wissen Sie nicht, wo Sie anfangen sollen, und Sie haben das Gefühl, dass es einfacher ist, diesen Code erneut zu schreiben, als zu lernen, wie er funktioniert. Versuchen Sie, diese Schätzungen zu rechtfertigen: zwei Tage, um einen neuen Wert hinzuzufügen, sechs Tage, um den alten Code zu überarbeiten, um ihn wartbar zu machen. Es ist oft zu hören, dass "nicht umgestalten, sondern nur der neue Wert hinzugefügt wird. Wir werden später herausfinden, was mit dem alten Code zu tun ist".
Andrzej Bobak

1
@ Flot2011 Dann hast du nur noch eine Lösung. Lassen Sie das "alltägliche" Refactoring zu Ihrer Routineaufgabe werden. Beispielsweise konzentriert sich jeder Dienstag nur auf die Verbesserung der Codequalität. Stellen Sie sicher, dass es vom Management respektiert wird, und stellen Sie sicher, dass Refactoring keine Zeitverschwendung ist. Ohne diese beiden Bedingungen werden sie früher oder später die Idee aufgeben, "etwas zu verbessern, das bereits da ist und funktioniert".
Andrzej Bobak

1
@DocBrown Funktioniert, wenn Sie mit dem Management sprechen. Wenn Sie mit dem leitenden Entwickler sprechen und ihm mitteilen, dass Sie dem Formular zwei Felder hinzufügen, dauert es 3 Tage ... Viel Glück :).
Andrzej Bobak

2
Das Aufblähen Ihrer Schätzungen, um Wartungszeit zu erhalten, ist aus einer Reihe von Gründen problematisch. Manchmal lohnt es sich tatsächlich, technische Schulden zu machen. Was passiert, wenn biz plötzlich bemerkt, dass es in einer Notsituation 15 Minuten gedauert hat, bis zwei neue Felder eingeschlagen wurden, als es das letzte Mal 8 Tage gedauert hat? IMO, biz muss sich der technischen Verschuldung und ihrer langfristigen Auswirkungen bewusst sein. Das Problem muss so verstanden werden, dass Sie entweder jetzt oder 5-mal so viel später bezahlen, wenn alles erledigt ist.
Erik Reppen

14

Wann immer Sie Zeit haben, etwas richtig zu machen, verwenden Sie es - schreiben Sie den bestmöglichen Code und verbessern Sie ihn stetig. Machen Sie sich Ihren Job nicht schwer, indem Sie schlampig werden und technische Schulden machen, wenn es nicht nötig ist.

Notrufe zur Behebung eines schwerwiegenden Fehlers können Sie nicht selbst kontrollieren. Wenn sie auftreten, müssen Sie so schnell wie möglich reagieren, das ist das Leben. Natürlich, wenn Sie den Eindruck haben, dass Ihr ganzer Job aus Notrufen besteht und Sie nie genug Zeit haben, um die Dinge richtig zu machen, dann sind Sie auf dem Weg zum Burn-out und sollten mit Ihrem Chef sprechen.

Wenn das nicht hilft, gibt es immer noch "Scottys Strategie", genug Zeit zu haben, um die Dinge richtig zu machen: Multiplizieren Sie alle Ihre Schätzungen mit dem Faktor 4:

http://blogs.popart.com/2007/07/what-scotty-from-star-trek-can-teach-us-about-managing-expectations/


Scottys Strategie funktioniert. Lass deinen Chef nur nicht wissen, dass du das tust. In der Realität dauert es oft doppelt so lange. Es ist immer besser, früh als spät fertig zu werden.
Luke

11

Ich sehe meine Aufgabe darin, die beste Software zu liefern, die innerhalb der für das Projekt zulässigen Zeit möglich ist. Wenn ich besorgt bin, dass das Qualitätsniveau niedrig sein wird, werde ich den Projektverantwortlichen engagieren. Ich beschreibe meine Bedenken und diskutiere die potenziellen Risiken der Bereitstellung der Software in diesem Zustand. Eines von drei Dingen wird zu diesem Zeitpunkt passieren:

  1. Der Projektbesitzer wird die Risiken nicht akzeptieren wollen und den Zeitplan verschieben, damit wir mehr Zeit für die Softwarequalität verwenden können.

  2. Der Projektverantwortliche möchte die Risiken nicht akzeptieren, kann den Zeitplan jedoch nicht zurückstellen. In diesem Fall müssen wir darüber verhandeln, welche Features / Funktionen aus dem Projektumfang entfernt werden sollen, um mehr Zeit für die Softwarequalität der Hauptteile der Anwendung zu verwenden.

  3. Der Projektbesitzer wird die Risiken akzeptieren und die Software von geringer Qualität wird termingerecht ausfallen. Manchmal ist das Geschäftsrisiko, nichts bereitzustellen (oder zu spät bereitzustellen), viel größer als das Geschäftsrisiko, Software von geringer Qualität bereitzustellen, und nur der Projektbesitzer kann diese Entscheidung treffen.

Das Schreiben von Software ähnelt dem Malen eines Porträts. Es ist unmöglich zu sagen, dass ein Porträt "richtig" oder "perfekt" gemacht wird. Perfekt ist der Feind von getan. Man könnte buchstäblich einen Monat damit verbringen, an einer einzigen Methode zu arbeiten, und sie wird von manchen immer noch nicht als "perfekt" angesehen. Meine Aufgabe ist es, ein Porträt zu malen, mit dem der Kunde zufrieden ist.


7

Das wird nicht in jedem Fall funktionieren, aber ich hatte etwas Glück mit dieser Strategie, wenn das Problem ein Produktionsausfall ist, der dringend behoben werden muss. Schätzen Sie die Zeit für eine schnelle Reparatur, um die Produktion zum Laufen zu bringen, und die Zeit für die Qualitätskorrektur für die Zukunft. Präsentieren Sie die Schätzungen Ihrem Chef / Kunden und lassen Sie sich die Zeit für beide genehmigen. Dann erledigen Sie die Schnellreparatur, um die Produktion zum Laufen zu bringen, und sofort danach eine Langzeitreparatur, wenn der dringende Zeitdruck nachlässt. Ich finde , dass , wenn ich es präsentieren , wie ich diese Zeit brauchen , um den Job richtig gemacht zu bekommen, aber ich kann eine legen temporäre Fix in Kraft, bis ich das tun kann, dass meine Kunden scheinen diesen Ansatz zu mögen. Es wird wieder zum Laufen gebracht und es wird für den langfristigen Bedarf gesorgt.


7

Das optimale Gleichgewicht könnte darin bestehen, so viel zusätzliche Zeit damit zu verbringen, es richtig zu machen, wie Sie es verschwenden würden, die Fehler zu beheben, die Sie beseitigen, indem Sie es richtig machen. Vermeiden Sie eine Vergoldung der Lösung. In den meisten Fällen ist die richtig gemachte Volkswagen-Lösung so gut wie die Cadillac-Lösung. Normalerweise können Sie später ein Upgrade durchführen, wenn sich herausstellt, dass Sie den Cadillac benötigen.

Das Korrigieren von Code, der nicht den bewährten Methoden entspricht, dauert häufig viel länger. Der Versuch, herauszufinden, woher die Null kommt, wenn der Aufruf wie abcde () aussieht, kann lange dauern.

Das Anwenden von DRY und das Wiederverwenden von vorhandenem Code ist normalerweise viel schneller als das Codieren und Testen einer weiteren Lösung. Es erleichtert auch das Anwenden von Änderungen, wenn sie auftreten. Sie müssen nur einen Satz Code ändern und testen, nicht zwei, drei oder zwanzig.

Streben Sie einen soliden Basiscode an. Es kann viel Zeit verschwendet werden, um es zu perfektionieren. Es gibt bewährte Methoden, die zu schnellem Code führen, der jedoch nicht unbedingt der schnellste sein muss. Darüber hinaus kann es Zeit kosten, Engpässe zu antizipieren und den Code während der Erstellung zu optimieren. Schlimmer noch, die Optimierung kann den Code verlangsamen.

Stellen Sie, wann immer möglich, die minimale Arbeitslösung bereit. Ich habe Wochen vergeudete Vergoldungslösungen gesehen. Seien Sie äußerst vorsichtig mit dem Umfang.

Ich habe einige Zeit an einem Projekt gearbeitet, das sechs Monate hätte dauern sollen. Als ich dazukam, war es seit eineinhalb Jahren in Arbeit. Der Projektleiter hatte dem Projektmanager zu Beginn eine Frage gestellt: "Soll ich es richtig machen oder darauf reagieren?" In einer Woche wurde ein Feature für Montag, Mittwoch und Freitag implementiert. Dienstag und Donnerstag wurde das Feature entfernt.

BEARBEITEN: Wenn der Code zufriedenstellend ist, lassen Sie ihn. Gehen Sie nicht zurück, um das Problem zu beheben, wenn Sie einen besseren Weg finden, dies zu tun. Wenn Sie sich eine Notiz machen müssen. Wenn Änderungen erforderlich sind, überprüfen Sie Ihre Idee und setzen Sie sie um, falls dies noch sinnvoll ist.

Wenn es Stellen gibt, an denen Sie Erweiterungen für zukünftige Funktionen implementieren würden, implementieren Sie die Erweiterungen nicht. Sie können einen Markierungskommentar hinterlassen, um daran zu erinnern, wo Sie die Änderungen vornehmen müssen.


Es sei denn, DRY bedeutet die verwirrende, unleserliche Implementierung massiver kaskadierender Vererbungsschemata. Mach das nicht. Tut mir leid, das sage ich oft, aber ich hasse das wirklich. Auch +1 für minimale Arbeitslösung in den meisten Fällen. Manchmal können einige zukunftsweisende architektonische Merkmale hilfreich sein, solange Sie es nicht übertreiben.
Erik Reppen

1
@ErikReppen Code, der verwirrend, unleserlich und eine Implementierung von massiven kaskadierenden Vererbungsschemata ist, würde meine Definition von DRY verfehlen. Wenn Sie den Code jedes Mal herausfinden müssen, wenn Sie ihn verwenden, schlägt der Entwurf DRY eindeutig fehl, selbst wenn die Implementierung erfolgreich war.
BillThor

Es kann jedoch eine Menge Wiederverwendung von Code beinhalten. Der nervige Teil ist, auf einen Baum mit 18 Klassen oder Prototypen zu klettern, um die tatsächliche Definition einer Methode zu finden, die etwas wirklich Ärgerliches tut, besonders wenn es Überschreibungen gibt.
Erik Reppen

6

Lass es funktionieren, dann mach es perfekt

Ich mag ein wenig nachlassen - aber wenn Zeit von entscheidender Bedeutung ist, sollte es Ihre Hauptpriorität sein, es zum Laufen zu bringen, einfach so. Kommentieren Sie die Mängel in Ihrem Code ausführlich und notieren Sie sich, was Sie in der von Ihnen verwendeten Projekt- / Zeitverwaltungssoftware getan haben.

Hoffentlich haben Sie dadurch mehr Zeit, auf diese Probleme zurückzukommen und sie zu perfektionieren.

Natürlich gibt es keine absolut richtige Antwort darauf, aber ich versuche, mich daran zu halten. Sie finden es möglicherweise nicht passend zu Ihrem aktuellen Arbeitsstil. Was mich zu der Alternative führt ...

Finden Sie einfach eine Methode, die für Sie funktioniert . und dann bleiben Sie dabei. Jeder hat seine eigene Art, mit Projekten umzugehen, und es gibt keinen einheitlichen Ansatz. Finden Sie einen Ansatz und machen Sie ihn zu Ihrem.


3
Wenn das Management weiß, dass es funktioniert. Sie sehen es als erledigt an und möchten nicht, dass Sie andere Anstrengungen für die
Umgestaltung

5

"Richtig handeln" bedeutet, die richtigen Kompromisse für eine bestimmte Situation einzugehen. Einige von ihnen sind:

  1. Entwicklungszeit und Kosten
  2. Einfaches späteres Lesen, Debuggen und Aktualisieren des Codes (alles von Variablennamen bis hin zur Architektur)
  3. Gründlichkeit der Lösung (Randfälle)
  4. Ausführungsgeschwindigkeit

Wenn ein Teil des Codes einmal verwendet und weggeworfen wird, kann offensichtlich # 2 für jeden der anderen geopfert werden. (Aber Vorsicht: Sie denken vielleicht , Sie werden es wegwerfen, dann müssen Sie es weiter benutzen und warten. An diesem Punkt wird es schwieriger, die Leute davon zu überzeugen, Ihnen Zeit zu geben, etwas zu verbessern, das "funktioniert".)

Wenn Sie und / oder Ihr Team weiterhin Code verwenden und aktualisieren, bedeutet das Verwenden von Verknüpfungen nur, dass Sie sich später verlangsamen.

Wenn Sie derzeit fehlerhaften Code bereitstellen (schwach auf # 4) und lange dafür brauchen (schwach auf # 1), und weil Sie versuchen, Code zu aktualisieren, der auf # 2 schwach war, haben Sie Ich habe ein solides, pragmatisches Argument für die Änderung Ihrer Praktiken.


1
Ich würde vorschlagen: "Wenn NIEMAND jemals einen Teil des Codes pflegen wird ...": Müll schreiben, Dumping und Laufen sollten keine Option sein (für jeden mit Gewissen), aber es kommt nur allzu oft vor; Bauunternehmer / Berater / Manager stellen sicher, dass sie sicher draußen sind, kurz bevor "es" den Fan trifft.
Phill W.

@PhillW. - absolute Zustimmung. Entsprechend bearbeitet.
Nathan Long

4

Wenn es ein Fehler ist, tun Sie es so schnell wie möglich. Wenn es sich um eine neue Funktion handelt, nehmen Sie sich Zeit.

Und wenn Sie für ein Unternehmen arbeiten, das die Entwicklerarbeit nicht respektiert, haben Sie möglicherweise keine andere Wahl, als dies schnell und unter Beibehaltung der Qualität zu tun.

Ich habe für eine Reihe von Unternehmen gearbeitet, die einfach von Projekt zu Projekt gingen und alles schnell erledigten. Letztendlich hatten sie in jedem Projekt wenig Erfolg, da die Implementierung (nicht nur die Programmierung) überstürzt war.

Die besten Unternehmen verstehen, dass gute Software Zeit und Handwerkskunst benötigt.


3

Erstellen Sie im Notfall die Patch-Lösung. Erstellen Sie einen neuen Fehler in der Fehlerverfolgung, indem Sie dies erwähnen. Machen Sie es richtig, wann immer Sie Zeit haben.


5
Das Problem ist, dass es so gut wie nie eine passende Zeit gibt, genau das ist das Problem, und Fehler dieser Art erhalten immer die niedrigste Priorität.
Flot2011

Ich würde sagen, dass dies nur dann zutrifft, wenn Sie mit "Notfall" etwas meinen, das nicht mehr als einmal alle sechs Monate passiert, und mit "wenn Sie Zeit haben", meinen Sie "innerhalb einer Woche oder so". Andernfalls lautet Ihre folgende Frage "Hilfe, der Client benötigt so schnell wie möglich etwas, aber der Code, den ich ändern muss, ist verwirrend und ich werde Wochen brauchen, um das zu klären!"
Nathan Long

3

Ich glaube, ich mache das, was jeder, der in dieser Branche nicht weiterkommt, macht. Ich mache es so schnell ich kann und wenn ich einige der netten Dinge weglassen muss, die helfen könnten, Probleme in der Zukunft zu verhindern oder das Lösen von Problemen in der Zukunft zu erleichtern, dann mache ich das. Es ist keine optimale Situation, aber wenn Sie an Terminen festhalten, die auf Schätzungen basieren, die auf Schätzungen basieren und auf vielen unbekannten Variablen basieren, ist dies so ziemlich das Beste, was Sie tun können.


3

Hier ist ein guter Plan:

  1. Machen Sie, dass Ihr Do-it-Right-Plan genauso viel Zeit in Anspruch nimmt wie Do-it-asap.
  2. Optimieren Sie Ihre Zeit, bis Ihre Umgebung zufrieden ist. Behalten Sie die Qualität
  3. ???
  4. Erfolg

1

Ich mache die meisten Dinge routinemäßig, so wie es mir zuerst einfällt. Das geht schnell und ich denke gerne, dass ich ein anständiger Programmierer bin und die meisten Dinge beim ersten Versuch einigermaßen in Ordnung mache.

Von Zeit zu Zeit (ich würde es gerne zweimal am Tag sagen, aber zweimal pro Woche ist realistischer), denke ich, "was wäre eine FANTASTISCHE Möglichkeit, dies zu tun , wenn ich etwas extrem Langweiliges in der Routine finde. " ? " und ich verbringe die zusätzliche Zeit damit, einen besseren Weg zu finden oder zu finden.

Wenn ich das oft genug mache, wird sich meine Routinecodierung weiter verbessern, denke ich.


1

Software ist seltsames Zeug und der Softwareentwicklungsprozess ist seltsamer.

Im Gegensatz zu den meisten Dingen im wirklichen Leben, aber wie die meisten Dinge, die mit Computern zu tun haben

Schneller ist zuverlässiger

Dies widerspricht jeder Intuition, die Sie bisher in Ihrem Leben kennengelernt haben. Hochabgestimmte Autos brechen häufiger zusammen als Standardautos. Schnell gebaute Häuser brechen schneller auseinander.

Langsame methodische Abläufe führen jedoch nicht zu besserer Software. Leute, die Wochen damit verbringen, Anforderungsdokumente und Tage damit zu verbringen, Klassendiagramme zu erstellen, bevor sie Code schreiben, produzieren keine bessere Software. Der Typ, der die Grundvoraussetzung erhält, einige Probleme klärt, ein Klassendiagramm auf das Whiteboard kritzelt und von seinem Team codiert wird, produziert fast immer zuverlässigere und bessere Software, und das in Tagen anstatt Monaten.


Ich bin mir nicht sicher, ob ich Ihnen zustimme, aber es ist eine interessante, unorthodoxe Sichtweise. +1 für unkonventionelles Denken.
Flot2011,

-1

Der Job ist nicht richtig für Sie.

Code mit geringer Qualität geschrieben "weil es keine Zeit gibt, Kunden warten, ein Fehler sollte über Nacht behoben werden, das Unternehmen verliert Geld für dieses Problem, ein Manager drängt hart" ist ein Symptom für ein schlecht geführtes Unternehmen.

Wenn Sie bereit sind, stolz auf Ihre Arbeit zu sein und qualitativ hochwertigen Code zu schreiben, ist es am besten, einen Arbeitgeber zu finden, der das versteht und Sie dafür bezahlt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.