難易度3倍の法則
再利用可能なモジュールを作るのは、単一のソフトウェアのモジュールを作るのに比べ、3倍の難易度がある
再利用可能=共通の、とも言えます。
単一のソフトウェアのモジュールであればそのソフトウェアの要件だけを満たせばよいですが、広くあらゆるところで使われることを想定したモジュールでは、どういう使われ方をするかするかあれこれ想像して作らないといけません。
例えば何かの金額に関するモジュールなら
- 為替の対応は必要か
- 為替の情報はどう取るか
- 為替はどこまで対応するか
- 税率の対応は必要か
- 税率の情報はどう取るか
- 3桁ごとのカンマ区切りの文字列のアウトプットは必要か
など、仕様に関して想像できることは色々出てきます。
新規のプロジェクトで最初に便利な共通関数みたいのを作るときに「どこまで便利にするか」悩みがちですよね。
YAGNIの法則につながるところでもありますが、最初からあまり作り込まないのが懸命です。結局使い始めてみないと何が必要でどこまでさせるのが適当なのかが見えてこないからです。想像で時間かけて作り込んだけど結局後で大分作り直した、または、結局使わなかった、なんてことも多々あります。
便利な共通モジュールのようなものを作るのは難易度3倍ですが、その3倍は1箇所にある必要はなく、長く時間をかけて広く見た場合での3倍にしたほうが、良いものが作れそうです。