チームによるアジャイルの事例
チーム内の役割分担
アジャイル開発をするチームでは、「設計だけをする人」や「実装だけをする人」などのように、役割を明確に分担することはあまりしません。プログラミング言語の専門家や、業務のエキスパートなどは絶対にいた方が良いですが、何かだけをする役割というのは不要です。アジャイルでない一般的な開発プロジェクトの場合、「設計だけをやる期間」や、「実装だけをする期間」が、それなりに長いため、その期間内で集中して役割をもつ担当者がいても良いですが、繰り返し型で「機能単位に開発」をしていく場合、一度の開発で、設計から実装、テストなどの期間が非常に短くなってしまいます。その中で役割分担をしてしまうと、コミュニケーションがボトルネックになってしまうのです。
共同作業の中で、直列に仕事を引き渡すために必要なコミュニケーションは相当コストがかかります。それならば、1人か数人で、一気通貫で作ってしまった方が効率は良い訳です。これは「セル生産方式」に通じるところがあります。SKIPでは、このような体制で「ソーシャルブックマーク」の機能や「全文検索」の機能を、保守開発の中で新規機能として開発してきました。
チーム開発のための環境
当時の開発環境としては、図2‐2のようなものでした。
ソースコードは、Subversionを利用してチーム内で共有をしていました。Subversionとは、オープンソースのバージョン管理ツールです。ソースコードは、チーム全員の共有物と考え、担当範囲だけを見るのではなく、いつでも全体が動く状態でコミットすることをルールとしていました。そうすることで、開発者同士は協力しあうようになりますし、わざわざ別の手段でコミュニケーションをとらなくても、ソースコードのレベルで情報共有を実現することができます。ただし、この状態を実現するためには、開発者同士でお互いに今何を開発しているのか、というタスクを共有できている必要があります。
タスクについては、Redmineを活用して管理を行っていました。Redmineは、Ruby on Railsで作られたオープンソースの課題管理ツールです。Redmineでは「チケット」という単位で、プロジェクトで行うタスクや課題を管理できるようになっています。また、チケットの状態管理を行うことができ、プロジェクト全体で未完了のチケットがどれだけあって、誰が担当しているか、すぐにわかるようになっています。
チーム内では、行うべきすべての作業をチケットとして登録するようにしており、チケットになっていない作業をしても仕事として認めない、という厳しいルールもありました。そうすることで、週単位での作業の進ちょく状況を把握する際も事前に共有できるので、打ち合わせ時間を短くすることができます。
それ以外の情報共有については、SKIP自身を使って行っていました。メーリングリストは使わずに、SKIPに標準でついている機能で、プロジェクト内の情報共有などに使える「グループ」と呼ばれる機能を使っていました。これは、自分たち自身で「ドッグフードを食べる」効果も期待してのことです(「ドッグフードを食べる」というのは、IT業界で自分たちの製品を自分たちで使ってテストすることを意味します)。
ツールはあくまでコミュニケーションの円滑化を補助するためのものではありますが、うまく使うことで、関係者の知識の前提をそろえることができるようになります。そうすると、必要なことをダイレクトに話すように、普段のコミュニケーションの質も向上させることができます。チームの人数が増えても、あうんの呼吸を醸成できるのがツールの持つ力です。さらなるRedmineとSKIPを組み合わせた効果的な使い方については、次回に詳しく紹介します。