当たり前のことなんですが、100人月のソフトウェア開発があったとして、100人投入したからといって1ヶ月で出来る訳がないですよね。なのに、そのパラメータは可変だと信じている人がまだまだ多いです。しかも、1人月のバラツキをなくすために生産性の低い方に揃えるなんて馬鹿げています。私はソフトウェア開発で最も重要なパラメータは「期間」だと考えています。かける工数の時間ではなくて、あいた時間も含めての期間です。
SonicGardenでは月額定額のサービス型の受託開発を行っています。その詳しい説明は別の機会にしますが、ポイントは月額定額という点です。月額定額なので、可変できるパラメータは「期間」だけになります。そのポリシーの背景には以下の考え方があります。
・アジャイル開発のボトルネック
・Publickey「納期を半分にしてくれ、金なら出す」
大規模なソフトウェアを作るには、大人数が必要と考えがちですが、これも違うと感じていて、ソフトウェア開発の場合、沢山の人数がいたからといって、価値を産むソフトウェアが作れるとは限らないと考えています。大量に使うかどうかわからないプログラムを作るだけなら、沢山の人がいれば良いかもしれませんが、そこにかけるだけのコストを超える価値を産み出すかどうかを基準においた場合、沢山の人は必要ありません。サッカーや野球をするのに、沢山の素人がいるチームがトップクラスのプロチームに勝てるかというと、決してそんなことはないのと同じで、ソフトウェア開発にも適正な人数があって、それ以上の人が必要なのではなく、高いレベルのソフトウェアを作るには高いレベルのプログラマが必要で、そうでないソフトウェアの場合はそれなりのプログラマで良いのではないでしょうか。
SonicGardenでは、ソフトウェアはお金や人手をかければ速く良いものが出来る訳ではないと考えています。私の考えるメタファとしてのソフトウェアの開発は、植物や野菜を作ることに似ていると感じています(ソフトウエア開発は何に似ているか?)。どれだけ沢山の栄養や人手をかけたからといって、花が咲いたり果実が実るまでの期間を短くすることは出来ません。ソフトウェアも、お金や人手を必要以上にかけるよりも、時間(期間)をかけることの方が良いソフトウェアを作ることができると考えているのです。ちなみに、ここで前提にしているのは、設計者やコーダーといった分業をしない、プログラマがすべての工程を見るようなアジャイル開発です。
例えば5日で出来るとプログラマが見積もったソフトウェアを、本当に5日間で缶詰して作るか、もしくは週に最大1日のペースで5週間かけて良いとしたら、どちらが良いソフトウェアを作ることができるでしょうか?おそらく5週かけた方が良いソフトウェアができあがると思います。ソフトウェア開発という仕事は、対象のドメインを理解したり、プログラミングの技術を磨いたり、本来は「学び」の多い仕事です。設計書通りに作るのであれば、短期間でも良いかもしれませんが、本当に良いソフトウェアを作ろうとするならば、作業時間は短くても制作期間を長くとった方が良いものができます。週1日の残りの4日間を他の仕事や勉強にあてたとしたら、5日後のプログラマのスキルより、5週後のスキルの方が良いものを速く作れるようになっている筈です。
SonicGardenの月額定額のワークスタイルは、プログラマの稼働を100%にしなくても成立するビジネスモデルにしているので、この長期間かけて少しずつ作るということを実現しています。少しずつと言っても、中間に入る無駄を極力なくすことで、高い生産性を実現しているので、出来る量に驚いて頂くお客様が多いです。お客様にとって、本来プログラマを雇って内製するとしたら、この時間はかかるが工数をかけない、ということは実現できません。稼働が空いてしまうからです。かといって、今までの人月の会社に発注しても、空き稼働を嫌がるので結局高くついてしまうことでしょう。私たちのソリューションは、一定以上のお金をもらわない、というものです。
よく聞かれるSonicGardenの名前の由来は、音速のように素早く決断し迅速にプログラミングしていく一方で、出来上がるものは性急に完成させるのではなく期間をかけてじっくりと育てていくというソフトウェア開発のスタイルからきています。私たちが提供するソフトウェアは、スローソフトウェアなんです。スピードを求めるのは、何度も繰り返しながら良いものにしていくためです。また私たちのソフトウェアを作る庭から様々なサービスを育てていきたいという想いも込めた名前が「SonicGarden」なんです。