投稿日:2007年03月30日 作成者:yasunaka
システムのメニュー化大作戦第3弾です。昨日は作業と仕事という観点からメニュー化はシステム開発を作業から仕事へと変化させるという話をしました。今日はメニューと値段について、です。
あなたが外食に出かけたとします。店にはいろいろあって、サービスのいい店、味のおいしい店、価格の安い店、などさまざまです。そして提供する値段もそれぞれです。選ぶ側は徹底して安い店指向の人もいますし、高くてもおいしい、サービスの良い店にこだわる人もいます。
この例では個人の嗜好が入るので、ビジネス上の選択とは必ずしも一致しない点がありますが、とはいえ、ビジネスの世界も必ずしも安いだけがすべてではないはずです。システムを開発する会社にも業務ノウハウを持ち合わせたシステム会社とか、優れた開発プロセスを確立しているシステム会社とか、いろいろ選択枝があります。特に大規模なものや複雑なもの、対応する業務が難しいものなどについては、目的のシステムについてかなりのノウハウがないと開発に失敗する可能性が高くなります。
つまりそういったノウハウを有する会社は当然、契約代金は高くなってしかるべきなわけです。これは原価(システム開発の場合はほとんどが人件費)が多少高いのはありますが、それ以上にプレミアム(上乗せ価格)が付いても買う側が必要ならば払うわけです。
ところが作業ベース、つまり人月計算でシステム開発を行う場合にはこういったプレミアムを載せる余地はあまりありません。ですので受ける側も大して努力しようとしない。しかしメニューで提示するやり方の場合は提示する側に自信があればメニュー価格にプレミアムを載せることが可能です。つまり会社として一杯努力して、すばらしいノウハウを有することができた会社は、プレミアムの恩恵にあずかれるようになる、というわけです。
つまり高いメニュー価格を提示する会社というのは、それなりの自信の表れである、ということになります。もし中身が伴わない会社が高いメニュー価格を提示すればそもそも受注できないですし、すぐに淘汰されていくことになると考えられます。
投稿日:2007年03月29日 作成者:yasunaka
人から聞いた話ですが、その人の昔の上司に「おまえが今やっているのは作業? それとも仕事?」という質問をする人がいたそうです。作業とは、いずれ自動化されるようなもの、仕事はクリエイティブで付加価値を生み出すもの、という意味で、お金をもらってするのであれば、作業ではなく仕事をしなさい、という意味だそうです。(言い換えれば作業をしているのであればそんなに金を払わないよ、という厳しい指摘ですね)
確かに仕事ってこの2面性を持っているのだと思います。
さて、昨日書いたブログ人月の神話において、今までの日本のシステム会社は人月で金を払っている、これからはメニューを用意し、メニュー毎に値段を決めるように改めてゆくべきだ、という提案を書きましたが、上記の作業と仕事という観点で考えると、今までの日本の会社は「作業」に対してお金を払ってきた、ということになります。効率が良くても悪くても、かかった時間に対して金を払う。やっていることを作業とみなしているわけです。
もちろん今までのやり方でも係数という形で上記の効率をお金に換算してきました。プログラマー(もしくはSE)のランクってやつです。SE、PL、PG… などといった形で人に値段(単価)を付けています。でも実際このランクってやつはほとんど経験年数で決まっているのがほとんどで、実際の能力を正しく表しているとは言いがたいのではないでしょうか?
もしこれをメニュー毎の値段という形に改めることができれば、本来PGランクの経験年数しかない人達だけのチームでも、会社で仕組みを整え、品質の高いものをタイムリーに提供できれば、高い粗利を得ることが可能になります。逆に約束したものがうまく仕上げられない場合にはリスクを負う。これが「仕事」に対してお金を払う、ということですよね。
ただ、メニューに高い値段を載せるためには、それに相応の内容なんだってことをお客様にわかりやすく提示しなければなりません。ということで、この話はまた後日。
投稿日:2007年03月28日 作成者:yasunaka
タイトルの「人月の神話」は知っている方も多いと思いますが、フレデリック.P.ブルックス,Jrが書いたシステム開発プロジェクトにおける古典的名著です。読んでおいて絶対に損はない本だと思います。そこにはその当時の大規模なプロジェクトを通して得たさまざまな知見が詰まっていて、現在でも通用する内容がいくつもあります。今日はその「人月」の問題について、です。
少なくとも日本国内では相変わらず人月単位の仕事が行われています。日経ITProで最近話題になった松原友夫さんの書いたオピニオン「日本のソフトウエア産業、衰退の真因」でも指摘されているように、システム開発の現場では裁量のない請負契約が相変わらず横行し、単なる人だしとなっているシステム会社が多いのが実体だと思います。しかしこんなことを繰り返していては、いずれ単価の安い外国のシステム開発会社に仕事を奪われるのは確実です。
3月26日に書いたプロジェクトを確実に破綻させる方法 その2において、投資額の上限を合意する方法というのを書いたのですが、日本のシステム開発ではこれを行うときに人で換算するのが、そもそもおかしいのです。これはシステム開発がタスク指向的に設計されるからだと思います。つまりシステムを開発するために必要なタスクに分解し、それぞれのタスクに必要な人数と日数を計算し、それを積み上げて…とやっているからです。これを繰り返している限り、日本のシステム開発会社はフラット化する世界との競合に敗れ、敗退するしか道がないのではないでしょうか。
デパートでオーダーメイドのスーツを買ったとします。そのときに支払う金額は、予め「生地いくら」「ボタンいくら」「仕立て工賃いくら」といったようにメニューができています。もちろんその中には最後の「工賃」のようなタスクに対する金額も含まれているのですが、デパートの場合、「今回のすそ直しには2人日かかるからいくらです」、とはいわずに、「すそ直しはいくらです」という形で値段が決められています。つまり工程を人日に換算するのではなく、その1つ1つのメニュー毎に値段が決まっているわけです。普通、物を売る場合にはこのようにメニューがあって、メニュー毎に値段が決まっているのが当たり前なわけです。
ところがシステム開発には一般的にそのようなメニューを持っている会社がない。それはタスク指向的に場当たり的にシステム開発が行われているからです。もちろんこのメニューは作るのが難しいのは当たり前です。メニュー化ができるということは、その先の開発において部品化が正しく行われているということ、そして開発工程が標準化されているということを示しているからです。つまり、このメニュー化ができた会社はフラット化する世界の中でも生き残ることができる会社になれるはずだと、私は考えています。
投稿日:2007年03月27日 作成者:yasunaka
今はajax花盛り。世の中の潮流はどんどんブラウザベースに流れていますね。そんな中で日経ITプロのブラウザはどんどん使いずらくなるという記事はなかなか面白い視点から見ているな、と感じました。Ajaxをセキュリティーの観点からこのままで大丈夫?と懐疑的に見ている記事です。
確かに今までのクライアント/サーバー型アプリケーションに比べ、いろいろなアプリケーションが相乗りし、いろんなサーバーへ簡単にアクセスできるブラウザベースのアプリケーションはセキュリティーの問題が発生しやすい構造だといえるのでしょう。
この記事の中で私が一番注目したのは、実はセキュリティーの話ではなくて、ブラウザをオフラインで利用する技術の話でした。オフラインのときに「ブラウザ上で一種のプロキシ・サーバーを稼働させて,Webアプリケーションを利用する」という形態だそうです。そういえば、同じようにオフラインでの利用を可能とする技術として、あまり詳しくはないのですが、AdobeがApolloというプロジェクトでFlashベースのアプリケーションをブラウザから切り離して動作できるようにするという話がでていますね。
いずれにしても現時点ではブラウザベースで成り立つアプリケーションとそうでないアプリケーションがあるのは事実だと思います。例えばAdobeのIllustratorがAjaxベースで書き直されてブラウザで動かせるようにしたとしても、それが使い物になるとは今はとても思えません。(PCにインストールしたって、あんなに起動に時間がかかるんですから)
ただ今まではブラウザベースでは成り立たないと思われてきた分野に徐々にアプローチしようとしていることは事実なのだと思います。特にオフラインでも使えるようになると利用の範囲が広がると思います。
では従来タイプのアプリケーションには未来はないのか? いや、私は新しい未来型のブラウザベースではないアプリケーションというのがあると思っています。もちろん大部分はブラウザベースに移行してしまうと思うのですが、大量のリソースを必要とする複雑なアプリケーションはどうしても従来型の、インストールが必要なアプリケーションとならざるを得ないと思うのです。
従来型のアプリケーションが忌み嫌われてきたのは(言い過ぎか?)、アプリケーションの保守管理の問題が大きかったと思うのですが、例えばFireFoxは2.0のような手のかからない自動更新の仕組みがあれば、あまり保守管理の問題はなくなるのではないでしょうか?
逆に従来型のアプリケーションには、たとえサーバがダウンしていても使い続けることができるという強みがあります。(もちろん業務によりますが) またネットワークがつながらない場所でも、どこでも利用できるというのも強みです。この耐障害性の高さ、どこでも利用できるという特性をうまく生かせば、面白い未来型のアプリケーションができるんじゃないかな?って思っています。
投稿日:2007年03月26日 作成者:yasunaka
次にご紹介する「プロジェクトを確実に破綻させる方法」は、「完璧な要件の追求」です。これってシステムを作る側ではなく発注者側で起こりがちな話なのですが、システムを『抜けのないもの』にするという気持ちが強く働きすぎて、結果まともに仕上がらなくなる、というケースです。
システムを現場で実際に使うことを考えると、いろんな要件が出てきます。期末にはこれをやらなきゃならないとか、これが発生したらこの処理が必要だ、とか、そういった通常処理とは異なる処理についても検討が必要です。そうやって必要な処理を並べていくと初期段階では単純なシステムだったはずのものが、ふたを開けてみたらすごい工数の開発が必要だった、なんて経験がありませんか?
もしそう感じたならば、それは「完璧な要件の追求」の罠にはまっていないか、もう一度見直してください。この罠にはまっているとすべての要件の優先順位が高く設定されてしまい、どれも「落とすことにできない」要求になってしまっているはずです。しかも困ったことに優先順位を設定できるのは通常発注者側なので、受注者側では鵜呑みにしてしまいがちな点が非常に厄介です。
もし「完璧な要件の追求」の罠にはまりそうだと感じたら、ちょっと立ち止まってそのシステムに求められているROIのレベルを発注者側と確認してみてください。そもそもそのシステムを導入することによって、どれだけの利益を得ようとしているのか、そしてその利益に見合う投資とはどれだけか、ということです。
これによってまず最初にこのシステムにかけることのできる投資額の上限を合意しておくのです。これ以上投資する必要があるならば、それはそのシステムを作らないほうが良いのだ、ということを最初にはっきりさせておくことがポイントです。(逆にでてきた投資額の上限が際限なく高いものの場合には、腹をくくって突進しましょう :grin:)
ちなみにこの投資額の上限を合意する方法については他にもご紹介したいことがあるのですが、それは後日ということで。
投稿日:2007年03月22日 作成者:yasunaka
プロジェクトを確実に破綻させる方法ってのは穏やかでないタイトルですが、プロジェクトにおけるアンチパターンをいくつか紹介していきたいと思います。プロジェクト管理「手法」についてはPMPとかを勉強すればわかりますが、実際には手法をいくら勉強してもうまくいかないものはうまくいかない。じゃあなぜ? ってあたりを掘り下げていきたいと思います。
まず最初は「プロジェクト関係者が一致協力していない」。って、小学生でもわかるような話ですが、実はプロジェクトが破綻したケースって、裏の(というか本当の)原因がここにあることが結構多いのではないでしょうか? つまらないことでメンバー間で意地を張り合っているとか、相手を蹴落とすように競争をしあっているとか、信用していないとか、見下しているとか、そういったメンバーや関係者間のどこか親密ではない関係が、コミュニケーション不足や誤解を招き、プロジェクトへの不満が鬱積し、やる気が低下し…という負のスパイラルを発生させる最大の原因になっていることが多いのではないでしょうか。
逆に、一致協力しているプロジェクトは強いものです。大変な修羅場ですら乗り越える力を持っています。大変だけど、プロジェクトに参加していることが楽しいと感じられるプロジェクトは、おそらくそれだけで成功する確率が大きく高まると思います。
このアンチパターンから脱却するための一番のお勧めの方法は、「仲間意識の共有」です。プロジェクトメンバーや関係者はみんな仲間なんだって、特にリーダークラスの人たちが率先して意識し、発言する。同じプロジェクトを進めてくれるメンバーは、たとえパートナー会社の人であろうが派遣の方だろうが、みんな仲間なんだって、そういう気持ちを育み、一緒にやっていこうっていうちょっとアナクロなやり方が、実はいろんな「手法」を駆使するよりもよっぽど効果的でお勧めの方法です。
投稿日:2007年03月20日 作成者:yasunaka
システムを設計するときに気をつけていることを1つご紹介します。それはタイトルにある「具体的な検証」です。システムの仕様を設計する際にもっとも重要なこと、それは使う側の立場になって設計することだと思います。使う側のさまざまなシチュエーションを想定し、それに対してシステムがどう応じるのかを検証しておく、ということです。
通常、システム屋がシステムを設計すると、実現すべきことを要件定義としてまとめ、それを正しく実装するというアプローチをとると思います。これは当然正論で間違いではないのですが、いかんせん、要件として書き出された内容を深く理解しているわけではないために、使う側のほんのちょっとした「こだわり」にたいしてあまりに無配慮なことが多いのではないでしょうか?
もちろん不必要なこだわりをシステムに詰め込んでしまうと要件が膨らみすぎ、これはこれで破綻します。ですので「こだわり」をストレートに要件にしてしまうのではなく、なぜそれにこだわるのか、その背景ではどんなことを考えて、何を実現しようとしているのかをできるだけ「具体的に」理解します。この具体的に、ということがとても重要で、誰が、いつ、何を、どのように、何のために、をはっきりさせ、またその周りにある他の「具体的な事象」との整合性を検討していきます。そうやって考えていくと、「あ、こういうことなんだ、」と初めて顧客側の考え方がわかり、その上でより良い解を顧客に提示することができれば、信頼を得られますし、システムもより良いものになると思います。
投稿日:2007年03月15日 作成者:yasunaka
以前の仕事(金融系)で、セルサイド(金融商品を売る側、例えば証券会社など)の顧客からバイサイド(金融商品を買う側、例えば資産運用会社)の顧客へ変わったことがありました。セルサイドというのはあの手この手でいろいろな商機を捕らえては儲ける、というスタイルなのですが、バイサイド側は基本的に他人のお金を預かって運用するので、言い方は悪いですが、いかに儲けるかという観点よりは、いかに言い訳するか、という観点のほうが重要視されています。つまり「これだけ儲かった」という言い方ではなく、「他の人に比べてこれだけ成績がよかった」という観点で考えます。この「他の人(=ベンチマーク)」とはマーケット全体の平均のことで、例えば日経平均とかいわれているやつが相当します。(ただし最近はこの「他の人との競争」を放棄してインデックス運用と呼ばれる「他の人並みの成績」を売りとする運用が増えています。)
最初にバイサイド側で仕事をしたときに最初に感じたのが、この「他の人」との比較で論じることへの違和感でした。だって、他の人が-5%だったときに、私は-3%で運用しました。だから2%も良かったんですって、そういう論法なのです。確かに論理的なのですが、これは運用者側の観点であって、お金を預けた側はやっぱり儲かってくれないと困ると思うんですけどね。
例えば会社の場合、こんなことは言ってられないわけです。マーケットが良くないから会社が減益になりましたって、株主に報告して納得する株主はいないわけです。株主は言います。「もっと努力せよ、」と。(一応資産運用会社の名誉のためにいっておきますが、彼らは決められたレギュレーション(投資手法)の中でのみ運用をまかされているのであって、儲けるためには何をやってもいいというわけではないので、会社とは単純には比較できません。どのようなレギュレーションの運用スタイルを選ぶかはお金を預ける側が選択するのです。でも、ということは預ける側もよく研究しないとだめってことですね。)
前置きが長くなったのですが、同じような考え方をソフトウェアの世界ではできないものなのか? ってふと思いました。業界全体でのベンチマークです。例えばファンクションポイント(FP)はファンクションポイントの計算はできるものの、FPに対する実際の工数は各ベンダーによって異なるはずです。これの業界平均値を求めることができたら、ちょっと面白いかなって思います。
でも資産運用の世界では「ハイリスク・ハイリターン」「ローリスク・ローリターン」が成り立っており、あるときバーンと儲けるような運用をしているところは逆にあるときにはゲロッと損をするものなのです。じゃあソフトウェアの世界におけるリスクは何で見ればよいのか? FPに対して出来上がりにかかった工数がやたら少ないと思ったら、中はバグだらけだった、とか、ちょっと負荷が高くなったら耐えられない構造だったとか、まあいろいろありそうですが、うーん、こちらは数値化が難しいな。あと中のコードの汚さはなかなか表に出ない「負債」ですね。(Martin Fowlerの話にもありますね。) FP辺りの工数がやたらいいなと思ったら実は「負債だらけだった」というのもナニかな。一生表にでない負債ならいいけど。