アンチパターンをうまく活用しよう
この記事は「ScrumFestSapporo2020 Advent Calendar 2020」の15日目の記事になります。
前日の記事はこちら。
にくさんがアンチパターンについて書いてくださった記事を読みつつFacebookでディスカッションしていてアンチパターンの活用術みたいなものを思いついたので雑にまとめてみました。
アンチパターンとは
Anti Patternではこのように説明されています。
アンチパターンとは、問題から悪い解決策に移行する方法を伝えるパターンです。(悪い解決策から良い解決策へと移行する方法を伝えるパターンである改善パターンとは対照的です)。
悪しき慣行を識別することは、良い慣行を識別するのと同じくらい貴重である場合があります。
よく練られたAntiPatternはまた、なぜ悪い解決策が魅力的に見えるのか(例えば、それが実際にいくつかの狭い文脈で機能する)、なぜそれが悪いことが判明したのか、そしてその代わりにどのような肯定的なパターンが適用可能であるのかを教えてくれます。
もうひとつ紹介。SQLアンチパターンの著者であるBill Karwin氏は以下のように述べています。
問題の解決を意図しながらもしばしば他の問題を生じさせてしまう技法を指します。
この2つから、私はアンチパターンというものを以下のように理解しています。
問題から悪い解決策に移行する方法を伝えるパターンのこと。良かれと思ってやっているにもかかわらず結果として裏目にでてしまうことがしばしばある。
アンチパターンの必要性
アンチパターンの必要性とはなんでしょうか。まず前提として以下の考えがあります。
悪しき慣行を識別することは、良い慣行を識別するのと同じくらい貴重である*1
ここにBill Karwin氏の言葉を重ねると、こんな感じになります。
悪しき慣行を識別することは、良い慣行を識別するのと同じくらい貴重であるが、悪しき慣行の中には良かれと思ってやっている場合も多々ある。
この「良かれと思ってやっている」あたりがミソです。つまり「悪しき慣行」の中には、
自分やチームが善意に基づいて行動しているがゆえに、実はそれが悪しき慣行であるということに気づきにくいものが存在する
ということです。
さらに、その結果がぱっと見良いものであったりするとなおのことわかりにくいため、知らず知らずに陥っていることが多いのだと思います。
紙粘土スクラムから学ぶアンチパターン
紙粘土スクラムの例でいうと、スクラムマスターがなんでもやってあげちゃう"過保護なSM"とかがそうです。
SMも自分がチームの役に立っていることを感じられますし、SM以外からみても問題は解決するわ仕事は進むわで、結果だけ見るとなんか良さそうですね。 ですが、実はめちゃくちゃSMへ依存している状態なので、スクラムチームの能力が上がってるわけではなくそのSMがいなくなると簡単に崩壊します*2。
でも、これって過保護なSMがいてくれる間は良い結果が出てるだけに、気づきにくいかもしれません。
このパターンが怖いのはスクラムチームみんなが「良い慣行をしている」と思っていて、チーム内に違和感を感じている人がいない場合です。
違和感に気づくための"第三者の目"
違和感というのは「何かと何かの差分を感じて、その差分に心地悪さを感じる」ことだと思いますが、ここに気づくにはある程度経験やスキルや知識がいるのではないでしょうか。
では経験もスキルも知識もない人が気づくにはどうしたらいいでしょう。
1つは、第三者から指摘してもらうということだと思います。
自分の悪しき慣行には、自分以外の誰かの助言が役立ちます。
ではチームの悪しき慣行には? 他のチームが教えてくれるかもしれません。 では他のチームも気づいていなかったら?助言してくれるチームや誰かが近くにいなかったら?
そういうケースも含め、「第三者の目」になってくれるのがアンチパターンという「パターン化された事実集」なんだと思います。
アンチパターンの活用する
アンチパターンの活用の仕方はチームの習熟度によって変わると考えています。
以下は「スクラムチームが、スクラムのアンチパターンを活用する」場合をチームの習熟度別に考えてみた例です。
A. 全員ほぼ未経験のスクラムチーム
何か良くて何が良くないかを感じるための経験がそもそも少なく、違和感を感じることができないチームです。
Anti Patternにはこう書かれています。
よく練られたAntiPatternはまた、なぜ悪い解決策が魅力的に見えるのか(例えば、それが実際にいくつかの狭い文脈で機能する)、なぜそれが悪いことが判明したのか、そしてその代わりにどのような肯定的なパターンが適用可能であるのかを教えてくれます。
まずは世の中にあるスクラムのアンチパターンと呼ばれるものを集め*3、そこに書かれていることをチーム共通の形式知としてもっておくと良いと思います。
そうすることで、まずチーム内のふるまいに対し「このままで良さそう?良くなさそう?」判断ができるようになり、見過ごすことや気づかず過ぎることを減らせます。
B.チームに1人以上の有識者がいるスクラムチーム
有識者がいる、もしくは違和感に気づくことができる人がいればアンチパターンを使わずとも「悪しき慣行の匂い」は嗅ぎ分けられそうです。
一方で、違和感の理由を、気づいていない人達へ説明することには苦労するかもしれません。そういう場合にアンチパターンを基準として示すと良いと思いました。
「私の経験では、このままいくと失敗すると思う」よりも、パターン化されたエビデンスに則った説明と改善案のほうがより説得力があります。
チームの改善には誰かの基準ではなくチーム共通の基準となりうるものを示すほうが明瞭で良いと考えています。
C. 習熟したスクラムチーム
だいぶ習熟して頭と体にアンチパターンが染みつけているチームの場合は、すでに「アンチパターン集」は必要ないかもしれません。 この頃になると、自分が気づかなかったとしてもチーム内で声を掛け合う体制もできていたり、アンチパターンを見つけるというよりチームの違和感として察知することができる、つまり定義されていないアンチパターンについても見つけることができそうです。
チームが習熟するにつれ「アンチパターン集」との関わり方は変わってくると思いますので、自分のチームがどのレベルなのかを意識するとよいと思いました。
いずれのチームでも、レトロスペクティブという機会でディスカッションして改善していくのが良いと思います。
終わりに
大事だなと思ったのは
それが良い結果を生んでいたとしても、チームのふるまいとして良いこととは必ずしも一致しない
ということです。
チームに困っている人がいたり良くない結果になっている時は違和感に気づきやすいですが、結果だけみれば良い時や今だけみると誰も困っていないという時にこそアンチパターンが役に立つと感じました。
なんか、ディスカッションしていて少しいい感じにまとめられそうなので忘れないうちに書きました。