ソフトウェアを作っていると「これは目的Aにも目的Bにも使えるぞ」と思う時がある。
複数の目的に使えることは、一つの目的に使えることよりも優れている。
- 目的Aにしか使わない人はBのための機能を単に無視するだけなので。
- 無視することができない(メニューがゴチャゴチャする、ボタンだらけになって操作方法が難しくなる、など)ときにはそうともいえない
しかし「一つの目的に使える」が達成されていない状態で、複数の目的に使えることを目指すと良くない。
- 図で、斜線の部分が既に実装したコードだとする
- 目的Aを達成するのにはxを実装するのが最優先
- しかしxは目的Bには役に立たない
- 目的Bを達成するのにはzが最優先
- 目的Aには役立たない
- 複数の目的を目指している場合
- どちらの目的でも有用なyを優先して実装してしまう
- これは目的が曖昧なせいで、どの目的にもまっすぐ進んでない
- どちらの目的も達成が遅れる
- 二兎を追う者は一兎をも得ず
- ゲームを作らずにゲームライブラリを作ってしまうあるあるパターン
- 一つのゲームを完成させないまま、色々なものに使えそうなライブラリコードばかり使ってしまう
- 「一番重要なユーザーストーリーを決めて、その達成を目指す」という開発方法がオススメされるのは、この目的迷子に陥ることを防ぐため
関連
- 手段の目的化の対抗策を書いてる時に思いついた