連載
開発をもっと楽にするNAgileの基本思想

第3回 アジャイル開発のキモはフィードバック!

福井コンピュータ株式会社 小島 富治雄(Microsoft MVP for Visual Developer - Visual C# Jul. 2005 - Jun. 2007)
2006/09/27

 
登場人物:
弟子:点網 滝てんもう たき(♀)
.NET開発者。ウォーターフォール型の開発を行っているが、アジャイル開発を明るく真摯(しんし)な態度で学ぼうとしている。
師匠:ナジャイラ師(マスター)(♂)
NAgiler(ナジャイラー=.NETにおけるアジャイル開発の実践者)。謎の多い人物。ちょっと偉そう。だが、実は弟子思い。今回は彼の謎が明らかに?!
青年:原 健二はら けんじ(♂)
福井県で.NET開発者をやっている青年。前々回登場した井坂 十蔵氏は元上司。目指すは、スーパー・プログラマー。なぜかアジャイル開発を嫌っている。
大師匠:原 眞鎮はら まあちん(♂)
福井県の永平寺の近くの女祖泥寺めそどろじに住む初老の男性。昔はソフトウェア開発者をやっていたらしい。

※ご注意 ……本稿に登場する人物、会社、団体などはすべてフィクションであり、実在の人物、会社、団体などとは一切関係ありません。登場人物の役柄はストーリー上の設定であり、筆者や読者を代表するものでもありません。あくまでもフィクションとしてお読みください。

■■プロローグ■■

前回:開発をもっと楽にするNAgileの基本思想 第2回 伝わるコミュニケーションとは ―アジャイル開発ではドキュメントを書かないって本当? Part II ―
姉妹連載:NAgileで始める実践アジャイル開発

 点網 滝は福井県に来ていた。福井のCADメーカーとの仕事のために、昨日から来ているのだ。そのCADメーカーは、先日アジャイルなコミュニケーションのコツについて教えてくれた井坂 十蔵氏がかつて勤めていた会社だという。

 こういう場合、大抵は師匠と一緒に出張となる滝だが、今回は1人だ。師匠は所用のため遅れてくるのだ。明日福井で合流する予定となっている。

 羽田から飛行機で約1時間。小松空港に降り立った滝を車で迎えに来てくれたのは、訪問先のCADメーカーに勤める1人の青年だった。それから2人は、会社までの道程を小1時間、赤松の並木の向こうに夏の日本海の白波を右手に眺めながら走った。夏の好きな滝は、すっかり上機嫌で若きドライバーを質問攻めにした。

 彼は、新人として入社して2年目で、なんでも.NETでCADを作っているという。学生時代からプログラミングが好きで、スーパー・プログラマーを目指しているとのこと。好きなプログラミング言語は、C#。興味のある分野は、3Dグラフィックス。独身。好みの女性のタイプは明るい人だという。

 調子に乗った滝は、「明日土曜日だよね。前から永平寺に行ってみたかったんだ」と翌日の観光案内の約束まで取り付けていた。そして、今朝は宿泊先に車で迎えに来てもらい、永平寺に連れてきてもらっていた。

※ 筆者が永平寺に行って撮影してきた写真。

 永平寺の参拝からの帰り道の参道。敷き詰められた細かい石の上を2人は並んで歩いていた。梅雨が明けたとはいえ杉の大木の林を通ってくる風はどこか涼しい。遠くに夏山が黒く見える。油蝉アブラゼミ の声が遠く小さく、2人の途切れのない会話を包んでいる。

■■永平寺参道を歩く滝と健二■■

それにしても、健二君。永平寺素敵だったね。ああいう場所で修行している人が、いまでも大勢いるんだなってあらためて気付いたよ。よい体験だったな。

 

 

僕はずっと福井に住んでいるんですけど、永平寺は久しぶりだったんで新鮮な感動がありました。それから、禅修行にも興味を覚えました。修行ってどんなんでしょうね。修行をすると何が分かるようになるんでしょう?

 

 

うーん……。それはきっと修行してみないと分からないことなんだろうね……。

 ところで健二君。昨日、食事会の席で「アジャイル開発はあまり好きじゃない」っていってたじゃない? そのことについて、お姉さん、もう少し詳しく聞きたいんだけど。なぜアジャイル開発が嫌いなの?

……。いえ、そんな大した理由なんかないんです。その話はもういいですよ。

まあまあ、健二君。そういわずに。私最近、アジャイル開発にけっこう思い入れがあるんだ。興味があるな。

……。

 ……じゃあ、滝さん。この近くにおいしい団子屋があるんですけど、そこへ行って話しません?

   

いいねぇ。もちろん行く! おなかすいたね。

■■団子屋にてアジャイルを語る滝■■

……ほら。あそこの赤い暖簾のれんの小さい店です。あの入り口に向日葵ひまわりがたくさん咲いてる店。さあ、入りましょう。ここの団子は、胡桃(くるみや黒胡麻のあんが入っていて、とっても柔らかいんですよ。

筆者が永平寺近くの団子屋で買ってきた団子の写真。
 

 

わあ。来た来た。へぇー……。ではさっそく……。おおお。これは! ちょっといままで食べたことがない食感と味の団子だ。師匠の分も買わなくちゃだね。……うん。福井って初めてなんだけど、けっこうおいしいものがいろいろとあるみたいね。

 ……さて、健二君。おなかが落ち着いたところで、そろそろアジャイルが嫌いなわけをお姉さんに話してもらおうかな。

 

 

うう。あまり話したくないんですけど。実は……。実は、それは僕の父に関係があることなんです。僕の父は、僕が幼いころから、アジャイルにのめり込んでいたんです。そしてだんだん、家族よりアジャイルにばかり時間を割くようになっていったんです。母が大きな病気になって、長く寝込むようになってからも、それは変わりませんでした……。やがて、母は亡くなりました。

 

 

……。
   

そして、僕は家を出ました。それ以来、父方の姓を名乗らず母方の姓を名乗っているんです。僕には、母を苦しめた父が、そしてアジャイルが、いまひとつ好きになれないんです。いっそ一生ウォーターフォールで開発できればと……。

   
……そうだったんだ。つらい思いをしたんだ……。
   

それに、滝さんの前でこんなこというとしかられるかもしれませんけど、アジャイル開発って、ちょっといいかげんなところがあるような気がして、そこも好きになれないんです。「変化に対応」っていいますけど、それってどうなんでしょう? まあ、予測のつかない変化もあるでしょうから、それへの臨機応変な対応も必要なんでしょうけど。でも、それより初めからきっちりと先を見越した開発計画を立て、先を見越した保守性の高い設計や実装ができるように努力することの方が先決なんじゃないでしょうか? 適当にやっておいて、後で直せばよいみたいなのは、エンジニアとしてどうなんでしょう?

   

うーん。アジャイルだから「初めは適当でよい」なんてことはないみたいよ。私もそうだったんだけど、健二君、少しアジャイルに誤解があるかもしれない。

   

そうなんでしょうか。でも、取りあえずやってみて後で直せばよい、みたいなところありません?

   

そうね。確かにアジャイルでは、まずはやってみて、その結果を見て、それによってやり方を微調整する、という面はあるみたいね。実行結果から、フィードバックを得る、みたいな。

   
でしょう?
   

でも、そうするのには訳があるんだ。私の師匠からの受け売りになっちゃうんだけど……。

 確かにウォーターフォール的に、開発の初めに将来を見越して計画を立てて、そのとおりに進めることができるのなら、もしそれが可能だったら、それが理想かもしれない。でも現実には、そううまくいかない場合が多いみたい。そして、なぜうまくいかないかというと、それはソフトウェア開発の「複雑さ」に原因があるようなんだ。

 例えば……、うーん……。それじゃ師匠から聞いたドライブの例を挙げるね。例えば、「円形のレーシング・コースを決められた回数だけ周回する」というような非常に単純なドライブの場合だと……。ちょっと紙に書いてみるね。

単純なドライブの例:
「円形のレーシング・コースをある回数だけ周回する」

  1. 1周がどのくらいの長さかなどのデータから、どの程度の速度で何周走り、全体としてどのくらいの時間がかかるか、計画を立てる。
  2. 計画どおりの速度で走り続ける。
  3. 計画した周回数に達したら終了。

 この場合だけどね。例えば9割の精度で計画を立てることができて、9割の精度で計画どおりに車の速度を保つことができれば、全体としてはまあ9割くらいの精度でこのドライブを成功させることができると思う。

 つまり、

っていう、ウォーターフォールの理屈が成り立つわけ。で、こういう単純な場合はこれでよいんだけど、現実のドライブは普通、もっと複雑な場合が多くて、例えば、次のような場合。

複雑なドライブの例:
「東京から福井まで家族で観光旅行に出掛ける」

  • 道が途中で込んでるかもしれない。
  • 昼食に何を食べるか、なかなか決まらなくてうろうろするかもしれない。
  • 子どもが途中のおもちゃ屋にどうしても寄りたいと駄々をこねて、いうことを聞かないかもしれない。

 ね? で、こういう場合……、出掛ける前に「目的地までの道のりを9割の精度で求めて、道の込み具合を9割の精度で求めて、家族の昼食の好みを9割の精度で求めて、子どものその日の駄々のこね具合を9割の精度で予測できて、9割の精度で速度を保つことができれば」、全体としては9割くらいの精度でこのドライブは成功するのかな?

 それよりも実際にドライブをしながら、周りの状況を見たり、家族の意見を頻繁に取り入れていったりした方がよくない?

   
うーん……。
   

つまり、ソフトウェア開発は複雑だから「円形のレーシング・コースをある回数だけ周回する」ようにはいかない、ということらしいんだ。ウォーターフォールの考え方では、「まず高精度な計画を立てて、いかにそのとおりにやるか」に注力するんだけど、アジャイルでは、それよりもむしろ、「やってみてそこからのフィードバックで細かく軌道修正する」方を重視するんだ。

 納得いかない? んじゃ、もう1つの例。子ども服の例だよ。

子ども服の例:
「子ども服をいつ買ったらよいか?」

Q. これから生まれる子どものために服を買いたい。いつ買ったらよい?

A1. 生まれる前に今後20年間の子どもの成長を両親と子どものDNAを調べ上げるなどして高い精度で予測し、すべての服を買っておく。

A2. 子どもの成長と周りの気温や流行に合わせて、その都度必要なだけ買う。

 どう?

   

うーん……。何だかビミョーな例ですね。分かるような分からないような……。

   

駄目かぁ。よーし。健二君、じゃあ、これからちょっと一緒に来てくれる? 実は今日は午後から、私の「師匠の師匠」のところへ伺うことになっているんだ。こういうことに詳しい人なんだよ。

 

 INDEX
  開発をもっと楽にするNAgileの基本思想
  第3回 アジャイル開発のキモはフィードバック!
  1.団子屋にてアジャイルを語る滝
    2.女祖泥寺(めそどろじ)
    3.設計と実装に対するフィードバック
    4.「ツッコマレビリティ」とeXtreme Feedback!
    5.重要なのはフィードバックを受けようとする態度
 
インデックス・ページヘ  「開発をもっと楽にするNAgileの基本思想」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間