システム障害で消耗してるあなたに:失敗から学ぶための取り組み「Failure teaches Success」

こんにちは!広告エンジニアのレオです。最近、システム障害を起こしていますか?クックパッドも例外ではないです。毎月、何かしらのシステムに何かしらの障害が起きてしまいます。その際、早く気づき、速やかに対応することによって被害を最小限に留めるように努めます。そして、システムやデータを正常な状態に復旧させます。

正常な状態に戻した段階では対応はまだ完了していません。問題の本当の原因は何なのか、またその再発をどうやって防止するかを考えて手を打つまでは、障害の対応が完了したといえません。予防しない限り、また同じ過ちを繰り返すことになってしまいます。

失敗は成功のもと

根本原因分析、そして再発防止は大事な作業ですが、とても難しい作業です。クックパッドでは、これらを少しでもやりやすくするために、ルールと仕組みをまとめています。この仕組みを「Failure teaches Success」(略してFtS)と名づけています。直訳すると、「失敗は成功のもと」です。失敗の中には学びがあることを意識したネーミングです。失敗を共有することでみんなで学んで、同じ問題が発生しないようにすることを目指します。

FtSのルール

  • 問題が発生したら、チームで共有して、再発防止策を話しあう
  • "Failure teaches Success"の報告を作成する
  • 再発防止策を実施する
  • 他のチームと共有して、他の対策が必要か、よりよい対策ができないかについて話しあう

根本原因分析と再発防止策の手助けとして、考え方やアドバイスをまとめたテンプレートを用意しています。

FtS報告のテンプレート

## タイトル
- トラブルの内容を簡潔に表現するタイトルをつける

## 概要
- トラブルでおこった現象、影響範囲、経緯(必要に応じて)、技術的要因を簡潔に記述する
- 影響範囲については、技術的知識がない人であっても理解できる用語で記述する
- 技術的要因についてはトラブルに直接関係する事項だけを記載する

## 発生原因
- トラブルが発生した原因を記載する
    - 技術的要因ではなく、なぜその技術的要因を発生させてしまったのかを記載する

## 再発防止策
- チーム、全社で実施する行動だけを書く
    - 技術的要因の発生を技術的に防止できるなら、その対策をおこなう
    - 「気を付ける」「注意する」といった主観的な防止策は書かない
    - ルールが実施されていないのであれば、その原因を探ったうえで対策する
- うっかりミスや知識不足であっても、それを防止するための対策をおこなう
- 実施済みの項目と実施予定の項目を分ける
    - 実施予定についてはいつ実施するのかを記載する
        - 実施予定のものを実施したら、再発防止策の適用完了日に追記する

## 再発防止策の適用完了日
- 各対策の実施日を記入する
- 実施予定の再発防止策については、適用次第に追記する

FtSの考え方

技術的要因と根本原因は違う

システム障害等の問題が発生した場合、直接的な原因がソフトウェアやハードウェアの不具合や設定ミスであることが多いでしょう。しかし、原因は技術的要因だけではありません。仕組みや環境から由来する原因も考えられます。なぜなぜ分析などを用いて、発生原因を見つけ出します。

たとえば、こんな具合に障害を分析します。

  • データベースにテーブルが存在しなかったため、サイトが表示されなかった
    • なぜテーブルが存在しなかったのか?
  • 担当者がDROP TABLEを誤って実行した
    • なぜ誤ってDROP TABLEを実行したか?
  • 担当者が本番環境を開発環境だと誤認した
    • なぜ本番環境を開発環境だと誤認したか?
  • 作業端末で本番環境と開発環境を区別する方法がない
    • もしかして、それが根本原因かもしれない?(仕組みに問題があることを発見)
    • そもそも区別する必要があるのか?(別の疑問)
  • 開発環境と本番環境で同じ手順で作業するため
  • 開発環境と本番環境は同じ権限でアクセスできるため(複数の解答が考えられる)

それぞれの段階で複数の疑問を思い浮かぶこともありますし、原因は1つだとは限りません。

個人ではなく、チームと会社

根本原因の追求は、個人の過ちの追求ではありません。人は確率的に間違えるのが自然ですから、個人を責めても価値は生まれません。チームや会社が提供する環境・プロセスで対策・防止すると効果的です。これはとても大事なことです。

問題の直接的な原因が個人のミスであっても、ただ「気をつける」「注意する」だけでは何も変わりません。人間ですから、「気を抜ける」「不注意になる」ことは必ず発生するので、仕組みで人的要因を緩和して再発防止を目指します。

  • 手順・チェックリスト・ルールを整備する
  • ツールを導入する
  • 外部に委託する
  • 手順を自動化する
  • 作業自体をなくす

ルールのコンプライアンス問題

ルールを追加して、手順を整備するなど、人間の行動を改善するような再発防止策は費用対効果が高いこともあります。しかし、ルールや手順はいつの間にか複雑になりすぎて、ついつい忘れられていきます。「ルールを実施しなかった」といったミスの発生原因になりやすいです。ルールが実施できていなければ、ルールに何故従えないかを探って対策を行います。

よくあるルールを実施しない理由

  • 手順、ルールが多すぎる
  • ルール項目の実施が難しく、時間がかかる
  • 手順項目が退屈
  • 無駄な項目が多い
  • 手順、ルールの存在が知られていない

「対策しない」という選択

完全に対策するのが難しい問題、または非常にレアな問題は敢えて「対策しない」という選択もあります。費用対効果の問題ですが、事業への影響とリスク許容を理解した上で取る選択肢です。

再発しないように対策しなくても、該当問題の検知・計測を自動化することをおすすめします。事業や環境の変化によって、費用対効果の計算が変わりますので、再発した際に速やかに対策して再評価することができます。

人間は過ちを繰り返す

人間は必ず過ちを繰り返します。それは仕方のない現象ですから、同じ組織で同じ過ちを繰り返さないように、失敗から学ぶ仕組みを構築して対策しましょう。