6ヶ月間、エラーを握りつぶしていた

エラーハンドリングは上手くいっていると思っていた。

try/catchブロックを使い、コンソールにログを出し、Sentryのダッシュボードも使っていた。

それでも、ユーザーは壊れたフローに直面していた。ファイルは消え、決済は確認なしに進み、フォームは音もなく失敗した。

問題はエラーをキャッチできなかったことではない。エラーをキャッチした上で、何もしていなかったことだ。

コードにはこんなコメントがあった: // TODO: handle this better

そのコメントは6ヶ月間、そのまま放置されていた。

アップロードが失敗しても、ユーザーには止まらないローディングスピナーが表示されるだけだった。何かが起きたことすら分からず、何度もやり直し、そして諦めてしまった。

顧客からの苦情を受けてアナリティクスを確認したところ、次のような数字が出てきた。

• ファイルアップロードの23%がサイレントに失敗していた。 • ユーザーは平均2.7回リトライを試みていた。 • すべてのエラーをキャッチしていたため、ダッシュボードは「正常」を示していた。

私たちは「静かなる災厄」を運営していた。ダッシュボードは緑色だったが、ユーザーはフラストレーションを溜めていた。

すべてのサイレントなキャッチを新しいパターンに置き換えた。現在はエラーをタイプ別に分類している。

• ネットワークエラーはリトライダイアログを表示する。 • 権限エラーはガイドを表示する。 • 不明なエラーは明確なメッセージを表示し、コンテキストをログに記録する。

その結果、すべてが変わった。

• サイレントなアップロード失敗は23%から0.4%に減少した。 • ユーザーからのアップロードに関する報告は89%減少した。 • ファイル紛失に関するサポートチケットは、週15件から週1件に減少した。

最大の成果は可視化だ。チームは即座に失敗を把握できるようになった。怒りのメールを待つ必要はなくなった。

エラーハンドリングとは、クラッシュを防ぐことではない。失敗をユーザーとチームの両方に可視化することだ。

クラッシュは正直だ。サイレントな失敗は嘘だ。

catchブロックを書くときは、自分自身に2つの質問を投げかけてほしい。

  1. これが失敗したとき、誰が知る必要があるか?
  2. 彼らは次に何をすべきか?

もし答えが「誰もいない」なら、それは問題だ。

Source: https://dev.to/kollittle/i-swallowed-my-errors-for-6-months-then-my-users-found-every-single-one-12fi

Optional learning community: https://t.me/GyaanSetuAi