【システム開発の心得】故障が出てしまった時にPMがやる3つの作業
システム開発において故障がでるとまあ大変です。
プロジェクトや会社によって対応方法は違うとは思いますが、以下の3つは共通しています。そして偉い人はここしか興味がありませんので、最低限のこのやり方を覚えておけば怒られる事は減るでしょう。
PM(プロエクトマネージャー)がやる3つの作業
①事象の分析
まずは故障事象を理解することから始まります。
ここでは「AP(アプリケーション)を実行して出来るはずだった帳票が作成されなかった」という事象だったとします。
次に何故その故障が起きたのか原因を調査します。
工程ごとに原因を考えていくと分かりやすいです。
(ウォーターフォール型のシステム開発を前提としてます)
- 要件定義→お客さん要件に漏れがあった
- 設計→設計方式に考慮が足りていなかった
- 製造→コーティングでミスがあった
- 試験→テスト観点が足りなかった
などが挙げられます。
しかしここで満足して分析を終わらせてはいけません。必ずなぜなぜ分析をして下さい。なぜなら故障原因には表層的な原因と深層的な原因の2種類があるからです。
ここでいう「コーディングにミスがあった」をさらになぜなぜ分析をして調査をすると、以下のような原因が出てきます。
- コーティングの担当者が1年目のプログラマーに変わったから
- コーディング言語がJavaからc言語に変わったから
これが深層的な原因になります。
次から紹介する横展開と再発防止策は深層的な原因に対して行うわないと効果が出ません。
②横展開で確認する
システム開発の世界では横展開という言葉がとてもよく使われます。Aという機能で発生した故障がBやCの他の機能にも当てまらないかを確認するという意味ですね。
大きなシステム開発では1万以上のモジュールを同時に作成しているので1つのモジュールで発生した故障が他のモジュールにも無いかを確認することは当たり前です。
で、ここで横展開で他の機能を調査するときに範囲を狭めることが必要になるのですがここで深層的な原因が効いてきます。
プロジェクトには予算とスケジュールの制約があるので、悠長に全部調査していてはプロジェクトが炎上してしまいます。
表層的な原因の「コーディングにミスがあった」で横展開をするとイメージとしては1000個のモジュールを全て調査しないと他にも故障が無いことを担保できません。
ただ深層的な原因の「コーディングが担当者が1年目のプログラマーに変わった」という事が分かっていると横展開範囲は1年目のプログラマーがコーディングをしたモジュールに絞る事が出来まるので数としては1000個よりかなり少なくなります。
③再発防止策を実行する
再発防止は文字通り同じ故障がもう1度起きないように対策を打つことです。これも横展開と同じように表層的な原因ではなく深層的な原因に対して対策を打たないと意味がありません。
「コーディングにミスがあった」だけでは対策の打ちようが無いと思います。
深層的な原因の「1年目のプログラマー」だとしたら筆者がぱっと考えるだけでも以下のような対策が打てそうです。
- 1年目のプログラマーの成果物には必ず有識者がRVをする
- 1年目のプログラマーにコーディング規約などのルールを習得させるために試験を実施する
- セルフチェックを徹底させるためにコーディングチェックリストを使用させて、結果を上司が確認する
ここら辺はセンスが出るところですが、筆者ならこんな感じかなぁと思います。本業だったらあんまりコーディングに詳しく無いので本職の人にもちろん確認した上で再発防止策を決定しますが。
👇まとめ
横展開は今この瞬間と過去に対する対策ですが、再発防止策は未来のために打つ対策です。プロジェクトの状況によっては使い分けがもちろん大事ですので、ここら辺は現場のリーダーに聞いてみましょう。
ただあんまりこうした形式な対策をやり過ぎるとプログラマーに嫌われるので、本当に対策を打つ必要があるのかは必ず見極めをしましょう。そこにPM(プロジェクトマネジャー)としての価値が出て来ると思います。