真面目で優しいシステムエンジニアは損をする④~決断~
どうも!ヒグッティ(ヒグッティ@システムエンジニア)です!
私の実体験を元に真面目で優しいシステムエンジニアが損をすることについて書いていこうと思います。 これはフィクションです。とあるシステムエンジニア、ヒグッティの物語です。
前回はプロジェクト開始のドタバタを書きました。
今回は決断についての話となります。ではお楽しみください。
交渉
お客さんから見積もりとスケジュールの再作成を依頼されてから2日が立ちました。その間、機能一覧を作ってもらったり、その機能をテストするのにどのくらいかかりそうかをチームメンバと話し合いました。その中、やっと見積もりが完成しました。スケジュールは見積もりがお客さんと合意が取れたら作成することになりました。
○わかったこと
・機能数は全て合わせて250機能くらい(バッチ処理∶200機能、Web画面∶50機能)。最初の見積もりでは機能数は数えていなかった。
・1機能あたりの単体テスト完了までの時間は2.5日くらい必要。最初の見積もりでは1日くらいと予想していた。
・DBを変換してから単体テスト完了まで22人月くらいかかる。当初は12人月くらいと考えていた。
・大体のバッチ処理はOracleのplsqlで作成されていた。その他はJavaで作成されていた。
見積もり資料を元にいざお客さんとの会議に臨みました。

PM∶見積もり結果はどうでしたか?
ヒグ∶けっこうやることが多いですね。機能数が多くてテストなどに時間がかかりそうです。DBの変換は最初に予想していた工数の2倍くらいかかりそうです。
PM∶えー、それは本当ですか?優男さんの見積もりと2倍も変わるなんて何か間違えているのではないですか?
ヒグ∶いえ、機能数も計算しましたし、機能の中身も一部ですが確認しました。最初の想定よりもかなり工数がかかります。
PM∶その工数が必要な理由は?どうやって見積もりしたんですか?根拠は?
ヒグ∶仕様書やソースを見てメンバと相談しました。機能数と1機能あたりのテスト時間から割り出しました。
PM∶機能を全部見たわけじゃないんですよね?もしかしたら、作業しなくて良い機能があったり、メンバの習熟度が高くなって生産性が上がれば、もっと短期で完了できるんじゃないですか?機能毎にの難易度をつけたり、あとからメンバの生産性が上がったときの事も考慮して下さい。もう一度、優男さんと相談し直して下さい。
ヒグ∶まだプロジェクトが開始してから1週間も経っていないですし、全機能を見るのはちょっと時間が…
PM∶この見積もりは今後の作業に大きな影響を与えるものになりますよ。時間がないのはわかりますが、ここでやらないと後でもっと大変なことになります。早急にやってもらえないですか?
ヒグ∶わかりました。確かに大事なことですよね!
PM∶お願いします。で、いつくらいに見積もりできます?
ヒグ∶…もう少し調査するので本日中に報告します。(さっき全機能の難易度つけろって言われた直後で、いつできるかなんてわかるか!)
PM∶お願いしますね。
会議が終わりその内容をチームメンバと相談。チームメンバには仕様の理解やDB変換に伴う影響調査などをしてもらっており、WBSで作成した通りのスケジュールをこなしてもらっていました。その中でさらに各機能の難易度を調査してほしいと伝えました。

ボウズ∶調査の件はわかりました。でも調査範囲が大きいので時間がかかります。今の作業もありますし、平行して作業と調査をやるのは無理です。
ヒグ∶ですよね…了解です。じゃあこの調査は私がやりますね。皆さんはこれまで通りの作業を続けて下さい。
ウーバ∶DBの変換なんですけど、OracleからAuroraに変換できました。でも問題があります。テーブルは変換できるんですけど、plsqlは変換したあと、エラーが大量に発生しています。理由はわかりませんが。
ヒグ∶そうなんですね。仕事早いですね。plsqlが変換できない理由を探すしかないですね。ウーバさん引き続きお願いします。
ウーバ∶いえ、plsqlの変換したあとの修正や開発は美容師さんが担当になっています。
ヒグ∶確かに。WBS見ると担当は美容師さんになっていますね。美容師さんお願いします。
美容師∶わかりました。ウーバさんとはDB変換について、一緒に作業していたので大丈夫です!
ヒグ∶頼もしい!ありがとうございます!
チームでの共有が終わってから優男さんと見積もりについて相談しました。見積もりの根拠や各機能の難易度について相談しました。
優男∶まだプロジェクトが始まったばかりで、無茶な要求だなー。各機能の難易度を割り振れだなんて。これできそう?
ヒグ∶できると思います。機能一覧はあるのでそこからソースとか見ていきます。
優男∶そか!頼む。俺もできることあったらやるよー
ヒグ∶ありがとうございます。お客さんも早めに見積もりがほしいと言っていたので土曜日に出勤して調査したいと思います。
優男∶了解。無理はするなよー。最初から飛ばしてると体持たないから今日は早めに帰れよー
ヒグ∶了解です。
この日は定時であがることにしました。
そして次の日、これがこのプロジェクトで最初の休日出勤でした。誰もいないオフィスに私一人だけ。誰もいないので作業に集中できました。全ての機能を細く見ることは不可能でしたが、ソースは全て目を通しました。ステップ数から大体の難易度を決めて見積もりの資料を作成していきました。
決断
見積もりの作成は順調でした。優男さんと相談しながら見積もりのExcelに難易度や開発にかかる日数、テストにかかる日数、問題発生時のバッファなどを追加し、見積もりの根拠もわかりやすい資料を作りました。今思うと出来の悪い資料だったかも。お客さんとも事前に見積もりを見てもらい、見積もりの見方やこんな感じで作ってますーとネゴを取りつつ進捗を共有しました。当たり前だけど、お客さんと事前に方向性を取るのは大事!つかこれができれば、職種関係なく仕事できる人になれます。私はできてなかったけど。
そんな中、新たな問題が発生します。

美容師∶ヒグさん、すみません。ご相談があります。
ヒグ∶はい。何ですか?
美容師∶plsqlファイルの変換なんですけど、全然わからないので教えてくれませんか?
ヒグ∶わかりました。見せてください。(全然わからないって…)
美容師∶このプログラムを動かしたいんですけど、どうやって実行していいかわからなくて…
ヒグ∶これは、このファイルをクリックしてから、このボタンを押せば実行できますよ。
美容師∶本当だ!ありがとうございます!
ヒグ∶plsqlファイルの変換なんですけど、このファイルを優先的に調査してもらってもいいですか?この先、このファイルに改修が入る予定なので、先に変換を終わらせておきたいんですよー
美容師∶わかりました!やってみます。
それから数時間後、
ヒグ∶美容師さん、どうですか?
美容師∶大丈夫です!順調です!
ヒグ∶そうですか!よかった!会議などであまり相談にのれないですが、お願いします。ウーバさんにも相談してください。
美容師∶了解です。
それから数日、美容師さんから何も報告がありませんでした。しかも、私も見積もりやスケジュールのことで忙しくしていたため、あまり進捗を確認できていなかったのです。今思うとリーダとしてあるまじき行為でした。やることがフワフワしていて、メンバの実力も把握できていない時にほぼ野放し状態にしていました。そこで、私は美容師さんの進捗を確認しました。
ヒグ∶美容師さん、どうですか?
美容師∶すみません。全然わからないです…
ヒグ∶何がわからないんですか?
美容師∶わからないです…
ヒグ∶えっ…ちょっと見せてください。…あれっ?これは私がお願いした内容と全然違うファイルを見てませんか?
美容師∶あっ!作業に集中していたら、いつの間にか違うファイル見ていました…
ヒグ∶えー!り、了解です…ちなみに今どんな感じですか?
美容師∶このファイルをクリックして、実行ボタンを押すんですけど何も反応がなくて…ファイルを専用のエディタで見るとこの行がエラーになっていました。多分これが実行できない原因だと思うのですが、直し方が全然わからないです…
ヒグ∶なるほど…(この数日間、何やってたんだ?)
美容師∶どうしましょ…
ヒグ∶…(どうしましょ?って言われてもなぁ…)ウーバさんには相談しました?
美容師∶いえ…
ヒグ∶じゃあ、ウーバさんにも相談してみましょう。私の方でも調べてみます。
美容師∶了解です。
この会話の後、ウーバさんとも相談し、plsqlファイルの変換を手伝ってもらいました。結果として美容師さんは数日間全く作業を進めていなかったのです。
プロジェクトの最初は日々の進捗を細く確認すべきでした…
しかし、このファイル変換に思いもよらない苦戦を強いられることになりました。
美容師さんの作業をウーバさんにも手伝ってもらいましたが、ウーバさんも全くわからないとのことでした。仕方なく私も調査をすることに。調査してみるとこのplsqlファイル変換作業がとてつもなく大変な作業ということがわかりました。
○調査でわかったこと
・plsqlからAuroraでも使えるファイルへの変換はツールで自動的にやってくれるが、簡単な文法しか変換してくれない。
・トランザクション管理※に関する文法は変換してくれない。
・Auroraからファイルにアクセスする操作ができない。具体的にはファイルの作成やファイルに処理のログを出力できない。
・ツールで変換できない箇所はコメントアウトされる場合がある。
※トランザクションとは処理の単位のこと。例えば、サイトにログインしてからメニュー画面が表示されるまでが一つのトランザクションとなります。
この調査結果はかなり焦りました。調査結果も焦りましたが、この調査はほぼ私がやり、美容師さんは何も調査できていなかったことにも焦りました。そう、美容師さんは技術が全くできないということがわかりました。あとで聞いた話だと美容師さんはいつも先輩に仕事をやってもらっていたり、テスト作業しかやってこなかったようです。
ファイルの変換は多少できない箇所もあるとは思っていましたが、ほぼできないとは…ちなみに全体の99%変換できませんでした。
調査結果からプロジェクトの方針を再検討する必要がでてきました。チームメンバ全員と相談しましたが、この変換についてみんなノウハウや経験がありませんでした。優男さんや会社メンバに相談しましたが、同じノウハウや経験を持っている人はいませんでした。この時点で今後のプロジェクトの方向性を決める大きな決断をしなければならなくなりました。
○選択肢
1.このままファイルの変換を進める。(手動)
2.plsqlファイルを別のプログラム言語に変換する。(手動)
3,1,2のハイブリッド
私は2を選択しました。チームメンバにplsqlの知識がないこと、別のプログラムであれば出来そうだということを元に判断しました。この判断が合っていたかどうかは未だにわかりません。この事をお客さんとも共有しました。

ヒグ∶こういった理由で別のプログラム言語に変換しようと思います。どのくらい工数がかかるかはこれから見積もりします。
PM∶了解です。私は技術的なことはほとんどわからないのて、そちらにお任せします。で、見積もり何ですけど、どのくらい工数がかかりそうですか?
ヒグ∶何とも言えないですけど、今のメンバだけでやろうとすると来年2月くらいまでかかるような気がします。工期は半年ほど必要かと…
PM∶それはないでしょ!だって、そちらの作成したスケジュールでは3ヶ月くらいで終わるようになってましたよ。11月くらいにDB変換とかplsqlの変換が終わるって言ってたじゃないですか?
ヒグ∶しかし、状況が変わりましたし…(11月に終わるって言ったっけ?)最初の前提ではツールで変換してテストするだけと聞いていたのであまり工数を積んでいませんでした。
PM∶とにかく最初のスケジュールと同じように11月で終わるようにして下さい。タスクを組み替えるとか、作業を自動化するとか!優男さんとも相談してください。
ヒグ∶わかりました…考えます。
PM∶あと…この後、少し会議できます?別チームの人から相談を受けてて、一緒に話を聞いてもらいたいんですよ。
ヒグ∶いいですよ!
そんなこんなで、色々終わったのが18時。PMさんからの相談は別チームでサーバにミドルウェアのインストール方法がわからないからアドバイスがほしいとのことでした。私は全然分からなかったので役に立ちませんでしたけどね。
さぁーて、別のプログラム言語で変換しなきゃいけないなー、どうしよ?工数も出さないといけないし、やる事いっぱいだー!まぁなんとかなるか!
帰宅途中、すごく月や星がキレイでした。風も涼しくて良い季節だなーそろそろゴルフ行きたいな!などと考えていました。
帰宅後、妻の用意した夕食を食べて、東海オンエアの動画をみて就寝しました。
まとめ
見積もりで工数決めるのは大変。根拠を数字で用意したい。
生産性はメンバの習熟度も考慮に入れる。これは結構難しい。
休日に1人で作業すると、結構はかどる。
大丈夫です!の一言は大丈夫じゃない。
メンバの実力を把握して、都度、適材適所の仕事に割り振れ。