自分史上最悪のトラブル(前編)

北海道出張から戻り、飛行機を降りて、ケータイの電源を入れてみたら……ものすごい数の留守電の着信通知と、おびただしい数のメールが届いていた。そのすべてがMさんから。

市場バグ発生

悪夢の始まりである。

この仕事(ソフト開発)は、元はインドのソフト会社が開発したものに対して、ハードの部品変更に伴い、うちの会社がバージョンアップを請け負ったものである。
基本的には現場に任せて、私はせいぜい週に一回の内部進捗会議に出る程度だった。特に大きな問題も発生せず、スケジュール通りに進捗し、無事に納品した、はずだった。。。

開発したソフトは、いわゆる組み込みソフトウェアである(商品のROMに焼かれる)。パソコンなどで動くソフトと違って、一度焼かれて市場に出回ってしまったら、
「え、バグが出た? それじゃいまから直しますぅ」
というわけにはいかない。リコールである。

この開発はメーカーから直接請けたものではなく、間に商社が噛んでおり、この商社の部長がヤクザである。目が笑っているところを見たことがない。
商社の部長「おささん、リコール代、払ってもらいましょかぁ。計算したところ、○億円ですねぇ」
えー、誠に恐縮ですが、契約上、弊社にそのような義務はない、か、と。。。
商社の部長「じゃあ指詰めてもらいましょかぁ」
それはちょっと、、、ギターが弾けなくなるんで困ります。って、ずっと弾いてませんけど。あ、そうだ、キーボードが叩けなくなっちゃうと困るかな、あははっ。
商社の部長「困りますかぁ」
ええ、困ります。(汗)
商社の部長「だったら、この事態をなんとかせんかい!」
ぜぜぜ、全力で対応させていただきますっ。(汗びっしょり)
まずはこの日から8日間帰宅できなかった(2ヶ月間で何時間眠れただろうか)。

しかし、はっきり言って、完全に現場任せだったため、そもそもどんな仕様を持つソフトなのか、私は大枠しか知らず、詳しいことはまったくわからない。私が詳細をおさえていないことは商社もメーカーも知っており、そのためトラブル発生直後は、商社もメーカーも、開発リーダーであるMさんのケータイに電話をかけてきていた。が、Mさんはケータイに着信が来ると、そのまま私のところまで小走りでやってきて、目の前に来てから電話に出て、
リーダーのMさん「はい、Mですが、おさに代わります」
とケータイを押しつけてくる。で、1日もしないうちに、すべての電話が私にかかってくるようになった。朝だろーが昼だろーが、夜中だろーが明け方だろーが電話は鳴りっ放しだし、飛んでくるメールの数も尋常ではない。
そして、1日に2回はこんな電話が来る。
商社の部長「おささん、覚悟はできましたかぁ」
覚悟、と言いますと?
商社の部長「リコール代、払いますかぁ。それとも……」
払います! って違う! 全力で対応させていただきます!(汗びっしょり)

バグ自体はとってもショボかった。マクロ定数(C言語の#define)を間違って使っていたのである。
そんなもん、ソッコーで直せー! さっさとリリースしろー!
で、未明にリリースし、とにかくソフトは直したから、あとはこの事態をどう収束させるかだが……と考えていたら、メーカーから電話が入る。
メーカー別のバグが見つかりました
べべべ、別のバグぅ? そしてその直後、
商社の部長「おささん、工場のラインも止まってるんですがねぇ。その損害賠償は……」
申し訳ございません! 即座に対応いたします!(汗びっしょり)

しかし、市場で2つもバグが出るとは……。これは今回のうちのバージョンアップによって、他にもバグが混入したかもしれない。念のため、確認してみねばなるまい。
オリジナルとバージョンアップとのソースのdiffを取り、その差分をすべて確認することにした。100箇所以上もの差分があったが、、、
あー、ヤバーい! 他のバグ見つけちゃったー!
怖いから黙ってよっと。てへっ。(笑)
とはいかず、メーカー様へ謝罪と説明に参上し、
「多大なるご迷惑をおかけしましたが、今回弊社が改造を行った箇所すべてをチェックいたしました! もう他にバグは発見できません! 明日未明までには修正版をリリースいたします!」
と言い切り(ほぼ土下座状態で)、未明にリリースをし、「もうこれで大丈夫だー」と眠い目をこすりつつ、別のプロジェクトの会議をしていたら、
メーカー別のバグが見つかりました
もももももももももうだめだー、指がなくなるー!
そしてかかってくる電話。
商社の部長「ああ、おささん。うちの社長がですね、『呼べ!』と申してるんですよ」
よべ?
商社の部長「今回のこれはいったいどーゆーことなのか、うちの社長に説明に参上してもらえますかぁ」
わかわか、わかりました。手袋をして参上させていただきます。(嫌な汗)

もうdiffなんか取ってる場合じゃない。獣道すらない密林ジャングルのお化けのようなこのソースを、ハチマキしめて読むしかない!

で、読んでみて驚いた。これほどの驚きは近年ナンバーワンである。

ハードの部品交換に伴う改造は良しとして、アプリ部の改造は、そのすべてがメモリ領域を書き換える処理なのだが……それが全部間違ってる!

diffでは改造箇所のみが見えるため、それら1行1行は正しい。しかし、タイミング(改造コードを入れる場所)が、一つ残らず全部間違ってる! なぜだー、どーしてこのタイミングでこの領域を書き換えるー! ちょっとそこのあなた、それが全部ですよ? 全部って意味、わかります?

約100箇所にも手を入れているが、それらすべてのタイミングが違う! すべて! 全部! ぜーんぶ! オール!

おいおい、まぐれでもいいから、1つぐらい当てようぜ。。。

――後編へ続く。