完璧を目指して終わらないのではなく、埋もれている作業をしているから終わらないだけ
facebookのザッカーバーグが言ったらしい、有名なフレーズです。
終わらせろ、と。
神よ、完了予定日までに終わらないエンジニアには罰をお与えください。
マジこれな。
それを言いたいのではなくて、エンジニアの仕事が終わらない理由は様々あるけれど、納期とコストと実現しなければならない品質があったとき、エンジニアは何を考え、意思決定しなければならないのかということの方が語りたいのです。ええ、語りたい。
プロジェクトですから、プロジェクトの目的があって、有期限性の業務活動であることは何度も書いてきていることです。そう言えばそんなことも見た記憶があるなーと思い出してもらえれば結構です。上で書いたし。
そうした制約、エンジニアにとっては制約です。作業をする前から決められている枠のようなものですから。その上で、プロジェクトの目的のシステムを完成して届けるためのパーツを作ったり組み立てたり、稼動確認したりするのがエンジニアの仕事です。
さて、このエンジニアがしなければならないことのどこに完璧があるのか。
どこにもないし、世の中には、第一、完璧なんてないんです。それに完璧なんて目指す必要もないし。しなければならないのは、品質要求を満たすシステムを期日までに完成させることだけです。
まあ、もしも顧客が完璧なシステムをと言ってきたら、完璧という言葉を定量的に定義して、必要なコストを見積もれと差し戻せばいいです。出来やしないので。なぜ出来なか。それはシステム開発においてSIerだけで完成しないから。そう、顧客自身の役割分担があるもので、そちらで多くはfaultが起きるから。
どこでかって。それは要件定義でですよ。
話を戻して、エンジニアは仕事を終わらせなければならない。でも終わらせられないエンジニアが多く、こうしたエンジニアは何をしていて期日までに終わらないのか。
それは自己満足の完璧を目指して今その技術情報を調べる必要があるのか、ということをしているから自分で見積った時間内に終えられないんです。
エンジニアがやらなければならいことは、納期までに品質要求を満たすパーツを完成させることだけです。作業を初めて調査をするような仕事のやり方をしていてはダメなのです。材料は先に揃っていないとおかしい。なぜならば、それは作業プロセスのインプットだから。
インプット → 作業プロセス → アウトプット
作業プロセスで調査をするな、ということです。それが必要なら、タスクは分けて、調査の作業と実装の作業を設けることです。
あれ、おかしいですね。完璧を目指していたはずが実は調査という埋もれていた作業をしていたのではないかという疑惑になってしまいました。ここでコナンくんが出てきたら誰か死んでますね。エンジニアでしょうけど。それともエンジニアに殺められたPMか顧客でしょうか。
エンジニアが仕事としてやらなければならないことは、納期までに要求品質を満たすパーツを作り上げることだけです。それに必要な作業は列挙されていなければならないし、まるっと括ってしまっているなら、何が詰め込まれているかはっきりしておかなければ、1つの作業で進捗を計られ、期日を超過したと責められるだけだし、PM的には何やっているんだこいつは、となるだけです。誰も嬉しくないのです。
終わらせましょう。期日までに。