コメント
0件
👏 最初のコメントを書いて作者に喜んでもらおう!
深夜二時過ぎのオフィスは、サーバーの低い唸りだけが支配する静寂に包まれていた。蛍光灯は半分ほど落とされ、僕、東條そうたのデスクだけがモニターの白い光に照らされている。目の前には、延々と続くコードの列と、赤文字で強調されたバグレポート。
担当しているサービスの、再現性が極めて低いバグ。特定の条件下で稀に発生するデータ不整合。ユーザーからは「データが消えた」「登録できない」といった断片的な報告が上がるが、こちらで再現しようとしても、なかなか現象を捉えられない。
「ロジック上はありえないはずだ…」
独りごちながら、僕はキーボードを叩く。仕様書を何度も見返し、関連するコードを一行一行追う。仮説を立てては検証するが、どれも空振りに終わる。設計に欠陥はない。少なくとも、僕の理解の範囲では。なのに、現実にユーザーは影響を受けている。
空になったBASE BREADの袋が、虚しくデスクの隅に転がっていた。完全食で時間を節約しても、この不毛なデバッグループからは抜け出せない。Slackの通知が光る。上司の坂井さんからだ。『例の件、進捗どう? 明日の朝会で共有頼む』
追い打ちをかけるようなメッセージに、重いため息が漏れる。「仕様書には、こんな曖昧な状況への対応は書かれていないんですけど…」口癖が出かかったが、相手はいない。ただ、疲労と焦燥感がじっとりと背中に張り付いていた。
これ以上オフィスにいても埒が明かない。僕はPCをスリープさせ、重い体を引きずるように立ち上がった。気分転換、というよりは現実逃避に近いかもしれない。ふらりと夜の街へ出て、雑居ビルの地下へと続く階段を下りた。
隠れ家のようなバー「Lighthouse」。薄暗い店内には、静かなジャズが流れ、カウンター席が数席と、奥に小さなテーブル席がいくつか見えるだけ。先客はまばらだった。僕は一番端の席に腰を下ろし、メニューも見ずに注文した。
「カシスオレンジ、お願いします」
唯一、僕が飲める甘いカクテル。
「はーい。って、あれ? 見ない顔っすね。初めて?」
カウンターの中から、明るい声が飛んできた。見ると、金髪に近い明るい髪色に、少し派手なネイルをした女性店員が、悪戯っぽく笑いかけている。年齢は…僕と同じくらいだろうか、それとも少し上か。
「あ、はい。近くで働いてて…」
「へえ、お疲れ様ですー。カシオレとか、かわいーじゃん」
グラスを差し出され、僕は小さく会釈して受け取った。警戒心と疲労が入り混じり、最初は黙ってグラスを傾けていた。だが、深夜のアルコールと、この店の妙に落ち着く空気感が、僕の口を少しだけ軽くしたのかもしれない。
「仕事で…ちょっと、行き詰まってて」
ぽつりと漏らすと、彼女――名札には「ひかり」とあった――は「ふーん?」と軽い相槌を打った。僕は、つい、厄介なバグの話を、技術用語を避けながら、訥々と話し始めてしまった。再現性の低さ、原因の特定困難、ユーザーからのクレーム…。
「へえ、バグねー。大変そ。エンジニアさん?」
「はい、一応…」
「で、それって、使ってる人はどんな顔してんの? やっぱ『は?』みたいな? スマホぶん投げたりしてんのかな?」
ひかりさんの、あまりにも屈託のない問いに、僕は一瞬、言葉を失った。ユーザーの顔? そんなこと、考えたこともなかった。バグレポートに書かれているのは、現象と、再現手順(それすら曖昧なことが多いが)、そして使用環境だけだ。
「いえ、ユーザーの感情は…データとしては取得できていません。重要なのは、まず原因を特定し、修正することです。感情でコードは直せませんから」
少し苛立ちを込めて、僕は答えた。論理的思考を尊ぶ僕にとって、それは非効率で、問題解決の本質からズレた問いに思えた。
「ふーん」ひかりさんは、つまらなそうにグラスを磨きながら続けた。「でもさ、仕様書? ってやつが完璧でも、ユーザーが『は?』ってなってたら、それって意味あんの? 誰のために作ってんの、それ?」
ぐっ、と喉が詰まる。反論しようとした。仕様書は、開発の拠り所であり、品質を担保するための絶対的な基準だ。それを遵守することこそが、エンジニアの正義のはずだ。しかし、彼女の言葉は、妙に僕の心の深いところに引っかかった。非論理的だ、と頭では分かっているのに、なぜか無視できない。誰のために? その問いに、僕は即答できなかった。
結局その夜は、それ以上深い話はせず、カシスオレンジを飲み干して店を出た。だが、ひかりさんの言葉は、まるで頭の中に居座るバグのように、僕の中から消えなかった。
*
翌日のチームミーティング。重苦しい空気の中、僕は昨夜からの進捗がないバグについて報告した。
「原因特定は依然として難航していますが、影響を受けているユーザーがいるのは事実です。ユーザーフォーラムにも類似の声が散見されます。もう少し、調査時間をいただけませんか?」
発言を遮ったのは、プロダクトマネージャーである坂井さんだった。彼は険しい顔で、モニターに映し出されたKPIダッシュボードを指差した。
「東條くん、そのバグ修正にどれだけ工数かけるつもりなんだ? 再現性も低いんだろう? それより優先すべきKPIがある。売上目標達成のためにも、新機能開発が最優先だ。感情論やフォーラムの声みたいな定性的な話じゃなくて、データ、根拠を持ってきてくれないか? そのバグの影響範囲とビジネスインパクトを、ちゃんと数字で説明できる?」
「…仕様には、この状況での優先度判断基準は明確には…」
僕の口癖が出かかった瞬間、坂井さんの声が鋭くなった。
「『仕様には』じゃない。ビジネスとしてどう判断するかが重要なんだ。現場を守るためにも、俺は数字で上に説明しないといけない。分かるだろ? 一旦、そのバグは優先度を下げる。いいね?」
彼の言葉は、正論だった。少なくとも、組織の論理としては。僕は何も言い返せず、ただ「…はい」と答えるしかなかった。悔しさと、自分の無力さが腹の底に沈んでいく。論理で武装しても、現実の壁はこうも簡単に僕を打ちのめす。モニターの向こうにいるはずの、「困っているユーザー」の顔は、やはり霞んで見えなかった。
*
数日後の深夜、僕は再び「Lighthouse」のカウンターに座っていた。目の前には、いつものカシスオレンジ。そして、ひかりさん。
「あ、どーも。また難しー顔しちゃって」
「…どうも」
前回よりも少しだけ、僕は素直に自分の状況を話した。坂井さんとのやり取り、組織の壁、論理だけではどうにもならない現実。
「結局、僕の言ってることは、ただの理想論なのかもしれません。データで示せないことは、ビジネスの世界では意味がない…」
ひかりさんは、僕の話を聞きながら、カクテルシェイカーを軽快に振っていた。そして、氷の音と共に、こう言った。
「あー、サカイさん? いるよねー、そういう上司。数字しか見ないマン。昔、あたしもそういう人と仕事したことあるかも」
え、と僕は顔を上げた。彼女の口から「仕事」という言葉が出たのが意外だった。
「でもさ、ソータくんもさ、『論理的に正しい!』って主張で、サカイさんを殴ろうとしてない? それじゃ、サカイさんと同じ土俵じゃん? 届くわけなくない?」
「え…?」
「だってさ、『ユーザーが困ってるんです! 助けるべきです!』って正論パンチするだけじゃ、サカイさん的には『で? それがウチの売上にどう繋がるの?』ってなるだけでしょ? ただのワガママに聞こえちゃうんじゃない? その『困ってる』が、どれくらいヤバくて、放置したら会社にとってどういう損失があるのか、ちゃんとサカイさんが分かる言葉で言わないと。『数字』なんでしょ? その人の言葉は」
ひかりさんの言葉は、砕けているのに、妙に核心を突いていた。僕は、自分の正しさを証明することばかりに躍起になって、相手を「説得」するための言語を選んでいなかったのかもしれない。
「それにさ」と彼女は続けた。「全部のバグを一気に完璧に直そうとしなくてよくない? そんなスーパーマン、いないっしょ。一番『うわ、マジこれ無理、サービス使うのやめるわ』ってなってる人、誰なの? その人だけ、まず助けるとかは?」
完璧な解決ではなく、最も深刻な影響を受けているユーザーに焦点を当てる。全体最適ではなく、個別最適から始める…? それは、僕が今まで考えてこなかったアプローチだった。仕様書には書かれていない、けれど、もしかしたら、これが突破口になるかもしれない。
「…一番、困ってる人…」
僕は、呟きながら、頭の中でバグレポートやフォーラムの書き込みを反芻した。断片的な情報の中に、特定の状況下で深刻な問題に直面しているユーザー像が、ぼんやりと浮かび上がってくるような気がした。
*
翌日から、僕の行動は変わった。ただ闇雲にコードを追うのではなく、目的を持ってデータを掘り起こし始めた。アクセスログ、エラーログ、サポートへの問い合わせ履歴、ユーザーフォーラムの書き込み…それらを横断的に分析し、点と点を繋ぎ合わせていく。
そして、見つけた。特定のOSバージョン、特定のブラウザ、そして特定の操作手順を踏んだユーザーにごく少数だが、サービスの根幹に関わる深刻なデータ不整合が発生している可能性が高いこと。発生頻度は低い。しかし、一度発生すれば、ユーザーはサービス継続を諦めてしまうかもしれないレベルのリスクだ。
僕は、その分析結果と、考えられるビジネスインパクト(推定離脱率や、悪評による新規獲得への影響)、そして具体的な暫定対応案(該当ユーザーへの個別連絡とデータ修正、恒久対策は切り離して別途計画)を、一枚の簡潔な資料にまとめた。坂井さんが求める「数字」と「根拠」を添えて。だが、それだけじゃない。資料の片隅に、この問題で困っているであろうユーザーの状況を、想像力を働かせて書き添えた。「この機能は、〇〇な状況にあるユーザーにとって、日々の△△を支える重要なものです。今回の不具合は…」
それを手に、僕は再び坂井さんの席へ向かった。
*
「…なるほど。影響範囲はこのセグメントに限定される、と。影響数は少ないが、リスクが高いのは理解した」
坂井さんは、僕の資料にしばらく目を通した後、静かに言った。彼の表情はまだ硬かったが、以前のような頭ごなしの否定ではなかった。
「暫定対応は…承認しよう。すぐに着手してくれ。ただし、恒久対策の優先度は、全体のKPIを見ながら改めて判断する。そこは忘れるなよ」
「はい!ありがとうございます!」
完全な勝利ではない。まだ、バグの根本原因が解決したわけでもない。それでも、確かに何かが動いた。僕の言葉が、論理が、そしてそこに込めた「想像力」が、分厚い壁の向こうに、少しだけ届いたのだ。
モニターの向こうにいる、顔の見えないユーザー。彼らがどんな状況で、どんな気持ちでこのサービスを使っているのか。以前よりも、ほんの少しだけ、その輪郭がはっきりと見える気がした。
*
その週末、僕はまた「Lighthouse」のカウンターにいた。いつものカシスオレンジをゆっくりと味わう。
「お、なんか今日、顔、明るくない?」
ひかりさんが、カウンター越しに覗き込んできた。
「いえ、別に…ただ、少しだけ、前に進めた気がします」僕は少し照れながら答えた。「ひかりさんの言うことも、ほんの少しだけ、分かったような気がして…」
「ふーん? ま、よくわかんないけど、よかったじゃん」ひかりさんは、いつもの調子でからりと笑った。
彼女の言う「正しさ」が何なのか、僕にはまだ、はっきりとは分からない。バーで働く理由も、時折見せる鋭さの理由も、謎のままだ。
でも、それでいいのかもしれない。論理や仕様書がすべてではない。かといって、それを捨てる必要もない。大切なのは、そのコードの向こう側で、僕らが作ったものが誰かの日常の、ほんの小さな「何か」を支えているかもしれないと想像すること。そして、その「誰か」の顔を、ほんの少しでも思い浮かべようとすること。
カシスオレンジの甘さが、今夜はいつもより少しだけ、深く感じられた。僕のエンジニアとしての「正しさ」は、きっとまだ、始まったばかりなのだ。