Der von Ihnen beschriebene Zyklus ist normal. Der Weg, die Dinge zu verbessern, besteht nicht darin, diesen Kreislauf zu umgehen, sondern ihn zu straffen. Der erste Schritt ist zu akzeptieren, dass:
- Es ist fast unmöglich, am ersten Tag eines Projekts alles zu wissen .
- Selbst wenn Sie irgendwie alles wissen, wird sich bis zum Abschluss des Projekts etwas (die Anforderungen des Kunden, der Markt, mit dem Sie arbeiten, die Wünsche ihrer Kunden) geändert und geändert haben Zumindest ein Teil dessen, was Sie als ungültig oder falsch kannten.
Daher ist es unmöglich, alles im Voraus zu planen, und selbst wenn Sie dies könnten, würde die Befolgung dieses Plans dazu führen, dass Sie etwas Unvollkommenes oder Veraltetes bauen. In diesem Wissen integrieren wir Veränderungen in unsere Planung. Schauen wir uns Ihre Schritte an:
- Beginnen Sie mit einigen Anwendungsfällen
- Starten Sie die Codierung
- Erkenne ein paar Dinge, die ich nicht gut behandelt habe und die nicht gut in die aktuelle Codebasis passen.
- Schreiben Sie den größten Teil des Codes neu
Das ist eigentlich ein guter Ausgangspunkt. So würde ich es angehen:
1. Beginnen Sie mit einigen Anwendungsfällen
Gut. Indem man sagt , „Use Cases“, konzentriert sind Sie auf , was die Software ist für . Wenn Sie "ein paar" sagen, versuchen Sie nicht, alles zu entdecken. Sie halten an einer überschaubaren Menge Arbeit fest. Alles, was ich hier hinzufügen möchte, ist, sie zu priorisieren. Erarbeiten Sie mit Ihrem Kunden oder Endbenutzer die Antwort auf diese Frage:
Was ist die kleinste und einfachste Software, die ich Ihnen geben kann, um Ihre Situation zu verbessern?
Dies ist Ihr Produkt mit minimaler Lebensfähigkeit - alles, was kleiner ist, ist für Ihren Benutzer nicht hilfreich, aber alles, was größer ist, läuft Gefahr, zu früh zu planen. Holen Sie sich genügend Informationen, um dies zu erstellen, und fahren Sie dann fort. Denken Sie daran, dass Sie zu diesem Zeitpunkt noch nicht alles wissen werden.
2. Starten Sie die Codierung.
Toll. Sie arbeiten so schnell wie möglich. Bis Sie Code geschrieben haben, haben Ihre Kunden keinen Vorteil erhalten. Je mehr Zeit Sie mit der Planung verbringen, desto länger hat der Kunde ohne Amortisation gewartet.
Hier möchte ich Sie daran erinnern, guten Code zu schreiben . Beachten und befolgen Sie die SOLID-Prinzipien , schreiben Sie angemessene Komponententests für alles, was zerbrechlich oder komplex ist, machen Sie sich Notizen zu allem, was Sie wahrscheinlich vergessen oder das später Probleme verursachen könnte. Sie möchten Ihren Code so strukturieren, dass Änderungen keine Probleme verursachen. Zu diesem Zweck strukturieren Sie Ihren Code jedes Mal, wenn Sie sich entscheiden, etwas auf diese Weise anstatt auf diese Weise zu erstellen, so, dass von dieser Entscheidung so wenig Code wie möglich betroffen ist. Im Allgemeinen besteht eine gute Möglichkeit darin, den Code zu trennen:
- Verwenden Sie einfache, diskrete Komponenten (abhängig von Ihrer Sprache und Situation kann es sich bei dieser Komponente um eine Funktion, eine Klasse, eine Assembly, ein Modul, einen Dienst usw. handeln. Sie haben möglicherweise auch eine große Komponente, die aus kleineren Komponenten aufgebaut ist, z eine Klasse mit vielen Funktionen oder eine Assembly mit vielen Klassen.)
- Jede Komponente erledigt einen Job oder Jobs in Bezug auf eine Sache
- Änderungen an der internen Funktionsweise einer Komponente sollten nicht dazu führen, dass sich andere Komponenten ändern müssen
- Komponenten werden sollten gegeben Dinge , die sie verwenden oder davon abhängen , anstatt das Abrufen oder Erstellen von ihnen
- komponenten sollten anderen komponenten informationen geben und sie zur arbeit auffordern, anstatt informationen abzurufen und die arbeit selbst zu erledigen
- Komponenten sollten nicht auf das Innenleben anderer Komponenten zugreifen, diese verwenden oder von diesem abhängig sein. Verwenden Sie nur deren öffentlich zugängliche Funktionen
Auf diese Weise isolieren Sie die Auswirkungen einer Änderung, sodass Sie in den meisten Fällen ein Problem an einer Stelle beheben können und der Rest Ihres Codes nichts davon merkt.
3. Auf Probleme oder Mängel im Design stoßen.
Das wird passieren. Das ist unvermeidlich. Akzeptiere das. Wenn Sie auf eines dieser Probleme stoßen, entscheiden Sie, um welche Art von Problem es sich handelt.
Einige Probleme sind Probleme in Ihrem Code oder Design, die es schwierig machen, das zu tun, was die Software tun sollte. Bei diesen Problemen müssen Sie zurückgehen und Ihr Design ändern, um das Problem zu beheben.
Einige Probleme sind darauf zurückzuführen, dass nicht genügend Informationen vorhanden sind oder dass Sie an etwas gedacht haben, an das Sie vorher nicht gedacht haben. Bei diesen Problemen müssen Sie zu Ihrem Benutzer oder Client zurückkehren und ihn fragen, wie er das Problem beheben möchte. Wenn Sie die Antwort haben, aktualisieren Sie Ihr Design, um damit umzugehen.
In beiden Fällen sollten Sie darauf achten, welche Teile Ihres Codes geändert werden mussten, und während Sie mehr Code schreiben, sollten Sie darüber nachdenken, welche Teile in Zukunft möglicherweise geändert werden müssen. Auf diese Weise können Sie leichter herausfinden, welche Teile möglicherweise zu stark miteinander verknüpft sind und welche möglicherweise stärker isoliert werden müssen.
4. Schreiben Sie einen Teil des Codes neu
Sobald Sie festgestellt haben, wie Sie den Code ändern müssen, können Sie die Änderung vornehmen. Wenn Sie Ihren Code gut strukturiert haben, müssen Sie normalerweise nur eine Komponente ändern. In einigen Fällen müssen jedoch auch einige Komponenten hinzugefügt werden. Wenn Sie feststellen, dass Sie eine Menge Dinge an vielen Orten ändern müssen, denken Sie darüber nach, warum das so ist. Könnten Sie eine Komponente hinzufügen, die den gesamten Code in sich behält, und dann alle diese Stellen nur diese Komponente verwenden? Wenn Sie dies können und wenn Sie diese Funktion das nächste Mal ändern müssen, können Sie dies an einem Ort tun.
5. Test
Eine häufige Ursache für Softwareprobleme ist, dass Sie die Anforderungen nicht gut genug kennen. Dies ist oft nicht die Schuld der Entwickler - oft ist sich der Benutzer auch nicht sicher, was er benötigt. Der einfachste Weg, dies zu lösen, besteht darin, die Frage umzukehren. Anstatt zu fragen, "Was muss die Software tun?", Geben Sie dem Benutzer jedes Mal, wenn Sie diese Schritte ausführen, das, was Sie bisher erstellt haben, und fragen Sie ihn: "Ich habe das erstellt - tut es das, was Sie benötigen?". Wenn sie ja sagen, haben Sie etwas gebaut, das ihr Problem löst, und Sie können aufhören zu arbeiten! Wenn sie Nein sagen, können sie Ihnen genauer sagen, was mit Ihrer Software nicht stimmt, und Sie können dieses spezielle Problem beheben und weitere Rückmeldungen einholen.
6. Lernen
Achten Sie während dieses Zyklus auf die Probleme, die Sie finden, und auf die Änderungen, die Sie vornehmen. Gibt es Muster? Können Sie sich verbessern?
Einige Beispiele:
- Wenn Sie immer wieder feststellen, dass Sie den Standpunkt eines bestimmten Benutzers übersehen haben, können Sie dann diesen Benutzer stärker in die Entwurfsphase einbeziehen?
- Wenn Sie immer wieder Änderungen vornehmen müssen, um mit einer Technologie kompatibel zu sein, können Sie dann eine Schnittstelle zwischen Ihrem Code und dieser Technologie erstellen, sodass Sie nur die Schnittstelle ändern müssen?
- Wenn der Benutzer seine Meinung zu Wörtern, Farben, Bildern oder anderen Dingen in der Benutzeroberfläche ändert, können Sie dann eine Komponente erstellen, die dem Rest der Anwendung diese Elemente zur Verfügung stellt, damit sie alle an einem Ort sind?
- Wenn Sie feststellen, dass sich viele Ihrer Änderungen in derselben Komponente befinden, sind Sie sicher, dass sich diese Komponente nur an einen Job hält? Könnten Sie es in ein paar kleinere Stücke teilen? Können Sie diese Komponente ändern, ohne andere berühren zu müssen?
Seien Sie agil
Was Sie hier anstreben, ist ein Arbeitsstil, der als Agile bekannt ist. Agile ist keine Methodik, sondern eine Methodenfamilie, die eine ganze Reihe von Dingen umfasst (Scrum, XP, Kanban, um nur einige zu nennen). Allen ist jedoch gemeinsam, dass sich die Dinge ändern und wir als Softwareentwickler sollten planen, sich an Änderungen anzupassen, anstatt sie zu vermeiden oder zu ignorieren. Einige seiner Kernprinzipien - insbesondere diejenigen, die für Ihre Situation relevant sind - sind die folgenden:
- Planen Sie nicht weiter voraus, als Sie mit Zuversicht vorhersagen können
- Berücksichtigen Sie, dass sich die Dinge auf Ihrem Weg ändern
- Anstatt etwas Großes auf einmal zu bauen, bauen Sie etwas Kleines und verbessern Sie es dann schrittweise
- Binden Sie den Endbenutzer in den Prozess ein und erhalten Sie umgehend regelmäßiges Feedback
- Untersuchen Sie Ihre eigene Arbeit und Ihren Fortschritt und lernen Sie aus Ihren Fehlern