設計書は完璧、でも何故?
やあ、みんな。今日も元気にコード書いてる?
僕は今、とある海外の街で、ITエンジニアとして働いてる。メインの武器はC#とWPF。そう、あのガチガチのWindowsデスクトップアプリケーションを作る、ちょっと(いや、かなり?)ニッチで奥深い世界で、日々設計書(ブループリント)と格闘してるわけ。
これを読んでるみんなの中にも、「いつかは海外で働きたい」「自分のテクニカルスキルがどこまで通用する試したい」って思ってるアツいエンジニア、多いんじゃないかな。僕もそうだった。
日本にいた頃は、とにかく技術を磨くことに必死だった。async/awaitの最適な使い方、DependencyPropertyの深い理解、MVVMパターンの美しい実装。どうすればバグがなく、効率的で、再利用性の高いコードが書けるか。どうすれば、渡された設計書(ブループリント)を100%、いや120%の精度で実装できるか。それがプロフェッショナルなエンジニアの価値だと信じて疑わなかった。
そして、その「武器」だけを背中にしょって、僕は海を渡った。
最初の数ヶ月は、正直、余裕だった。
「へえ、海外のコードって言っても、C#はC#だな」と。
むしろ、日本で叩き込まれた「設計書の行間を読む」みたいな謎スキルや、品質への異常なこだわりが、周りから見たら「Oh, Kenji(僕の仮名ね)は仕事が丁寧だ」って、いい感じに評価されてた。WPFのXAMLだって、誰よりもキレイに書いてる自信があった。
そう、あのプロジェクトが始まるまではね。
あれは、僕が海外に来て半年が過ぎた頃。現地の製造業向けの、結構クリティカルな在庫管理システムのデスクトップアプリ(もちろんWPF)を任されたんだ。僕は意気揚々と、リードエンジニアとして設計書の作成から関わった。
UMLを駆使してクラス図を描き、シーケンス図で完璧な非同期処理のフローを定義し、UIチームと連携して、それはもう美しい「ブループリント」を仕上げた。誰もが「これなら間違いない」と頷くような、完璧な設計書。
開発フェーズも順調だった。僕のチームは、そのブループリントに従って、一糸乱れぬコーディングを続けた。僕自身も、特にクリティカルなロジック部分を担当し、我ながら「これは芸術品だ」と思えるような、エレガントなC#コードを書き上げた。
そして、運命の、第一次クライアントレビューの日。
僕らは自信満々だった。なにせ、ブループリント通りに、寸分違わず動くんだから。
僕がデモ機を操作し、マネージャーが横で説明する。
「…で、このボタンを押すと、最新の在庫データが非同期で取得され、こちらのDataGridにバインドされます。ソートもフィルタリングも完璧です。設計書通りです」
シーン。
会議室が、妙な静けさに包まれた。
クライアントの現場マネージャー(仮にジョンとしよう)は、腕を組んで、眉間に深いシワを寄せている。
「…Kenji」
ジョンが重い口を開いた。
「これは、確かに君たちが『設計書通り』に作ったものだというのは理解した。技術的にも、多分すごいんだろう」
「だが、これは我々が欲しかったものではない」
頭をガツンと殴られたような衝撃だった。
「え?」
思わず声が出た。
「いや、でも、ジョン。これは、あなたたちがサインした、あの『ブループリント』に書いてある通りですよ?機能要件はすべて満たしています。ほら、このリストの…」
僕は焦って、分厚い設計書(ブループリント)の束をめくろうとした。
それを、ジョンが手で制した。
「Kenji、落ち着いて聞いてくれ。君たちエンジニアは、あのブループリントを『聖書』だと思ってるかもしれない。だが、我々にとって、あれは『我々が抱えている問題を解決するための、現時点での仮説』でしかないんだ」
「我々が本当に欲しかったのは、『設計書通りのソフトウェア』じゃない。我々が欲しかったのは、『倉庫のスタッフが、ピッキングミスをせずに、30秒早く次の作業に移れるようになる体験』だ。君の作ったこの画面は、確かに高機能だ。だが、実際に倉庫で手袋をはめて、バーコードリーダーを片手に作業するスタッフのことを、想像して作られているか?」
「このボタン、小さすぎないか?このフォント、暗い倉庫でも見えるか?そもそも、彼らが知りたい情報は、本当にこの『全在庫リスト』なのか?それとも『次にピッキングすべき3つのアイテム』だけじゃないのか?」
僕は、何も言い返せなかった。
WPFの技術、C#のロジック、MVVMの設計。
僕があれだけこだわった「技術的な正しさ」は、ジョンの「これじゃない」の一言で、すべて吹き飛んだ。
そう。僕は、完璧な「ブループリント」を作ること、そしてそれを「完璧に実装すること」に集中するあまり、**「そのブループリントが、そもそも何のために存在するのか」**を、完全に見失っていたんだ。
海外で働くって、こういうことなんだ、と。
日本にいたら、もしかしたら「まあ、設計書通りなんで」で通じたかもしれない。(もちろん、良いことではないけど)
でも、ここでは違う。
特に、僕のような「設計開発」を担う立場のエンジニアに求められているのは、「ブループリントをなぞる能力」じゃなかった。
**「ブループリントの向こう側にある、クライアントの『本当の痛み』や『ビジネス上のインパクト』を想像し、それを技術(C#やWPF)を使って解決に導く能力」**だったんだ。
このブログは、僕みたいな「技術さえあればなんとかなる」と思って海を渡った(あるいは、渡ろうとしている)エンジニアが、あの日の僕と同じように、会議室で凍りつく前に知っておいてほしいことを、実体験ベースで書き殴る場所だ。
テクニカルスキルは大事だ。それは大前提。
でも、海外で、特に「上流」で、「設計」でキャリアアップしたいなら、それだけじゃ絶対に足りない。
君のC#の知識を、本当の意味で「価値」に変える、もう一つのスキル。
同僚やクライアントから「Kenjiがいないと、このプロジェクトは進まない」と本気で言われるようになった、僕が学んだ「人生術」。
この「起」では、僕の盛大な失敗談を披露した。
次の「承」では、あの地獄の会議室の後、僕がどうやってジョンの信頼を取り戻し、プロジェクトを「設計書通りの失敗作」から「現場が熱狂する成功作」へと変えていったのか。
その過程で身につけた、「ブループリントの向こう側」を見るための具体的なテクニックについて、詳しく話していこうと思う。
(「起」だけで、すでにこの熱量と文字数だ。我ながら、あの日の悔しさが蘇ってくるよ…!でも、この失敗こそが、僕のエンジニア人生で一番の「得する情報」だったんだ。続きも、ぜひ読んでいってくれよな。)
「それ、誰が使うの?」が僕を殴った日
あの会議室で、ジョンに「これは我々が欲しかったものではない」と宣告された瞬間、僕の頭の中は真っ白になった。いや、正確には「なんで?」と「でも、設計書通りだ!」という二つの言葉が、C#の例外(Exception)みたいに無限ループしてた。
エンジニアとしてのプライド?
そんなものは、あの瞬間に木っ端微塵だ。日本で培ってきた「完璧な実装力」、WPFのXAMLを誰より美しく書ける自信、async/awaitの最適な設計。そのすべてが、ジョンの「これじゃない」の一言で、無価値になった気がした。
会議室に戻るエレベーターの中、チームの雰囲気は最悪だった。
「どうしろっていうんだよ」「サインしたのはそっちだろ」「これだから現場(クライアント)は…」
不満が充満する。わかる。僕だってそう言いたい。
でも、僕の頭には、ジョンのあの「本気で失望した目」が焼き付いて離れなかった。
彼は、僕ら(ITエンジニア)を責めていたんじゃない。彼は、本気で「困っていた」んだ。そして、僕らが「救世主」だと期待していたのに、全くトンチンカンなもの(設計書通りに動く、美しいゴミ)を持ってきたことに、心底ガッカリしていたんだ。
オフィスに戻っても、誰もキーボードを叩く気になれない。
「いったん、設計書(ブループリント)を見直そう」
僕がそう切り出すと、インド系の優秀な同僚が、ため息混じりに言った。
「Kenji、ブループリントなら、君が一番わかってるはずだ。あれは完璧だった。間違っていたのは、クライアントの『要求』そのものだ」
違う。
そうじゃない。
僕らは「ブループリント」という名の地図に集中しすぎて、目的地を見失ってたんだ。
「みんな、聞いてくれ」
僕は腹をくくった。
「間違ってたのは、クライアントじゃない。俺たちだ」
シーン、と静まり返る。
「俺は、俺たちが作ってるこのWPFアプリを、『誰が』『どこで』『どうやって』使うのか、何も知らなかった。ジョンが言ってた『倉庫のスタッフ』が、手袋をしてるのか、薄暗い中で作業してるのか、バーコードリーダーを片手に持ってるのか。何も、だ」
僕は、プロジェクトマネージャー(PM)のデスクに直行した。
「Mark(PMの名前ね)、僕に3日間、時間をください」
「どうした、Kenji。バグフィックスの計画か?」
「いいえ。僕を、クライアントの『倉庫』に行かせてください」
Markは、怪訝な顔をした。そりゃそうだ。
「Kenji、君はリードエンジニアだ。君の仕事は、ここでコードを書くこと、チームを率いることだ。現場(オンサイト)に行くのは、サポートチームの仕事だ」
ここで引き下がったら、あの地獄の会議室がリプレイされるだけだ。僕は、珍しく声を荒げた。
「Mark、今、俺たちがオフィスで『完璧なコード』を書けば書くほど、このプロジェクトは『完璧な失敗』に近づくんだよ。俺は、『ジョンの欲しかったもの』を、この目で見るまで、C#のコードは一行も書かない。いや、チームにも書かせない」
僕の気迫に押されたのか、Markは「…クレイジーだ」と呟きながらも、ジョンに電話をかけてくれた。
翌朝、僕は会社のロゴ入りポロシャツじゃなく、動きやすいTシャツとジーンズで、クライアントの巨大な倉庫の前に立っていた。
「君が、あのWPFアプリを作ったKenjiか」
出迎えてくれたのは、現場主任のマイク。ジョンより一回りデカい、いかにも「現場」という感じの男だ。
「ジョンから聞いてる。まあ、好きに見ていってくれ。ただし、作業の邪魔だけはするなよ」
僕は、安全ヘルメットと作業用ベストを借り、マイクに一日中、影のように張り付いた。
そして、たったの2時間で、僕(たちエンジニア)がどれほど「現実」から乖離していたかを、骨身に染みて理解することになったんだ。
衝撃の事実(その1):手袋
彼らは、分厚い、滑り止めがついた作業用手袋を常にはめている。僕らが「スタイリッシュだろ?」と思ってデザインした、あの10ピクセル四方の小さな「閉じる」ボタン(WPFのButton)なんて、押せるわけがない。彼らは、指先じゃなく、手袋をした指の「腹」で、画面を叩くように操作する。
衝撃の事実(その2):片手
彼らの左手は、常にバーコードリーダー(ハンディターミナル)で塞がっている。つまり、アプリの操作は、すべて「右手一本」で行われる。僕らが「便利でしょ?」と実装した「Ctrl + Fでの高度な検索機能」なんて、物理的に実行不可能なんだ。
衝撃の事実(その3):暗闇と埃
倉庫の中は、想像以上に薄暗い。棚と棚の間は、天井の蛍光灯の光も届きにくい。そして、フォークリフトが巻き上げる埃で、PCの画面はいつも薄汚れている。僕らが「目に優しいから」と採用した、あのオシャレな「ダークテーマ(背景:濃いグレー、文字:白)」は、あの環境では、文字が背景に溶け込んで、全く判読不能だった。
衝撃の事実(その4):彼らが知りたい「情報」
僕は、マイクが何度も「チッ」と舌打ちしながら、僕らの作った(正確には、旧システムの)アプリを操作するのを見ていた。
「マイク、今、何を探してるんですか?」
「ああ?次のピッキングリストだよ。A-3の棚にある、あのデカい箱が、今日あと何個出るか、それだけ知りたいんだ」
…絶句した。
僕らが作った、あの「高機能な」在庫管理画面。
ソートも、フィルタリングも、グルーピングもできる、完璧なDataGrid(WPFの宝だ)。
あれは、マイクにとっては「ノイズ」でしかなかった。
彼が知りたいのは、「全在庫のリスト」じゃない。
「今、俺が、次に、何を、何個、どこから取るか」
その、たった一つの情報だけだったんだ。
僕は、マイクの隣で、彼のため息を聞きながら、あの「ブループリント」を思い浮かべていた。
あの設計書には、確かに「在庫一覧表示機能」と書かれていた。そして僕らは、それを忠実に、技術的に完璧に実装した。
だが、「ブループリント」には、マイクの「手袋」のことは書かれていなかった。
「片手」のことも、「薄暗い倉庫」のことも、彼の「ため息」のことも、書かれていなかった。
ジョンが言った「我々が欲しかったのは『体験』だ」という言葉の意味が、雷に打たれたように、全身で理解できた。
彼らが欲しかったのは、倉庫のスタッフ(マイク)が、イライラせずに、ピッキングミスをせずに、1秒でも早く次の作業に移れる「体験」だったんだ。
僕たちエンジニアが向き合うべきだったのは、分厚い「ブループリント」じゃなかった。
目の前にいる「マイク」の、あの「ため息」だったんだ。
3日間の予定だった現場研修を、僕は1日で切り上げた。もう、十分だった。
オフィスに戻った僕は、開口一番、チームメンバーにこう告げた。
「みんな、すまん。俺たちが作ってきたものは、全部捨てよう」
もちろん、チームは混乱した。
「Kenji、正気か?」「締切はどうするんだ?」
僕は、倉庫で撮ってきた「証拠写真」を、プロジェクターに映し出した。
手袋で画面を叩こうとするマイクの手。
埃まみれのモニターに映る、判読不能なダークテーマ。
バーコードリーダーを握りしめたまま、キーボードに手を伸ばせない絶望的な姿。
そして、僕はこう宣言した。
「俺たちの技術(C#, WPF)は、この『マイク』を助けるために使うべきだ」
ここからが、僕ら「エンジニア」の本領発揮だった。
「ブループリント」には書いていないが、現場の「痛み」から逆算した、全く新しい「仕様」が、その場で、僕らの口から次々と生まれていった。
「まず、あの高機能なDataGridは捨てよう。WPFのView(画面)には、特大フォントで『次:A-3』『アイテム名:XXXX』『個数:5』。これだけを表示するんだ」
「ボタンは、『完了』と『スキップ』の2つだけ。しかも、画面の半分を占めるサイズだ。マイクが手袋で画面のどこを『叩いても』反応するように、WPFのControlTemplateを魔改造しよう」
「UIテーマは『ハイコントラスト・モード』一択。背景は真っ黒、文字は真っ白(あるいは黄色)。XAMLのDynamicResourceなんか使ってる場合じゃない、ベタ書きでいい。とにかく『見える』ことが最優先だ」
「キーボード操作は禁止。全ての操作は、バーコードリーダー(シリアルポート経由か?)からの入力と、画面タップだけで完結させる。C#のasync/awaitは、ここで使うんだ。リーダーの入力をトリガーに、非同期で即座に次の指示をサーバー(バックエンド)から取ってくる。マイクを1秒も待たせるな」
議論は、めちゃくちゃ白熱した。
不思議なことに、あの地獄の会議室の後、あれほど落ち込んでいたチームの目が、全員、キラキラと輝いていた。
なぜか?
僕らは、あの瞬間、「ブループリントの奴隷」から、**「マイク(ユーザー)の課題を解決するプロフェッショナル」**に変わったからだ。
僕らは、ジョンのサインした「ブループリント」を、ある意味で「破壊」する決断をした。
それは、組織のルールとしては、エンジニアの独断であり、とんでもないリスクだったかもしれない。
でも、僕には確信があった。
あの倉庫で聞いた「マイクのため息」こそが、このプロジェクトの、本当の「要求仕様」だと。
僕らは、技術者としてのプライドを、「コードの美しさ」から「現場の課題解決」へとシフトさせたんだ。
そして、僕らは、残業も厭わず、文字通り「マイクのためだけ」のWPFアプリケーション(通称:マイク・スペシャル)を、たった1週間で作り上げた。
そして、再び、ジョンの前に立つ日がやってきた。
今回は、あの分厚い「ブループリント」は持っていなかった。
代わりに、僕のノートPCと、倉庫から借りてきた「マイクの手袋」と「バーコードリーダー」を、会議室のテーブルに置いた。
さあ、リベンジの時間だ。
(「承」はここまで。この「ブループリントを超えた」行動が、僕のキャリアと人生術に何をもたらしたのか。その劇的な結果と、「技術」と「ソフトスキル」の本当の関係について、次の「転」で語っていこうと思う。)
コードから「価値」へ。WPFエンジニアの覚醒
会議室の空気は、まだ重かった。
そりゃそうだ。一度「これじゃない」と烙印を押されたプロジェクトだ。クライアントのジョンは、「また設計書(ブループリント)の言い訳を聞かされるのか」という、諦めと苛立ちが混じった顔をしている。
僕は、持参した分厚い「ブループリント」の束を、あえてテーブルの隅に追いやった。
そして、代わりに中央に置いたのは、ノートPCと、あの使い古された「作業用手袋」、そして「バーコードリーダー」。
ジョンが眉をひそめる。
「Kenji、それは?」
「ジョン。今日はデモをしません」
「…は?」
「代わりに、あなたに『体験』をしてもらいます」
僕は、有無を言わさず、ジョンの前に手袋を差し出した。
「これを、はめてください」
ジョンは戸惑いながらも、そのゴワゴワした手袋を両手にはめた。
次に、僕はバーコードリーダーを彼に握らせる。
「いいですか、ジョン。あなたは今、暗くて埃っぽい倉庫で、左手には常にこれ(リーダー)を持っています。使えるのは、右手だけです」
僕はノートPCを起動し、僕らが最初に作った、あの「完璧なブループリント通り」のWPFアプリを立ち上げた。例の、高機能なDataGridが表示されている。
「ジョン。今から、A-3棚の、アイテムID『4987-B』の在庫数を『1』減らしてください。制限時間は、30秒です」
ジョンは、手袋をした指で、必死にマウスを操作しようとする。
カーソルは明後日の方向に飛ぶ。
「クソっ…」
やっとの思いで検索ボックスをクリックしようとするが、指の「腹」が当たるせいで、隣のボタンが押されてしまう。
「Ctrl + F…ああ、片手じゃ押せない!」
イライラが最高潮に達した頃、僕は静かに言った。
「1分、経過しました。倉庫の現場主任マイクなら、たぶんこの時点で、このPCを床に叩きつけてます」
ジョンは、ぐうの音も出ない、という顔で、手袋を外そうとした。
僕はそれを手で制した。
「まだです、ジョン。それが『現実(リアル)』です。次は、こっちを試してください」
僕は、WPFアプリを切り替えた。
僕らがこの1週間、寝る間も惜しんで作った「マイク・スペシャル」だ。
画面は、クソみたいにデカいフォントで、こう表示されているだけ。
【次:A-3棚】
【アイテム:XXXX】
【数量:5】
そして、画面のフッター(下部)には、画面の横幅いっぱいに広がる、2つの巨大なボタン。
[ 完了(緑) ] [ スキップ(黄) ]
「ジョン、手袋はそのままで。右手で、この画面を『叩いて』みてください」
ジョンは、恐る恐る、手袋の「手のひら」に近い部分で、画面の「完了」ボタンあたりを、バシッ、と叩いた。
僕らがControlTemplateを魔改造し、Clickイベントの当たり判定を極限まで広げたボタンが、即座に反応する。
画面が切り替わり、次の指示が、またデカデカと表示される。
「…おお」
ジョンが、思わず声を漏らした。
「Kenji…これは…」
「ジョン、これは『ブループリント』には書いてありませんでした」
僕は、あえてあの言葉を使った。
「これは、僕が倉庫で、マイクのため息から『設計』した、新しいブループリントです」
「僕らエンジニア(C#とWPFのプロ)の仕事は、あなたのサインした『設計書』をなぞることじゃなかった。あなたの会社の『マイク』が、手袋をしたままでも、1秒早く、ミスの不安なく、次の作業に移れる『体験』を作ることでした」
「僕のC#の非同期(async/await)処理は、この『完了』ボタンが叩かれた瞬間、マイクを0.1秒も待たせないためにあります。僕のWPFのXAMLの知識は、この『クソデカいボタン』を作るためにありました。技術は、そのためにあるべきだ」
ジョンは、手袋をはめたまま、何も言わずに立ち上がった。
そして、僕の肩を、バシッ、と強く叩いた。
「…Kenji。すぐに、これをマイクのところに持って行け」
その日の午後、倉庫にて。
僕とジョンが「マイク・スペシャル」をインストールしたPCを持っていくと、現場主任のマイクは、あからさまに嫌な顔をした。
「またITのおもちゃか?ジョン、俺たちは忙しいんだ」
ジョンは何も言わず、僕に目配せするだけだった。
僕は、マイクの目の前で、古いシステムをアンインストールし、新しいアプリを起動した。
「マイク、これ、使ってみて」
マイクは、いつものように手袋をはめ、バーコードリーダーを片手に、半信半疑で画面を覗き込む。
【次:B-7棚】
【アイテム:ZZZZ】
【数量:2】
「…ほう?」
マイクは、リーダーで棚のバーコードを「ピッ」。次にアイテムのバーコードを「ピッ」。
画面が即座に反応する。
【OK:2個確認】
彼は、手袋のまま、画面の「完了」をバシッと叩く。
【次:B-8棚】
【アイテム:YYYY】
【数量:1】
「ピッ」「ピッ」「バシッ」
「ピッ」「ピッ」「バシッ」
マイクは、もう何も喋らない。
夢中になって、アプリを操作し続けている。
彼のピッキング作業が、明らかに、滑らかに、そして「迷いなく」進んでいくのが、遠目にもわかった。
5分後。
いつもなら10分はかかるエリアのピッキング作業を終えたマイクが、汗を拭いながらこっちに戻ってきた。
そして、彼は僕の目の前に立つと、ゴツい手袋をはめた右手を、スッと差し出した。
僕は、一瞬戸惑ったが、自分の右手を差し出した。
バチン!
倉庫に響き渡る、人生で一番、痛くて、重いハイタッチだった。
「Kenji」
マイクは、ニカッと笑って言った。
「これだよ。これが、俺たちが欲しかったもんだ」
これが、僕の「実体験ベース」の、キャリアの転換点だ。
この「マイク・スペシャル」の成功は、僕に計り知れないインパクトをもたらした。
まず、当たり前だけど、プロジェクトはV字回復。僕らのチームは、クライアントから「現場のヒーロー」と呼ばれるようになった。
でも、僕個人にとっての「得する情報」は、そこじゃない。
僕の「エンジニア」としての立ち位置が、あの日を境に、180度変わったんだ。
それまでの僕は、「ブループリントに従順な、腕のいいC# / WPFエンジニア」だった。
でも、あの日から、僕は「ビジネス上の『痛み』を、技術(C# / WPF)で解決できるエンジニア」になった。
周囲からの見方も変わった。
以前は、「Kenji、この機能、設計書通りに作っておいて」と、**「指示」**が飛んできていた。
それが、こう変わった。
「Kenji、今、営業部が『顧客データ入力が遅い』って困ってるんだ。君ならどう解決する?」
わかるか?
「ブループリントをなぞる」フェーズから、「ブループリントを『生み出す』」フェーズ、もっと言えば「ブループリントの『元』になる課題を発見する」フェーズに、僕の主戦場がシフトしたんだ。
これが、海外で働くエンジニアにとって、どれほど強力な「武器」になるか。
C#のTaskを使いこなせるエンジニアは、他にもいる。
WPFのXAMLを美しく書けるエンジニアも、いる。
でも、「クライアントの倉庫に行って、手袋のゴワつきを感じ、マイクのため息の『意味』を理解し、それを『クソデカいボタン』というWPFのControlTemplateに変換できるエンジニア」は、僕しかいなかった。
僕がやった「ソフトスキル」は、教科書的な「コミュニケーション能力」じゃない。
あえて言うなら、**「共感(Empathy)」と「越境(Beyond the Blueprint)」**だ。
そして、その「痛み」を解決するためなら、既存のルール(ブル…
相手の「痛み」を、自分の「痛み」として感じる能力(共感)。
ブループリントを超えて、君がインパクトを残すために
あの「マイク・スペシャル」がもたらした、マイクとのハイタッチ。
クライアントのジョンからの、全幅の信頼。
「Kenji、君ならどう解決する?」という、指示(What)ではなく、相談(How/Why)が舞い込むようになった、僕の立ち位置。
これらすべてが、僕のエンジニア人生を、文字通り「ひっくり返し」ました。
僕は、あの日まで、自分の価値を「C#のコードの美しさ」や「WPFのXAMLの精緻さ」だと思い込んでいた。
もちろん、それはプロとして最低限必要な「武器」だ。錆びついた剣じゃ、戦いになんて行けない。
でも、海外(というか、たぶんこれからの時代のエンジニア)で本当に求められるのは、「その武器の切れ味」だけじゃない。
「その武器を、誰の、どの『痛み』に向けて、どう振るうか」を、自分で判断できる能力なんだ。
僕のC#のasync/awaitの知識は、マイクが「完了」ボタンを叩いた瞬間に、彼を0.1秒も待たせないために使われて、初めて「価値」になった。
僕のWPFのControlTemplateのスキルは、マイクのゴワゴワの手袋でも「誤操作しない」という「安心感」に変換されて、初めて「インパクト」になったんだ。
これこそが、僕がこのブログで一番伝えたかったこと。
「ソフトスキル」は、「ハードスキル」の対極にあるものじゃない。
「ハードスキル(君のC#やWPFの知識)」の価値を、10倍、100倍に増幅させるための「アンプ(増幅器)」なんだ。
あの「ブループリント」だけを信じていたら、僕のC#は「完璧に動く、誰も使わないゴミ」を生成するだけだった。
でも、マイクの「ため息」に「共感」し、倉庫まで「越境」した瞬間、僕のC#は「現場のヒーロー」を生み出すための魔法の杖に変わった。
🎁 君へ送る、今日からできる「ブループリントを超える」3つの人生術
「Kenjiの体験はわかった。でも、それはKenjiが特殊だっただけじゃないか?」
「俺はまだ、倉庫に乗り込むなんて勇気はない…」
そう思うかもしれない。わかる。
でも、僕がやったことは、実はすごくシンプルだ。
君が今、日本にいようが、海外にいようが、明日から、いや、このブログを閉じた10分後から実践できる、超具体的な「得する情報」を3つ、授けよう。
人生術1:「なぜ?」の代わりに「(物理的に)見せてください」と言う
エンジニアは、仕様書(ブループリント)の不明点を「なぜ、ここはこうなんですか?」とロジックで詰めようとしがちだ。
でも、それじゃ「ブループリント」の手のひらの上だ。
次から、こう言ってみてくれ。
「すみません、僕、理解が追いついてなくて。今、この機能(あるいは、この機能がないこと)で、あなたが『実際に』困っている画面(あるいは手元のExcel、あるいは紙のメモ)を、15分だけ『見せてもらえませんか?』」
ポイントは「物理的に」見せてもらうこと。
口頭で「こう困ってるんだよ」と言われるのとは、情報量が100倍違う。
マイクの「手袋」や「薄暗い倉庫」と同じだ。
ユーザーの「ため息」や「無駄なマウス操作」や「エクスポートしたCSVをExcelで開いてにらめっこしてる時間」は、口頭の「ブループリント」には絶対に書かれていない、**最高のお宝(=真の要求仕様)**なんだ。
人生術2:「ユーザーの『ため息』」を、君の「C#(コード)」に翻訳する
君がもし、人生術1で「お宝」を発見したとする。
例えば、ユーザーが「あー、またこの入力ミスだよ。毎月、月末にこれで30分ロスするんだ」とため息をついたとしよう。
ここで、凡庸なエンジニアは「ふーん、ユーザーの(ブループリントにない)わがままだ」とスルーする。
だが、君は違う。
その「ため息」こそ、君の出番だ。
「毎月30分のロス」? それは「ブループリント」に書いてある「機能A」を実装するより、よっぽどビジネスインパクトがデカい「バグ」だ。
- 「あのため息は、WPFの
ValidationRuleをXAMLに書けば、入力時点で防げるな」 - 「いや、そもそもマスター(DB)から
ComboBoxで選ばせれば、入力ミス自体が『物理的に』発生しないじゃないか」 - 「C#側で、入力値の
TextChangedイベントを拾って、非同期(async)でサジェストを出せば、マイクの『完了』ボタンみたいに、気持ちよく作業できるかも」
ユーザーの「ため息(痛み)」を、君の「技術(C# / WPF)」で解決できる「設計(ソリューション)」に、脳内で即座に翻訳するんだ。
この「翻訳力」こそが、君の市場価値を爆上げさせる。
人生術3:「ブループリントにない改善」を、価値として「プレゼン」する
これが一番大事だ。
君が人生術2で「こっちのWPFのComboBoxの方が絶対いい」と気づいたとする。
でも、黙って実装したらどうなる?
「Kenji、設計書(ブループリント)と違うぞ。差し戻しだ」
はい、おしまい。
最悪だろ?
だから、「ブループリントを超える」ことと、「ブループリントを無視する」ことは、全く違うと理解してくれ。
やるべきは、「プレゼン」だ。
PMやクライアント(ジョン)に、こう言うんだ。
「Mark(PM)、機能Aの実装なんだけど、ブループリント通りに『テキスト入力』で作ることは、もちろん可能です。でも」
「この前、現場で『見せてもらった』んですが、ここの入力ミスが毎月発生して、月末に30分のロスが出てるそうです」
「そこで、僕からの提案です。ブループリントの工数(例えば3日)は変わりません。その3日の中で、僕はここを『テキスト入力』じゃなく『ComboBox(DB連動)』で実装します」
「そうすれば、入力ミスはゼロになり、毎月30分のロス(=年間360分=6時間!)が、僕のC#コードによって削減できます。この『6時間の価値』、僕らに投資しませんか?」
さあ、どうだ?
これを断るPMやクライアントがいたら、そいつは無能だ。
君は、単なる「作業者」から、「ビジネス価値(6時間)を生み出すパートナー」に変わる。
しかも、君は「ブループリントの工数は変えない」という、エンジニアとしての「誠実さ」も見せている。
これが、僕が学んだ「ブループリントの向こう側」に行くための、最強の人生術だ。
僕らが日々向き合っているC#もWPFも、それ自体は、ただの道具だ。
設計書(ブループリント)も、ただの紙だ。
だが、君がその道具を持って、「誰かのため息」が聞こえる場所まで一歩踏み出すなら。
君が「ブループリント」に書かれていない、その「痛み」に共感するなら。
君のコードは、もう「ただのコード」じゃない。
それは、マイクの仕事を1秒早め、ジョンのビジネスを成功に導き、そして何より、君自身のエンジニア人生を、最高にエキサイティングにする「インパクト」そのものになる。
海外で働くってのは、言語の壁を越えることじゃない。
「ブループリント」という名の壁を、自らの「価値(バリュー)」で越えていくことなんだ。
さあ、君も「設計書通り」の退屈な世界から、飛び出す準備はいいか?

コメント