SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

グラス片手にアジャイル開発

グラス片手にアジャイル開発 第5回(後編)
- アジャイル開発によくある課題と解決方法

よくある課題と解決方法

 ここからは、筆者らがディーバで実際に直面したことや、執筆者の1人の梅田さんが理事を務めるMIJSの製品技術強化委員会などで話題になったことなどを元に、よくある質問と回答について10個とりあげてみます。

1. スプリントミーティングの長さの目安は2時間なのか?

 長くても有益である場合があります。プランニングミーティング・レトロスペクションミーティングが長くなる傾向は否めません。一般的なミーティング全般に言えることですが、「これは皆で共有する価値があるか」「これは皆で議論する価値があるか」を考えた上で、見極めを行います。

 ディーバの場合、新しいメンバーの学習効果であったり、作る対象にまだ曖昧さが残っていたプロジェクトの前半では、皆が共有して考えることに特に有効であると考えられたため、全体ミーティングに多くの時間を費やしました。一方、プロジェクト後半では、各人が何をやっているかが阿吽の呼吸でわかってきたり、細分化された設計/課題に対して必ずしも全員で考える必要がない場面が増えてきたりしたため、別ミーティングで設定するようになりました。

2. いつ設計するのか?プランニングミーティングで設計するのか?

 プランニングミーティング時点では、タスクの工数を見積もることが必要なので、基本的にはそれまでに必要な設計を行っておく必要があります。一方、アジャイル開発では事前に詳細設計を先行しないとも言います。

 これはYesかNoかではなく、何を実装するかでバランスが変わってきそうです。会計システムでの税金の計算など、始めから仕様にブレのない実装については、トップダウンで事前に詳しく明示的に設計されている方がよいかもしれないですし、フレームワークよりで開発者裁量の大きい実装については、荒い要求レベルで済むかもしれません。必要に応じて前のスプリントで設計のみのタスクを設けるのがよいでしょう。ここは何をドキュメント化するかということとも関係します。

3. 気がついたらスプリントを工程で切ってしまったがよいか?

 スプリントを導入しても、設計、実装、単体テスト、結合テストとタスクを分割していたのでは、それはミニウォーターフォールであり、逆に管理工数がかかったり品質が下がったりするかもしれません。やはり継続的統合やテスト駆動開発などの技術的エッセンスが含まれて、初めて繰り返し開発が意味を持ってきます。

 技術と管理はアジャイル開発の両輪をなすものであり、優先順としてはまず技術的な視点が必要となり、それから(スプリントなどの)管理的な視点へと変わってくるでしょう。ただ、間接的なタスクになるほど手動の工程が残ることは確かなので、一様に両輪が完全である必要はないでしょう。

4. プランニングするタスクはどこまで含めるか?

 原則として、すべての活動をタスク管理システム上に登録します。ミーティング、セミナー参加、有休予定なども含めます。あと、忘れずに入れておきたいのが、中身は予想できないけれど発生するバッファタスクです(ディーバではアドミンタスクと呼んでいます)。「いつも予想できないタスクでこれくらい取られる」ことを事前に想定し、スプリントごとに予定バッファ時間を設定します。例えば、週40時間のうちの8時間はアドミンタスクにします。タスク管理システムは作業実績時間を入れることもできるので、日報としての役割も果たせますが、その中でバッファをどれくらい消化したかで、次のスプリントでどれくらいバッファを設定しなければいけないかが見えてきます。

 これらによって、常に皆の予定タスク時間が同じ時間(例えば40時間)になるように設定されます。すべての活動を記録することで、実際どの程度間接的なタスクに時間を取られているか、どの程度自身でコントロールできない時間があるかを把握できるようになります。

【コラム】複数国で作業する際の予定作業時間の調整

 ディーバでは日米で同じスプリントを回していたことがありました。その時に意外に考慮が必要だったのが、国民の祝日でした。最終的には、タスク管理システムに祝日も含めて管理を行い、どちらの国で働くメンバーであっても予定作業時間の総計が10daysになるようにしました(余談ですが、日本人は有休消化が少ないと言いますが、祝日は意外と他国に比べて多いようです)。

5. タスクの終了基準が曖昧になってしまわないか?

 アジャイル開発では、設計書はあまり書かず、テストコードは書きますがテスト仕様書は書かないため、何を持ってタスクの終了を判定するのかが曖昧になりがちという指摘があります。

 まずすべきことはコミュニケーションによって仕様を深く共有することです。コードレビューやテストコードレビューを節目節目に入れたり、ペアプログラミングといった手法を取るのもコミュニケーションの1つとして位置づけられます。ただ、仕様決定者がコードを書かない人物であり、かつ、デモだけでは仕様の実現性を網羅しきれない場合も当然あります。業務アプリケーションでは顕著かもしれません。この場合、設計書・テスト仕様書を書くことが現実的に必要になってくるでしょう。どのタスクにおいてどのドキュメントを利用するか、スプリントのタスク設定時に明確にされていれば良いのではないかと思います。

6. タスクは担当制で、皆で共有するほどではないのだが?

 短期的には、担当者ごとに開発領域を割り当てた方が効率的です。しかし、少しの非効率さがあってもメンバー間での担当をオーバーラップさせていく方が、長期的に柔軟で協力的なチームになっていきます(ただ、同時に各領域(機能)に「第一人者」を置くことも悪くない案です。領域内の統一感や最終的なチェック機能を持たせることができます)。管理者がスプリントごとのタスク割り当て時に意図的に担当を変えることを心がける必要があります。

7. スプリントに予定したタスクが終わりきらなかったらどうするか?

 スプリントを導入したとしても、問題が発生し予定したタスクがすべて終わりきらない「遅延」が発生することがあります。その場合でもスプリントの終了日時は変更せず、結果として次のスプリントに繰り越されることになります。次のスプリントで割り当てが可能な新しいタスクは当然減り、結果的にリリースまで影響するかもしれません。

 第3回で説明したように、リソース、スケジュール、スコープのいずれかに手を入れられる余地を残しておく必要があります。例えば、下記のような対応が必要となります。

  • バックログの優先度を明確にし、特にリリースにMustなものを最低限に抑える。一方でNice To Haveな機能もリストする
  • リリースまでのスプリントのうち、1つ~2つ分ぐらいはバッファとして設定する
  • リリースまでのすべての機能をコミットすることはせず、不明瞭な部分は不明瞭であることを共有する
【コラム】イテレーション関連の参考書籍

 アジャイル開発に関するウェブサイトや書籍の情報は、最近とても充実しています。特に今回の内容についてピックアップするとしたら、次の2点をお勧めします。技術的な内容にはほとんど触れていないので、さまざまなバックグラウンドを持つ方におすすめできます。

次のページ
おわりに

この記事は参考になりましたか?

グラス片手にアジャイル開発連載記事一覧

もっと読む

この記事の著者

株式会社ディーバ 小林 達(コバヤシ サトシ)

2004年に株式会社ディーバ入社。連結会計システム「DivaSystem」の大規模プロジェクトに参加した後、ビジネスインテリジェンス分野を中心とした複数の製品/受託開発プロジェクトを技術面で主導。オフショア開発でのアジャイル開発経験などを経て、現在はディーバアメリカを含む多国籍メンバーと共に、次世代...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5566 2010/11/26 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー