SHOEISHA iD

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

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

ボトムアップからのアジャイル開発管理手法の導入

ハイブリッド開発手法とは何か? アジャイルを部分的に取り入れ導入しやすくする開発手法の進め方を紹介

ボトムアップからのアジャイル開発管理手法の導入 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 本連載では、さまざまなチームやプロジェクトにおいてプロジェクト管理手法や開発モデルを適用してきた経験から、現場からボトムアップによって、組織にあったアジャイル開発管理手法を取り入れていく方法を解説します。今回は、アジャイルを導入しやすくするための手法「ハイブリッド開発」に焦点を当てます。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 前回、アジャイルモデルを導入したいと思う時期には、同時にそのモデルを導入することが難しい背景があるということについて説明しました。例えば、機能型組織においてはウォーターフォールモデルの方が組織制約と矛盾が少ないなどです。

 しかし、新たな試みをしたい場合、その前提条件が整っていない状態でプロジェクトを始めなければならないことが少なくありません。今回は、そのような前提が整わない中でアジャイルモデルを部分的に取り入れるための考え方について筆者の事例をもとに紹介します。

アジャイルモデルへの悩みと期待

 システム開発の契約制約や組織制約としてはウォーターフォールモデルのほうがなじむと感じているにもかかわらず、現在のシステム開発ではアジャイルモデルが望まれる理由が多くあります。

 それらの理由について開発者目線で見るとうまく表現できないこともあります。

 なぜなら、開発者目線で話をする場合、自分が置かれている状況における詳細な技術的課題や解決方法について注目しがちです。しかし、他のステークホルダーが開発者と同じ目線で問題を捉えていることは多くなく、そのため、前回、プロジェクトの成長過程や組織からみた場合について紹介しました。

 今回は、開発者目線から見える問題をより多くのステークホルダーに理解してもらえるように説明したいと思います。

 なお、本稿では、システム要件の決定や要望を持つ側を利害関係が分かりやすい「顧客」として記していますが、実際には社内での営業チームや運用チームなど、必ずしも「顧客」ではないケースもあります。自分のプロジェクトに合わせて読み替えてください。

ウォーターフォールモデルを採用した際の悩み

 アジャイルモデルを検討している現場において、ウォーターフォールモデルとはプロジェクト管理手法ではなく、組織制約や開発請負としての契約制約と同様と認識した方がわかりやすいでしょう。なぜなら、プロジェクトの全体には、図1のような大きな流れがあり、その中で自分達(開発側)が制御可能なフェーズは限定されているケースが多いためです。

図1:プロジェクトの全体スケジュール
図1:プロジェクトの全体スケジュール

 このように、スケジュール通りに役割がきれいに分割できるのであれば、ウォーターフォールモデルで問題ないと思うかもしれません。しかし、アジャイル開発手法を取り入れたいというプロジェクトでは、このようにきれいにフェーズ分けができない場合が少なくありません。例えば、要件定義が終わった後の各フェーズなどでも要件の変更をしたいという顧客要望を受け付けなくてはならない場合があります(図2)。

図2:開発行程で顧客要望が入るケース
図2:開発行程で顧客要望が入るケース

 このような状況では、厳密にはフェーズ分けができなくなります。つまり、現実的にはウォーターフォールモデルではないということです。実際、それぞれのフェーズで変更の要望を出されても、開発側としては要望に応えにくい事情もあります。

 例えば、仕様フェーズで画面の文言レベルやボタン位置などの要望が入っても、できあがる際には基にしている画面が100%同じように実現できるとは限りません。つまり、現時点では仮の画面と言えるわけで、その仮の画面への細かい修正要望ではなく、画面が確定してから要望を受けたいという事情があります。

 同じく、テストフェーズで要望を受けても、すでに画面を確定している段階なのでその要望に対応できない場合もあります。

 このような理由は開発側としては正当であったとしても、顧客側から見れば、いつ、どのタイミングで要望を言えばよいのか分からないため、その理由の妥当性は理解し難いのが実状です。そのような事情を考慮すると、「要望を受け付けないというウォーターフォールモデルではなく、アジャイルモデルの方が顧客要望に添ったモデルなのでは」と感じてしまうかもしれません。

 しかし、実は顧客側としても、常に要望を言いたい訳でもなかったりします。例えば、開発側にとっては画面の文言レベルの修正であっても、その目的は文言内容を通じて要求を伝えているケースもあります。このように、情報を伝える手段と目的が一致していないのは、図3のように双方の理解の仕方に違いがあるためです。

図3:理解の方向の違い
図3:理解の方向の違い

 そして、この違いが要望を上げるタイミングにも生じます。共通認識ができていないと言えるのですが、コミュニケーションを密にすれば解決するという程度の簡単なものでもないと、筆者は思っています。

外部要因と内部要因の要求事項

 先ほどは、顧客が要件を変えたいというのは、共通認識ができていないことが原因として大きいと述べましたが、アジャイルモデルを採用したい理由はそれだけではありません。そこで、要件を変更したいというケースを「外部要因」と「内部要因」に分けて考えます。

図4:変更要因の種類
図4:変更要因の種類

 外部要因とは、プロジェクトの関係者が関与できない原因から生じる変更理由です。例えば、市場の変化や顧客ニーズの変化、または、事前調査の読み間違いなどから生じる要件の変更理由です。

 アジャイルモデルを採用する理由の1つとして、この外部要因への対応可否を特徴的なものとして挙げるケースが見られます。このこと自体は間違ってはいません。しかし、開発がスタートしてからこのような「外部要因」による変更要求を受け入れる場合、そのプロジェクトをやり直すくらいの戻りが発生することを許容しないとできません。

 つまり、そのような強い権限を保持する人がプロジェクト内にいるということです。そして、そのような権限を持つことができる場合、プロジェクトメンバーのアサインのやり直しもできるということになるので、そのような場合、既にプロジェクトメンバーはアジャイルモデルに適した事業型組織に近いはずです。

 その場合、アジャイルモデルの採用を拒む制約が少なく、アジャイルモデルの方が自然な考え方になっているはずです。

 一方、内部要因とは、プロジェクト外部の影響以外から生じる要因です。ウォーターフォールモデルの理想系は後工程で生じるリスク要因を前工程ですべて洗い出し解決してから進める事です。しかし、そのリスクの認識や理解の度合いがメンバー間でも違うため、前工程で洗い出しできず、現実には気がついた時点でリスクが表面化します。つまり、全員がリスクに気がつかないということでなく、1人が気がついたリスクを全体リスクとして認識させることが非常に難しいということです。これは、先述した共有認識ができていないこととも共通します。

機能と工数での悩み

 スケジュールにそった開発をする上で、もう一つ大きな問題が機能と工数に関する悩みです。

 とくにウォーターフォールモデルの場合、見積上の工数と、実際の工数がどうしてもぶれてしまいます。しかも、実際の方が大きく膨れてしまうケースがほとんどです。この問題は、開発側の現場ではあたりまえという認識を持つ方も多いですが、一方で、顧客側から見れば理解できないことの1つでもあります。

 その大きな理由の一つが、現在のシステム開発での特徴にあります。例えば、1つの機能を作る際に図5のような構造上で開発をしています。

図5:機能を実装する際の開発構造
図5:機能を実装する際の開発構造

 この構造が、実際の開発者に様々な課題として降りかかります。その一つが、図6のような工数とリスクのバランスの選択です。

図6:開発工数とリスク
図6:開発工数とリスク

 1つの機能を実現するためにシステム基盤やフレームワークに近い層で行えれば、当然、その上で実現することは少なくなるため、結果、少ない工数で機能が実装できます。

 反面、顧客から見た場合の細かい機能や画面における変更要望を受ける自由度は低くなりがちです。そのため、随時要望を受け入れる前提ではリスクが大きな判断になってしまいます。システム基盤やフレームワークに近い層での開発は技術的難易度も高くなるため、それもリスクが高くなる原因の1つです。

 もう1つの問題が、選択するライブラリやフレームワークに関するリスクです。フレームワークに関するノウハウや経験は業界全体である程度共有されているので比較的問題は軽減していますが、特徴的な機能を実装する際に、それに関わるライブラリの情報は決して多くはありません。また、数少ない情報自体が専門性が高く、採用時点では情報が読み解けない場合もあります。

 しかし、ライブラリの選択は、その後の機能開発に大きく影響を与えます(図7)。

図7:ライブラリ選択とリスク
図7:ライブラリ選択とリスク

 ライブラリは、初期の仕様を元に実現できるかで選択しているのですが、その後の変更要求までは考慮できません。つまり、未来に生じる問題が予測できない以上、最適な選択が難しいということになります。

 以上のような背景から、機能が決まれば、必然的に不変的な工数が決まるわけでもないということです。

 このような背景について分かりやすく例えると、目的地(機能)にたどりつくまでの古い地図(過去の経験)と交通状況の変化(要望変更)に応じた移動手段(ライブラリ等)が分からないなか、目的地に向かっているというイメージです。

 そのため、同じ目的地に何度も行っている人は、様々な経路と状況を予測し調整可能なのですが、初めての目的地だと実際に出発してみると様々な予測できない課題に直面することになります。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
ハイブリッド開発手法

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
ボトムアップからのアジャイル開発管理手法の導入連載記事一覧
この記事の著者

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛...

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

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20046 2024/09/25 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング