Money Forward Developers Blog

株式会社マネーフォワード公式開発者向けブログです。技術や開発手法、イベント登壇などを発信します。サービスに関するご質問は、各サービス窓口までご連絡ください。

20230215130734

「Ask What, not Why」 失敗したときに自信を失いかけたら実行しているメンタル転落回避術

半年ぶりのカキコ……ども……。気づいたらHRソリューション本部からMFBC-CTO室に異動していたVTRyoです。兼任で引き続きHR系のマネーフォワード クラウドシリーズも担当しています。

ソフトウェアエンジニアとしての経験値が増えてくると、次第にレビュー担当者になることが増えてくるでしょう。私が所属するSREチームでもTerraformの相互レビューが頻繁に実施されています。そこで、事件は起きたのです。

自信を持ってApproveしたPull Requestで次々に事故が起きてしまった

現在HR内のマネーフォワード クラウドシリーズは、モダンな開発基盤へとリプレイス作業を多く行っています。これまで動いていた基盤に感謝しつつ、新しいPlatformへと移行し、最終的に元あったリソースを削除します。

事件はこの リソース削除 で起きました。

  • チーム内レビュー OK
  • リポジトリ管理者レビュー OK
  • CI OK
  • Test OK

という流れを経ているのにどうして……。結局1件目の事故は、マイクロサービス間のコミュニケーションミスが間接的な原因であります。

次の事故は、私が作成したPRがApplyされたあとに起きました。例によって、いくつかのApproveフローを経ています。

  • チーム内レビュー OK
  • リポジトリ管理者レビュー OK
  • CI OK(何度かPlanが落ちていて「よしよししっかり見てくれているじゃないか」と思っていたのに)

Applyされた途端、変更対象でないプロダクトに異変が発生しました。

「レビューもテストもすり抜けた? どうして私は気づけなかったんだ」

このようなとき、うまく立ち直らないと 「やばいめっちゃ事故起こしてる……つらい」 というメンタル状況が生まれてしまい、せっかく培ってきた自信がなくなったりします。特に経験値がまだ少ないソフトウェアエンジニア、ならびにチーム開発に慣れていない新卒の方はなってもおかしくありません。 お客様にご迷惑をかけているので、当然ながら事故が起きないように取り組むことは優先ですが、開発者がそれで自信を失ってしまうのも避けるべきです。

ではどのようにしてメンタルを回復(あるいは転落回避)すればよいのでしょう? 今回はすぐに試せる方法をいくつか紹介します。

重要度順に見る試したいワザ

  • ☆☆☆: 人間であれば効果ばつぐん
  • ☆☆: 人によっては不要
  • ☆: 優先度低

☆☆☆ 「Ask What, not Why」 反省するときは"なぜ"ではなく、"何"を問う

なぜなぜ分析が広く知れ渡っているため、原因分析に「なぜ起きたか?」を何度か繰り返して探るケースがあります。 ただ、自己反省のためになぜなぜ分析を使うのはおすすめできません。

  • どうして私は ミスをした?」
  • なぜ私はもっと慎重に考えなかったのか?」
  • なぜ私ばかり事故に合うのか?」

よくないメンタル状況になりかけている人は、このような問いの答えを導くこともありえます。

  • 「なぜなら、私は昔からおっちょこちょいだから」
  • 「なぜなら、私はエンジニアに向いている性格ではないから」
  • 「私が担当すると危ない。もうレビュー担当から外れるべきだ」

自己反省を通して上記のようなことに気づいたとしてもただ落ち込むだけです。建設的とは言い難いものです。 こうして冷静にテキストを読んでいると「いやいや考えすぎだよ」「考える方向性まちがってない?」となるのですが、自己反省という作業ではかんたんに斜め下の理由付けを実行してしまいがちです。

TEDによる「Increase your self-awareness with one simple fix」がそれをよく解説しています。

  • 人は正しく自己認識できない生き物であること
  • 「なぜ」と尋ねると、無意識の思考・感情・衝動のせいで真実から遠ざかる
    • 有名な心理実験: 4ペア置かれたストッキング。通行人に「お気に入りは?」と聞くと、ほとんどの人が4番目を選んだ。どれもすべて同じストッキングであるが「なぜ?」を問うと「これが一番いいと思った」という
  • 「なぜ」ではなく「何」を問うことで変わることが研究でわかった

この動画は自己認識に関する発表ですが、自信を失いかけたときやうまく行かない事象が発生したときに応用できます。

  • 私は何をすればよかったでしょうか」
  • 私たちが慎重になるためには何をすればいいですか」
  • 「事故に合わないためには何が重要ですか

このような問いかけ文はSREプラクティスに馴染みがある方であれば、ポストモーテムを思い浮かべるかもしれません。

ポストモーテムとは ポストモーテムとは、検死を意味する言葉です。SREプラクティスでは障害やそれに関連するヒヤリハットをポストモーテムとして記録し、次に活かします。

・ポストモーテムは以下のものであるべきです。

  • 事実の羅列
  • 再発防止のための共有資料
  • 担当者の独立した視点による状況の説明
  • チームによる議論のための材料
  • 責任を伴わない、事実把握のための開示資料

・ポストモーテムは以下のものでないべきです。

  • 反省文
  • 再発防止策を伴わない報告書
  • 担当者の苦慮や事情説明に終始した文
  • 批判の材料
  • 責任を押し付けるための、証拠資料

 

問いかけ文章を変えただけですが、これならば建設的な意見が出る予感がします。PagerDuty社のポストモーテムのテンプレート例を見ると「何」に関する項目が用意されています。 「なぜ起きたのか」ではなく「何が起こったのか」 と記載されているのは、この心理を応用しているからでしょう。

お客様のためにも事故や障害を起こさないことが重要ですが、それでも失敗はつきものです。事象と自分を切り離すことで、適切に問題に取り組めるようになります。

<宣伝> 自己認識にまつわる話をもっと深めたい方必見!

ジブンノセツメイショ、好評発売中! VTRyoの章では今回紹介した「Increase your self-awareness with one simple fix」を参考にした、ネガティブを突破する技術がストーリー仕立てで読めます。

ピーナッツ&ビターステップ - VTRyo 「良いですか、落ち着いて聞いてください。あなたは新種のウィルスに感染しました。病名は、突発性理不尽症候群。残念ながら、この感染症には明確な治療法も、感染理由も見つかっていません」

ネガティブ感情に反応し不運をもたらす新種のウイルス"突発性理不尽症候群"に感染した男が、ひとりの占い師と出会って再生していく短編物語です。

「答えのないものに答えを見つけようとしないで。約束ですよ、いいですね?」

☆☆ 原因が違うことを認知する

事故が連続したとしても、正しく原因を究明して反省することで次の失敗を回避できます。それでも事故が起きると「ああ、なんてことだ。またしてもやってしまった」と考えてしまうわけですが、原因が異なるケースがほとんどです。

何度でも書きますが、お客様に迷惑がかかっているので事故を起こさないことが一番良いのです。が、起きてしまったことや自分を責めていても良いことは殆どありません。 その場合、次のようなことを認知していると冷静になれます。

  • 前回の事故とは原因が異なること知っている
  • 前回の事故での原因となる部分の一時的な対応は完了している・根本解決の計画ができていると知っている

原因はきちんと潰しているという事実があれば、今回起きたことは全く別の問題だとわかります。当然レビューやテストをクリアしているので、「偶然また自分がトリガーになってしまっただけで、誰がやってもおかしくなかったものだ」と切り離すことができます。

各位がポストモーテムからアクションプランを作成し、進捗管理することでより迅速に認知できます。

「原因が違うのであれば、どんなに似ていても異なるものである」という発想は、エラートラッキングツールのRollbarでも見て取れます。RollbarはNew Itemという通知手段があります。たとえば同じタイトルのエラーであっても「根本原因が異なるから」という理由でNew Item扱いにするという記載がありました。

Goals

Rollbar tries to combine occurrences such that:

  • Occurrences with the same root cause are combined
  • Occurrences with different root causes are kept separate
  • Fingerprints are resilient to deploys and code changes

https://docs.rollbar.com/docs/grouping-algorithm

新たなポストモーテム執筆やそれに類似したふりかえりを実施し、今回の原因を究明して同じ過ちを繰り返さないような具体的なアクションに移行しましょう。

☆ 失敗が他の人の学びになることを認知する

正直考えなくても大丈夫ですが、他の方へ一定の迷惑がかかってしまったことによる罪悪感がある人は効果があるかもしれません。

  • 社内情報共有ツールに書く(ポストモーテムを書く、それ自体をさらに全体に共有するなど)
  • ブログにする(VTRyoはこれ)

「自分が引いてしまったからこそできることがあるかもしれない」という発想に持ち込むことで、自己肯定感を取り戻す作戦です。 今回の記事は、機密情報に触れずに外部へ学びを提供しようとした結果「メンタル転落回避術」になりました。もちろんポストモーテムは社内で作成済みです。

まとめ

気づいたらポストモーテムのステマのような記事になっていましたが、これは書いていて途中で気づきました。SREプラクティスって人間心理に寄り添っているんだということを改めて知り、これには心理学科卒のVTRyoもニッコリです。

人(自分)を責めず、問題を適切に扱いましょう。メンタルを大事に。

それではまた。