未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

ソフトウェア開発の生産性と good enough

大人を信じてはいけない。自分の目で確かめろ。Webの情報を鵜呑みにするな。わたしが見聞きした経験はわたしが見聞きした範囲であれば正しいかもしれないが、それがすべてではないし正しいという保証もない。当たり前のことである。

ソフトウェアの作り方なんというのは100の組織があれば100のやり方がある。効率の良いやり方もあれば効率の悪いやり方もある。商品としてのソフトウェアを作っているならばその価値は最終的にはどれだけの利益をあげたかで評価される。

ソフトウェア開発の生産性なんて話はあくびが出る話だがちょっと聞いてほしい。

生産性=価値/投資

少ない投資で高い価値を生産すれば生産性が高い。価値ってなんだ?投資ってなんだ。

ソフトウェアの開発は人がしこしこプログラムを書くので通常は大規模な工場とか設備投資とか最新の生産施設とかはいらないので大抵は人件費みたいなもので近似できる。10人が10ヶ月かけて作ったらなんちゃら万円かかったみたいな話である。(人月単価つーやつですな)

一方価値というのはどうやって計測するのだろうか?品質管理の教科書かなんかは価値というのは品質だなんてことが書いてある。品質というのは何かというと顧客満足度だなんてことが書いてある。顧客満足度をどう測定するかなんて小難しいことは結局のところいっぱい売れたもの(最終的にはより利益をあげたもの)を顧客満足度が高いという風に推定するというか近似して考えるというのが一般的である。

プログラマからみてそれは違うだろうというソフトウェアでも勝てば官軍負ければなんちゃらで、商品としてのソフトウェアはどんなに素晴らしい設計でもどんなにバグがなくても売れなければ価値がないのである。ここまで言ってしまうとさすがにみもふたもない感じがするがソフトウェア産業に身をおくものとしては常に肝に銘じておかないといけない。

バグのないソフトウェアはない。しかし毎日毎日ウィルスだセキュリティホールだアップデートだというのはさすがにうんざりする。ウェッブのブラウザだってよくクラッシュする。数時間かけて渾身の力をかけて書いていた文書がフリーズしてどっかに飛んでしまった経験を持つものは少なくない。

そーゆー事実をおかしいと思いながらもなかば受け入れながら不完全なソフトウェアを利用していると「ソフトウェアの品質」という言葉の意味が通常の工業製品の品質というものの持つイメージと異なっていることに気がつく。

工業製品が高い品質というとき持つイメージには無欠陥とか故障しないとかそーゆーものがまあ思いつく。ソフトウェアの場合、利用者はソフトウェアに無欠陥とかクラッシュしないとかを望んでいるのだろうか?もちろん望んでいる。望んでいるが欠陥を受け入れ、クラッシュすることをなかばあきらめながら受け入れている。そーでなければこれだけの欠陥商品がちまたに氾濫するわけがない。

ソフトウェアの「品質」についてはそこそこのものでいい。いわゆる good enough なものでよく、むしろ重要なのは市場に受け入れられるか、その機能を提供しているかどうか、定期的にアップデートして常に市場からの要求を取り入れ進化しているか?そーゆー属性のほうが重要なのである。(わたしはソフトウェアの無欠陥性を追及が必要ではないといっているのではない。市場に受け入れられるという前提に立つと現実はそーであるという描写をしている)

顧客に受け入れられる商品を作ることは難しい。開発だけの仕事ではない。顧客の要求を正しく理解することは非常に難しい。マーケティング、営業、サポート、全社的な活動であることは間違いない。

それを効率よく実装した会社が勝つ。ソフトウェアの作り方というのは何もコードをどう書くかというだけではなくて、マーケティング、営業、サポート、その他もろもろの部署といかに顧客の望むものを望むタイミングで適正な価格で提供するかというものなのである。(当たり前だけど)

そーゆー意味で言うと日本でソフトウェア産業が育たないのはプロのソフトウェア開発者の絶対数が少ないだけではなくて、プロのマーケティング、営業などなどが少なくて、常勝集団としてのソフトウェア会社というのがほとんど存在していないからかなあなんてことを思ったりもする。
シリコンバレーのソフトウェア現場での good enough へのこだわりというのを感じてわたしは目から鱗というか自分のソフトウェアの品質に対するイメージを根底から覆されたような気がした。(おおげさ)

いいか悪いか、あるいは受け入れるか受け入れないかは別としてソフトウェア産業のルールのような感じである。