「何を作るか」と「いかに作るか」

ソフトウェア開発において、「何を作るか」とそれを実現する方法である「いかに作るか」とををきちんと区別すべきとよく言われる。最近も以下のようなエントリがそのことを話題にしている。

「何を作るか」と「いかに作るか」とはきちんと区別できるのだろうか?区別できたとして、区別した方がいいのだろうか?
「何を作るか」と「いかに作るか」とはきちんと厳密に区別できないように思う。

「いかに作るか」を意識せずに「何を作るか」は決められない

「何を作るか」を最終的に決めるのは顧客の側である。顧客が欲しがるであろう機能を作るのだから、パッケージソフトの開発でも顧客の側が「何を作るか」を決めると言っていいだろう。そして「何を作るか」を決める際には、作るためのコストが重要になる。作ることのメリットよりも作るためのコストが大きいと見積もった場合には、機能を削ることになる。その機能がソフトウェアの根幹に関わるような場合には開発プロジェクト自体が中止となることもありえる。
そして、作るためのコストを見積もるためには「いかに作るか」が決まっていないといけない。実現方法が全く不明であれば、作るためのコストを見積もることはできない。なんらかの実現方法を想定することにより、作るためのコストを見積もることができるようになる。
このように考えると、「何を作るか」が「いかに作るか」に依存していることがわかる。一方的に「何を作るか」を決めてから「いかに作るか」を決められるものではないことがわかる。

お金に糸目をつけない開発プロジェクトならば、「何を作るか」を決めてから「いかに作るか」を決めてもいいだろう。だが現実的な開発プロジェクトでは、「いかに作るか」を意識的にせよ無意識的にせよある程度考えた上で「何を作るか」を決めることになる。