目の前にあるのはレガシーシステムだという前提で設計せよ

たとえ、今あなたが使っているシステムが最新鋭機で、最先端テクノロジーを使って開発していたとしても、明日になればレガシーシステムになります。このことに対する備えが必要です。現在のソフトウェア産業では、非常に速いペースであらゆるものが古くなっていきます。自分のシステムを稼働に持ち込み、たとえ数か月なりとも生き残らせたいと思うなら、いずれメンテナンスデベロッパーにフィックスしてもらわなければならなくなることを認めなければなりません。これは、システムが次の要件を満たさなければならないということです。

  • 明確性:コンポーネントやクラスがどのような役割を果たすのかが明確で なければなりません。
  • テスト可能性:システムが簡単にテストできるようでなければなりません。
  • 正確性:システムの各部分は設計通りに、あるいはあるべき姿で動作しなければなりません。汚いその場しのぎのフィックスは取り除く必要があります。
  • 追跡可能性:まだコードを見たことがないのに、急速バグフィックスしなければならなくなった人が、稼働システムを見て、エラーを診断し、フィックスに取りかかれるようでなければなりません。

別のチームがコードベースを聞いて、何が起きているのかを探っていくのだということを考えるようにしてください。これは、優れたアーキテクチャーの基本です。必要以上に単純化したり、徹底的にドキュメントしたりする必要はありません。優れた設計は、さまざまな形でそれ自体がドキュメントになります。本番システムのふるまいも設計を伝えるものです。たとえば、依存関係がぐちゃぐちゃでつたが這い回るような感じのアーキテクチャーは、本番システムでも艦に入れられた動物のような挙動を示すものです。エラーをデバッグしなければならない、おそらくあなたより若いデペロッパーのことを思いやるようにしてください。

レガシーは、ソフトウェアの世界では悪い意味を持つ言葉ですが、実際には、すべてのソフトウェアシステムがレガシーと形容されるべきものです。これは、決して悪いことではありません。あなたのシステムが耐久性を持ち、顧客の期待を満足させ、ビジネス上の価値を提供しているということなのです。レガシーと呼ばれたことのないソフトウェアシステムは、おそらく稼働に移される前に封印されたのです。それはアーキテクチャーの成功とはとても言えないでしょう。