Wie vermeide ich das Schleichen von Features in einem Solo-Projekt?

12

Ich habe also ein Programm, an dem ich bereits 2011 und bis 2012 gearbeitet habe, aber die letzte Veröffentlichung war im Dezember 2011 . Ich habe aktiv daran gearbeitet, aber Feature Creep lockte seinen hässlichen Kopf an und jetzt ist er mit Tonnen von unvollendeten Features gefüllt.

Das Schlimme daran ist, dass sich beim Implementieren eines Features ein neues einschleicht. Was kann ich tun, um ein Einschleichen von Features in der Zukunft zu vermeiden, sodass ich in über einem Jahr tatsächlich eine Veröffentlichung herausbringen kann ?

Das Projekt basiert auf iOS und hatte Releases für jedes iOS-Versionsupdate, aber das letzte war mit 5.1 (2011) zurück. Ich würde gerne in der Lage sein, diesen stabilen Release-Zyklus wieder herzustellen, aber es hat sich als zu schwierig erwiesen.

Cole Johnson
quelle
8
Könnten Sie in Ihrer Frage präzisieren, woher die Funktionen stammen? Wer ist für das Feature Creep verantwortlich? Du? Die Business Analysten? Der Präsident der Firma? Die Anforderungen der Nutzer? Es ist schwierig, Ratschläge zum Verwalten des Feature-Creeps zu geben, ohne die Quelle zu kennen. Auch, weil ich Dilbert mag: search.dilbert.com/comic/Feature%20Creep ;)
FrustratedWithFormsDesigner
1
Sind Sie alleiniger Entwickler dieses Projekts? Für große Teamprojekte ist es unabdingbar, Meilensteine ​​zu setzen, um Lieferpläne zu verwalten. Wer allein fliegt, kann jedoch auch von Methoden wie der funktionsgesteuerten Entwicklung profitieren .
Hardmath
@ FrustratedWithFormsDesigner Ich bin der einzige Entwickler
Cole Johnson
1
@FrustratedWithFormsDesigner Nr. Ich bin allein. Sofern Sie Source Forge nicht als eine Person betrachten, die an dem Projekt arbeitet , bin ich die einzige.
Cole Johnson
4
Auch der Versand ist ein Merkmal ... Manchmal ist es hilfreich, dies zu berücksichtigen, wenn (noch) ein anderes Merkmal in Betracht gezogen wird.
Marjan Venema

Antworten:

21

Nach meiner Erfahrung ist es am einfachsten, wenn Sie eine Entwicklungs- und Release-Trittfrequenz haben, die nicht den Anforderungen entspricht, die Sie erfüllen möchten. So habe ich es gemacht:

  1. Notieren Sie sich die Funktionen und geben Sie ihnen eine Bewertung, die angibt, wie viel Sie daran arbeiten möchten und wie viel Ihrer Meinung nach der Benutzer davon profitieren wird. Dann schreiben Sie sie in dieser Reihenfolge.
  2. Stellen Sie vor dem Einchecken / Übertragen einer Funktion sicher, dass Sie über einen stabilen, implementierbaren Build verfügen (ziehen Sie ein CI-System in Betracht, um dies zu vereinfachen).

Auf diese Weise können Sie nach jedem Feature einfach ein Release verschieben, wenn Sie möchten ... oder auf ein Rollup warten, das den Wert bietet, den ein Release haben soll.

Hinweis:

  • Einer Funktion kann niemals eine höhere Priorität zugewiesen werden als der, an der Sie arbeiten (oder sie kann, aber sie kann die Funktion, an der Sie arbeiten, nicht unterbrechen). Es kann kommen nächste aber nie jetzt . Das heißt, wenn Sie von jetzt auf nächste gehen, haben Sie die Möglichkeit, einen Release-Build zu kürzen, wenn Sie möchten.
Steven Evers
quelle
Sehr hilfreich! Ich mag die etwas strenge Einstellung.
Cole Johnson
Ich würde hinzufügen: Starten Sie keine neue Funktion, bevor Sie eine neue abgeschlossen haben. Andernfalls erhalten Sie eine Codebasis mit losen Enden, die nichts bewirken können.
Tyanna
@Tyanna: Das habe ich gemeint mit "einem Feature kann niemals eine höhere Priorität zugewiesen werden als dem, an dem Sie arbeiten ... es kann das, an dem Sie arbeiten, nicht unterbrechen ..."
Steven Evers
7

Die Antwort ist banal und häufig unmöglich: lehnen Sie es ab, zusätzliche Funktionen hinzuzufügen.

Im Einzelnen lautet die Antwort, warum ein neues Feature in den Feature-Creep-Bin fällt. Wenn wir davon ausgehen, dass Features, die sich schleichen, diejenigen sind, die einem Projekt hinzugefügt werden, obwohl ihre Funktionalität nur tangential zur beabsichtigten Verwendung des Projekts ist und die schleichenden Features nützlich und nicht überflüssig sind, besteht die Antwort darin, sie zu trennen , aber verwandte Tools. Verwenden Sie die Unix-Philosophie, orthogonale Werkzeuge zu erstellen und zusammenzufügen.

Aus Sicht des Projektmanagements ist die Antwort vergleichbar. Entscheiden Sie, wie viel Zeit Sie für die nächste Veröffentlichung verwenden möchten, und legen Sie eine Frist fest. Schätzen Sie die Merkmale und schneiden Sie sie so weit ab, dass die Frist eingehalten wird. Wenn andere Stakeholder als Sie involviert sind, lassen Sie sie entscheiden, was für sie am wichtigsten ist.

Einen guten Überblick über Scheduling gibt es bei Joel on Software:

http://www.joelonsoftware.com/articles/fog0000000245.html

Michael
quelle
9
Da er das Projekt vollständig alleine durchführt, muss er möglicherweise die Aufgabe, den Feature-Requester zu schlagen, auslagern.
Philip
2

Eine der wichtigsten Lektionen in der Entwicklung ist das Wissen, wann es Zeit ist, damit aufzuhören.

In der Regel fügt ein Entwickler Funktionen hinzu. Das wiederum inspiriert weitere Ideen. So werden weitere Funktionen hinzugefügt. Das ist, wie Sie sagten, einer der Wege, auf denen ein Projekt zu Vaporware wird. Der Entwickler sieht das Projekt nie als "abgeschlossen" an, daher wird es nie veröffentlicht.

Die Gewohnheit, in die Sie sich begeben möchten, besteht darin, nicht mehr an ein Release / eine Version als 'abgeschlossenes' Projekt zu denken. Betrachten Sie Entwicklung vielmehr als langfristigen Prozess. Stellen Sie sich Releases als Meilensteine auf dem Weg zu dem vor, was Sie sich eines Tages für das Programm erhoffen. Daher ist eine Veröffentlichung / Version nur eine Momentaufnahme, in der Sie sich längerfristig befinden ... eine Momentaufnahme, die gut abgerundet und getestet wurde.

Was Sie praktisch tun können, ist sich hinsetzen und Ihre nächste Veröffentlichung festlegen. Es muss nicht schrecklich gründlich sein. Notieren Sie die 3-5 neuen wichtigen Stücke von Funktionalität , die Sie glauben , sind von wesentlicher Bedeutung für die nächste Version. (Die tatsächliche Anzahl der Funktionen kann je nach App-Typ variieren, ohne Berücksichtigung von Fehlerkorrekturen oder geringfügigen Änderungen an der Benutzeroberfläche. ) Arbeiten Sie daran. Wenn Sie andere Ideen haben, ist das in Ordnung ... Machen Sie sich einfach Notizen und implementieren Sie diese in der folgenden Version. Wenn Sie diese 3-5 Elemente fertiggestellt haben, ist Ihre Version für die Betaversion bereit.

Wenn ich eine neue Anwendung starte, denke ich normalerweise über die endgültige Vision für die Anwendung nach. Das ist für mich das, was ich in Version 3 der App will. Mit diesem Benchmark habe ich eine Vorstellung davon, was eine solide Version 1 ausmacht - nur die Grundlagen.

Zusammenfassung:

Jede Veröffentlichung muss nicht die fertige "Vision" des Projekts sein. Nur ein Meilenstein in diese Richtung.

GroßmeisterB
quelle
2

Verwenden Sie ein Versionskontrollsystem, in dem es kostengünstig ist, einen Zweig für eine Idee zu erstellen, und halten Sie ihn von Ihrem Veröffentlichungspfad fern. Zum Beispiel gitkann man sich in eine Idee "einschleichen" und sie dann git stashwegschaffen. Später können Sie diese Stashes überprüfen und sie in der Reihenfolge auswählen, in der sie interessant erscheinen.

Erstellen Sie für größere Features eine echte Verzweigung (sodass Sie mehrere Commits ausführen können). Ein typisches Beispiel: Als ich den Garbage Collector generationsübergreifend unterstützen wollte, habe ich eine Filiale eingerichtet. Verstecke fangen die ablenkenden kleinen Dinge sehr gut ein. Große Features können als Stashes beginnen, sich dann in Zweige verwandeln und schließlich zusammengeführt werden, wenn sie fertig sind.

Mit Stashes und Branches können Sie eine Bestandsaufnahme Ihrer Ideen durchführen, Prioritäten setzen und einen Bereich für die Veröffentlichungen Ihres Solo-Projekts festlegen, genau wie bei einem Projekt mit verwaltetem Team.

Schauen Sie, wenn Sie eine Idee haben, muss sie irgendwohin gehen , und das Beste ist Code : das Repo. Sich einschleichen ist besser als gute Ideen zu vergessen. Wenn Sie jedoch alle Funktionen in dieselbe Hauptzeile einbinden, verzögert sich die Veröffentlichung immer wieder, es sei denn, Sie schneiden unordentliche Veröffentlichungen mit halbfertigen Inhalten ab, vor deren Verwendung die Benutzer gewarnt werden müssen.

Kaz
quelle