ソフトウェア開発はリリースごとに差分を積み上げていくのが一般的なスタイルです。最初に動くものを組んで、リリースしたあとは触らずに放置されるべきものではない。周囲の環境の変化に合わせて要望があるので、ほとんどの場合は動くものをベースにして、新しい機能なりを追加してというのを繰り返します。 既存のコードベースに差分を積み上げる改良開発は、新規開発と比べて、難しいというか厳格なものです。最初はやっぱりワーっと統制のない状態で作られても完成までは何とかたどり着けます。超人的なエンジニアが独力で作り上げたって伝説が残ってたりしますね。完成までたどり着けない場合もありますが、それは今回議論したいことではありません。一方で、そのような新規開発と比べると、追加の開発は既存のものと整合性をとったり、既存のものを壊さないように気をつけたりする必要があるので、それなりに厳格な変更管理のプロセスが必要になります。