Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

「失敗」への対策は「管理」じゃない

「失敗」を繰り返さないための対策は「管理」を強化することじゃない。


たとえば、プロジェクトにおいてあるメンバーのスケジュールが遅れていたことが後でわかった。
よくある対策としてはメンバーの進捗を「より」きちんと管理するという発想。
これが「管理」を強化するという意味。


たとえば、職場のネットで不正なサイトを閲覧していた。
対策としてフィルタリングを強化する。
これも「管理」を強化するという意味。


たとえば、本番環境へのデプロイの手順を間違えて失敗した。
対策として、デプロイ作業の手順をチェックリストにし、作業を実施する際に利用する。
これも「管理」を強化するという意味。


ふと考えると、(世の中もだけど)プロジェクトはこうした対処がありふれていることに気づく。


これは、問題の「対策」じゃない。
問題をひっくりかえして「対処」しただけだ。

  • 進捗を把握できていなかった→進捗を把握するようにする(進捗管理を強化する)
  • 不正なサイトを閲覧した→不正なサイトを閲覧できないようにする
  • デプロイに失敗した→失敗しないようにチェックする

これは、イタチごっこを産むだけだ。
マネージャでもエンジニアでも、問題の解決に対して、問題をひっくりかえすだけの対処はしちゃいけない。無意味だから。


そもそも問題が発生しえない土壌を作ることをまず考えないといけない。
はてなを見ているようなみんなならわかってるよって言われるかもだけど、
たとえば3番目のデプロイの件なら、バッチなど自動化をするってことがあるよね。
人間はどんなに注意しても間違うことがある。
# バッチのプログラム自体にバグがあって失敗するはあるかもしれないけど、
# バグを直せば少なくとも同じ失敗をプログラムは繰り返さない。


ここでは自動化の話をしたいのではなくて、
問題の対策は、問題が発生しえない環境を作ることだってこと。


不正なサイトを閲覧できないように、フィルタリングを強化したら必要なサイトまで見れなくなって作業効率が落ちるという話をよく聞く。
まったく本末転倒。ましてや僕らエンジニアだぜ。。。


不正なサイトを閲覧しないような人材にしたらいいんだよ。
おっと、セキュリティ講座を受けさせるとかじゃないぜ。
プロジェクトやチーム、同僚や後輩や上司、俺たちは業務に必要なサイトは見るけど不正なサイトなんて見ないぜ、という雰囲気を作るんだよ。
伝統と言い換えてもいいし、プライドと言ってもいい。


「エンジニアとしてのプライド」で自分の行為に線引きさせるんだよ。
そうしたプライドを育てる。
管理しなくていいし、ラク。


進捗もそう。管理を強化するんじゃない。
自分からすぐに悪い報告ができるようにさせるんだよ。
「進捗の遅れを報告しないなんてエンジニアとして恥ずかしい」と思わせるんだ。


じゃあそういうプライドをどう育てるか。
これを考えることが真の意味で「問題の対策」なんじゃない?


僕がそういう立場なら、まずはこういう所から始めるかな。
技術がデキるエンジニアにする(できないと投げやりな仕事になる)*1
イベントなどで社外のエンジニアに触れさせる(ロールモデルを作る)。

*1:自分のことは棚に上げる