Appirio's Tech Blog

2014年5月9日金曜日

全く新しいシステム開発のやり方 - システム開発を[topcoder]で行うということ


こんにちは。アピリオの高須です。
かなりブランクがあいてしまいましたが、久々のTech Blogです。
TCO2013に引き続き、今回も[topcoder]ネタです。(名称がTopCoderから[topcoder]に変わりました)

[topcoder]は世界中から60万人以上の開発者・デザイナが集まる技術者コミュニティで、2つの側面を持っています。
1つはメンバがお互いの頭脳やスキルを競い合う競技場としての場で、もう1つはクラウドソーシング(Crowd-sourcing)コミュニティとして賞金を稼ぐ場です。
[topcoder]は、コミュニティその物に加え、これら両方の場に必要なプラットフォームを提供しています。

「システム開発を[topcoder]で行うということ」は、システム開発を社内リソースや外注リソースではなくコミュニティのパワーで行うということです。
オフショア開発とも異なる、全く新しいシステム開発のやり方です。

この記事では、「システム開発を[topcoder]で行うということ」についてぼんやりとでもイメージを持ってもらう為の説明をしてみたいと思います。


クラウドソーシングの先駆けとしての[topcoder]

競技場としての[topcoder]の歴史は2001年からと古く、キャリアの長いエンジニアの方であれば知っている人は多いと思います。レッドコーダーというワードを聞いたことのある人も多いのではないでしょうか。

実は、クラウドソーシングコミュニティとしての歴史も古く、コンテスト形式で開発ワークをコミュニティに投げ、最も優秀な成果物に対してのみ賞金を支払うというクラウドソーシングサービスは2003年にスタートされました。
「クラウドソーシング(Crowd-sourcing)」はもちろん、「クラウド(Cloud)」というワードも世の中に知られていない時代です。六本木ヒルズがオープンし、人気デュオバンド「タトゥー」がミュージックステーション出演をドタキャンしたあの頃です。

[topcoder]は、競技場としての側面で世界中の優秀な技術者を惹きつけてコミュニティを形成し、そのコミュニティの力を活用した開発を11年間模索し、実践し続けてきました。
コミュニティを活用した開発プロジェクトを成功させる為に必要なノウハウやベストプラクティスをプラットフォームに取り込み続け、今では93%の成功率を達成している、それが[topcoder]です。


全てのシステム開発工程を[topcoder]で行う

クラウドソーシングコミュニティとしての[topcoder]は、システム・デザイン・アルゴリズムという3つのカテゴリを持っています。
翻訳や記事執筆等、色々な事を依頼できるクラウドソーシングとは異なり、あくまでも世界中の優秀な技術者リソース(Crowd)を、必要な時に必要な分だけ利用する為の特化型クラウドソーシングプラットフォームと言えます。

タイトルに掲げた「システム開発を[topcoder]で行うということ」の1つの解釈として、アイデアを動くシステムにするまでの全ての開発工程を、[topcoder]が提供するコミュニティとプラットフォームを活用して行うという意味があります。
実際、[topcoder]プラットフォーム自体も[topcoder]コミュニティによって開発されており、日々プラットフォーム改修コンテストが走っています。

システム開発工程を幅広くカバーする為に、[topcoder]にはたくさんのコンテスト種別が用意されています。
工程の中で最上流をカバーするのは「Idea Generation」というコンテストで、何を作るかをコミュニティに考えてもらう為のコンテストです。例えば、サービス事業会社が、サービスの改善点の洗い出しを依頼し、既存サービスをどうするべきなのかのアイデアを募集したりします。とある市場課題に対してソリューションアイデアを求めるという事も可能です。
よく使われる物としては、「Conceptualization」、「Wireframe」、「Storyboard」、「UI Prototype」、「System Architecture」、「Module Architecture」、「Assembly (Coding)」、「Bug Hunt」等があり、開発工程を幅広くカバーする様々なコンテスト種類が存在します。
ここでは各コンテスト種類の細かな説明はしませんが、この例で、コンテストのアウトプット(成果物)が、次のコンテストのインプットになるようにコンテストが組み立てられている事がわかると思います。

[topcoder]が提供するコンテスト種類の一部

「Conceptualization」コンテストで、アイデアをもう少し具体的な要件に落とし込み、「Wireframe」コンテストでアプリケーションのワイヤーフレームを作成し、「Storyboard」コンテストでワイヤーフレームにデザインを乗せ、「UI Prototype」コンテストでデザインをHTML/CSS/JSに落とし込み・・・という感じでコンテストを上手く組み立ててシステム開発を進めていく事ができるのです。
ここでは各コンテスト種類の細かな説明はしませんが、この例で、コンテストのアウトプット(成果物)が、次のコンテストのインプットになるようにコンテストが組み立てられている事がわかると思います。

このように、[topcoder]ではコンテスト単体で何かを作っておしまいではなく(もちろんそういう使い方もしますが)、コンテストを組み合わせて1つのシステムを作り上げる事をコンセプトとしています。プラットフォーム的にも、まずはプロジェクトを作成し(プロジェクトレベルで予算や全体スケジュールの管理を行う)、そのプロジェクトの配下で多数のコンテストを作成・実行していく事になります。

開発者を一人も抱えていないスタートアップ企業でも、[topcoder]の様々なコンテスト種類を組み合わせる事で、コミュニティーのパワーだけでシステムを作り上げる事が出来るのです。
しかも思いたった数時間後には世界のどこかで誰かが作業を始めている。ちょっとドラマチックですが、実際そういう世界が現実としてすでに存在しています。


開発キャパシティを[topcoder]でレバレッジさせる

[topcoder]は多用なコンテスト種類を提供し、コミュニティだけでシステムを作り上げる事を可能にしているとご紹介しましたが、[topcoder]が提供するのはコンテスト種類だけではありません。

コンテストを成功させるには、コンテストの説明や要求・仕様が明確であり、十分に網羅されている必要があります。これを誰かがレビューしなければなりません。大丈夫です。スペックレビューは、レビュワーとして認定されたコミュニティのメンバーが行います。

10人のコミュニティメンバーがプログラムを提出したら、その10のプログラムを動かし、要求を満たしているかを確認し評価しなければなりません。大丈夫です。確認と評価も、認定されたコミュニティメンバーが行います。

そもそもコンテストを成功させる為には[topcoder]に関するたくさんの経験とノウハウが必要なのでは?これも大丈夫です。Co-Pilot(副操縦士)と呼ばれる、特に優秀な認定コミュニティメンバが、あなたのかわりに[topcoder]プロジェクトのマネジメントを行います。
コンテストスペックの作成や、コンテスト期間中に参加者から飛んでくる質問のさばき、賞金や期間の調整等を、あなた(操縦士)のかわりにコミュニティを知り尽くしたコミュニティメンバーが行います。

何かのCMみたいになってきてしまったのですが、要は[topcoder]は徹底して全ての工程をコミュニティでカバーする事を目指しているという事です。
こうする事の大きな目的の1つは、[topcoder]を通してコミュニティを活用する際に、利用者側のリソースがボトルネックになる事を防止し、逆に利用者側のリソースをなるべくレバレッジして開発キャパシティをスケール可能にするという事です。
社内リソース1人のアウトプットを、[topcoder]を活用して何倍にもレバレッジする事ができるのです。

Copilotを活用して開発キャパをスケールさせる

アピリオが提供する[topcoder]エキスパートサービスでは、お客様の[topcoder]活用をサポートするリソースを「Community Architect」と呼んでいますが、彼らは一人で4社のクライアントを持ち、同時に5〜10のコンテストを走らせています。Co-Pilotが強力にサポートしてくれるからこそ出来るレバレッジです。

「システム開発を[topcoder]で行うということ」のもう一つの解釈は、このように[topcoder]を活用して開発キャパシティをレバレッジさせながら、限られたリソースでより大きなシステム開発を行うという事です。


システム開発を[topcoder]で行う時の流れ

システム開発を[topcoder]で行うということのイメージをもう少し具体的に持ってもらう為に、簡単にその流れをご紹介します。

まずはあなたが作りたい物(作りたい物がない場合はIdea Generationコンテストで募集しても良いです)を、複数のコンテストに分割し、各コンテストの依存関係とスケジュールを考慮しながら、プランを組み立てていきます。
どのコンテストとどのコンテストをパラレルで同時に走らせ、どこで結合するのか。予算上2種類のコンテストを1コンテストに統合するのか。各コンテストの賞金設定はどうするのか。賞金と期間とのバランスはどうするのか・・・
このような事を総合的に考え、コンテストを組み立てていき、最適な「Game Plan」を作成していきます。
コミュニティを知り尽くした人でなければ適切なGame Planを作る事は出来ませんが、それもCo-Pilot(もしくはアピリオのCommunity Architect)が主体となってサポートします。
Game Planを作成すると、いくらで、どれぐらいの期間で目的の物が出来上がるかがわかりますので、それを元に[topcoder]プラットフォームにプロジェクトを作成し、Game Planを登録していきます。

後はGame Planにそって各コンテストを実行していきます。
要件をCo-Pilotに伝えると、Co-Pilotがベストプラクティスに則って要件をコンテストスペックに落とし込み、コンテストを作成します。Co-Pilotはコンテストが成功しなければお金をもらえないので、なんとか良いSubmissionを得られるように努力します。多くのCo-Pilotは自分のコンテストをSNSやメールでプロモーションして参加者を募ったりもします。

コンテストが終了しコミュニティレビュアのレビューでOKとなった成果物に対して賞金を支払い、その成果物を次のコンテストのインプットとしてコンテストが続いていき、最終的なアプリケーションが出来上がっていきます。

十分な参加者が集まらなかったり、Submissionの品質が期待値を下回ったりして、コンテストが失敗する可能性もあります。その場合、コンテストのスペックを書きなおしたり、複数コンテストに分割したり、賞金や期間を調整して、再度コンテストを立ち上げ直します。[topcoder]では、失敗を待つのではなく、失敗を予見して早く失敗させ、新しいコンテストを開始する事でスケジュールへの影響を最小に抑える、リーン的な考え方が重要になります。


コミュニティ活用型システム開発を成功させる仕組み

これまでのご紹介で、ある程度システム開発を[topcoder]で行うイメージは持って頂けたと思います。又、システム開発を生業としている方なら、コミュニティだけでシステムを作り上げるという事に対して色々と心配になる事もあるのではないでしょうか。

SI畑に居る私が最初に[topcoder]を紹介してもらった時、説明を聞きながらも色々なリスクや懸念が頭に浮かび、それはどうするんだろなぁ〜と思いながら説明を聞いていましたが、最終的に[topcoder]がプラットフォームとして提供する仕組みについてある程度理解が進んだ時、凄く興奮しました。紹介が終わった時、周りの人と目を見合わせて驚きを共有し合ったのを覚えています。

大きく分けると、[topcoder]には、優秀な技術者をコミュニティに惹きつける為の仕組みと、プロジェクト(コンテスト)の成功率を上げる為の仕組みが存在します。
その網羅性は、ある意味関心してしまう程です。
技術者向け競技場としての13年の歴史と、クラウドソーシングコミュニティとしての11年の歴史があると聞き、その中で練られてきた仕組なんだとなぁと納得したものです。
こういった仕組みがあるからこそ93%の成功率があるのでしょう。

単にコミュニティに作業をコンテスト形式で依頼する場を提供するだけでは、とても実用に耐えず、チームのリソースとして見込む事も出来ません。

[topcoder] direct (コンテスト管理画面) : 細かく規定されたフェーズでコンテストの進捗を管理

[topcoder]の活用によって得られる価値は1つではありません。
NDA締結済みのメンバーにのみ開示するアウトプットが明確なプログラムコンテストと、不特定多数のメンバに自由にデザインさせるデザインコンテストでは、得られる価値が全く異なるように、コミュニティの使い方で得られる価値は変わります。

クラウドソーシングでコンスタントに成果を出し続けるには、よく考えられた仕組みとノウハウを持って、コミュニティと正しく向き合う必要があると思います。
ITリソースがCloudに移行されていく事を掲げてきたアピリオが、次は開発リソースがCrowdに移行されていくはずという考えを持っている事が少しは伝わったでしょうか。

[topcoder]というおもしろい世界がある、という事だけでも伝われば嬉しいです。

今後もちょくちょくクラウドソーシングに関する記事を出していきますので、興味を持って頂けた方は引き続きチェックお願いします!

参考リンク:
[topcoder] university
[topcoder] blog
10 Questions on Crowdsourcing for Enterprise IT

Posted by Toshihiro Takasu (Appirio Japan)




 
2006-2011 Appirio Inc. All rights reserved.
アピリオ | リソースセンター(英語) | お問い合わせ先 | 採用情報 | プライバシーポリシー(英語)