心理的安全性について

RSGT2019のセッションで、心理的安全性ゲームをやる予定です(一日目1/9(火)15:15〜)。このゲームは、チームにおける心理的安全性を考えるきっかけづくりを狙いにしています。

さて、心理的安全性という言葉は最近あちこちで使われるようになり、優れたチームや組織にとって重要という考え方が広まっています。ここであらためて関連する研究を見直し、心理的安全性について理解を深めたいと思います。

ファン・ダン・ラーン(FDL)ふりかえりボード

https://i.gyazo.com/17f8179eec49ae9d7583b1bf3be08414.jpg

ふりかえりで使える手法としてKPTやYWTなどがありますが、新しくファン・ダン・ラーン(Fun/Done/Learn)というアプローチを作ったので紹介します。チームがやったことを、Fun、Done(またはDeliver)、Learnという3つの軸とその重複で見直します。上の図のように、Fun、Done(Deliver)、Learnのを重ね合わせた図をボード上に書いて、そこに分類していきます。

この図を見れば、経験のあるファシリテータースクラムマスターなら自分なりのやり方が思いつくのではないでしょうか。ぜひ自由に使ってみてください。以下では、私たちが実際に試してみた方法を紹介します。

  1. まずホワイトボードや模造紙に、上のFun/Done/Learnの図を描く。重なり合う領域が狭くなりすぎないよう気をつけること
  2. メンバー1人ひとりで、やったことを付箋に書き出す
  3. 付箋の内容を共有して会話しながら、図上の当てはまる領域に付箋を貼っていく。
    • 付箋を書いた人ではなく、他のメンバーが貼り付ける領域を選ぶようにすると面白いです
    • 例: 「みんなでゲームで遊んだ」→ 楽しかったのでFunの円の上半分(他と重ならない部分)に貼る
    • 例: 「モブプロでスキルを共有したが進みは遅かった」 → モブプロでモチベーションが上がったのでFun、スキル共有したのでLearn、Doneにはつながらなかったので、FunとLearnの重なる右中央の領域に貼る
    • 例: 「新たにVue.jsで機能を実現できた」→ やって楽しかったし、Vue.jsを学べたし、機能をリリース(提供)できたので、Fun/Deliver/Learnの重なる中央部分に貼る
  4. 次にスプリントやプロジェクト全体としてどうだったか、当てはまると思う領域に1人ずつ選ぶ(シールを貼ったり、ペンで印をつけたりするとよい)。スプリントならスプリント全体、プロジェクトならプロジェクト全体についての評価をする
  5. ボードを眺めながら、次のスプリントやプロジェクトではどの領域を狙いたいか話をする

進める中で、LearnやDeliverとはどういう意味なのか、疑問が出てきたり、人によって捉え方が違っていたりするかもしれません。チームとして議論して認識をそろえていくよいタイミングになります。逆に、それぞれの意味をあまり細かく定義したり、一方的に説明しない方が、ふりかえりとしての効果が高まるようです。

https://i.gyazo.com/thumb/1000/f3c228ea84b911ff9eecd7bedd3b9beb-jpg.jpg
https://i.gyazo.com/thumb/1000/a2755d9b7203260ca53c461ae9166e14-jpg.jpg

FDLはScrum Coaches Retreat in Okinawa でのアウトプットとなります。一緒に開発したチームA(Team Almost Done)のみなさん、ありがとうございました!他の参加者のみなさんも(特に実験台になってくれたチームB)、ありがとうございます。

Team Almost Done(順不同)

  • HIDE
  • indare
  • JB
  • Tee
  • yattom
  • YesNo

ある現場のチームで「チームのコアタイム」について質問を受けたので、簡単に紹介したいと思います。

『スクラム現場ガイド』で、チームのコアタイムを紹介しています。チームメンバーが全員そろっている時間を、ルール(ワーキングアグリーメントの一部)として決めるというものです。フレックスタイムのコアタイムにも似ています。

コアタイムがあると、コミュニケーションが確実にできる時間がわかります。ミーティングの予定を立てるときとか、誰かに相談したいというときに、コアタイム内に設定すれば基本的には全員そろうので、個別の調整をしなくてすみます。特にチームが離れた場所で作業しているときに、時間が節約できるようになります。(リモートはもちろん、同じビルだけどフロアが違う場合など)

さて、このコアタイムは、単にルールとして設定すべきというものではありません。コアタイムを設定するには、なんらかの動機があるはずです。外のミーティングが多いとか、個人や家庭の事情で朝遅い・夜早い人がいるとか、時差があるとか(中国チームがいるなど)。時間とコミュニケーションに関してチームが問題を感じたときに、使えるソリューション(のひとつ)がチームのコアタイムです。

スクラムチームが用いる“ルール”はいずれも、なにかしらの問題に対する解決策として採用するものです。ルールがあるほうがいいから……というだけでは、ルールを導入する十分な理由にはなりません。問題に対する解決策である以上、結果も求められます。問題が解決しないなら、そのルールはやめて他の方法を考えたほうがいい。

コアタイムを設定するときには、全員が無理なくいられる時間の共通部分を取ります。子供のお迎えの日は17時までという人がいるなら、コアタイムは17時までです。朝が弱い人がいるなら、その人が確実に来られる時間がコアタイムの開始です。時間を問わず打ち合わせが急に入る人がいたら、おそらくコアタイムは解決策にならないでしょう。

チームとプロダクトの状況はどうか(透明性、見える化)、なにが問題なのか(検査)、どんな解決策をとるか(適応)、解決策は効き目があるか(次のループ)。ルールや施策を考えるときは、この全体の流れを常に視野に入れておきましょう。

スクラムガイドにある「リファインメントは開発チームの作業の10%以下」という箇所について、疑問が上がっていました(Facebook上で。限定公開だったのでリンクは貼りません)。そこにコメントしたのですが、私の解釈は以下のようなものです。

リファインメントはいろんなやり方があるので、「開発チームの工数の10%」という解釈がほぼ近いと思っています(工数、作業量、エネルギー、許容量、できること、そこの言葉の捉え方はいろいろありそうです)。POとミーティングをしてもいいし、開発チームだけで相談してもいいし、定例化してもいいししなくてもいいし、開発チームタスクとして作業をしてもいいし、ミックスしてもいい。

2週間スプリントでリファインメント「イベント」を週1回実施して、スプリント前半のリファインメントでは調査タスクを発生させ、後半までに開発チームで調べておく、というチームがありました。このときはイベント(全員)+調査タスク(担当した人)あわせて「10%以下」の対象になります。

別のチームでは、スプリント中に新しい急ぎのPBIが頻発するので、毎日15分確保しておき、急ぎのPBIがある日は内容を調べて見積もるようにしていました。

たしかケントベックが言ってた、「新しいストーリーはホワイトボードに貼っておいて、メンバーは気の向いたときにそれを眺めて、見積もりポイントを封筒に入れる。何人分か集まったら、その平均(だか最大値だか)を見積もりとする」というのも、スクラムであればリファインメント作業になると思います。

リファインメントはプロダクトバックログの「すぐやるやつ」と「今後の見通し」を把握するためにやるので、チームやプロダクトによっていろいろな形になるようです。「10%以下」は、そちらにのめり込みすぎないような、またプロダクトオーナーがやるべきことをチームに押しつけすぎないような、バランスのための目安かなあと個人的に思っています。

AIIT夏合宿に1日だけ参加し、TDDを紹介して、みんなでペアプロをしてきました。大学生って若いんだなあ。 #enpit

途中から参加者を放置して、メンターの太田さんとペアで書いた、HTML Canvas版ライフゲイムです。最低限ですが、ブラウザ上で動きが見られるところまでたどり着きました(本当に最低限なので、見て驚いてください)。
https://github.com/yattom/tdd_life_javascript

さて、このコードのキモは3つあります。

1.テスティングフレームワークがない。フレームワークの使い方ではなくテストの書き方、考え方に集中するために、その場でテストのロジックを書き、それが関数になり、実行の仕組みを作り…と、テスティングフレームワーク自体を育てていくアプローチをしています(最近のお気に入り)。必要最低限の「フレームワーク」ができて手頃ですし、「これ面倒だからフレームワークで対応したい」というペインポイントを感じながら作れるのがメリットです。

2.テストコードとプロダクトコードが渾然一体している。1ファイル(life.js)にテストコードとプロダクトコードが入り交じった状態で進めました(パターンになかったっけ)。最終的には、テストが「上のほう」、プロダクトコードは「下のほう」にまとまっています。これは配置だけの問題でなく、プロダクトコードの中にテストのためのコードが入り交じっているという状況も作り出しています(例: セルを描画した回数をアサートするために、プロダクトコードの中で数える)。この件は次のキモにつながり…

3.モック(テストダブル)を嫌う。Canvasに描画するという処理そのものをテストするのは困難です。そこでモックライブラリを導入して、描画処理が何回呼ばれたとか、正しいパラメータが渡されているとか確認するのが、常道です。しかし今回は(2.で触れたように)プロダクトコードのロジックの中にテスト用の処理(何回呼ばれたか数える)を埋め込んでいます。大変だ!プロダクトコードがテストで汚染された!

ですが、TDDであれば、あるいはTDDでなくても、プロダクトコードと自動テストとが一体となって作られ、一緒にコミットされ、変更やメンテナンスも同時です。プロダクトコードとテストコードの意味的な分離はそれほど、昔ほどは重要ではないように感じています。今回実際に書いてみて、このくらいなら複雑にもならないし、可読性も悪くないし、扱いやすいコードにできることがわかりました。少なくともモックを導入するよりは、プロダクト+テスト全体としてシンプルになっています(実際の比較はしていませんけれど)。

もちろん、たかだか2時間で書いたコード量ですから、これから質・量ともに増えて複雑になっていけば、いつまでもモック不要とはいかないでしょう。一方で、プロダクトコードとテストコードの分離が絶対である、依存関係は一方通行であるというのは、ルールと言うよりはガイドラインに過ぎず、バランスやトレードオフを考えるべき条項なのではないでしょうか。

P.S.
Jim Coplienがセミナーで言っていました。「製品にアサートを(テストと言うよりはDbC的な表明だと思う)を埋め込んだまま出荷すべきと意見したが、止められた。なので会社を辞めた」。またハードウェアはたいてい、異常時にテストする仕組みを埋め込んでいます(内部の自動テストや、外部からテストする端子など)。

新米スクラムマスターにお勧めの本

「新米スクラムマスターが読むべき、読んでおくべき書籍や資料を教えてください」とFacebookで書いたところ、何人かのアジャイルコーチやスクラムマスターといった皆さんからお勧めをもらいました。

https://www.facebook.com/yattom/posts/1771377669542867 (ログインしなくても読めます。「コメント26件」みたいのを開いてください)

せっかくなので、ここにも転記しておきます。私の独断で分類しつつ、一部紹介コメントも追加しました。

超基本、必読

入門書

人、チーム、組織について

広い観点を得て深く知る

成功しているアジャイルの実例