ソフトウェア設計するときに忘れてはいけないこと
はじめに
この記事は、ソフトウェア設計するときに忘れてしまうと痛い目に遭ってしまう考えや姿勢を紹介する記事です。
ソフトウェア設計をちょっとかじった初心者にありがちなことですが、色々な原則やパターンを目の前のソフトウェアに過剰に当てはめてしまいがちです。
そうなる前にちょっと立ち止まってみる、そんな機会を提供する考えや姿勢を紹介します。
設計の目的はコストの最小化である
この考えをゆめゆめ忘れないようにしたいです。
ここでいうコストとは概ね時間のことです。
ソフトウェア開発を取り巻くコスト項目は無数にありますが、ことソフトウェア設計という文脈において関係があるのはだいたい以下のようなコストでしょう。
設計にかかるコスト
コードを書くのにかかるコスト
テストにかかるコスト
他の人がコードを理解するコスト
不具合や仕様変更などでコードを修正するコスト
機能追加などでコードを拡張するコスト
他にもあるかもしれませんね。
これらのコストの合計値を最小化する設計を提示するのが私たちの仕事です。
未来を予測するのではなく考慮する
将来必要になりそうな機能をあらかじめ実装してしまうことは有名なアンチパターンとして知られています。
これが、未来を予測するという行為のわかりやすい事例です。
そうではなくて、将来必要になりそうな機能があったとして、それを実装しやすいようにしておくのが適切です。
これが、未来を考慮するということです。
実装してしまうのではなく、実装しやすいようにしておく、両者には大きな違いがあるのです。
決定を遅らせる勇気を持つ
適切な決定を下すためには、その決定を左右する情報をどれだけ持っているかが重要です。
プロジェクト初期よりもプロジェクト後期の方が、持っている情報量が段違いに多いです。
したがって、プロジェクト後期の方が適切な決定を下せる可能性が高まります。
これらの話を抽象化すると、決定は遅ければ遅いほど適切な判断ができる可能性が高まるということです。
一方で、決定を遅らせることのデメリットも状況により発生するので、無条件に決定を遅らせないといけないというわけではありません。
無条件に決定を早く出そうとしている場合は、もう少し立ち止まって考えるのもいいですよ、ということです。
まとめ
ソフトウェア設計するときは以下を忘れないようにしましょう。
設計の目的はコストの最小化である
未来を予測するのではなく考慮する
決定を遅らせる勇気を持つ
さいごに
金槌を持った瞬間に全てが釘に見えてしまう現象になんとかあらがっていきたいですね。
最後までご覧いただきありがとうございました。