この記事は freee Developers Advent Calendar 2020 の3日目です。
こんにちは。freee でスクラムマスターをやっているichy(Takeru Ichii)です。この記事がfreee developers blogの初めての記事になります。拙い部分もあるかと思いますがお手柔らかにお願いいたします。
みなさま、スクラム開発ってご存知ですか?やっている方も多いかと思いますし、やっていたという方も多いかと思います。先に紹介したとおりスクラムマスターをやっているので私は現在進行系でスクラム開発をやっています。私が感じている世間的な印象ですが、スクラム開発は上手く行かないといわれることが多い気がします。チケット駆動開発をしているところは多いかと思いますが、スクラム開発となるとなかなか運用に手間がかかるのは事実ですし、手間のわりに改善したように感じない印象を持つ方も多いでしょう。もしくは、形骸化して本当に意味があるのかと感じる人も多いイメージです。
今回の記事では、スクラム開発の一つの成功例として私がスクラムマスターをやっているチームでどのようなことをやっているのかをご紹介し、そこから私が考えるスクラム開発で大事なことであったり、ポイントをまとめていきたいと思います。なお、書き始めたのが2020/12/2 20:45からで、あせっているのと酒のんで書いてるのでそのあたりご容赦願えればと思いあmす。
食材
なにはともあれまずは材料です。私のペペロンチーノはスーパーで手に入りやすい材料を使っているので皆様もぜひ作ってみてください。ちなみに基本目分量なので何回か挑戦してください。
- パスタ(一人前 100 - 150g)
- 今は太さ1.4mmを利用していますが、お好きな太さで大丈夫です。パスタ料理なので食べたい量をなんとなく掴んで茹でれば良いです。
- にんにく(2かけら)
- かけらで売ってるか、一房?単位でもいいので用意します。チューブタイプは楽ですが今回は使用しません。炒めの工程があるので、チューブタイプのすりおろしにんにくはちょっと扱いづらい可能性があります。
- オリーブオイル
- オリーブオイルであればたいてい何でもいいです。ただ一人前にしては量を使うのでボトルで用意しておくことを推奨します。
- 塩
- 何でもいいです。1kgぐらいのやつを適当に買っておけばいいです。
- 唐辛子輪切り
- すでに輪切りのやつがいいですが、辛味を追求したい人はちゃんとした鷹の爪を揃えるなどしてください。私は辛いのが苦手なのであまりここはこだわってません。
- 水
- 茹でるのに必要です。
- ブロックベーコン
- 具ですね。薄切りのベーコンでもいいですが、食感と食べごたえを重視してブロックベーコンを使っています。たまに小松菜とか、きのことか入れても美味しいかもしれませんね。
プランニング
私が過去在籍したチームではプランニングは以下のような流れでやることが多かったです。
- スプリントゴールの決定
- スプリントゴールにマッチするストーリーやタスクを選別
- 選別したストーリーやタスクにストーリーポイントをプランニングポーカーをつかって決定し、見積もる。
- PdM/POとDevelopersでラインナップされたストーリーやタスクを確認してスプリントを開始する。
スクラム開発をしたことがある皆さまならば経験があるかと思いますが、このプランニングという作業はものすごい時間がかかります。特に見積もりの部分は大変で、見積もりをしてみると実は必要だったタスクや前提条件となる開発が足りないなどの洗い出しが大量に発生します。スクラムガイド v2020によれば、
スプリントが 1 か月の場合、スプリントプランニングのタイムボックスは最大で 8 時間である。スプリントの期間が短ければ、スプリントプランニングの時間も短くすることが多い。
とありますが、例えば2週間スプリントで4時間はとても集中できる時間ではありません。チームの性質ややり方によりますが、私達のチームの場合は4時間拘束するミーティングはかなり厳しいものがありました。
対応策として、いくつかの要素を別のミーティングに分散させて連続体感時間を短くするようにしています。
- スプリントゴールの決定
- PdM/POとScrumMaster、Developerの代表者を集めて数スプリント先までゴールを決定するミーティングを別に置きました。直近行ったスプリントの状態(ベロシティやトピックごとの進捗)をもって常にブラッシュアップすることで先々の状態を示し、PdM/POがチーム外のステークホルダーとの折衝に利用したり、Developerが常に現在地からゴールまでのズレを意識して開発し、どのくらいこの作業に費やすのかを示せるようにしました。
- スプリントゴールにマッチするストーリーやタスクを選別
- 後ほど説明するリファインメントの中で先に決定したスプリントゴールを達成するためのストーリーやタスクを事前に選びきります。プランニングではゴールにマッチしているラインナップか再確認を行います。
- 選別したストーリーやタスクにストーリーポイントをプランニングポーカーをつかって決定し、見積もる。
- 後ほど説明するリファインメントの中で見積もります。プランニングで見積もるのは前スプリントから繰り越したストーリーやタスクのみに限定しています。
これにより、プランニングは「PdM/POとDevelopersでラインナップされたストーリーやタスクを確認してスプリントを開始する。」を最終確認するのみになり、時間自体が大幅に短くなりました。例として、自分のチームではおおよそ2,3時間から20-30分ほどに短くなりました。
各人の拘束時間も短くなるので複数プロジェクトに参加しているステークホルダーも巻き込みやすくなるので、情報を展開しやすくなり、その点も良い効果として現れていたと思います。
下ごしらえ
さて、材料が集まったところで食材を切っていきましょう。まずはにんにくです。まずはにんにく2かけらの皮を剥いていきます。乾燥した皮と、その下の薄皮みたいなのをむけばいいです。薄皮がわからない人はとりあえずツルンとしたらそれでいいです。
剥いたにんにくのヘタ?をとっておきます。いい感じに切ってください。
にんにくを玉ねぎのみじん切りの要領で切っていきます。だいたい2,3mm角ぐらいで切っていきます。
みじん切りしたら包丁の先端の背を支点にして刻んでいきます。普段のストレスをいい感じに刻むような要領で刻んでいきます。私はだいたい2-5分ほどこの作業を繰り返しますが、卸にんにくにするような必要は無いです。
刻み終わったらなんかいい感じの量の塩を刻まれたにんにくの山にふりかけます。小さじ1/2ぐらいでしょうか。ふりかけたら包丁を使って軽く混ぜていき、1,2分ほど放置します。
放置したにんにくが浸透圧で水っぽくなったらアルミフライパンにひとまず移しておきます。
では次に具となるベーコンを取り出しましょう。スーパーで売ってるブロックベーコンを半分に切り分けます。使わない半分は夜のおつまみとかで食べてください。私は翌日のペペロンチーノで消化されます。
切り分けたベーコンを更に1/2に切り分けます。方向は何でもいいです。だいたい同じ味なので。たまに脂身が固まっているベーコンがあるので、その場合はいい感じに切り分けてください。そして切り分けたベーコンを3-5mmぐらいの短冊状に切り分けます。厚さが同じ方が火の通りが均一になりますがめんどいので適当でいいです。
切り分けたベーコンは後ほど使うのでまな板に放置してください。あれです、休ませるようなもんです、焼いてないけど。
デイリースクラム・リファインメント
自分の経験では、多くのデイリースクラムでは人単位で以下のような状況を聞くことがおおいです。
- 昨日何やったか
- 今日何やるか
- 困っていることはなにか
スクラム開発を行う上で、スプリントゴールを達成することが最も重要です。スプリントゴールを達成するとは、スプリントバックログ(プランニングでラインナップされたストーリーやタスク)を消化することと基本的には同値になります(場合によって別のタスクが発生することがありますが、それはイレギュラーです)。その上で、私達のチームの関心は以下の様になります。
- 今やっているスプリントを達成するために取り掛かっている作業で困っていることはあるか
- スプリントゴールは達成しそうな状態か
- スプリントゴールを達成するためにブロッカーとなっている差し込みはあるか
よって、上記をDeveloperで把握するために以下のようなデイリースクラムを私達のチームは実施しています。
- スプリントゴールの確認
- スプリントボード上の未着手・完了以外のすべてのストーリーやチケットの状況を聞き、困っていることがあるかチェックする
- スプリントボードに乗っていない差し込みや抱えてるタスクを出してもらい、素早く終わるか、次のスプリントに積むか検討する
- その他共有事項があるか
通常、タスクというと、あるトピックは誰々さんという担当のような置き方をすることが多いです。トピック担当制はその担当する人が一つのことに集中できるため作業効率を上げることが期待できます。しかし、チーム全体としてユーザーに価値を出す速度はそれでは落ちてしまうことが多いです(この直感に反した動きを体験するために「コイン渡しゲーム」というゲームがあるのでぜひ検索して体験してみてください)。しかし、私達のチームの目的は「スプリントゴールを達成すること」と、加えて「素早くユーザーに価値を届けること」にあります。個々人の作業効率はときに重要ですが、作業効率よりも素早く価値を届けるためのフロー効率を重要視したいところです。それゆえ、スクラム開発ではメンバーは多能工を目指すことが重要になります(簡単に言えば、担当をつけないように開発することと同じと思ってもらえればよいです)。メンバーが様々な種類の作業をこなせれば、一つのトピックにこだわることなく優先順位に並んだタスクを順番にとれるようになります。それにより、優先度が高い開発をちゃんと優先度順に開発できるようになり、価値を素早く細かく出すことができるようになります。これを体現するため、私達のチームは人単位でタスクの状況を聞くようにはせず、タスク単位で状況を聞くようにしているのです。
さて、次にリファインメントです。私達のチームではデイリースクラムの後すぐにやっています。リファインメントでは先のプランニングでも少し書きましたが、以下のようなことをやっています。
- 次回以降2,3スプリントのストーリーやタスクをスプリントゴールを見ながらラインナップする。
- ラインナップされたストーリーやタスクが着手可能な状態まで情報が集まっているかチェックする
- 着手可能なストーリーやタスクの見積もりをおこなう
この3点を毎日実施し、不明な情報があればリファインメント後に各Developerが調査をするようにしています。ストーリーやタスクのチェックは1分説明、2分質疑で構成することが多いです。説明よりも質疑を充実させたいので質疑は場合によって伸ばすことが多いですが、説明の1分は基本的に守ります。
このようなリファインメントを行うことにより、集中した状態ですべてのチケットを詳細化することができ、プランニングを質良く短時間で終わらせることができます。なお時間ですが、我々のチームでは15分のデイリースクラムと45分以下のリファインメントを毎朝実施しています。
炒め
ではここから料理っぽい工程です。まず先程アルミフライパンにうつしたにんにくを火のついてないコンロの上に持っていきます。オリーブオイルを底面ひたひたになるぐらいに入れます。ここでオリーブオイルの量をケチってはいけません。ここでケチるとパスタがくっついてよくわからん塊が10分後ぐらいにできます。
オリーブオイルをこれでもかと入れたら火をつけます。ここは必ず弱火です。絶対に弱火です。にんにくはものすごく焦げやすいです。この後ベーコンを炒めるのでここで強火にすると確実に焦げます。目安としては、コンロの火の先端がアルミフライパンの底面から1cmぐらい離れるぐらいの火力です。
ゆっくり温まっていくとにんにくがパチパチと鳴り始めます。そうなったらフライパンの表面の香りを嗅いでにんにくの香りがオリーブオイルオイルにうつったか確認します。香りを嗅いで食欲が湧けばOKです。わかない場合はもう少し待ちますが、にんにくが茶色に色づかないぐらいの時間で待ってください。
食欲がわいたらベーコンを投下し、いい感じに炒めます。いい感じがわからんという人は、ベーコンが切ったときより少し痩せたなぐらいのタイミングでいいです。炒めすぎると後の工程で焦げるのでほどほどです。
ベーコンが炒め終わったら火を消し、一旦コンロからおとして輪切り唐辛子を入れます。火を入れてるタイミングじゃなくていいのかという話はありますが、唐辛子もなかなかに焦げやすいので予熱で辛味を出していきます。
レビュー・レトロスペクティブ
スプリントの終わりに開催するのがまずはレビューです。そのスプリントで達成したことを点検し、PdM/POが次のスプリントゴールを検討するための材料にしてもらいます。ここに関しては特に特別なことはやっておらず、開発トピックごとの開発状況の共有が主となります。追加でチームが達成したスプリントゴールのレコグニションも兼ねてやるようにしています。
そしてその後はレトロスペクティブです。個人的にはスクラム開発のイベントの中で一番重要にしているイベントです。多くのスクラムチームではKPTなどでスプリントを振り返ることが多いですが、私達のスクラムチームではJIRAのバーンアップチャートやコントロールチャートを利用して振り返ることが多いです。
これを通して以下のような観点で振り返ることが多いです。
- バーンアップチャートで進捗が無いように見える点があった場合にチケットの分割は適切だったか?難しいタスクでは適切にチームで解決できるよう動けたか?
- バーンアップチャートでスプリントのスコープが途中で変わったように見えるが、これは事前に予見は可能だったか?
- コントロールチャートから課題の進行中で止まっていた時間が最近小さくなったが、なにか工夫した点があったか?
- etc...
上記の観点で議論を行い、その上で次のスプリントでTryできることがないかを見つけ出し、改善サイクルにのせます。このTryは毎朝のデイリースクラムでもチェックされ、Tryを放置せず意識できるようにしています。
茹で
さてメインのパスタです。十分に沸騰した水がある鍋に小さじ2ぐらいの塩を入れて溶かします。塩味が濃いのが好みの人はもっと入れてもいいかもしれません。
パスタの量ですが先程100-150gでと書きましたが、食べたい量入れちゃっていいです。多くてもまぁ180gぐらいでしょうか。湯で時間はだいたいパスタに書いてる分数-1分ぐらいで調整してください。フライパンに入れる前に硬めぐらいがおすすめです。
私がスクラムマスターとして大切にしていること
さて、スクラム開発がうまく行かないという話をよく聞くみたいな話を先に書いたと思いますが、少なくともうまくいくための手間はそれなりに必要です。各スクラムイベントにはそれなりに意味がありますし、意味を出すためには参加する全員がそれぞれのイベントに対する意味を理解する必要があります。そして、それらのイベントをより良くするための改善サイクルを回す必要もあります。
私達のチームでは開発手法の改善サイクルのためのレトロスペクティブとともに、デイリースクラム・リファインメントを除いたすべてのイベントで、イベント自体の振り返りを最後の3分でとるようにしています。この振り返りではイベントのファシリテーションをしている私に対する細かいフィードバックをもらうことが主です。イベントのアジェンダの妥当性や、タイムキーピング、盛り上がりやそもそもイベント必要などいろんなフィードバックをいただきます。このフィードバックをもとに、私(スクラムマスター)は全力でこのフィードバックに向き合って改善しており、この改善サイクルを実施したところ、メンバーはスクラムイベントに対してよりしっかりと向き合うようになりました。この経験を通じて、チームとしてスクラム開発とうまく付き合う第一歩は、着実に改善を実感できるようにスクラムマスターが動くことかと考えるようになりました。
良くあるスクラムの始め方として、負担なく少しづつ始めるというのがあるかと思いますが、負担なくという部分が「改善サイクルをひとまず抜いて」になってしまうと、結局の所効果がないという結論になりがちです。スクラム開発はその行動を真似るだけが銀の弾丸とはなりません。スクラム開発において重要なのは改善サイクルを回すことです。一朝一夕で良くなることはありません。むしろ最初は効率が悪くなることさえあります。しかし、長く改善サイクルを回すことによって、最初の頃よりはずっと良い開発の仕方をしていると実感できるでしょう。その第一歩としてスクラムマスターは改善サイクルの精神を体現しなければならないと思っています。
完成
さて、パスタが茹で上がる1分ぐらい前に最大火力で先程鷹の爪をいれたアルミフライパンを熱していきます。ここはガンガンに熱しますが、パスタの硬さとタイミングを合わせなければ行けないところなのでしっかりタイミングを見極めてください。
しっかり熱することができたらアッツアツのアルミフライパンを傾け、オイルを一点になるべく集めます。
そしてパスタの茹で汁をお玉にいっぱいすくってアルミフライパンを傾けた上流から流し入れます。
そしたらすかさずお玉でもなんでもいいのでとにかくかき混ぜます。火柱が上がることもありますがとにかく混ぜます。
混ぜ終わったら一旦火を消します。そうすると乳化が完了しています。かんたんですね。
一旦落ち着いたら強火でもう一度熱し、パスタをアルミフライパンに素早く投入し、とにかく混ぜます。このとき、パスタの水切りは必要ないのでどんどん投入してください。先に乳化したことでパスタの水分は分離することなく混ざりあります。とにかく混ぜてアルミフライパンにパスタがくっつか内容に外周に気を使ってください。
これで混ぜ終わったらお皿に盛ってください。
以上、ペペロンチーノの作り方でした。