この記事は私をシニアエンジニアにしてくれた「真のアジャイル開発」体験記の11日目の記事です。このアドベントカレンダーは「ある機能開発チームでスクラム, XP, DevOps を一度に実践したら真のアジャイル開発ができた」という内容です。執筆者は全てプログラミングをするパンダです。

全員同席・チーム全体・情報満載のワークスペース・いきいきとした仕事

本記事ではXPの「全員同席」「チーム全体」「情報満載のワークスペース」「いきいきとした仕事」の定義と自分たちのプロジェクトでの運用を紹介します。

これらのプラクティスは現代では自然と実践できているチームも多いのではないでしょうか。チーム開発をうまくやろうというマインドセットも浸透していると考えられるため、各プラクティスの記述は簡単に済ませます。

全員同席

全員同席の定義

全員同席とは、チーム全体がオープンスペースに集まり、一緒に作業を進める形態のことを指します。ただし、これはプライバシーを完全に排除するものではありません。パーソナルスペースもきちんと用意されており、必要に応じて個人が集中できる環境も整えられています。それでも、個室に分かれて作業したり、各人が離れた場所で働く場合と比べて、チーム全体で同じ空間に集まって仕事をする方がコミュニケーションが円滑になる、という考え方に基づいています。

現代ではXP(エクストリームプログラミング)の技術的なプラクティスが注目されることが多いです。しかし、その主要プラクティスの最初に「全員同席」が挙げられていることからも、XPがコミュニケーションを非常に重視していることがうかがえます。

全員同席の運用

自分たちのチームでは「全員同席」をリモート環境下でも実現できています。Gatherを活用してメンバー全員がオンラインで同じ場所に集まることでコミュニケーションの円滑化を図っています。また、「情報満載ワークスペース」については、FigJamを使用したプロダクトバックログやスプリントバックログの管理を通じて実現されています。これにより、リモート環境でも物理的なオープンスペースにいるのと同じような効果を得ることができています。むしろオフラインで出社しているよりコミュニケーションの頻度が増えている実感もありました。

なお、これはXP本に記載されてはいませんが、日本企業の「大部屋方式」を参考にしたプラクティスであると私は考えています。

チーム全体

チーム全体の定義

チーム全体とは、プロジェクトを成功させるために必要なスキルを持つメンバーで構成される、クロスファンクショナルチームの考え方に基づいたものです。このプラクティスは、以下のようなチームマネジメントの観点から成り立っています。

まず、コンテキストスイッチによる思考の断絶を防ぐために、メンバーが他の業務やプロジェクトを兼任することは推奨されません。一つのプロジェクトに専念できる環境を整えることが、効率的で一貫性のある成果につながるからです。また、一つのチームの規模は12名以下の小さいチームにすることが理想的です。これにより、コミュニケーションの複雑さを軽減し、チーム内での意思疎通をスムーズに保つことができます。

さらに、プロジェクトで必要な特定のスキルや専門知識を持つ人材がいる場合は、たとえ一時的であってもチームに参加してもらうことが奨励されます。これにより、機能開発に必要なスキルや知識がチーム内で共有され、プロジェクトの進行が加速されるのです。

「チーム全体」という考え方はチームマネジメントのプラクティスなのです。

チーム全体の運用

このプラクティスはチームマネジメントに関する内容であり、自分はエンジニアリングマネージャー(EM)ではないため軽く言及する程度にとどめておきます。

自分たちのチームメンバーのほとんどは専任ですが、別のプロジェクトを兼任しているエンジニアが一名います。それ以外のメンバーはプロダクトオーナー(PO)、エンジニアリングマネージャー(EM)、バックエンドエンジニア、フロントエンドエンジニアで構成されています。このように、チーム全体としては比較的クロスファンクショナルな形を維持できています。

ただし、プラクティスで述べられているように、必要なスキルを持つ人材が一時的にでもチームに加わることについては、現実的な制約があると感じています。たとえば、インフラ関連の作業を進める際にインフラチームのメンバーに「1週間だけでも参加してほしい」と依頼することは、組織のリソースや優先順位の都合上、簡単ではないでしょう。

しかし、その場合でも短期間の「ペア作業」を通じてインフラの知識を共有してもらうだけでも十分な効果を発揮できると考えています。

情報満載のワークスペース

情報満載のワークスペースの定義

ワークスペースとは仕事を行う場所のことを指します。「情報満載のワークスペース」とは、その場にチームの仕事内容がわかるような情報を配置し、それを見た人が一瞬でチームの状況を把握できるようにすることを目的とした環境のことです。

例えば、開発中の機能(ストーリー)を付箋に書いて壁やボードに貼り付けて一覧化したり、「WIP(作業中)」や「DONE(完了)」といったエリアを設けて進捗を視覚的に示す工夫が挙げられます。また、カンバンボードを作る方法や、チャートを利用して進捗を数値で可視化する手段も考えられます。

情報満載のワークスペースの運用

この考え方は、スクラムにおける作成物である「プロダクトバックログ」や「スプリントバックログ」に対応しています。これらについてはすでにスクラム編で解説したため、ここでは詳しい説明を省略します。

なお、「作業内容の可視化には物理的な付箋が最適だ」といった意見を聞いたこともあります。しかし、自分が所属するチームでは最初からFigJamを使用してデジタルで管理を行っており、現在までの4ヶ月間、不便を感じたことはありません。全員が毎日オフィスに出社する状況ではない現代の働き方を考えると、物理的な方法に戻るよりも、このままデジタルツールを活用し続ける可能性が高いと考えています。

いきいきとした仕事

いきいきとした仕事の定義

いきいきとした仕事とは、長時間労働をやめて必要に応じてしっかり休むというプラクティスを指します。プロダクト開発においては、洞察力が欠かせないため、週に80時間働くよりも40時間だけ働く方が、価値ある仕事に集中できるとされています。

いきいきとした仕事の運用

長時間労働を避けることは、燃え尽き症候群(バーンアウト)の防止にも繋がります。

自分が所属するチームでは18時45分に夕会を設定し、そのタイミングで作業を切り上げて雑談を行う習慣があります。このような取り組みはまさにこのプラクティスに該当するものだと感じています。深夜まで働いてしまって翌日の午前中は何もできない状態に陥るのでは本末転倒です。

プロダクト開発はマラソンに例えられるように、毎日着実に結果を積み重ねることが最短ルートなのです。もちろん、実際のマラソンと同じように一時的にペースを上げる局面があるかもしれません。しかし、そこでスタミナ切れを起こしてゴールに辿り着けなくなってしまっては意味がありません。

また、余裕を持って働くことは緊急事態への対応力にも繋がります。緊急事態が発生した場合には当然ながら一時的にペースを上げる必要があるでしょう。普段から少しだけ余裕を持って働いている場合と、常に疲弊している場合では、緊急事態に対処するモチベーションやエネルギーに大きな差が出るはずです。余裕を持った働き方を実践することは、日常業務だけでなく突発的な事態への対応力を高める上でも重要だといえるでしょう。

次回はペアプログラミングの定義と運用を紹介します。

advent calendaragile
プログラミングをするパンダ
プログラミングをするパンダ (@Panda_Program)
Software Engineer

この記事は私をシニアエンジニアにしてくれた「真のアジャイル開発」体験記の10日目の記事です。このアドベントカレンダーは「ある機能開発チームでスクラム, XP, DevOps を一度に実践したら真のアジャイル開発ができた」という内容です。執筆者は全てプログラミングをするパンダです。

エクストリーム・プログラミング(XP)の概観

本記事ではエクストリーム・プログラミング(XP)の概観を紹介します。この記事はスクラム開発を概観したアドベントカレンダー3日目の記事と同じ構成で書くため、比較するとわかりやすいと思います。

エクストリーム・プログラミング(以下、XP)はケント・ベックやロン・ジェフリーズによって提唱されたアジャイルなソフトウェア開発の手法です。クリーンアーキテクチャで有名なボブおじさんが「Clean Agile」という本の中で、「アジャイル開発宣言を作るために10名弱の開発者があるロッジに集まったところ、スクラム開発のグループとXPのグループ、その他のグループに大別できた」というようなことを述べています。しかし、現代ではスクラム開発とXPがアジャイル開発の2大潮流であると意識されることは少なくなりました。

スクラム開発はチーム開発の管理手法、XPは個人で実践できる技術プラクティス集だと思われているようです。しかもXPが提唱する技術プラクティスはペアプロやTDD、継続的インテグレーションだったりと現代の開発では当たり前に取り入れられていることです。現代の開発者はもはやXPを意識することなく、XPのプラクティスを自然に実践しているのです。

ただし、当たり前に行っていることの源流を学ぶことは意義があります。自分たちのプロジェクトではスクラム開発とXP、DevOpsを軸に開発を進めたと紹介しました。スクラム開発はスクラムマスターであるEM主導のもと、特に自分ともう一人の開発者が積極的にスクラムを学んで体現することでチームに浸透していきました。

XPは主に自分からチームに取り入れようと発信したものです。もともと自分は熱心なTDD実践者でした。ケント・ベックの本や考え方に惹かれていたことや前職でXPというものがあると教えてもらっていたことから、いつかXPを実践したいと考えていたのです。そこで「エクストリーム・プログラミング(第2版)」という書籍を読んで腰を据えてトライすることにしました。

XPは「価値・原則・プラクティス(実践)」の構成で成り立っています。これは以前の記事で紹介したようにスクラム開発と同じ構成です。

順番に見ていきましょう。

エクストリーム・プログラミングの6つの価値

XPが掲げる価値は以下の6つです。どれもチーム開発をするにあたって重要な価値です。

  • コミュニケーション(Communication): チーム感覚や開発者同士の協力関係を生むためにコミュニケーションを取ろう
  • シンプリシティ(Simplicity): 「最もシンプルで、うまくいくことは何か?」と尋ねて、複雑性を排除しよう
  • フィードバック(Feedback):最初に決めた方向性で進み続けるのは危険なので、素早いフィードバックで改善を続けていこう
  • 勇気(Courage):問題がわかっていれば解決策となる行動を取り、問題の原因がわからなければわかるまで粘り強く耐えよう
  • リスペクト(Respect):他の人より重要な人はいない。私も重要であり、あなたも重要だという気持ちを持とう
  • その他の価値(安全性、セキュリティ、予測可能性、生活の質など)

現代で「アジャイルにやろう」と言ったとき、この言葉は「小さく試して、改善を続ける」ことを意味します。アジャイル開発をXPの価値と照らし合わせると、互いにリスペクトをし合うチームがコミュニケーションを取って課題を解決しながら、シンプルに作ったものをリリースしてフィードバックを貰い、勇気を持って欠点を改善するといったところです。継続的に改善する精神は書籍の中でこのように語られています。

「継続的」改善というと、絶え間なく連続的に改善を続けているように聞こえるかもしれないが、そうではない。継続的改善とは、継続的に、注意して、フィードバックに反応して、積極的に改善を受け入れる、という意味だ。つまり、改善する方法がわかったときに、改善するのである。 「エクストリーム・プログラミング(第2版)」 p.137

また、XPはスクラム開発が重視するのと全く同じ価値である「勇気」と「リスペクト」を掲げていることは特筆すべきことです。スクラム開発とXPの共通点として、アジャイル開発ではこの2点が特に重視されていることがわかります。

エクストリーム・プログラミングの原則

XPの原則は以下のように多岐に渡ります。それぞれの項目は大きなものではないこと、またXPの価値やプラクティスほど大きく取り上げられることはないため各説明は省略します。

  • 人間性
  • 経済性
  • 相互利益
  • 自己相似性
  • 改善
  • 多様性
  • ふりかえり
  • 流れ
  • 機会
  • 冗長性
  • 失敗
  • 品質
  • ベイビーステップ
  • 責任の引き受け

XPの価値だけを知っていてもXPは実践できません。反対にXPのプラクティスを実践していても、その価値を意識しなければただやるだけになってしまいます。XPの原則とはその価値とプラクティスの橋渡しなのです。

エクストリーム・プログラミングの主要プラクティス

XPのプラクティスは「全員同席」「プログラミング」「いきいきとした仕事」「計画」「インテグレーション」に大きく分けられます。さらにそれぞれの項目に対してより細かく分けられたプラクティスがあります。

  • 全員同席
    • チーム全体
    • 情報満載のワークスペース
  • いきいきとした仕事
  • プログラミング
    • ペアプログラミング
    • テストファーストプログラミング
    • インクリメンタルな設計
  • 計画
    • ストーリー
    • 週次サイクル
    • 四半期サイクル
    • ゆとり
  • インテグレーション
    • 10分ビルド
    • 継続的インテグレーション

XPの主要プラクティス 画像

各プラクティスの定義と自分たちのチームでの運用方法は今後の記事で詳述します。

XPのプラクティスはその価値とは異なり、それぞれ「できている」「できていない」という書き方で紹介されています。そのプラクティスを実践できているか明確に判定するためです。

XPのプラクティスは絶対的なものとして記述している。私としては、あなたに完璧を目指す動機を与え、明確なゴールを提供して、そこに至るまでの実践的な方法を授けたいと思っているからだ。 「エクストリーム・プログラミング (第2版)」 p.33

しかし、XPではこんなに多いプラクティスを全て実践しなければならないのかと臆する必要はありません。各プラクティスは選択制であり、自分のチームに必要なものを取り入れれば良いのです。

プラクティスを適用するかどうかは選択だ。プラクティスはプログラミングの効果を高めると私は考えている。プラクティスは単独でも機能するが、組み合わせたほうがさらにうまく機能する (同上)

なお、書籍では主要プラクティスの他にも導出プラクティスというものが紹介されていますが、この記事では説明を省略します。

エクストリーム・プログラミングとスクラム開発の共通点

XPに従ったアジャイル開発のフローは現代のソフトウェア開発の基本です。以下に書籍で紹介されている開発の流れを要約しました。

XPでは、プログラマが(時間単位の)ストーリーの工数を見積もる。プロダクトマネージャーがユーザーの立場になり、実装するストーリーを選んで優先順位をつける。 最初はリリースに必要な最低限の分のストーリーだけを実装する。優先順位は技術的な観点ではなく、ビジネス的な観点から設定する。 2~3週間を1つのイテレーションとして、ストーリーの合計時間と1つのイテレーションの期間を割った日数がリリース可能な日になる。 「エクストリーム・プログラミング (第2版)」 p.121 を要約

開発の流れはスクラム開発と大きく変わらないことが一読してわかります。XPは技術プラクティスだけと思われがちだが実際それだけではないのです。このことは、XPのプラクティスとスクラム開発のプラクティスを比較して共通点を挙げるとさらに明確になります。

例えば、XPの計画の「ストーリー」はプロダクトバックログアイテムです。また見積もりはストーリーポイントで行うことは両者の共通点です。「週次サイクル」はスクラムのスプリントに他ならず、導出プラクティスの「本当の顧客参加」はスプリントレビューに近いです。「情報満載のワークスペース」は自分たちのチームでFigJamというオンラインコラボレーションツールで各スプリントの情報、スプリントバックログアイテム、バーンダウンチャートなど開発に関することを一箇所に集めていたことに他なりません。

唯一大きな違いがあるとすれば、スクラム開発はプラクティスを全部必須としていることです。

スクラムは無料であり、本ガイドで提供されるものである。ここで概要を述べたように、スクラムフレームワークは不変である。スクラムの⼀部だけを導⼊することも可能だが、それはスクラムとは⾔えない。 すべてを備えたものがスクラムであり、その他の技法・⽅法論・プラクティスの⼊れ物として機能するものである。 「スクラムガイド2020年版」p. 14

これはXPのプラクティスがチームごとに選択できるものであるとされている点で異なります。

エクストリーム・プログラミングが一番重視していること

Wikipediaのエクストリーム・プログラミングの項目はこのような画像を採用しています。これはXPが計画とフィードバックのループを一番重視していることを示しています。

XPの主要プラクティス

まず、リリースの計画を立てます。リリース計画に基づき、月単位でイテレーション計画(スプリント)を実施します。イテレーション計画に基づいて毎週受け入れテスト実施します。

受け入れテストに基づいてスタンドアップミーティング(朝会)を毎日実施し、スタンドアップミーティングに基づきその日にペア同士の交渉を行い、ペア同士の交渉に基づいて毎時間でユニットテストを実施し、ユニットテストの結果に基づいて毎分でペアプログラミングを実施し、ペアプログラミングは毎秒でコードを書きます。ここまでが計画と実施です。

今度は書かれたコードがペアプログラミングにも、ユニットテストにも、ペア同士の交渉にも、スタンドアップミーティング受け入れテストにも、イテレーション計画にもリリース計画にも影響を与えます。書かれたコードが計画やコーディング内容にフィードバックを与えるのです。これがXPの計画とフィードバックのループです。

そしてフィードバックで得たことは各項目に適応していかねばなりません。状況は常に変化します。最初の計画通りに物事は進まないため、計画や実践を変えていかねばならないのです。コードから得られるフィードバックこそ、何かを変えるための最良の材料なのです。この変化に対応できないことこそが問題なのです。

これがXPのパラダイムだ。注意して、適応して、変更する。 ソフトウェアはあらゆるものが変化する。要件も変化する。設計も変化する。ビジネスも変化する。技術も変化する。チームも変化する。チームメンバーも変化する。 だけど、問題は変化ではない。変化はいずれにしても起きるものだ。問題はむしろ、我々が変化に対応できないことにある。 (中略) XPでは、こまめに小さな軌道修正を加えながら、適応することができる。つまり、短い間隔でソフトウェアをデプロイしながら、ゴールに向かっていくことができる。道を間違えているかどうかが判明するまでに、時間がかかることはない。 「エクストリーム・プログラミング (第2版)」 p.9-10

エクストリーム・プログラミングは1999年に発表されました。それから25年の時を経た2024年の現在でもXPが掲げる「価値・原則・プラクティス」は色褪せることがありません。XPとはまさに、変化に素早く対応するソフトウェア開発のための「時を超えた開発の道」なのです。

advent calendaragile
プログラミングをするパンダ
プログラミングをするパンダ (@Panda_Program)
Software Engineer

この記事は私をシニアエンジニアにしてくれた「真のアジャイル開発」体験記の9日目の記事です。このアドベントカレンダーは「ある機能開発チームでスクラム, XP, DevOps を一度に実践したら真のアジャイル開発ができた」という内容です。執筆者は全てプログラミングをするパンダです。

スプリントレトロスペクティブで改善したこと

後編ではレトロスペクティブで共有された課題とその改善策を5つ紹介します。

  • デイリーの形式化を防ぐために、デイリースクラムの質問事項を適宜変更する
  • コミュニケーション不全を解消するために、デイリースクラム後に情報共有の時間を設ける
  • 毎日進捗を出すために、作業をバッチ単位に細かく分割する
  • 業務外のコミュニケーション機会を増やすために、雑談の時間を設定する
  • 夜遅くまで働くことを回避するために、時間が来たらキリの悪いところであっても作業を切り上げる

改善その1: デイリーの形式化を防ぐために、デイリースクラムの質問事項を適宜変更する

チームがスクラムに慣れてくると朝会がマンネリ化し始めました。

朝会(デイリースクラム)は検査と適応を目的とした場です。当初はエッセンシャルスクラムに掲載されている3つの質問「昨日は何をしましたか」「今日は何をしますか」「進捗の妨げとなる障害物は何ですか」をスクラムマスターがチームに尋ねていました。しかし、カンバン形式のスプリントバックログを見るだけで全員の進捗状況が誰でも把握できることから、進捗共有を促す質問は次第に行われなくなりました。

代わりに、確認不足や勘違いによるミスコミュニケーションを防ぎ、メンバーにスプリントゴールを意識させるための新しい質問が取り入れられるようになりました。それらの質問は全て、振り返りで得られたチームの新しい試みをデイリースクラムの質問に落とし込んだものです。それぞれの質問には、チームが学び取った経験や失敗からの反省が背景にあります。

以下は、プロジェクト最終段階の朝会での質問の一部です。

・ポイントを変更するべきタスクはありますか? ・タスクを進める上で困っていることはありますか? ・スプリントゴールの達成に影響があるアイテムはありますか?

「ポイントを変更するべきアイテムはありますか?」という質問は、スクラムを始めたばかりの頃にアイテムを消化しきれず大量のポイントを残したままスプリントを終えてしまった苦い経験が元になっています。当時の振り返りでは、スプリントゴールを達成するためにどうすれば良かったのかを議論し、スクラムマスターが「次回は適切なタイミングで進捗状況を見直し、ポイントを振り直すべきではないか」と提案しました。

このスプリントではアイテムのポイントが着手後に見積もり時より大きいということがわかってもポイントを変えていなかったからです。アイテムのポイント数が変わらないため、形式上はそのスプリント内で全てのアイテムに対応できることになっていたのです。

これをきっかけに、スプリント中でもアイテムのポイントを調整したり、タスクを追加・分解する柔軟な対応をしてもいいんだ、むしろそうするべきだという意識がチーム全体で共有されました。

この新しい質問は進捗が芳しくないという朝会で少し気が引ける共有であっても、以前より気軽に話せるようにする効果を生みました。メンバー全員がこの質問を聞くたびに「あのときの失敗を繰り返さないようにしよう」と意識するようになったのです。

ただし、この質問はあくまで自分たちのチーム特有の経験から生まれたものです。別のチームの朝会で最初からこの質問を取り入れてもうまく機能しないかもしれません。デイリースクラムの質問は、各チームが自分たちの経験を活かして自分たち流にアレンジしていくことが大切です。

チームメンバーは朝会の各質問がどのような背景から設定されたのかを覚えています。レトロスペクティブでは個人が取り組んだアイテムのゴールを達成できなかった場合でも、その原因をチームみんなで考えます。そして、次スプリント移行で同じようなアイテムに取り組む際に同じ失敗を繰り返さない仕組みを作ります。デイリーの質問こそ再発防止の仕組みなのです。

朝会の質問は上から形式的に尋ねていけばいいという単なるチェックリストではなく、チーム全体の学びの結晶化です。デイリースクラムを通じてチームは自己組織化を進め、徐々にスクラムの成熟度を高めます。興味深いことに、振り返りを経るたびに質問の数は増えたものの、朝会にかかる時間はむしろ短縮されました。それは全員が質問の意図を深く理解し、より効率的に朝会を進められるようになった結果です。この改善プロセスとその成果こそがチームの成長の証なのです。

改善その2: コミュニケーション不全を解消するために、デイリースクラム後に情報共有の時間を設ける

スクラムを始めた当初、チームの朝会では他チームで行われていた一般的な形式を踏襲し、各メンバーが順番に「前日にやったこと」「当日にやること」「進捗に支障が出る不安要素や確認事項」について報告していました。朝会の時間は11時45分から12時までの15分間と設定されており、当初は時間内に終わっていました。しかし、開発が進むにつれて確認事項や相談事項が増え、次第に15分では収まりきらなくなりました。

スプリントレトロスペクティブでこの問題が話し合われた際、あるチームメンバーが「朝会の時間を30分に延長してはどうか」と提案しました。それに対し、スクラムマスターは次のように説明しました。「エッセンシャルスクラムにはデイリースクラムは必ず15分以内にすると書かれています。また、デイリースクラムの目的は、あくまでスプリントゴールを達成するための検査と適応の場です。だから、デイリースクラムの時間は変えずにいきましょう。その代わり、朝会の後にもう15分間、相談や共有のための時間を設けるのはどうでしょうか?」

この提案はチームに受け入れられ、朝会終了後に設けられることになった追加の時間は「一言共有会」と呼ばれるようになりました。一言共有会は、相談事項がある場合にはチーム全員で議論する場として機能しますが、特に相談がない場合には雑談をすることも許容されています。この取り組みが始まってから、デイリースクラムでは話が脱線することがなくなり、目的であるスプリントの「検査」と「適応」に集中できるようになりました。一方、一言共有会ではデイリースクラムで話しきれなかった懸念事項や開発者同士の相談など、徹底的に議論できるようになりました。

一言共有会で話し合われる内容には、例えば以下のようなものがあります。プロダクトオーナーからのアナウンスや、他チームへの相談結果の共有、データベース設計の相談や新しい概念ができたためユビキタス言語を考え直そうといった議題、大きめのリファクタリングの方針共有などです。こうした具体的な相談や共有は、デイリースクラムの15分には収まりません。一言共有会という追加の時間があることで、これらの重要な議題について時間を気にせず十分に話し合うことが可能となりました。

結果的に、デイリースクラムはより効率的になり、本来の目的である「スプリントゴール達成のための検査と適応」に専念できる場になりました。一方、一言共有会を通じてチームの連携やコミュニケーションはさらに強化され、スプリント全体の成功にも寄与しています。この取り組みは、形式やルールに縛られるのではなく、チームが直面した課題を振り返り、柔軟に改善を行うというスクラムの本質を体現するものだと言えるでしょう。

改善その3: 毎日進捗を出すために、作業をバッチ単位に細かく分割する

スプリントを繰り返すうちに、アイテムのポイントが5を超えたら見積もりの精度が悪くなることがチーム内で共通認識となりました。そこでリファインメントによって5以下に分割するルールが導入されました。

この方針はチーム全体に共有され、8以上と見積もられたアイテムについては、スプリントプランニング前かデイリースクラム後にリファインメントを実施するようにしました。その結果、アイテムのポイントサイズが小さくなり、多くのアイテムが1日や2日で完了するようになりました。

コンスタントにアイテムを消化することでベロシティが安定し、アイテムがスプリントレビュー直前に一気に駆け込みで消化されるような事態を回避できるようになりました。スプリント中、毎日更新されるバーンダウンチャートも綺麗な右肩下がりを描くようになり、安心感を持って毎日を迎えられました。

一つのアイテム単位が小さいので、デプロイ頻度も向上しました。するとチーム内では「毎日進捗がある」という達成感が広がり、チーム全員のモチベーションが目に見えて上がりました。チーム全体が「小さな成功体験を積み重ねる」という習慣を定着させることができ、結果的にチームの生産性と士気の向上に寄与したのです。

改善その4: 業務外のコミュニケーション機会を増やすために、雑談の時間を設定する

あるレトロスペクティブで「仕事ばかりで事務的な関係だから雑談をしたい」という課題が挙げられました。ペアプロをしているため朝から夕方まで仕事に関する会話は頻繁に行われているものの、業務外でのコミュニケーションが不足しているという意識が背景にありました。そこで、毎日夕方18:45から15分ほど雑談をする「夕会」を始めるというアイデアが採用されました。

この夕会は任意参加であり、参加を強制される雰囲気は全くなく、気軽に参加できる場となっています。ただ、リモート勤務下で雑談会を何度か繰り返すうちに話題が尽き、天気の話しか出てこないという問題を耳にしたことがありました。そのため、チームではスプレッドシートを用意し、事前に雑談テーマを記載しておく仕組みを取り入れました。雑談テーマは質問形式です。スプレッドシートに質問を投稿する際、質問者が特定されないようにラジオネームを使って記入するルールとしました。これにより、気軽に多様な話題が集まり、会話が盛り上がる工夫がされています。

(添付画像:雑談の「お便りボックス」スプレッドシート)

この仕組みのおかげで、その日のテーマを全員で共有して各自が順番に答えるスタイルが定着しました。話題が事前に準備されているため会話がスムーズに進み、参加者全員がリラックスして雑談を楽しめるようになっています。

ただし、チーム外の方との雑談については、まだ良い方法を模索中です。以前、レビュー会に参加する法務チームやセキュリティチームのメンバーを夕会に招待したことがありました。この取り組みは一度だけ実施され、カジュアルな雰囲気で行われたものの、それ以降チーム外の人が夕会に参加することはありませんでした。チーム外の人が気軽に参加できる場を作るには、さらなる工夫が必要であると感じています。ただ、他チームの会に参加すること自体にそもそもハードルがあるのかもしれません。

この取り組みについてTwitter(当時)で紹介したところ大きな反響がありました。雑談会という形式は簡単に始められるため興味のある方はぜひ試してみてほしいと思います。

https://twitter.com/Panda_Program/status/1544671306599505920 (添付画像:Twitter投稿のスクリーンショット)

改善その5: 夜遅くまで働くことを回避するために、時間が来たらキリの悪いところであっても作業を切り上げる

雑談をする夕会を1日の終わりに設定したことで、作業を途中でも区切り、退勤する習慣がチーム内で定着しました。

それまでは、作業をキリのいいところまで進めようとするあまり、退勤時間が時折22時や23時にまで及ぶメンバーがいました。また、スプリントレビューの前日には、全てのスプリントゴールを達成するために夜遅くまで作業するメンバーも少なくありませんでした。

しかし、プロダクト開発は短距離走ではなくマラソンのようなものです。残業過多によるメンバーの燃え尽きやモチベーションの低下を避けつつ、3ヶ月や半年以上の長期的なスパンで持続的に開発を続けていく必要があります。プロジェクトはそこで終わってもその会社で働く時間はもっと長い年単位です。プロジェクトのために頑張るいい人が燃え尽きて退社してしまうことを一番避けなければなりません。

そこで、夕会の時間を作業の区切りとして活用し、雑談が終わったら退勤するという新しい習慣をチーム全体で取り入れることにしました。

この取り組みによって、メンバーは仕事を切り上げるタイミングを意識的に作れるようになり、疲労感を持ち越すことなく翌日にフレッシュな状態で業務に取り組むことが可能になりました。結果として、チーム全体のパフォーマンスが向上し、無理なく持続的にプロダクト開発を進められる環境が整ったのです。

夕会は単なる雑談の場としてだけでなく、働き方の見直しを促進する重要な役割を果たしています。このような仕組みが、メンバーの健康と生産性の両方を支える好例であるといえます。

スクラムのまとめ:スクラムとは軽量級のフレームワークであり、チーム独自のプラクティスを実践する場である

レトロスペクティブは、チーム独自のプラクティスを生み出す可能性を秘めています。実際、自分のいるチームでは「デイリーの後の一言会」と「雑談をする夕会」という独自の手法を編み出しました。他のチームでも、それぞれの課題やニーズに応じて独自のプラクティスを生み出していることでしょう。

エッセンシャルスクラムは次のように述べてスクラムがチームごとに独自の形を取ることを指摘しています。

スクラムは標準化されたプロセスではない。(中略)スクラムは作業をまとめ上げ、管理するためのフレームワークだ。このスクラムフレームワークは価値、原則、プラクティスに基づいている。それらを基礎として、組織にあったエンジニアリングプラクティスや、スクラムのプラクティスを実践するための具体的なアプローチを追加できる。その結果として現れるのは、あなた独自のスクラムである。 (エッセンシャルスクラム p.14。太字は筆者)

スクラムは標準化されたプロセスではなくフレームワークとして設計されています。フレームワークであるため、スクラムの価値・原則・実践をチームや組織に適した独自の方法で実現することが想定されています。こうした独自の実践によって現れるのが「あなた独自のスクラム」です。

ただし、この柔軟性には注意点もあります。スクラムガイドに記載されているスクラムフレームワークの一部そのものを削って「軽量化」することは推奨されていません。独自プラクティスの追加は許容されていますが、スクラムフレームワークそのものは不変であるべきです。スクラムガイドはこの点を以下のように説明しています。

スクラムは無料であり、本ガイドで提供されるものである。ここで概要を述べたように、スクラムフレームワークは不変である。スクラムの一部だけを導入することも可能だが、それはスクラムとは言えない。すべてを備えたものがスクラムであり、その他の技法・方法論・プラクティスの入れ物として機能するものである。 (スクラムガイド)

したがって、スクラムを実践する際にはフレームワークそのものを損なうことなく、必要に応じて独自プラクティスを追加することでチームに最適な形を作り上げるべきです。デイリーでの質問をチーム独自のものに変更したり、「一言会」や「夕会」もスクラムの価値や原則を守りつつ、チームの働き方を改善するための具体的なアプローチの一例です。

スクラムフレームワークを基盤としつつ、自分たちに合った新しいプラクティスを試行錯誤し、独自のスクラムを作り上げる。それこそがスクラムが本来持つ柔軟性と力強さを活かす方法なのです。

advent calendaragile
プログラミングをするパンダ
プログラミングをするパンダ (@Panda_Program)
Software Engineer

この記事は私をシニアエンジニアにしてくれた「真のアジャイル開発」体験記の8日目の記事です。このアドベントカレンダーは「ある機能開発チームでスクラム, XP, DevOps を一度に実践したら真のアジャイル開発ができた」という内容です。執筆者は全てプログラミングをするパンダです。

スプリントレトロスペクティブ

本記事ではスプリントレトロスペクティブの定義と自分たちのプロジェクトでの運用を紹介します。

前編ではスプリントレトロスペクティブの定義と運用に焦点を当て、後編ではレトロスペクティブを通して改善されたことを紹介します。

スプリントレトロスペクティブの定義

スプリントレトロスペクティブは、そのスプリントを振り返ることでチームの自己組織化を促進するためのイベントです。このため単に振り返り会と呼ばれることもあります。スプリントを1イテレーション実施した結果、スプリントゴールが達成できたのか、もし達成できなかった場合にはどのようにすれば達成できたのかをチームで振り返ります。これからはこうすればうまくいくだろうという改善策を話し合って次のスプリントに活かすのです。

この振り返りではスプリントのアイテムに対する反省だけでなく開発プロセスや開発のプラクティスはもちろんのこと、そのスプリント内で発生した事象に関するチーム内外の全てを議論の対象とします。課題を特定してチーム全体で改善に取り組むことで、深い学習をして経験を知恵に変え、開発プロセスの品質向上を目指します。

スプリントをただ実施するだけではスクラムチームに向上はありません。そうではなく、スプリントが終わったらレトロスペクティブでしっかり振り返りと改善を繰り返すことでチームは着実に前進します。こうした絶え間ない改善の積み重ねこそが強いスクラムチームを作り上げるのです。

スプリントレトロスペクティブの運用

運用のポイント1: KPTではなく「思ったこと・問題点・解決策・ネクストアクション」で実施する

自分のチームではスプリントレトロスペクティブを1回1時間で実施しています。イテレーションが1週間の場合でも2週間の場合でも長さは同じです。具体的な方法としては「思ったこと・問題点・解決策・ネクストアクション」という独自のフレームワークを採用しています。これは開発初期に使用していたKPT(Keep, Problem, Try)を改良したものです。

初期の段階ではKPTを使って振り返りを行っていました。各メンバーがKPTのそれぞれの項目に対して3〜4つのアイデアを付箋に書いて口頭で発表するのです。しかし当時のチームは8人だったため、1時間では全てをカバーするのが難しいという課題がありました。また、「Keep」に関しては書き出して改めて意識しなくてもチームで自然に継続できている内容が多かったため、振り返りの時間を「問題点や改善のアイデア」に集中させた方が有益だという意見が出ました。

KTPの次に「問題点・解決策・ネクストアクション」の3段構成をチームで採用しました。しかし、それだけだと事務的で窮屈だと感じたプロダクトオーナーが「なんとなく思ったことでもいいのでもっとカジュアルに色んなことを共有したい」と提案しました。そこで元々の「Keep」を「思ったこと」に置き換え、気軽にアイデアを出せるようにしました。実際、「思ったこと」は自然と他のチームメンバーへの感謝ややってよかったことなどが書かれるようになりました。これらの変更により、良い雰囲気の中で時間内に十分な議論ができるようになりました。

振り返りの具体的な方法をさらに詳しく述べます。レトロスペクティブはコラボレーションツールのFigJamを利用してオンラインで実施しています。まず、3〜5分ほど時間を取ってチーム全員が「思ったこと」を自由に記述します。この段階ではポジティブな感想でもネガティブな意見でも自由に書いて良いこととしています。制限時間が終われば全員が書いた内容を発表して意見を共有します。類似するアイデアやテーマが書かれた付箋はグルーピングします。

全員の発表とグルーピングが完了したら、付箋グループに対して一人3票の投票を行います。投票の結果、得票数が多い上位2つの項目を「解決したい課題」として選んでそれを「問題点」のエリアに移します。さらに再び3分ほど時間を取り、全員がその課題に対する「解決策」を付箋に書き出します。その後、各自のアイデアを発表してチーム全体で議論を進めます。

議論を通じて、ファシリテーターは解決アイデアを具体的に実行できる「ネクストアクション」に書き換えて提案します。ネクストアクションの中で、チーム全員が合意できた内容を次回のスプリントで実行に移します。このプロセスを2つの課題に対して繰り返すことで、効率的かつ集中した振り返りが可能となっています。

運用のポイント2: レトロスペクティブは必ずしもKPTで行う必要はない

レトロスペクティブは必ずしもKPTで行う必要はありません。そもそもスクラムガイドは振り返りに関する具体的な手法を指定していないからです。

自分達のチームでこれをやってみたいというプラクティスを採用するのが良いでしょう。KPTなど既存の振り返りフレームワークを使っていても改善効果が十分ではないと感じたら、その手法自体が適切なのかをレトロスペクティブで俎上に上げましょう。

どんなチームにも最適な万能解というものは存在しないため、現在チームを構成しているメンバーが満足する方法を探して採用しましょう。

後編ではレトロスペクティブを通してチームで改善したことを5つ紹介します。

advent calendaragile
プログラミングをするパンダ
プログラミングをするパンダ (@Panda_Program)
Software Engineer

この記事は私をシニアエンジニアにしてくれた「真のアジャイル開発」体験記の7日目の記事です。このアドベントカレンダーは「ある機能開発チームでスクラム, XP, DevOps を一度に実践したら真のアジャイル開発ができた」という内容です。執筆者はプログラミングをするパンダです。

スプリントレビュー

本記事ではスプリントレビューの定義と自分たちのプロジェクトでの運用を紹介します。

スプリントレビューの定義

スプリントレビューとはスプリントで作成したインクリメントをチーム外のステークホルダーに披露して、プロダクトについてフィードバックを貰う場です。

特に、ソフトウェアの場合は開発者が操作して説明するデモやプロダクトを見せずにスライドだけで完結するプレゼンではありません。ハンズオン形式でステークホルダーが実際にソフトウェアを操作することが重要です。これにより現段階でプロダクトの可能なことと不足していることについて、スクラムチームとステークホルダーの間で認識を揃えることができるのです。

包括的なドキュメントではなく動くソフトウェアに価値を置きましょう。ステークホルダーは自分の手でプロダクトを操作することで開発の進捗を自ら把握できます。プロダクトを操作してステークホルダーが得た気づきは、スクラムチームに対してより深いフィードバックになるでしょう。

一般論として、開発チームとステークホルダーの関係が疎遠であれば頻繁に交渉が発生してしまいます。しかし、スクラムチームはスプリントレビューを通してステークホルダーと交渉ではなく対話をするのです。この対話にはステークホルダーがチームにフィードバックをすることやスクラムチームがステークホルダーに相談や提案をすることも含まれています。スプリントレビューではプロダクトを中心に据えることでヒトではなくモノとコトに集中するため、健全な対話と健全な議論を推進できるのです。

チームはスプリントレビューで得たフィードバックをもとに、次のスプリントで着手するものを決めます。スプリントレビューはプロダクトのフィードバックサイクルの起点であり、このサイクルがプロダクト開発の好循環を産むのです。

チーム内外で対立・交渉するのではなく対話をすること。プロダクト開発では方向性の変更はつき物ではあるものの、スプリントレビューでチーム外の人も巻き込んで話し合うことで突発的で大きな方向性の変更を防げます。つまり、適切なスプリントレビューはいわゆるメテオフォールの防御壁にもなるのです。

スプリントレビューの運用

運用のポイント1: ユーザーインタビューの手法でフィードバックを集める

自分たちのチームではスプリントレビューでユーザーインタビューの手法を採用しました。当時開発していた機能は社内で新設されたビジネスチームのためのものです。このため、完成した機能を実際に利用するビジネスチームの方々をレビュワーとして毎回レビュー会に参加してもらっていました。自分たちの顧客は社内にいたのです。

レビュー会はスプリント終わりにZoomで1時間実施していました。参加者はプロダクトオーナー、スクラムマスター、開発者のスクラムチーム全員と社内のステークホルダーです。

レビュー会の前にはプロダクトオーナーがプロダクトの操作シナリオを準備していました。シナリオはある操作に成功したり、失敗したら何らかのエラーメッセージを出すパターンを用意します。テストアカウントやファイルアップロードなどデータセットが事前に必要であればプロダクトオーナーが併せて用意します。

スプリントレビューの内容は以下のとおりです。ビジネスチームの側の参加者でありプロダクトを操作する方を以下ではここではAさんと呼びます。

まずプロダクトオーナーがAさんに操作シナリオとゴールを簡単に説明します。シナリオは「ログインする」「Xをアップロードする」「Yを登録する」のように方向性だけを共有します。どのフォームに何を入力してどのボタンをクリックするといったような細かい手順はあえて伝えません。

AさんはZoomで自分のパソコンの画面共有をして手元の操作が見えるようにします。また、Aさんは操作中に頭の中で考えていることを全て声に出して貰うようにプロダクトオーナーが依頼します。Aさんはプロダクトオーナーのシナリオ通りに操作を進めてもらいます。Aさんが次のアクションに迷っている様子を見せても「下のXボタンをクリックしてください」といった答えをすぐには伝えません。チームメンバーはAさんを一定時間観察して、本当に詰まれば次の操作を伝えます。

議事録にGoogle Documentを使っていました(今であればNotionを使います)。スクラムチームは、Aさんの操作画面を見ながらのGoogle Documentの同時編集機能を使って気づいたことをメモしていきます。メモの内容はAさんの操作を観察して得られる、プロダクトの改善に繋がる洞察です。例えば「Aさんがボタンクリック前に迷っていたので、ボタンを上に持ってくるといいかも」や「エラーメッセージを見ても次に取るべきアクションが伝わっていなかったので、メッセージを変えた方がいい」などのコメントです。

Aさんの操作が一通り終了したら、プロダクトオーナーが他にも操作してみたいシナリオがあるかAさんに質問します。もしあれば、そのシナリオに沿ってまた操作をしてもらいます。

操作が全て終了した後に、Aさんからフィードバックを貰います。ポジティブな言葉は開発チームのモチベーションになるためただの感想でも良いですし、ここを変えてほしいという具体的な要望でもチームにとっては嬉しいものです。このタイミングで出てくるAさんの改善要望には明確な根拠があり、その根拠は操作画面を見ている中でチーム内に共有されているからです。「もしユーザーが実際に操作したらここが不便になるんじゃないかな」という推測ではなく、実際に不便だった点が具体的に改善要望として上がってくるのです。

開発チームにとって一通り開発が終わったと思った箇所の改修は腰が重くなるものです。しかし、自分たちが作った機能を目の前で使いづらそうに操作しているAさんを見ると、むしろ「早く修正したい」という気持ちが沸き起こってきます。スプリントレビューはプロダクトをさらに良くしたいという次のスプリントのエネルギーにもなるのです。

レビュー会の最後にはスクラムチームが取ったメモをAさんにも見てもらいます。Aさんにはチームからのプロダクト改善に対する各提案を「開発してほしい」「どちらでもいい」「開発しなくても良い」の3段階に振り分けてもらっていました。

「開発して欲しいもの」と「どちらでもいいもの」はプロダクトバックログにアイテム化をします。プロダクトオーナーはプロダクトバックログリファインメント時に、前者の優先順位を高めに、後者は低めに置くことが多かったです。チームからの改善提案で「開発しなくてもいいもの」を振り分けることも重要です。ユーザーにとって無駄な開発を避けることができ開発工数をいくらか少なくできるからです。チームメンバーが頭の中で構築した根拠の薄いユーザー像ではなく、目の間にいるユーザーの声を直に取り入れることこそが重要なのです。

総じてレビュー会の効果はスクラムチームがゴールを設定しやすくなることです。ビジネス側から「最低限の機能でいいから早くリリースして欲しい」という要望があれば、その最低限の内容についてステークホルダーと認識を合わせられます。するとチームメンバーが「最初からもっと良いものができるのではないか(しかし、良いものの定義は曖昧)」「他にも機能が必要ではないか(しかし、何の機能さえあれば十分という答えを持っていない)」という不安からくる開発工数の増大の懸念を払拭できます。

自分たちは本当に必要十分な機能を作っているのだという自信を持って開発作業にに集中した結果、ステークホルダーが期待した以下のものでもなく過剰だと思うものでもなく、期待通りのものを出すことができるのです。これこそがスプリントレビューにおけるチームの垣根を超えた理想のコラボレーションです。

運用のポイント2: ビジネスチームの新しいワークフローの構築を手伝う

機能の利用者であるビジネスチームにレビュー会を通して開発チームから進捗の共有ができただけではなく、開発チームもビジネスチームの準備状況を知ることができました。以下ではレビュー会がビジネス側のワークフロー構築に役立てたというエピソードを紹介します。

社内チームの新しい仕事のワークフローではスプレッドシートを使ったり外部のSaaSを使ったりもします。メールで社外の人とやり取りをすることもあれば、新しい機能を使って作業をした後、他の人に「次の作業に進んでください」とSlackで報告することもあります。

これまで述べたようにプロダクトオーナーはレビュー会で新機能の操作を中心にシナリオを考えていました。しかし、実際にビジネスチームの方が手を動かしているところを見ていると、開発チームに「新機能を使う前後には何をするのか」という疑問が自然に持ち上がりました。開発が初期段階のあるレビュー会でチームメンバーがその質問をすると、なんと前後の業務フローがまだ決まっていないことがわかったのです。

会社の名誉のために書いておくと、当時開発していたのはビジネス側で新設されたチームが使う新機能でした。新チームなのでもちろん会社として初めての仕事です。ゆえに過去の手順を参照することもできず、誰かが業務フローを一から考えなければなりません。そのチームの部署が発足したばかりで、仕事のやり方を決めるところまで手が回っていなかったのです。

もちろんワークフローはリリース日までに余裕を持ってしっかり整備されました。開発初期のレビュー会で未整備だったワークフローが、レビュー会を重ねるごとに順次整備される様子が開発チームにも伝わってきました。スクラムチームが「この時はどうしますか」と業務フロー上で未確定の事項を質問をすると、「これはまだ決まっていないです。次のレビュー会までに決めておきます」とビジネスチームの方が回答するというケースが何度かありました。ビジネス側での視点の抜け漏れを開発チームが補えたのです。また、ビジネス側に情報が足りず判断に困る場合は、プロダクトオーナーが適宜話を聞いて彼らの意思決定に必要な情報を伝えていました。

ビジネス側のワークフローが整備されるにつれて、プロダクトオーナーはレビュー会の操作シナリオをアップデートしていました。誰かから作業依頼が来ることをきっかけに作業を始めることや作業の完了報告をするといった機能外のアクションもフローに含めたのです。

スクラムチームはレビュー会で新機能の使われ方を見る一方で、ビジネス側で作業フローが構築されているかも見ていました。その結果、レビュー会はスクラムチームがそのスプリントの成果物であるインクリメントをビジネスチームを含めたステークホルダーに見せてフィードバックをもらうだけでなく、ビジネス側のワークフローの構築を促進することにもなったのです。

運用のポイント3: セキュリティチームと協力して「情報セキュリティのシフトレフト」を実現する

DevOpsのプラクティスに「情報セキュリティのシフトレフト」というものがあります。ここでいうレフトは時間軸の左側です。つまりこのプラクティスはセキュリティ面を開発の最後に考慮するのではなく、開発の初期段階から考えておくことを奨励するものです。

自分がいたチームでは開発初期から実現は出来なかったものの、開発の中盤からこれを実践できました。4月は仕様策定と技術調査がメインの月でした。4月の終わり頃に、どうやら社内のセキュリティチームに相談したり確認することが必要らしいことがわかってきました。また個人情報を扱うため法律面の懸念点が出てきたため、チーム内から法務にも確認が必要だという意見が出てきました。

そこですぐにプロダクトオーナーがセキュリティチームと法務チームに確認・相談のミーティングを設定して疑問を解消することになりました。普通の開発なら単発か数回のミーティングで終わらせてしまっていたでしょう。法務に対する確認は実際それだけで十分でした。

しかし、このミーティング時点ではビジネス側のワークフロー整備がまだ完了していませんでした。このためセキュリティチームはこちらから依頼した新機能の懸念点の洗い出しに加えて、ビジネス側のワークフローも一緒に確認したいという意見を出してくれました。

そこで5月のレビュー会からはセキュリティチームの方々にもステークホルダーとして参加してもらうことになりました。セキュリティチームはレビュー会で新機能に対する開発面での懸念と、作業のワークフロー全体の懸念点をスクラムチームとビジネスチームの両方に伝えてくれました。レビュー会のたびにビジネスチームがセキュリティチームの懸念を一つ一つ潰す対応をすることにより、整備途中であったワークフローがセキュリティリスクを低減したものにブラッシュアップされていきました。

例を一つ挙げると、ビジネス側の方はその作業専用のPCを用意して必ず会社でその操作を行うことに決まりました。もしセキュリティチームがワークフローのレビューをしなければ、ビジネスチームは個人支給のパソコンで作業を行なっていたかもしれません。セキュリティリスクを低減できた良い例です。

開発チームはセキュリティチームが開発における懸念点として出してくれた項目をプロダクトバックログに載せるアイテムとしました。大まかにリリースまでに対応が必須なアイテムとリリース後に対応するアイテムに分けて、リファインメントで対応の優先順位を決定しました。これによりアイテムが増えてリリース日は少し伸びたものの、セキュリティ対応は必須だと全員が認識していたため、ビジネスチームもリリース日が伸びたことを納得していました。

プロジェクト全体の振り返りで「4月の仕様策定段階からセキュリティチームに相談できればベストだった」みんなで話し合いました。それでもリリース直前の突発的な対応ではなかったので急にリリースを延期することもなく、事前にセキュリティ対応も工数に含めたリリース日を改めて算出できていました。セキュリティ対応という不確実性を開発途中で折り込み済みにすることができたのです。

このようにして、スプリントレビューにセキュリティチームも参加してもらうことで「情報セキュリティのシフトレフト」を実現できたのです。

運用のポイント4: スプリントレビューからインシデントの予行演習実施へ

レビュー会の副産物として、機能のリリース2週間前にインシデント発生時の予行演習を実施することになりました。この段階で開発は大方完了し、初期リリースに必要なアイテムが残り僅かになったため、一連の作業フローを実行する準備が整ったためです。

当日は通常1時間のレビュー会を2時間に延長し、スクラムチーム、ビジネスチーム、セキュリティチームに加え、CS(カスタマーサポート)チームにも参加してもらいました。セキュリティインシデントが発生した際の対応フローは事前にプロダクトオーナー、ビジネスチーム、セキュリティチームで策定し、法務チームにも共有済みでした。この対応フローに抜け漏れがないか確認するため、関係者全員がこのインシデントの予行演習に参加しました。

プロダクトオーナーがシナリオを準備し、各メンバーに役割を割り当てました。開始時間になると、インシデント発生を想定したSlackチャンネルを作成し(もちろん予行演習とわかる名前を付けました)、参加者はドキュメントに記載されたインシデント対応フローに基づいて行動しました。

社外秘のため実施内容の詳細は書けませんが、これは非常に有意義な時間となりました。特にこれまでのレビュー会を通してチーム内外ですでに交流があったことや、CSチームの顧客第一の姿勢も相まって、どのチームも必要な訓練として前向きに取り組んでくれました。この取り組みはスクラムの集大成だといえるでしょう。

訓練の一場面を紹介します。ビジネスチームのAさんは、想定されるインシデント内容を社内のCSチームに電話で説明し、謝罪しました。当初は「はい、ここで謝罪を行いました。次に進みます」と適宜省略しながらシナリオを進めるものと考えていました。しかし、Aさんは実際に電話をかけ、顧客役のCSチームの方に謝罪と説明を行いました。AさんはSlackのハドルでエンジニアに共有しているので、エンジニアはカメラとスピーカー越しに謝罪の様子がわかります。

それまでエンジニアたちは「事前に何重も対策をしているから、滅多なことではこのインシデントは発生しないだろう」と考えていました。しかし、現実にインシデントが起きたかのように心底申し訳さそうに謝罪を続けているAさんの姿勢は迫真の演技どころではありません。電話の受け手のCSチームの方も個人情報が漏洩していまった顧客になりきって、言葉を選びながら静かに怒っていることがわかるやり方でAさんを質問攻めにしています。

息を呑んで二人の電話のやり取りを聞いていたエンジニア全員が「このインシデントは本当に起こしてはいけない。そのような重要な機能の開発に自分達は関わっているんだ」ということを改めて認識できた。開発内容の重要性と責任をエンジニアたちが強く認識する機会となったのです。

ビジネスチームのAさんの真剣な謝罪を、たまたま社内で耳にしたCTOが「重大なセキュリティインシデントが発生してしまった。もう終わりだ…」と青ざめてしまったと後から聞きました。今では笑い話ですが、単なる演習であっても社内の多くの方に実施を共有しておこうとチームで反省をしました。

次回からは2回にわたってスプリントレトロスペクティブの説明をします。

advent calendaragile
プログラミングをするパンダ
プログラミングをするパンダ (@Panda_Program)
Software Engineer
1...34567...27