問題の切り分けと仮説思考

たまには仕事の話でも。ソフトウェア関連の不具合が発生した場合、エンジニアはまず問題の切り分けを行い、仮説を立て、その仮説をベースにしてデバッグに入る。初期のタイミングでの切分け(どのレイヤーの問題なのか、例えば、自分が書いたJavaのコードの問題なのか、JDBCの問題なのか、ネットワークの問題なのか等)、および仮説設定(多分、JDBCのコネクションがおかしいとか)が上手くいくと、その後の解決までが早かったりする。逆に、見極めを失敗したり、手当たり次第調べ始めると収集がつかなくなって疲労困憊することになる。問題の切り口の設定、および仮説設定を上手にできるかどうかというのは結構「いままでの経験に裏打ちされた勘」に寄るところが多かったりする。できる先輩エンジニアがログファイルを見た瞬間に「あ、このへんじゃないの」とサクっとroot causeの特定を行えるのもの、過去の経験に裏打ちされた勘で仮説をたてている場合が多いのではないだろうか。*1適切な切分けと仮説を設定するというスキルの重要性は別にソフトウェアの仕事に限らず、他の仕事でも当てはまるだろう。限りある時間の中でさっさと仕事を終えて帰るためには仮説思考は重要なスキルである。今週、小職は切分けと仮説の設定を間違えたまま突き進み、結局ほぼ毎日夜遅くまで家でも仕事するはめになった。。失敗。

*1:まぁ本当にできる人は別に経験がなくてもサクっとわかるんだろうが。。