okama

アジャイルな旅とソフトウェア開発に関する考察

東北をぶらり一人旅してきました。
二泊三日で総走行距離は約2000km、食事も美味しく景色もキレイで素晴らしい旅でした。
写真はこちら:
https://goo.gl/photos/ZP827L1UC5Q6hMwWA

さて、私はぶらり旅が好きです。綿密に計画を練って旅に出るより、期間と場所とかだけ決めて、後はその時のノリで旅を楽しむことが多いです。
ふと思いました。これは「アジャイルな旅」と言えるのではないか、と。

そんなわけで、今回のアジャイルな旅とソフトウェア開発について考察してみました。

まず今回の旅については…

要求:

  • あまり行ったことのない東北エリア(青森・秋田)を旅する
  • 綺麗な景色を見る
  • 美味しいものを食べる

必須要件:

  • 蔵王の御釜を見る
  • 白神山地の青池を見る

制約条件:

  • 期間は二泊三日
  • 初日は予約済みの青森の宿に泊まる
  • 二日目は予約済みの秋田の宿に泊まる

手法:

  • 自分の車を使用

結果:

綺麗な景色をたくさん見れたし、美味しいものもたくさん食べられたので、満足できる旅でした。
得られた成果は以下のとおり

  • (一日目:蔵王・御釜 -> 山形冷やしラーメン -> 弘前で鮪)
  • (二日目:恐山 -> 海を見ながら海鮮丼 -> 千畳敷 -> 白神山地 -> 日本キャニオン -> 横手風焼きそば)
  • (三日目:男鹿半島 -> 海鮮丼(二度目) -> 鳥海山)

では、成功した要件を振り返ってみます。

要求が理解できていること:

(寂しくも)一人旅だったので、クライアントは自分自身です。自分の旅の好みはわかっていて、綺麗な景色(雄大な大自然系が特に好み)を見ること、美味しいものを食べること、ドライブを楽しむこと、が要求の元になります。これがしっかりわかっているので、現地で次に何をしようと考えた時に、素早く判断を下せます。

手法・ツール:

自分の車であれば、荷物も積めるし、時間的な制約を受けずに自分の好きなところへ行くことができます。また、Google Mapを使えば、ナビにもなるし移動時間の見積もりにも使えます。ガイドブックがあれば、スポットやオススメの食事処とかの情報も手に入れられます。
ただこれらは使えばいいってわけではなくて、使いこなせる必要があります。知らない土地、その場で決めたルートでも問題なく運転できるスキル。また今回について言うと、長時間・長距離でも問題なく運転できるスキル。またGoogle Mapは移動時間の見積もりに使えますが、休憩時間などは当然含まれていないので、その辺も勘案して実際の時間を見積もれる必要があります。

勘(経験値):

実はコレが結構大事かもしれないと思ってます。
現地で次に何をするかを決めるとき、「このスポットは無視していい」「ここは寄ったほうが良さそう」「車でこれくらいの時間がかかる」という判断を瞬時に下すにはある程度勘が働く必要があって、それには経験値が必要になるのではないか、と思ってます。自分の場合はかなり一人旅をしているので(寂)、そういった勘は鍛えられていると思います。

これらの経験値が少ないうちは、綿密に計画を立てたり、ツアーを利用したほうが間違いないかもしれません。

では、この話がソフトウェア開発にも通ずると仮定して、成功した要件をソフトウェア開発についてあてはめて考えてみます。

要求について:

旅の場合も、一人旅、二人旅、集団の旅、と人数が増えれば増えるほど、要求も多種多様になって、その旅に求められるものを把握するのは大変になっていくと思いますが、みんなが満足する旅を実現するためには、それらをなるべく汲み取っていく必要があります。さらには、目に見える要求(例えば、蔵王の御釜を見る)だけではなく、要求の元(綺麗な景色(雄大な大自然系が特に好み)を見ること、美味しいものを食べること、ドライブを楽しむこと)を理解する必要があります。
ソフトウェア開発もここは同じでしょう。

手法・ツールについて:

柔軟なソフトウェア開発を実現したかったら、まずそれ相応の手法を選択する必要があります。ソフトウェア開発でいえば、ぱっと思いつくのはやはりスクラム等のアジャイル開発手法でしょうか。私の旅で言うところの、「その時のノリで旅を楽しむ」が相当します。ただ、手法を決めただけではうまくいかないので、それをサポートするためのツールが必要になります。旅の場合は、柔軟に動くため、車・Google Map・ガイドブックを利用しました。ソフトウェア開発で柔軟に開発を進めていくためのツールは色々有りますが、オブジェクト指向・自動テスト・自動デプロイ、などなどでしょうか。これらを導入しておくことで、柔軟なソフトウェア開発が実現性を帯びてきます。逆に言えば、適切なツールや仕組みを導入せずに柔軟なソフトウェア開発を行うのは無謀じゃないでしょうか。

勘(経験値)について:

ここは賛否両論になるかも知れませんが…ソフトウェア開発にも、経験値による勘というのはやはり効果があると感じています。設計や実装での一つ一つの判断でも、後々の保守性や拡張性を考えたよりよい選択をするのに、経験値は効いてくると思います。もちろん勉強して得られることもありますし、逆に経験していれば良いというものでもありませんが…、成功でも失敗でも、実践経験は多くのことを教えてくれると思います。

まとめ

柔軟なソフトウェア開発を成功させるためには、

  • 要求(クライアントが求めるもの)がしっかり理解できていること
  • 相応な手法(スクラムのようなアジャイル開発手法)を採用していること
  • 選択した手法を支えるための適切なツールが導入できていること
  • ある程度経験値を持つメンバーが居ること

が改めて大事なのかなーと思いました。「ある程度経験値を持つメンバーが居ること」は、ソフトウェア開発自身の経験と、アジャイル開発の両方の経験が該当します。アジャイル経験者が身近にいない場合はクリアすることが難しいかもしれませんが、その場合はコンサルを頼むというのも手かもしれませんね。

それらがクリアできない場合、綿密な計画を立てた旅行やツアーを利用するみたいに、まずはウォーターフォール開発でソフトウェア開発の経験を積むのが良いのかもしれません。

綿密な計画を立てた旅行やツアーがウォーターフォール開発に相当するか、というと賛否両論ありそうですが…。前者は結構近い気がします。ツアーは、計画部分をプロに委託することになります。ウォーターフォール開発では上流をプロに委託することができれば、同じような話に…なるかな?

 

…なーんてことを、500km強の帰り道を運転しながら考えてたのでした。ホントは更にモチベーションの話とかリスクマネジメントの話とかも考えたんですが、長くなってきたのでこのくらいで。。


コメントを残す

メールアドレスが公開されることはありません。