fc2ブログ

イテレーション単位についての考察

 アジャイル開発において、イテレーションの単位は重要です。しかしながら、そのことについて海底ある資料が見つからないので自分で書くことにしました。
 私は様々なプロジェクトで、週、日、時の三つの単位を実践してみました。その結果わかったことがあります。それは、プロジェクトの規模、ユーザーの受け入れスピード、開発側の作成スピードの三要因から適切なイテレーション単位が決まるという事です。
 昔、いくつかの不定形プロジェクトで、全てが1イテレーションになってしまったことがあります。単位は週です。これはどういうことかというと、ユーザーが要望する事柄が全て1週間で納品する状態です。このプロジェクトは、ゴールはある程度決まっていたものの、情報システムに慣れていないお客様は手探りの状態であり、慎重に確認を取りながら進める必要がありました。従って、お客様が具体的に要求を決め、その成果物を元に話し合い、次の要望を決めるという開発サイクルに自然となりました。こうなってしまうと、一度に決定する要望が少なく、何でも1週間以内に納品までできる状態になってしまったのです。
 イメージしずらいと思いますので、会話形式で状況のイメージを書きます。むろん守秘義務のため細部を書きません。
お客様「先週分の商品を検品している最中です。今のところ、大好評です。」
私「有難うございます。」
お客様「それで、次に話しを進めたいのですが、
 インドリさんはどうすればよいと思いますか?」
私「貴社におかれましては、○○業務を情報化し、
 コスト削減と利益増大を目指すのが得策かと思います。」
お客様「なるほど、○○業務ですか。
 あの辺は、検証もしやすく、効果も見やすいので、我が社としても助かります。」
私「承知いたしました。その方針で進めるとなると・・・、
 かくかくしかじかになりますが、よろしいでしょうか?」
お客様「業務手順に変更がありますか?」
私「そうですね・・・貴社の業務手順から言うと、
 ○○の行程を省略し、今回開発するシステムの○○を使用するという形になります。
 操作法につきましては、既存画面のパターンを踏襲しますから、
 教育コストもあまり要らないと思います。
画面はこんな感じでいかがですか?」
ここで私は下手なGUI画面の絵をかきます。
お客様「なるほど、この画面だと今まで同じ操作感覚のようですね。
 ただ、前回と操作する人が別になりますので、大丈夫でしょうか?」
私「担当者は○○課の人ですよね?」
お客様「ええ、そうです。」
私「貴社の業務書類を拝見したところ、今回話題になっている業務手順では、
 いくつかの書類を記入するという事になっています。」
お客様「ええと、これらの書類ですか?」
私「はい。今回、それらの書類から項目を抜き出し纏めてみました。
 ですから、業務で慣れ親しんでいる形式となっているので、
 違和感を減らせると思います。」
お客様「それはいいアイデアですね。それは、いつ出来上がりますか?」
私「有難うございます。来週出来上がります。」
お客様(笑顔で)「やはり、来週ですか。
 インドリさんならばそういうと思いました。」
私「どうしてですか?」
お客様「何を頼んでも、インドリさんは、来週までには出来上がるといいますから。
 しかも、実際に作ってくるので正直言って驚いております。
 システム会社の人はみんなそうなんですか?」
私「いえ、普通のシステム会社は、人月単価で運用されているので、多分違うと思います。
 私の場合個人ですから、余計な会議も意思決定もいらず、
 今現在開発しながら打ち合わせをしておりますので、
 今現在の技術で考えられる最高スピードで開発していると思います。」
お客様「それは、すごいですね。
 X社さんから評判を伺っておりましたが、
 ここまで仕事が速いとは思いませんでした。」
私「有難うございます。
 それでは、画面のサンプルについては今日明日中に送信しますので、
 ご確認して頂きたく思います。
 気になったことがあれば、何でもおっしゃってください。
 変更が無ければ、来週には完成品を持ってきます。」
お客様「その方向でよろしくお願いいたします。」
大体こんな具合です。お客様が喜んでいるから問題がないとも考えられますが、私自身はこの状況を問題視しています。何故ならば、イテレーションの意味が全くないからです。
 アジャイル開発は、適切なイテレーションを決定し、お客様と歩調を合わせつつ開発する事が重要です。たとえお客様が喜んでいても、開発手法としては間違いです。お客様に喜んでいただけるのは前提で、今よりもっと正しく開発することを目指さなければなりません。
 そんな事情から、随分前に日単位のイテレーションを採用しています。それでも二三年前から、日単位のイテレーションでも違和感を覚えるようになりました。日単位では、ちょっと曖昧で、お客様のスケジュールを乱す場合があり得ます。私としては、お客様のスケジュールを1ミリも変えないようにしたいので、より精密で高度な開発手法を考えている最中です。私は、お客様がシステム開発の依頼前と全く変わらずに、業務を続けられることを目指しているのです。
 そういった経緯から、1イテレーション1時間のアジャイル開発を考えたのですが、結局のところ全面的に導入できない状態です。その理由を考えるために分析し、次の関係を導き出しました。アジャイル開発のスピードは、開発規模を超えない(第一の壁)。また、お客様の受け入れ態勢(第二の壁)と、開発側の製作スピード(第三の壁)が採用可能なイテレーションを決定する。

1イテレーション=規模÷受け入れ態勢÷開発スピード。

 すなわち、プロジェクトの性質・受け入れ態勢・開発スピードの酸要因により、適切なイテレーションは決定します。ですから、毎回イテレーションの決定を行う工程が必要になります。私はこの工程を削減し、どのようなプロジェクトでも、いかなる状況下でも正しい、理想的なイテレーションを探しているのですが、残念ながら今のところ発見できていません。
 纏めます。アジャイル開発の単位である1イテレーションには、週・日・時の三単位が考えられます。イテレーションの単位は、プロジェクトの性質、受け入れ態勢、開発スピードの三要因で決定されます。残念ながら、絶対的に正しいイテレーションは発見できておらず、現状は1イテレーションの単位を毎回決定しなければなりません。この稚拙な文章が少しでも役立てば幸いです。
スポンサーサイト



テーマ : 情報処理技術
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター