Nehmen wir an, Sie haben gerade begonnen, in einem sehr kleinen Team an einem {derzeit relativ kleinen, aber später hoffentlich größeren} Projekt zu arbeiten. Beachten Sie, dass dies ein tatsächliches Projekt ist, das von anderen Entwicklern in der realen Welt verwendet werden soll, und kein akademisches Projekt, das am Ende eines Semesters ausrangiert werden soll.
Der Code ist jedoch noch nicht für andere freigegeben, sodass noch keine Entscheidung in Stein gemeißelt ist.
Die Methoden
Einer von Ihnen mag es, mit dem Codieren zu beginnen und die Teile zusammenzufügen, bevor Sie unbedingt eine klare Vorstellung davon haben, wie genau alle Komponenten interagieren (Bottom-up-Design). Ein anderer von Ihnen macht gerne zuerst das gesamte Design und macht die Details aller Komponenten und der Kommunikation fest, bevor er eine Lösung codiert.
Angenommen, Sie arbeiten an einem neuen System, anstatt vorhandene Systeme nachzuahmen, und es ist daher nicht immer klar, wie das richtige Enddesign aussehen sollte. In Ihrem Team haben verschiedene Teammitglieder manchmal unterschiedliche Vorstellungen davon, welche Anforderungen überhaupt für das Endprodukt erforderlich sind, geschweige denn, wie es zu entwerfen ist.
Wenn der Bottom-Up-Entwickler einen Code schreibt, lehnt der Top-Down-Entwickler ihn ab, da möglicherweise zukünftige Probleme im Entwurf auftreten, obwohl der Code das vorliegende Problem möglicherweise löst, da er der Ansicht ist, dass es wichtiger ist, den Entwurf korrekt zu gestalten bevor Sie versuchen, die Lösung für das Problem zu codieren.
Wenn der Top-Down-Entwickler versucht, das vollständige Design und die vorgesehenen Probleme zu erarbeiten, bevor er mit dem Schreiben des Codes beginnt, lehnt der Bottom-Up-Entwickler diesen ab, da der Bottom-Up-Entwickler nicht glaubt, dass einige der Probleme tatsächlich in der Praxis auftreten werden und denkt, dass das Design möglicherweise in Zukunft geändert werden muss, wenn die Anforderungen und Einschränkungen klarer werden.
Das Problem
Dies hat zu dem Problem geführt, dass Bottom-Up-Entwickler am Ende Zeit verschwenden, da der Top-Down-Entwickler häufig entscheidet, dass die Lösung, die der Bottom-Up-Entwickler geschrieben hat, aufgrund eines Konstruktionsfehlers verworfen werden sollte, was zu einem erneuten Bedarf führt -Schreibe den Code.
Der Top-Down-Entwickler verschwendet viel Zeit, denn anstatt die Arbeit zu parallelisieren, setzt sich der Top-Down-Entwickler jetzt häufig zusammen, um mit dem Bottom-Up-Entwickler das richtige Design zu erarbeiten für 1 Person die Arbeit zu erledigen, als 2.
Die beiden Entwickler wollen weiter zusammenarbeiten, aber es scheint nicht, dass die Kombination beiden in der Praxis hilft.
Die Ziele
Die gemeinsamen Ziele sind offensichtlich die Maximierung der Codiereffektivität (dh die Minimierung der Zeitverschwendung) und das Schreiben nützlicher Software.
Die Frage
Einfach ausgedrückt, wie können Sie dieses Problem lösen und mit dieser Situation umgehen?
Die einzige effiziente Lösung, die ich mir vorstellen kann, ist, dass jeder Entwickler seinem eigenen Stil für das Design folgt. Dies ist jedoch schwieriger, als es sich anhört, wenn Sie die Codeüberprüfung durchführen und tatsächlich die Änderungen der anderen genehmigen müssen und wenn Sie versuchen, ein kohärentes Framework für die Verwendung durch andere zu entwerfen.
Gibt es einen besseren Weg?