あるバグのミステリと、労働条件格差
そのプロジェクトが稼働してからしばらくの間一緒に働いて来た職場の同僚が離れる事になった。同僚と言っても、僕らはいわゆる外注社員でまったく別の会社だった。恐らく、これでもう同じ現場で働く事はないだろう。
「なんだか悪いな。君には充分な実力があった訳だし」
彼が去る時、僕はそう言った。すると彼は「よしてくれ」とこう続ける。
「僕は自ら出て行くんだぜ。それに君にだって僕と同じくらいの技術力があるじゃないか」
僕ら二人は情報技術のスキルを持っていて、主にプログラミングでその現場では働いていたのだ。稼働したは良いけどバグだらけで、運行に耐えられそうにもなかったそのプロジェクトの状況をなんとかする為に呼ばれた内の二人で、なんやかんやで他のメンバー達が離れていく中で残り続けた。だから、何と言うか、僕は彼を戦友のように感じていた。
彼が離れる事になったのは、単純に予算の都合だった。僕ら二人の内のどちらかが去らなくてはならないという選択を迫られたところで、彼は自ら手を挙げて職を離れると主張したのだ。
「ま、この現場、ぶっちゃけ支払いが良くないからね。争ってまで残る価値なんてないさ」
その時、そう彼はおどけながら言った。
それは事実だった。この職場にはできる限り外注社員の賃金を低く抑えようという風土のようなものがあり、しばらくいて分かったのだけど、それはどうやらプロパー社員の高い給与を確保する為であるようだった。
実はそこにちょっと納得のいかない事情があった。
本来なら、プロパー社員がメインで外注社員がサポートというのが理想だろう。外注社員はいついなくなるか分からないし、プロパー社員はそれだけ高い給与を貰っているのだし。ところが現実はそうじゃない。ユーザとの話し合いこそプロパー社員がメインだけど、その他は外注社員がメインなんだ。何故なら、プロパー社員には技術力がない場合が少なくないからだ。
(いや、どちらもメインでこなせるプロパー社員もいるのだけど)
もちろん、時間をかければプロパー社員にだってできるかもしれない。それに、技術力を身に付ける事だって。
が、しかし、先にも書いた通りプロパー社員は給与が高い。残業代だって当然高くなる。だから、そんな事をすればコストが高くなり過ぎてしまう。
つまり、プロパー社員(の一部)は、その高い給与の所為でメインの仕事ができず、技術力も身に付かないというなんとも皮肉な事態になっているんだ。
(これはどちらかと言えば会社側にその責任があると思う。適材適所で確りとスキルを身に付けたプロパー社員を担当にするべきだ)
今回の件だってそれが原因だろう。プロパー社員の給与を下げさえすれば、別に僕らのうちのどちらかがここを離れなくちゃならないなんて事にはなっていなかったはずなんだ。彼は辞める必要なんてなかった。
「どちらかと言えば、僕は君の方に同情するね。僕がいなくなったら、君に仕事が集中するから、やっと楽になって来た仕事がまたきつくなるぜ。しかもこのままじゃ、契約金はそんなに上がらないだろう。
どうだい? どうせなら、僕と一緒にここを離れないか?」
僕が彼がいなくなる事を惜しんでいると、彼はそう僕を誘って来た。
僕はそれにこう答える。
「でも、ここは交通の便が良いんだ。それに、色々な人に迷惑をかけるのだって気が引ける」
それを聞くと彼はおかしそうに笑った。
「そう言うと思ったよ。優しいな、君は。実はそんな君にちょっとばかりプレゼントを残しておいたんだ」
「プレゼント?」
「ああ、きっと君なら気が付くと思う」
僕は彼の言葉を不思議に思ったけれど、結局彼はその意味を教えてはくれなかった。
彼が去ってからしばらくが過ぎたある日、僕はバグの報告を受けた。
と言っても、それは僕の担当ではなくプロパー社員の担当領域で、去っていった彼が開発を行った比較的安定した部分だった。
「どうしても原因が分からないんです。助けてください」
そのプロパー社員によれば、何の問題もないように思えるのに、何故かタイムオーバーのエラーが発生してしまうのだそうだ。
僕は依頼を受けて、早速、コード解析を行った。すると、それはSQL(データベースを操作する為の言語)にオーダー指定がない為に起こる非常にレアなケースのバグだった。確かにこれでは分からなくても無理がない。
そのプログラミングは、使用メモリーを抑える為に、一行ずつデータを取り出しては処理を行うという特殊な実装になっているのだけど、一行の処理に時間がかかり過ぎるとタイムオーバーのエラーを発生させ、自動的に処理を中断させる仕組みになっている。
オーダー指定のあるSQLなら、まずこれは発生しない。
オーダー指定というのは、要は“順番通りにデータを取得しろ”ってな命令なのだけど、その為、順番通りに取得する為に最後まで検索を行ってからデータを返す。だから、始めの検索処理には時間がかかるけど、それ以降のデータの取得には時間がかからない。結果として、一行毎の時間も短くなる。
ところが、オーダー指定がないと、こうはならない。
順番はどうでも良いので、取り敢えず検索できたデータだけを直ぐに返し、それが終わったらまた検索が走るという事を繰り返す。その為、どこかの行の途中で検索の為に処理が止まってしまい、結果として一行の時間が長くなってタイムオーバーが発生してしまうのだ……
ま、原因さえ分かればあっという間に直るバグでもあるのだけど。早い話がオーダー指定してやれば良いのだ。
「はい。直りましたよ」
僕が現象とバグ解決した事を報告すると、プロパー社員は大いに喜んで感謝してくれた。図らずもそれで評価が上がったようだ。
それから僕は不思議に思った。
先にも述べたようにこれはレアなケースだから、この現象をあの彼が知らなくても無理はない。が、それがなくても、何かしらオーダー指定する方が一般的だ。
その方がデータを追い易くなるし、何かしら改修を行った時の現行保証テストだって楽になる。
どうして彼はこんなミスを犯したのだろう?
そこで僕は彼の言葉を思い出した。
『――実はそんな君にちょっとばかりプレゼントを残しておいたんだ』
もしかしたら、これがそのプレゼントだったのだろうか?
真相は分からなかったけど、この後に行った契約交渉はお陰で上手くいき、思った以上に僕の契約金は上がったのだった。
ちょっと面白いバグがあったので、そのままネタに使ってみました




