開発プロセス」カテゴリーアーカイブ

デブサミ2014でお話してきました!

もう2週間も前になるのですが、【Developers Summit 2014 (デブサミ2014)】に参加してお話してきました。

デブサミ2014、講演関連資料まとめとして資料などがまとめられています。

成功と失敗の狭間に横たわる2つのマネジメント

聴きに来てくださった皆様ありがとうございました!

登壇に至った理由は1つ前のエントリ(デブサミ2014で登壇します)に書いています。

1日前までスライドができあがらずけっこう悩んでいましたし、緊張もしていました。
壇上に上がる前は「整理した考えを”自分のため”に独り言のように話す」と開き直って言い聞かせたりもしました。

内容は目新しいことはなく、自分がこれまでやってきた中で「これは大事なんじゃないかな」と思うことについて、やってみてうまくいったり、失敗したこと経験談をお話しました。

他に参加したセッション

1日目は話す前に他の方のセッションを聴くと自分のスライドを手直ししたくなるので、コミュニティブースで色々な方とお話していました。

2日目は以下のセッションに参加しました。(リンク先はSlideShare)
【14-D-1】Team GeekによるFearless Change(角征典〔ワイクル〕)
【14-D-3】越境する開発~あの日開発していたサービスの名前を僕たちはまだ知らない~(市谷聡啓〔DevLOVE〕)
【14-B-5】ピンポンゲームでスクラム体験ワークショップ(川口恭伸〔楽天〕)

角さんのパターンの話は分かりやすかったですし、市谷さんの話をDevLOVE以外で聴くというのも新鮮でした。
ピンポンゲームも終わった後に川口さんと色々ディスカッションできたので「なるほど~」と思うことがありました。

デブサミは同窓会であり、良い刺激をもらう場

デブサミは自分にとって同窓会と改めて思いました。
DevLOVEのコミュニティブースで色々な「お久しぶり!」な人とお会いできたし、(一緒に仕事はしたことないけど)元同僚の@namikawaさんとランチしたり。

そしてそれぞれ場所は違えど色々挑戦していたりして、これも良い刺激になります。

写真

DevLOVEのコミュニティブース
DevLOVEのコミュニティブースです。
@teyamaguさんの設営力(?)に感謝です。

スピーカー控室への案内
スピーカー控室への案内板。

スピーカー控室
ここがスピーカー控室です。
リハーサルの関係で1番乗りだったので誰もいないのですが、日中はここでスピーカーの皆様があちこちで話をしていたり、スライドを手直ししていたりとワイワイガヤガヤと楽しい空間になっていました。

スピーカーパス
スピーカーパスです。これは次のデブサミでも身につけてみたいです。

会場
リハーサルの時に撮った会場です。実際は聞き手の席は暗くなっているので壇上からほとんどお顔は見えなかったのですが。

コーヒースポンサー
1万円でなれるコーヒースポンサーの頂き物です。
書籍も1冊いただけますし、セッションは並ばずに優先的に1番前の電源付きの席で聴くことができるしメリットが多いと思いました。

最後に

両日ともとても楽しく、あっという間の時間でした。

特に2日目は雪の中、時間短縮したり運営の難しい判断もあったと思いますが、それを感じさせることなく楽しませてくれた、翔泳社さんを初めとするスタッフの皆様のオペレーションに感謝です。ありがとうございました!

次のデブサミでも何かお話できるように頑張っていこうと改めて思いました。

コツ

最初に行う3つのプラクティスと継続していくコツ

このエントリは?

このエントリは達人出版会から出版された電子書籍【開発現場に伝えたい10のこと】で私が書いた内容を許可を得て転記したものです。

2014/01/14(火)にはDevLOVE関西で書き手が集まる【「開発現場に伝えたい10のこと」それぞれの後日談】を行います。
よろしければご参加ください。

では少し長いですが、お付き合いください。

最初に行う3つのプラクティスと継続していくコツの目次

前半はチームビルディングにフォーカスを当てて、私がチームに参加した際にまず最初に行うことが多い3つのプラクティスについて書きます。後半はそれらのプラクティスを導入し、継続していく時に気をつけている点を書きます。

前半:私がチームに参加したら最初に行う3つのこと

  1. 朝会
  2. ふりかえり
  3. タスクボード

後半:変化を起こそうとした時の心構え的なこと

  1. 「やり始める」のは簡単
  2. 「やり続ける」ことの難しさ
  3. 「効果を出しながらやり続ける」には……

最後に

前半:私がチームに参加したら最初に行う3つのこと

私が新しく開発チームに入った際に最初に何をするか?と聞かれるとまずは、次の3つです。それは”朝会”、”ふりかえり”、”タスクボード”です。

いずれもチームの状況を「見える化」して透明化をします。こうすることで、チームが自分達で工夫して少しずつでもレベルアップしていく状態になることが目的の1つです。もちろんレベルアップすることでユーザー、顧客へ届けるモノ、価値を期待以上にします。

透明化が十分でないチームでは、「誰がどのタスクを持っていますか?」という小さな話から、「今回のリリースの日はいつですか?」という大きめの話のいずれでも「知らない」とか、全然違う答えをそれぞれ持ってしまいます。しかも答えが違うことを分からないまま進んでいることもあります。これではチームがうまく回りませんし、レベルアップして良い成果を出すことは難しくなります。

一方、”朝会”、”ふりかえり”、”タスクボード”がチームに馴染んでいれば、”ふりかえり”で、「これまでと比較して何がうまくできなかったのか?」「これまでより何がうまくいったのか?」を検査することができます。検査によって様々な情報を得ることで、どう適応すれば良いか分かり、アクションをしやすくなります。そして、そのアクションは”タスクボード”や”朝会”によって「見える化」されていきます。

以降はこの3つのプラクティスについて詳しく書いていきます。

朝会

参考:プロジェクトファシリテーション 実践編 朝会ガイド(リンク先はPDF)

“ちょうかい”ではなく“あさかい”と読み、アジャイルな開発手法では、デイリー・スクラムやスタンドアップ・ミーティングと呼ばれることもあります。

特徴として以下が挙げられます。

1:朝行う
2:15分以内
3:チーム全員が参加し、発言する
4:昨日やったことの確認、今日やること、困っていることを簡潔に話す(長くなりそうなら別途設ける)
5:立ったまま行う

目的の1つは、メンバーが「お互い何をやったか?やっているか?困っていることはないか?」を共有し、必要であればチームが何らかのアクションを取る状態になることです。それを毎日同じ時間に同じやり方で行うことで、チームに一定のリズムを刻むことも大事なことです。詳しいやり方は上記の参考文献に掲載されています。

以下は、私が見かけたアンチパターンと私なりの解決方法です。

1:長時間ダラダラする

Scrumではデイリースタンドアップとして「15分」と定められています。それ以外のプロセスでも「短く」というのは共通しています。長くなると集中力が途切れ、しんどくなります。それぞれの状況を短い時間の中で把握できないということ自体が課題でもあります。

また、個別の課題にこだわりすぎて時間が長くなるパターンもあります。このような場合、朝会の進行役が「その話は後で個別にやりましょうか?誰と誰とができますか?」と提案するとうまく収まることが多いです。

2:誰も聞いていない

メンバーが話している時、他の人(ひどい時にはリーダーさえも)が誰も「我関せず……」という感じで聞いていないことがあります。関心事が「自分のタスク」に向かっていて、「チームとしてこのプロジェクトをどうするか?」ということに向かっていないのが原因の1つです。

このような場合、ペアでタスクに取り組むことで、お互いの状況を把握し、チームを意識しやすくします。またインセプションデッキを使って、「プロジェクトの目標を明確にし、チームとして成功させる」大事さを伝えたりします。

時には、メンバーがリーダーに向かって「のみ」話して「報告」になっていることもあります。朝会はリーダーとメンバー間のみの進捗確認や詰問の場ではありません。これが悪い方向に進んでいくとリーダーは「指示」を出し、メンバーは「指示待ち」の姿勢になってしまいます。さらには報告しているメンバー以外は他人に感心を持たなくなり、チームでなくなっていきます。

3.:見えるものがない

それぞれのタスクの量や状況が見える化されていない中での朝会もありました。WBSがファイルサーバーの奥底に眠ったままだったり、リーダーしかメンテしないとこのようなことが発生しやすくなります。まずはその日と前日の分だけでも、見える化するところから始めます。

あるチームでは、タスクボードではなくRedmineを使っていたので、スプリントでやるチケットの一覧を印刷して貼り出し、それを見ながら朝会をしていました。余談ですが、このチームが成熟してスピードが上がっていく中で、Redmineにアクセスして、チケットを操作することがボトルネックになったこともあり、最後にはRedmineを使わなくなり、タスクボードのみ使うようになっていきました。

また別のチームでは、大きいモニタの前に集まって、Redmineのチケット一覧を表示しながら朝会をやっていました。この方法は効率は良いのですが、朝会までに最新情報に更新しておく文化がないと、朝会でRedmineの操作役が他のメンバーのタスクまでいじることになり、自分のタスクを自分でマネージメントする(自分でいじる)感覚が薄くなってしまいます。

これらのアンチパターンに陥らないように、また、良い朝会をするために私が工夫してきたことです。

1:観察する

(リーダーやスクラムマスターは)できるだけ口を挟まずに場の雰囲気やメンバーそれぞれの話し方や表情などを観察します。そうすると徐々に「AさんとBさんは息があってそうだな」、「気にかかっていることがあるのかな?」とか「体調が悪そうだな?」ということが分かることもあります。

「昨日やったこと」を意識して聞いてみるのも時々行います。もし昨日やったことが当初の予定と大きく違っていることばかりであれば、(割り込みタスクが多いなどの)何か問題を抱えているかもしれません。

2:質問の形を工夫する

「課長」や「プロジェクトリーダー」のような肩書きは、その人の発言が命令になり「自分達で考える」ことを阻害してしまう場合もあります。

よく言われていることですが「You(あなた)」でなく「(止まっている)このタスクを片付けるのに、私達がやれそうなことはあるかな?」のように「We(私達)」を使った形で話すようにすると「(話している本人も含めた)チーム全員で考える」意識を持ち続けやすくなります。

3:その場で貼る

「貼っていないですがXというタスクをします。付箋は後で貼っておきます」という話が出たら、その場でさっと書いて貼るようにします。「後でする」というのは忘れてしまいがちですし、目に見えないタスクが多くなってくるとチームの透明性を徐々に奪っていきます。そのために朝会で使うタスクボードには付箋紙とペンを用意しておくとさっと書けるのでオススメです。

ふりかえり

参考:プロジェクトファシリテーション 実践編 ふりかえりガイド – オブジェクト倶楽部(リンク先はPDF)

次にふりかえりです。特徴は以下のようなものです。

1:チーム全体が、行動可能な改善策を探し、試す勇気を得ること
2:チーム全体が、これまでの行動を思い返し、新たな気づきを得ること
3:チーム全体が、やってみてうまくいった行動を、チームに定着させること
4:チーム全体が、メンバーの多様性を受け入れ、信頼関係を築くこと

ふりかえりでは「KPT」(Keep/Problem/Try:けぷと)というフレームワークを多く使うので、主にその「KPT」のことを書きます。ふりかえりの目的は、「自分達がうまくできていること、もっとうまくできそうなことはないか?」を共有して、さらに「もっとうまくできるために何をすれば良いのか?」というアクションを共有することがその1つです。

以下はそんなふりかえりでの経験談です。

1:KeepはGoodなことから導き出してみる

慣れていないとなかなかKeepが出てこなかったりします。その場合、些細なことでも良いので「良かったこと(Good)」という観点で出してもらうようにします。その良かったことを起点にして「なぜGoodと感じたのか?」→「これからもGoodと感じることができるにはどうすれば良いだろうか?」→「それはKeep(継続できる習慣)だろうか?」という流れで出てくることもあります。

なぜそのKeepが出てきたのか分からないと、偶発的なものになってしまい次に活かせないこともあります。その場合、「それは続けることができそうか?チームの習慣になりそうか?」と話し合います。

2:Problemは「それで何が困ったのか?」を意識する

「○○ができなかった」というProblemがあった時に、「それでチームは何が困ったんだろう?」と話し合うことがあります。

できなかったことは事象ですが、それで何が困ったか?を共有していないと、それに対する効果的なアクションであるTryを出せないこともあります。話し合った結果、その○○ができなかったことではチームの誰も困っておらず、○○という行為自体が不要なことであることが分かるかもしれません。

3:Tryは「それでPはなくなるか?」を意識する

1度に全てのProblemに対処するのが難しい場合もあります。その場合、ドットシールなどで投票して、どのProblemに対処していくかを決めた上で、Tryを出していきます。

一通りTryが出た後に「これらのTryができれば、次回のふりかえりではこのProblemはなくなっているだろうか?」と話し合うことがあります。その答えがNoなら、まだ何かTryが足りないかもしれませんし、もしかしたらProblemの深掘りが足りないのかもしれません。

4:観察する

何度かふりかえりをやっていると、Aさんはテストに関するKPTが良く出るなどのように誰がどの領域に強い関心事を持っているか?など色々なことが分かってきます。意外と自身では何に強い関心事を持っているかハッキリ分かっていないことがあるので、それを認識することでチームのレベルアップに繋がることもあります。

これまでのKPTを写真に残しておき、定期的に時系列に見て、KPTの割合、それぞれの内容などを話し合うこともあります。その時に過去のTryが次のKeep、Problemのどこに行っているのかトレースしてみるのが良いです。

またタイムラインという表現方法を使って、この半年や1年などでチームやプロジェクトにどのようなイベントがあったか?またどんな感情の変化があったか?などをプロットして、そこからチームの変化や成長を実感するということもします。

タスクボード

最後はタスクボードです。
参考:川口 恭伸(@kawaguti)さんの「Kanban and Scrum

タスクボードの目的の1つは自分達がどのようなことをするのか、そして今それがどのような状態なのか?を分かるようにすることです。これには、見える化、透明性の維持、周囲へのコミットメントなどが関係しています。また付箋紙などを動かしていくので、Doneに溜まった付箋による達成感、開発のリズムというようなものを感じることもできます。

私はまずはシンプルにTodo、Doing、Doneの3レーンからスタートします。

Todoのレーンでは「Doneの定義」や「Readyであるか?(タスクを着手できるか?)」などをチームと一緒に話し合ったりします。このようなポイントを見逃してタスクをやり始めると、手戻りが発生し、貴重なリソースをムダに使ってしまいます。

DoingのレーンではWIP(work-in-progress=作業途中)の数に気をつけます。これを意識しないとすぐにマルチタスクの状態になってしまいます。マルチタスクはタスクのスイッチングコストが多くなって効率が悪くなります。これもリソースのムダになってしまいます。私はWIPは多くても3までとしていて、チームができたてだったり、メンバーのタスクマネジメントの経験が浅い場合は、1にすることもあります。

開発プロジェクト以外にも、保守プロジェクトや問合せなどがタスクとして存在しているチームの場合、このWIPの制限によって「どういう優先順を付けると顧客やチームにとって良いのか?」と真剣に考えることになります。このことで自分達の生産量が向上したり、周囲との仕事の受け渡しや頼み方などにも改善が見られることもあります。

Doneのレーンでは、Doneに付箋を移動する時に「Doneの定義」に注意します。タスクを開始するとDoneの定義が修正することも時々あります。それが共有されていないといざDoneになった時に、その際に「あれ?そうだったの?」というすれ違いが発覚し、リソースをムダに使ってしまいます。

アンチパターンとしては、タスクボードの更新が全然されないことがあります。これは、タスクボードがチームから物理的に遠かったり、普段見えていなかったりすると発生します。

また、更新がされない状態はタスクの粒度が大きすぎる時にも発生します。最初はタスクの粒度が大き過ぎ、進捗が分かりづらいという状況になります。しばらくすると(チームが工夫することによって)タスクの粒度が細かくなっていきます。すると今度は細かすぎたりして、タスクを書き出す手間がメリットを上回ってしまう感覚を持ちます。その結果として「チームにとってちょうど良い感じ」のタスクの粒度が共通認識として出来上がる……というパターンとして経験したことがあります。

タスクの粒度は、チームの成熟度などのコンテキスト次第ですが、私の感覚では見積もりの最大時間が4時間程度を1枚の付箋紙(タスク)とするのが良いと思います。だいたい1日で1枚はDoneに持っていける粒度でもあり、精神的にもリズム的にも良い状態だと考えています。

タスクボードは時間が進んでいけば、そのチーム独自のタスクボードになっていくことが多いです。Readyレーンを用意してそのタスクをTodoレーンに移動できるか検討したり、Doing以外にWillDo(やる予定)レーンを作ったりしたこともあります。またタスクの付箋紙自体も追加されたことを分かるよう印をしたり、バグを付箋の色で一目で分かるようにしたり、Small/Medium/Largeの見積もりを色で分けるようにしたこともあります。

後半:変化を起こそうとした時の心構え的なこと

後半は、前半で書いたプラクティスなど新しいこと、ちょっとした変化を持ち込もうとする際に私が心がけていることなどを書いていきます。

「やり始める」のは簡単

「最初の一歩が難しいんだよ」という声もありますが、今回前半に書いたことは、いずれも1人でもできることであり、その効果を周囲に伝えることもしやすく、比較的始めやすいことです。

タスクボードは「Myタスクボード」を作り、自分のタスクをそこでマネジメントしていくようにします。

リーダーや同僚などに「今の進捗はどんな感じ?」や「後はどんなタスクが残っているの?」などと聞かれた時に、そのMyタスクボードを見ながら、サクサクと答えていくと興味を持ってもらえることもあります。このようなことが何度かあると「チームでタスクボードをやってみよう」という流れも起きやすくなります。私もMyタスクボードを出発点として、最終的にはチーム全員のタスクボードまで成長していったこともあります。

ふりかえりも1人で始めることができます。

私は(チームのふりかえりとは別に)、自身のふりかえりとして週単位で行っています。1人だと、Tryなどに対するモチベーションを保つのが(チームでやるのに比べると)一工夫必要だったりします。私は、リーダーや同僚との雑談で「こういうことを今週は自分なりにTryしてみようと思う」と宣言したりして、アクションをするようにしています。

「やり続ける」ことの難しさ

ダイエットでも経験がある方もいるでしょうが、やり始めてすぐに効果が出るわけではない……と、頭では分かっていても、数日して何も変わらないと「これでは効果が出ないのかな?」「前の方が良いのではないか?」というような考えがムクムクと頭をもたげてきて、「続ける」モチベーションが弱くなってしまうことがあります。

それまでのやり方とあまりに違うような方法をとっている場合、「前の方が(慣れていたし)良かったんじゃないか?」という声も聞こえてくることもあります。忙しくなってくると優先順位を落としたくなるのも分かります。が、このようなプラクティスは即効性のあるものではなく、じわじわ効いてきて、気がつくとチームに変化が起きていた……ということも多くあります。

一方で、それなりに続けていると今度は「マンネリ化」という課題が出てくることもあります。「なぜそれをしているのか?」という理由が消えてしまい惰性になり、「もっとうまくやる方法があるのでは?」という考えやアクションへの意識が弱くなり、すでに実状と合わなくなっているにも関わらず、「前からやっているから」という理由だけで続けてしまっている……という状態です。

このように「効果を出しながら、やり続けていく」ことは、言い訳の天才でもある人間にとってなかなか難しいことです。

「効果を出しながらやり続ける」には……

自分達はもっとうまくできるようになるという「信念」(のようなもの)、「交渉力」そして「ちょっとした幸運」が必要だと感じています。

1:「信念」

「自分達はもっと成長していき、うまくでき、それで良い結果を出すことができる」という「信念」が必要です。

すぐに効果が出なかったり、社外の成功事例が耳に入ったりすると「やり方が間違っているのか?」と思ったりすることもあります。しかし成功事例はあくまでそのコンテキストでの話に過ぎませんし、自分達が同じ状況、同じ能力を持っていない限り同じ結果にはなりません(おそらく持っていても同じ結果にはならないでしょうが……)。

すぐに成功事例に飛びついたりせず、自分達にあったやり方、エッセンスを抽出して、また「どこがうまく行っていないのか?」を冷静に客観視していく必要があります。

自分達のコンテキストは自分達が一番分かっているはずですので、ある程度は「信じる」気持ちが必要になります。もちろん自分達のやり方に(無条件に)固執することは成長を阻害する大きな要因ですので、バランス感覚も必要です。

2:「交渉力」

従来の管理手法との違いや(形骸化した)社内ルールとの衝突など外圧が発生することもあります。その外圧に負けてしまうと、新しい取り組みが定着し、効果が出るまで続けることができなくなるかもしれません。また鶏(=チーム外)の大きな声などによって自分達のやり方が脅かされることもあります。

そのような戦いに負けないように、そもそもそういう戦いをしないで済むように”根回し”などと言われる交渉力も少しは必要になってきます。

様々なタイプの上司や組織風土があります。「やり方は問わないので、とにかく結果が出れば良い」から「やり方は問わないがプロセスも報告し、もちろん結果も」というタイプ、そして「やり方もプロセスも詳細な報告を……」という感じです。

マイクロ・マネジメントが良い結果を生むことが少ないことは知られていますが、「何か得体の知れないこと」をされるのは気持ち悪い、そして自分の管理責任を問われると感じる上司や組織風土もまだまだあります。それぞれのタイプごとの関心事などを考え、うまく伝えるたり、見せることで味方にする……少なくとも敵にならないことが大事です。

多くの場合、これら「確実な成果は約束できないけれど、今より少しうまくできるようになる可能性がある」アクションに対しNo!と頭から否定されるフィードバックはあまり返ってこないと思います。もしあるとすれば、うまく「なぜするのか?」という理由や「どこを目指そうとしているのか?」などのゴールが説明できていなかったりするかもしれません。このように話を聞く側の心理的不安を取り除くようなアクションをすることも必要かもしれません。

3:「ちょっとした幸運」

本当に入ったプロジェクトがデスマーチの場合、なかなかこれらをやり始めることすらできないかもしれません。しかし、本当のデスマーチになる前であれば、少なくともこれらをやり始めることはできます。

また(数少ない話だとは思いますが)このようなアクションを一切認めない上司や組織風土も存在するかもしれません。そういう本当に「ひどい状況」に当たらないというのも、これら続けていくために必要な「ちょっとした幸運」です。

最後に

3つのやること、そしてそれらを続けることの私なりの方法を書いてみました。もちろん3つのことは他にもあるでしょうし、続けるコツも他にもあるでしょう。ぜひ皆さんのそういうコツなどを教えて欲しいですし、話し合ってみたいです。

これらをやり始めて、続けていったとしても、世界を、組織を変えることはできないかもしれません。しかし、チームは、自分は確実に変わっていくことができます。

DevLOVE関西のような多くのコミュニティでは、このような課題をテーマとして扱うこともあります。実際にアクションして解決するのはそれぞれの現場でのことかもしれませんが、ぜひコミュニティと現場を循環していくことで、自分の課題が解決し、その解決したことが、別の現場で困っている別の誰かの課題へのヒントになるサイクルが回るようになることを願っています。

※アイキャッチ画像:http://www.flickr.com/photos/stevendepolo/3605321899/in/photostream/

プロジェクト完了報告書の問題

プロジェクト完了報告書

昔のいたある会社に「プロジェクト完了報告書」というドキュメントがありました。

「そのプロジェクトで得られた教訓を(自分も含めた)組織の別のプロジェクトの改善につなげる」ために作られ、プロジェクトの情報、経緯、様々な指標をまとめられているものです。
当時は規模や金額など一定条件のプロジェクトに対し、作成することが義務付けられていました。

ただそれが当時は有効に活用されていないと感じていました。

書くタイミング

1つは書くタイミングが遅いため、有用な情報が記載されにくい問題がありました。

当時、プロジェクト完了報告書は、カットオーバーやお客様が検収を終えた時など「プロジェクトの終了時」に書くことが大半でした。

そのため、「プロジェクト完了報告書」を書けるほど最初から最後まで携わり、内容を理解しているリーダーは、すでに別プロジェクトに参画していることが多くありました(そしてそういうリーダーは新しいプロジェクトでも忙しくなっています)。
それが原因で「プロジェクト完了報告書」を書く時間もなかなか取れず、さらに時間も経っているので記憶も薄れがちでした。その結果、既存資料からの抜粋などが多くなり、教訓や改善ポイントなどが抜け落ちてしまいます。

#リーダー以外のメンバーも、プロジェクトやお客様の目的、経緯、改善ポイントなどを把握できていることが望ましい形だと思います。しかしながらインセプションデッキとか書くと驚く程、違うってのも普通にあるので、これはこれでなかなか難しい問題です。

「終わってから作る」ことが原因の1つなので、ウォーターフォールであれば工程毎に数字や背景、ノウハウなどをサマリーして「少しずつ」完了報告書を作っていけば良かったと今になっては思います。

活用の仕方

守秘義務などもあるのでしょうが、ポイントとなる情報などは公開されていないことが多く、あまり有効に活用できませんでした。
「何かあって情報漏洩と言われたら困る」というディフェンシブな発想からか、隠さなくても良いノウハウなども書かれていないことも多くありました。

結局、当時の感じたところは以下のようなものでした。
作る側:(管理する側から)やいやい言われてうるさいから仕方なく作っている。
管理する側:これまでプロジェクト完了報告書を未提出のプロジェクトがありますた!が、注意したところこれだけ提出されるようになりました!!(えっへん)

その完了報告書がどれだけ他のプロジェクトに活用されたかを評価の指標に組み込んだり、作り手にフィードバックすれば良かったとこれも今になっては思います。

そのアクションや成果物の目的が何のためで、それが「期待通りに活かされているか?」「より良い活かし方がないか?」などを計測したり考えていかないと、せっかくの良い施策もムダになってしまいます。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

※アイキャッチ画像:http://www.flickr.com/photos/printhousecorp/6543078999/

burn-down-chart

バーンダウンチャートの疑問を聞いてみた

先日社内勉強会で「バーンダウンチャート」について説明する機会がありました。

その際の資料として@ryuzeeさんの「[Agile]バーンダウンチャート虎の巻(資料公開)」を使わせてもらいました。
#@ryuzeeさん、ありがとうございました!

その資料で自分なりに疑問に思ったことを@ryuzeeさんとやり取りした内容を「誰かの役に立てば」と思いまとめておきます。

質問1:バーンダウンと自己組織化の関連

※スライド11枚目:「バーンダウンから分かること」
「チームが自己組織化されていて~」とは具体的にどのようなことでしょうか?バーンダウンの進み方と「自己組織化」の紐付けがイメージできませんでした。

質問1に対する@ryuzeeさんのお話

チームがスプリントを主体的に行なっているかどうかが分かります。
他人からの指示を欲してしまうチームは、一般的には問題が発生してもすぐ対応しないので、スコープ調整が行われず完了しないスプリントになったりスコープ調整が後半になったり、そもそも経験から学ばずに、毎回似たようなバーンダウンを描いたりします。

質問2:理想線の引き方について

スプリントの見積総時間とスプリント終了日を結んだ場合、チームの1日辺りの理想時間と乖離すること(※1)もあると思います。
この場合は「詰め込みすぎ」なので「スコープを見直す」アクションにつながると思っていますが、この理解にコメントあればお願いします。
(※1)3人チームで、1人の開発時間は6時間/日の場合、18時間/日のパワーです。一方、理想線の傾き(1日の時間)は24時間とした場合、毎日6時間のオーバータスクになってしまいます。

質問2に対する@ryuzeeさんのお話

その理解であってます。
ただし、チームにはキャパシティというのがあります。これはチームメンバーの稼働可能時間の合計値ですが、それは一般的には就業時間の6割程度です。

したがってスプリント計画第二部が終わって計画ができた時点で、まずチームの総キャパシティの中に合計タスク時間数が収まっているかは確認すべきポイントです。
既にこれを超えているようであればプロダクトオーナーと議論して順位の一番低いストーリーから順に外します。
またチームがタスク出しになれていない場合は、2割くらいの追加タスクが出るのが普通なので、これも見込んだほうがよいです。

結果として、理想線のスタート地点はキャパシティの下側になければいけません。

質問3:残時間の傾きが大きくなった場合の原因

※スライド21枚目:早期学習パターン
残時間が44→26のように(スコープの調整等がなく)ガクッと下がった場合、以下のことが考えられます。
A:チームがレベルアップして当初見積より早くそのタスクが終わった
B:チームが残業した

前者であれば良いのですが、後者であればそれは持続可能でないと思います。
そういう場合に「最終コミット時間」を別にプロットすることで「原因を明らかにする」のが良いと思っています。
この理解にコメントあればお願いします。

質問3に対する@ryuzeeさんのお話

本当は最終コミット時間プロットしなくたって振り返りで分かりますけどね。
本質的な原因を明らかにしなければいけないのはその通りです。
往々にして成果達成に対する強いプレッシャーがかかってたりします。

質問 4:複数スプリント間での比較

※スライド35枚目:複数スプリント間で分析する
スプリントで作る機能の難易度の違いを考慮する良いアイデアはあるでしょうか?
「ふりかえり」でチームでディスカッションして明らかにするのが1つの方法と思っています。

質問4に対する@ryuzeeさんのお話

難易度の違いはストーリーポイントと、ばらしたタスクに明確に現れるはずだと思います。
そのためにチームで見積るので。
それが着手してみて初めて難易度がわかるようであれば、そのバックログ項目はまだReadyではないです。

最後に

バーンダウンチャートを始めることは割と簡単にできます(おそらくガントチャートと並行してもできるはずです)。

実際にやってみるとガントチャートだけでは見えなかったチームやプロジェクトの色々なことが見えて来ます。
もし何も見えなかったらそれはそれで無茶苦茶素晴らしいチームか、何か隠しているかです。
それらの分かった情報をもとに改善のきっかけにしていくこともできると思うのでまずはやってみてはいかがでしょうか?

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

朝会

朝会と夕会

[仕事]「可視化」と「見える化」で書いた勉強会で、「朝会」について考えることがあって、その後もチームで話すことがあったのでちょっと書いてみます。

今のチームでも、もちろん朝会をやっています。
そのやり方はほぼプロジェクトファシリテーション実践編 朝会ガイド(※リンク先はPDF)の通りです。

以下は、(別のチームも含む)過去の朝会でやった工夫です。

司会者持ち回り

最初はリズムを作るためにリーダーがやっていたのですが、リズムができてからは司会者をメンバー持ち回りでするようにしました。

背景として、若手メンバーにチームの朝会ではありますが、場を作って進めることを学んで欲しかったというのがありました。

自分が実際にその役割(ここでは朝会の司会)を実際にやってみないと、考察や気づきには至らないこともあります。
また実際にやってみることで新しい適性に気づいたりして、レベルアップにもなりますので「いまいち、若手が積極的でない…」という場合にはやってみても良いかもしれません。

プチふりかえり

当時はなかなか頻繁な「ふりかえり」がなかなかできませんでした。
社風的なこともあるのかもしれませんが「プロジェクトが終わった後に一気にやる」というアンチパターンな形が多かったように思います
#それでも「無し」よりはマシですが。

当時のチームは新人もいたので「頻繁なふりかえりとそこからのフィードバック」はきっと効果があると考えていました。
そこで、「朝会の延長戦」的な感じで、毎週金曜日の朝会の後に「プチふりかえり」と称して少し話し合うようにしました。

朝会と同じ場所ですので、チームの目の前には「今週にやったタスク」「次週にやるタスク」がタスクボード上に付箋としてあります。
#その会社の標準的なタスクボードでは(カンバンとは違い)時系列で作られていることが多いのです。

そのタスクボードをインプットにして、KPTをサッと話しあうようにしました。対象期間は1週間ですので、15分程度ですぐに終わります。

「ふりかえり」単独の場合「今回はちょっと忙しいからスキップしようか」となることもありますが、朝会はスキップされることが少ないので、このプチふりかえりを安定して行うことができました。

改善する点としてはKPTを書き出していなかった(話すだけ)ので、ここは書いておいた方が見えるようになるので、その点はこれからの改善点です。

退社時間の表明

「今日は19時に帰ります!」と宣言します。

こうすることで「今日やること」とのバランスが分かります。
「今日やること」が残業そうな量なのに「定時で帰ります」と宣言していると、タスクが漏れていたり、勘違いしているのでは?と気づいたりします。

また表明することでその表明した人にも良い意味のプレッシャーがかかり(いつも以上に)集中できます。
#「あれ?○○さん、19時過ぎたよ、帰らないの?」なんて声がかかって来ることもありました

さらに他のメンバーとのスケジュール調整ができるようになります。

「19時に帰る」と表明したメンバーに仕様の相談、レビューなどをお願いする場合、18時半ではなく、15時とかにお願いする必要があることに気づき、そうであれば、タスクの順序を変えるなどというようなことができます。

定時の予定を(プロジェクト状況次第ではありますが)ちょっと気をつければ防げた的な予期せぬ割り込みタスクで影響を受けるのが好きでないので、このルールは助かりました。

夕会

同僚が(朝会と)夕会をやっていたチームにいたこともあって、それについても考えてみました。

予定通り行っていないことやハマっていることなどの心配事を夕会で言う(はき出す)ことができるので、退社後から朝会までの間ではありますが、あれこれ気にかけることが少なくなります。特に週末などは効果が高そうです。

ちょっとやればクリアできそうであれば、夕会後、ペアプロなどで対応すれば、スッキリしてその日のタスクを終えることができます。

また「本当に今日それが必要なのか?」「(残業が必要でも)他の人とペアでやったりすることで早くできないか?」などを考える場にもなり結果的に不要な残業も少なくできます。

ここで大事なのは、2交代制(でも人が変わらない)のプロジェクトのように「後半戦(長時間残業)開始の合図」にしてはダメということです。

特別な準備もないのでまずは朝会をやってみる

朝会はお金がかからないですし、特別な準備もそれほどは不要です。

もちろんより効果を出そうとすれば、見える化された情報は必要になります。
が、まずは集まって「リズムを作って」「隣の人が何やっているか知る」ようにしてみてはどうでしょうか?
そうすると「もっとこういう情報が見えた方が朝会が効果的になるよね?」と改善していくと思います。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

※アイキャッチ画像:http://www.flickr.com/photos/practicalparticipation/4055214381/

見える化

「可視化」と「見える化」

先日「プロジェクトファシリテーションパーティ2012」に参加してきました。
#参加した皆さん、お話していただいた皆さん、スタッフの皆さん、ありがとうございました!

参加したセッション

マルチセッションだったので、迷いましたが、以下に参加しました。
パーティー2:「実録!プロジェクトファシリテーションのWEBサービス開発運用現場への適用記」
パーティー4:「ようこそ“プロジェクトマネジメント保健室”へ!」
パーティー5:「上司・同僚にファシリテーションの重要性を体験してもらうワーク」

特に「実録!プロジェクトファシリテーションのWEBサービス開発運用現場への適用記」のセッションは「いつかお会いしたいなぁ」と思っていた方々の一人である、こしば(@bash0C)さんということもあって強く印象に残っています。

ここでは「ふりかえり」「見える化」「朝会」について「話す」→「グループでディスカッション」という流れで、@fkinoさんと@daiksyさんと同じテーブルでした。

お二人とはコンテキストは(多少)違うものの、マインドの部分は近いように思えたので、話が盛り上がりました。
そしてこの日一番の気づきもこの会話の中で出てきました。

一番の気づき

「『可視化』と『見える化』は違う」という@fkinoさんの言葉でした。ディスカッションした末の私の解釈は以下のようなものでした。

「可視化」と「見える化」は共に情報や事象を「見えるようにする」という点では同じです。
ですが「可視化」は「見えている」までで止まっています。
一方「見える化」は「見えている」情報や事象に対して【フィードバックができる】状態にあります。

【フィードバックができる】状態とは?

「こうしたらもっと良くなるよ」などのアドバイス、「こういう風にして欲しい」というより良くするリクエストをチームや関係者の間でやり取りできることです。
それには、場作りを含めた雰囲気、コメントをサクッと付けることができるツールだったり、プロセス、そのアドバイスを受け入れる姿勢などが関係してきます。

時々、上手く行っていないチームやプロジェクトに対し、この違いを分かっていないちょっと偉い人がテコ入れにやって来て「まずは『見える化』しろ」というシーンがあります。

その時にこの「可視化」と「見える化」の違いを意識していないと「よし、これで『見える化』ができた。大丈夫だ」と自己満足で終わってしまいます。

今まで見えていなかったことが見えるようになったのは最初の一歩としては良いのですが、その「可視化」されたことへフィードバックする環境ができていないことが多くあります。
つまり「見える化」できていないわけです。

これではチームはやる仕事(=可視化するためのタスク)が増えたにも関わらず、自分達の状況は改善しないことになり、ますますモチベーションが下がり、バラバラになってしまいます。

というわけで、「見える化」を目指す場合、「見えるようにする」のと「フィードバックができるようにする」の2つを意識する必要があるということでした。

「可視化」だけではうまく行かない

今まで、こういう「見える化」を何度もやってきた中で、うまく行った時、改善が出来た時は、この「フィードバックできる」環境に意識して、もしくは自然になっていたように思います。
一方、「なんかうまく行かないなぁ」という時には「可視化」で止まっていたことが、はっきりと分かりました。

他のセッション、懇親会でも色々な人の考えを聴いたり、自分の考えを整理して話すことができたりして、良い時間でした。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

※アイキャッチ画像:http://www.flickr.com/photos/caroslines/1371200717/

チームへのRedmineの効果

Redmine Advent Calendar jp 2011の25日目になります。

#余談。本場のAdvent Calendarは「24日まで」を窓を開けていくことでクリスマスを祝うそうです。一方、【技術系】Advent Calendarは「25日」まで書くことが多いようです。

というわけでトリなわけですが、相応しい壮大な話ではなく「チームへのRedmineの効果」について書いてみます。

普段よく言っている「Redmineの効果」

先日、社内で「Redmineを活用したタスク管理改善セミナー」というのをしました。

Redmineの簡単な紹介から始まり、事例紹介を交えてそこから得た自分なりのメリットやTips、考え方をお話しました。
後半は参加者の方と「こんなことで困っていませんか?」などのディスカッションをしました。

その中で「Redmineを使った効果はどういうものがありますか?」と質問がありました。
私はたいがい「Redmineは【見える化】【トレーサビリティ】【開発リズム】を強化してくれるツールです」と「ツールを入れることが大事ではなく、そのプロセスやマインドを変えていくことが大事」の2つを合わせて答えています。

最近はそこに「教育に伴うチーム力向上の効果もあるかも?」と思い始めました。

教育効果があると思ったシーン

あるチームは、割とエンジニアとしての経験年数が少ない人が多かったのですが以下のような変化が出てきていました。

  • 1:チケットの書き方が(良いレベルで)揃ってきた
  • 2:(チケットに書く)設計やそれまでの経緯を共有することができて、設計の技術が上がってきた
  • 3:コードレビューの結果を共有することができて、実装のレベルが上がってきた

1:チケットの書き方が揃ってきた

親チケットに要求をプロダクトオーナーが中心となって書いています。
その要求に対し「どう作るか?」と言った子チケットは担当するメンバーがそれぞれ自分で考えるような開発プロセスで回っています。

最初の頃はそのチケットの粒度が大きすぎたり、内容が抽象的過ぎることもありました。
また、粒度が大きすぎることも原因の1つとなって見積もり(予定工数)の精度が低いこともありました。

そんな状況からイテレーションを繰り返していくうちに、他のチケットの良い粒度を参考にしたり、自分が書いた粒度が大きいチケットを苦労しながら片付け、それをふりかえることで、分かりやすいチケットの書き方がチームの中で浸透していったように思います。
ここで言う「分かりやすい」とは自分以外にも「チームが見ても分かりやすい」ということです。
「チームが見ても分かりやすい」ということはチケットの引き渡しをやりやすいということにもなります。

2:設計の技術が上がってきた

1はチケットの書き方の粒度のお話ですが、こちらはチケットに書く内容の話です。

チケットに「この設計はどういう考えで、この結論、仕様に至ったか」を書くことがあります。
特に複雑な要求や仕様の場合「A案、B案、C案と考えたけど○○な理由でB案で行く」という風に議論の過程も書くこともあります。

ちなみに「設計書」と呼ばれるドキュメントには「どういう設計になっているか?」は書かれていますが、「なぜこれになったか?」はあまり書かれていないと思います。
それ故に次にその機能を修正する際に余計なリソースがかかっているように思います。

そういうチケットを担当することで、設計の仕方や思考の経緯を学ぶことで設計の技術を上がってきたように思います。

3:実装のレベルが上がってきた

コードレビューはRedmine Code Review プラグインを使っています。

それまでのやり方(コードをプリントアウトして行ったり、レビュー指摘内容はExcelに書く)に比べると、効率が良くなっていますし、指摘内容の共有をしやすくなっています。
もちろんレビュー指摘もそのままチケットに登録されるので「どのように対応したか?」まで共有しやすくなっています。
そのため若手や新しく入った方が、過去にどのようなレビュー指摘があったかを見ることでそのようなコードは書かないようになってきました。

またそうなることで、コードレビューアの負担も軽くなり、より有効に時間を使うことができます。

チーム構成やその入れ替わりの頻度などによっては、Redmine(ITS全般でも同じことが言えますが)のこういう側面に着目してみても、使うことによるメリットは大きいと思います。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Redmineのチームでの使い方を紹介

Redmine Advent Calendar jp 2011の10日目になります。

私は(プラグインをガリガリ作ったりしてないので)「自分達のチームでの使い方」をいくつか紹介します。

コンテキスト

・チーム:東京と大阪で別れて10人ちょっと
・作っているモノ:社内向けのFWや色々なツール群
・Redmine以外に使っている主なツール:Jenkins、SVN、youRoom

親子チケットの使い方

※これは「RxTstudy第2回でお話した内容」が元になっています。
「親チケット」を「機能(feature)」、「子チケット」を(そのfeatureを実現する)「タスク」として使っています。
親チケットは以下のテンプレートで書いています。

【背景】
※その機能の背景やなぜ作るようになったかの経緯などで要件定義の一部。
【ユーザーメリット】
【機能スペック】
【影響範囲】
【テスト時確認内容】

これくらい書いていると、設計や実装の方針に迷った時などに「そもそもこれが誰にとってどんな風に嬉しいのか?」がぶれることなく開発に集中できます。

またチームの進捗を見る場合、バーンダウンチャートと併用して親チケットの状態で見ています。
具体的には「親チケットのみを表示する」カスタムクエリを作っています。

親チケットの進捗率は、子チケットのステータスと進捗率に連動しているので、メンバーが親チケットを更新する手間なく確認できます。

レビューアの話

2つ目も第2回のRxTstudyでお話した内容ですが「レビュー」の話です。

「ステータス」にデフォルトでは“レビュー中である”ことを知らせるステータスがなく、これの表現方法を考えていました。

今のところ、チームでは以下のように運用しています。

【準備】

1:カスタムフィールド「レビューア」を(リスト形式で)設定
リスト内容はチームメンバー
2:ステータスに”レビュー待ち”を追加
3:カスタムクエリで「レビュー待ち一覧」(ステータスが”レビュー待ち”)を用意

【運用】

チケットの担当者が(コードレビューが可能になれば)ステータスを”レビュー待ち”にします。
「レビューア」にレビューして欲しいメンバーを選択します。

「担当者」を(レビューする際に)レビューアに変更して、レビューが終わったらまた元に戻す運用も考えました。
それでは自分のチケットの行き先が分からなくなり、「自分のチケット」へのコミット感が失われてしまうと考え、このような運用にしました。

「担当者」を変えないことで、担当者が自分のチケットを楽に追うことができ、レビューアに対して「滞留してるので、早くレビューしてくださいよ」を声をかけやすくなります。
※そんなことしなくてもレビューが消化できるのが良いのですが。

レビューアにとっても「自分のチケット」と混ざることはなく、分かりやすくなります。

プライベートチケットの話

3つ目は「プライベートチケット」に関した感想です。

「前略、private issue 使ってみました。あるいはITSの黒魔術とは何か」(@ハードコイルド・ワンダーランド)を読んで、(黒魔術的な面では同意の上で)「こういう時、プライベートチケットは有効かも?」と思いました。

それは親チケットなどで機能仕様などを書いている途中、何らかの理由で作業を中断する時にプライベートチケットとすることです。

途中かどうかメンバーには一見して分からないので、そのまま公開されているとそれを見たメンバーから意見やツッコミが入ったりします。それをプライベートチケットとして見せないことで、このムダな時間を防ぐことができると思いました。

RxTstudy

最後に宣伝です。「RxTstudy」というRedmineやタスク管理を考える勉強会が大阪にあります。
スタッフの1人としてお手伝いしています。
※過去2回の内容などはこちらで。

その第3回が2012年2月4日(土)にあります(ATND)。

充実した内容になるかと思いますので、この時期に関西に来る方は参加してみてはいかがでしょうか?

次のエントリは

次は@suerさんです。よろしくお願いします。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Share

インセプションデッキを書いてみた

社内で「アジャイルサムライ~達人開発者への道~」の読書会をやっています

この読書会。色々な所(道場)があります。詳しくはGitHubにまとめられているWikiをご覧ください。

読書会で作ってみた

その読書会で、(この本の特徴の1つでもある)「インセプションデッキ」を作って発表しました。

最初に読んだ時は「あぁプロジェクト憲章とか計画書かな?」と思っていました。

いざ書き始めてみると、答えに窮する部分が見つかったり、分かっていたつもりでも文章にするとボンヤリとしていてフワッとしていることが明らかになってきました。

チームでもやってみた

(この読書会とは別の日に)チームの何人かと「エレベータピッチ」「トレードオフスライダー」を「みんなはどう思います?」と議論しました。

すると、(幸いにして根本的にはそれ程違いはなかったのですが)それぞれの想いや細かな優先順位の違いがありました。このチームで携わっているプロジェクトはすでに1年半ほど経つのに、それでもこれだけ違うというのは面白い発見でした。

インセプションデッキは、プロジェクトの初期段階に、できればメンバー全員で、最低でも核となるメンバーを含めてやった方が良いと感じました。

マネジメントが主な業務となるプロジェクトマネージャや最後までいない上流工程のコンサルタント的な方が「プロジェクト計画書」なるものを作ったりしますが、それがメンバーに浸透するかというと、まずほとんどしていません。
だから開発の山場で「そもそもこれは何のためなんだ?」となったり、設計方針がぶれたりすることもあります。

「プロジェクト計画書」でも浸透できるようなプロセスが組み込まれていると良いのですが、実際は前述のような人が書いて、メンバーには「読んでおいて」(そしてメンバーは多忙なので読む余裕はない)で終わっていると思います。

その点、インセプションデッキは気軽に始めることができ、チームのみんなで作っていくように組み込まれています。
#その質問の内容自体は本気で考えると手軽ではなく、むしろタフクエスチョンなのですが。

常に意識する、継続的に見直すことができれば、判断に迷った時に「インセプションデッキに照らし合わせるとこうだ!」と言え、それが正解か間違えているかは別としても、少なくとも迷走して疲れ果てることは少なくなると思いました。

セキュリティ的に問題なければ10枚程度のスライドなので壁に貼りだしても常に見えるようにしても良いくらいです。

こんなイベントもあります

2011/09/18(日)には東京で他流試合という名のイベントもあります。社内の読書会メンバーが参加してLTもするので、どんな内容だったか感想を楽しみにしています。

もう1つ、2011/10/08(土)にある「AgileTourOsaka2011」では、監訳者の1人西村直人(@nawoto)さんがインセプションデッキのワークショップをするのでそちらも参加したいです。
日々のタスクに追われていて、「そもそも自分はなぜそれを作っているのは?どうなるのが目的??」というのを意識できないかもしれませんが、まずはできるところだけでもやってみてはいかがでしょう?

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。
※アイキャッチ画像:http://www.flickr.com/photos/acain/5418547739/

「レビュー」タスクの見積もり

1~3年目のような経験の浅い方が見積もる「レビュー」タスクの工数について思うことがあります。

レビューはある成果物…提案書や設計書、ソースコードなど…を個人/複数のメンバー…たいていはプロジェクトリーダやプロジェクトマネージャなどの上司や有識者…と行います。
成果物の内容や分量にもよりますが…例えば、(類似機能がない)新規の外部設計書…だいたい「一発合格」はなく、いくつかの指摘事項があるものです。
指摘事項は「て・に・を・は」や語尾の不統一…こういうのはセルフチェックでつぶしておきたいものです…から、設計内容自体に対するものまで色々です。

それらの指摘に対して、対応要否の判断、要であれば対応が必要になります。
例えば「語尾が不統一」と指摘されれば、見直して修正する必要があるでしょう。

また「ここのA機能は、XXモジュールから流用すると書いているけど、YYという視点では確認した?」と質問があり、自分が「YYという視点」で確認していないのであれば、調査(とその結果の報告)が必要になります。

というように考えると、レビュー後にもそれなりの工数が必要になります。また指摘事項によっては、再レビューとなり、そういう工数も必要になります。

そういう特性の「レビュー」タスクを経験の浅い方が見積もると「レビューは一発合格、あっても文字の修正ぐらい」というイメージとなっているように思います。
#考え方として「レビューでの指摘事項はありません!」という気概で望み、目標にするのは良いことです。

私が「レビュー」タスクの見積もり工数を(作業前に)確認する場合は「どんな作業イメージしてる?」と問いかけるようにしています。
たいがいは「レビュー受けた後はちゃちゃっと修正して…」と答えが返ってきます。
 
そこで、過去に自分のレビューを「そんな感じ(ちゃちゃっとで済む)だった?」と思い返してもらい、その根拠や妥当性を深掘りしていきます。
その結果、なるほど~と納得できるならそれで進めてみます。
#チームとしては多少バッファを持つようにしますが。

これらレビュー後の対応工数、タスクはスケジュールに明確には乗らないことも時々ありますので注意が必要です。
#「レビュー」自体に紛れ込んでいたりします。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Photo credit: ivyhouse.jesse via Visualhunt / CC BY

こんなPMOはいらない

私のキャリアの中に、数年ですがPMO(Project Management Office)的な経験があります。
#PMOの役割や定義も組織においてまちまちなのですが…。

当時はそういう組織がなかったので、ホント何でも屋的に色々やっていました。
その時の経験から出た思いは「現場がスムーズに(かつ楽しくできれば尚良し)仕事をできるように環境を作り、PJのQCD(メンバーの満足感も含む)を成功させること」です。

他のエントリにも色々書いていますが、ベースはいかに「みんなの生産性を高めることができるか」だと思っています。
コミュニケーションの土壌を作るために、キックオフ宴会やランチMTGをしたり。
#最近では、「飲みニケーション」に否定的な風潮もあったりしますが、やりようによっては素晴らしい関係を築くきっかけになると思います。

設計、開発、テストなど各工程をスムーズに進め、メンバーが無駄なパワーを使わないで済むために、バージョン管理やBTSなどのインフラ周りの構築やその利用ガイドの策定もしたり。
(小さなPJの場合ですが)できるだけ横串で仕様を理解して、個別最適になりがちな設計を全体視点からフォローしたり。

時には(あまりあって欲しく無いですが)、現場を知らないPM、管理部、(あまり理解の無い)上司から「このPJについてどうなっているか報告しろ」という、PJの成功とは全く関係のないタスクからチームの消耗を防いだりもしました。

一方、ある現場で見たPMOは、品質指標や課題件数、その進捗を過剰なまでに詳細に分析して、見栄えの良い円グラフや折れ線グラフにして、PJルームに張り出す…なんて方もいました。

「見える化」では、そういうのも大事ですが、それで終わるんじゃなく、踏み込んでの「こうしてはどうだろう?」とPJを進める/改善する/(トラブルを)防止するアクションが必要かと思います。
#そんなのに限って「分析したところ遅れています。原因分析と対策を報告してください」なんてメールを多忙な現場PLに投げたりします。

最近はPMO的な仕事から離れていますが(あまりうちの会社にそういう役割はないみたいで…)、反面教師にしないとなぁと思ったので備忘録として書いておきます。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。

Igor Miske

difference-of-the-elements-required-for-development

新規開発と保守開発に求められる要素の違い

システム開発の要素の1:新規開発(スクラッチ)2:保守開発(機能追加)があります。

#保守開発は派生開発とも呼んだりするようですが、ここでは保守開発とします。

新規開発はその名前の通り「一から」システムを作り上げていき、生み出されるソースコードは全て新規で、バージョンもピッカピカの1.0です。
保守開発は既に稼動しているシステムに、新しく機能を追加したり既存の機能を改善するものです。

開発者にも新規開発、保守開発に対する得手不得手(適性的なもの)があるようです。
今回はこの新規開発、保守開発という2つの要素に、それぞれ開発者に求められることは何か?を書いてみます。

新規開発に求められる開発者の能力は何か?

1つは、要件仕様、外部設計に基づいてソースコード、機能を「生み出す」能力です。それは0から1にする感じで、その後の保守開発での1から5にするよりも色々なパワーが必要になります。
もう1つは、プログラムやシステム全体の統一感を持たすためにトータルコーディネート力といったバランス感覚みたいなものです。

保守開発に求められる開発者の能力は何か?

次に保守開発についてです。
新規開発(スクラッチ)とはまた違う意味でシステム全体を見る俯瞰的な視野が必要になります。
追加、修正したことで、既存機能が動かなくなり、ユーザが不利益を受ける状況は、避けなくてはなりません
そのため、修正箇所以外、できればシステム全体を完璧でなくても(薄くでも)広く知っておく必要があります。

もう1つは既存資産(ソースコードや環境周り)のどこを使えて、どこは使えないのか、またある程度修正することで流用できるか判断する能力です。

最後はその既存資産を有効利用する能力です。
2つ目の「判断する能力」と似ていますが、既存資産はメリット以外にも、過去のしがらみや既存の制約等ももたらすことがあります。
その中で、自分達のルールややり方を無理に押し通さず、既存資産の流儀に合わせるということです。
もちろん技術的負債を解消することも大事ですが、そのバランスを取りつつ進めていくというイメージです。

ある「やりたいこと」の実現方法はソースコードとしてはそれぞれメリット、デメリットを持った方法が複数あります。その状況で「こちらが得意」という理由だけで、システムの流儀からはみ出すと結果的にコストが大きくかかってしまったり、その後の開発のスピードにも影響が出てきます。
次にソースコードを読んだ人が、流儀に反したコードのため「なぜこうしたのか?」と背景が分からず、混乱を招いてしまい、その理解にムダなパワーを使うことになるからです。

どっちが良いとかでなく、その特徴を活かした開発をする

既存資産を使えるにもかかわらず、自分で一から組み上げた結果、既存資産との整合性が崩れてしまい、品質も悪く、保守性の低いものになってしまうシーンを時々見かけます。

逆に保守開発なら素早くポイントを見つけ、流儀に沿ったやり方で短時間で影響も無く仕上げるのに、新規開発を任せると、創造性の差なのか、ピタッとキーボードの指が止まってしまうシーンも見聞きします。

それぞれの特徴を考えて、適材適所でプロジェクトを進めていき、お客様や関係者はもちろん、携わるエンジニアもハッピーな気持ちで良い仕事ができるように意識したいものです。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。
※アイキャッチ画像:http://www.flickr.com/photos/raminf/2907291517/

BugReport

テストにおけるバグレポートの書き方

あるプロジェクトで「テスト工程の管理全般」が大きなミッションとしてありました。

具体的には、テスターが起票したバグレポートを確認し、「する/しない」「するのであれば、いつまでにどのチームがやるか」などをスケジュールやリソースの状況を見て判断することです。

それらのバグレポートを管理するツールとしてRedmine(使い方はこちら)を使っていました。

そのバグレポートの書き方、テスターとしてのTipsのようなものを少し書いてみます。
#再現手順、発生したソースのリビジョン、可能であればエラーログやスタックトレースを書くなどは当たり前の前提です。

1:実装者の感情面を理解して書く

その機能のプログラマとテスターが異なる場合、何度か同じようなバグに遭遇しているとレポートには「同様の機能でも同じバグが出ていました。きちんと内容の再チェックをお願いします。」などと書きたくなったりします。

実際には正しい行為なのかもしれませんが、重箱の隅をつつくようなバグを見つけ、バグレポートを無慈悲に起票するテスターの存在はプログラマーにとって気持ちの良い存在で無いと感じる人も多いようです。
正確な比喩ではありませんが、(例えそれが正当な内容であっても)自分の作品に「ケチ」をつけられるわけですから。

忙しかったりするとついテスターに向かって「テストのやり方が間違っているんじゃないの?もう一度確認してみてよ!」と感情的に答えたりして、テスターも「(品質の)いい加減なプログラムだからバグになるんでしょ」と応酬が始まってしまいます。こうなると品質の維持、担保などできません。

なので以下を参考にしたりして配慮した書き方をしてみませんか?という提案です。

2:技術面では客観性と主観を混ぜずに書く

1や3に通じるのですが、テストをしていると「あれ?自分の理解ではAと思うが、Bになるな」ということがあります。
そのような場合、バグレポートに客観的に書く部分と主観の部分が混じってしまうことがあります。

管理者としては、客観的な事実(テスト結果)を過不足なく知りたいわけです。
それを読み取れにくくなる主観と客観が入り混じったバグレポートは「テスターへの確認」という余計な時間が取られる存在になります。

もちろん「こう思う」とか「これでテストケースが失敗しているのだから、類似の機能も見た方が良いと思う」という主観を気づきとして書くのは非常に良いことで、問題なのはその書き方です。

3:本来どうあるべきかも書く

テストケースには「~となること」と合格条件が記述しており、「本来どうあるべきか」が明確になっています。

テストフェーズ中では(偶然にせよ)テストケースにない操作の結果、明らかにおかしかったり、「これは仕様と違うのでは?」という動きを見つけることもあります。
その時のバグレポートに「これこれが発生」という事象だけではなく、「本来は~であるべき」とあるのが良い書き方だと考えています。
その根拠となる設計書などドキュメントへのポインタがあればより良いです。

4:修正時に「なぜ?」(真因)を書く

テストフェーズ全般のTipsとして、修正時にバグレポートに対応内容などを書き込みますが、その時に「修正しました」だけでなく「なぜ」そのバグが発生した(混入した)のかという理由もあると未来の類似不具合の防止にもなります。

例えば、条件分岐の書き方を間違えていたとして、それが言語仕様を理解していなかったことがその根本であれば、同様の記述が無いかgrepしてみたりするアクションをするのも良いと思います。

また、設計書の記述を誤解していたのであれば同様の誤解をしていないかどうか、他のメンバーに確認してみたり、言葉なの揺れなどが見つかれば、記述を修正する必要があるかもしれません。

テストフェーズを意義あるものに

どうしてもテストフェーズは後の工程になり、スケジュールにも余裕がないことが多く、開発メンバーはそれまでのプログラム工程で疲弊していることも多々あります。
#それはプロジェクトマネジメントとしては失敗なのですが。

ただ上に書いたような点に少しでも留意すれば、品質の担保をできる最後の砦であるテストフェーズを意義あるものにできるのでは?と思っています。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。
※アイキャッチ画像:http://www.flickr.com/photos/sajith/3161725149/

ふりかえり

KPT法を使う場合に気をつけること

 以前、書いたKPT法を実際に1人やプロジェクトの「フリカエリ」で使ってみて感じたことを書きます。

※注意:この記事は旧サウスポーなエンジニアの独り言から移行し一部修正したエントリです。
 
 KPT法の優れている点は以下の3つと思います。

1つ目:サッとできる。

 紙とエンピツがあればすぐにその場でできます。

2つ目:見える化できる。

 付箋紙等を使えば「見える化」されることで、改善される感がより実感できます。

3つ目:ブレストしやすい。

 手軽に行えるので前準備も特に必要なく、みんなでやりやすく、良いブレーンストーミングができる可能性が高くなります。

KPTの難しい点

 逆に「これはKPT法では難しい」と思ったこともありました。
 KPT法では「悪かった点(Problem)」に対し「改善点(Try)」を行いますが、このTryが抽象度が高いぼやけた内容だと「なんとなく」な内容になり、そのアクションリストも曖昧なものになります。
 つまり「Problem」に対する表面的な「Try」でしかなく、『真因』まで分析できていないからです。

 製造業の現場に多い「なぜを5回繰り返す」「なぜなぜ分析」など、考えに考え抜き、その真因を導き出すのが「根本的な改善」というものです。

 ただ、(KPT法に比べ)時間がかかり、また、「なぜ?なぜ??」と突き詰めるのはパワーも必要なのでなかなかそこまで踏み込めないこともあります。

 話を戻すと「Problem」に対する表面的な「Try」を立ててみたところで、その「Try」は的外れかもしれません。

 この手の改善プロセスは、割とすぐに目に見える効果が出ないとしんどくなり、必須でも無い故に「やっぱり無駄なので、止めようよ」となりがちです。
 そのためにも、小さな成功体験で良いので、それを体験する時を導入する時の最初の目標にすることもあります。

 「Keep」も同様で「なぜそれが良かったのか?/良くできたのか?」が分からず、「なぜかな知らないけど偶然出来た」レベルでは、再現性の低い事象となります。
 その結果、習慣として定着せず、安定した高いパフォーマンスを出せなくなります。

 最初からヘビーウェイトなプロセスで深掘りするのもしんどいものですし、そもそも全ての「Problem」に対して必要があるか分かりません。そしてもちろんそんな時間もありません。

 ですので、どれを重点的に深掘りするか「見える化」するためにKPT法を使い、そこから重点的な項目に深掘りの技法を使うのが私にとってはしっくり来る改善のパターンだと感じました。