海外で「便利なコーダー」から「不可欠なエンジニア」になる方法 — C#使いが気づいた、生き残り戦略としての「Tier 2 & 3」キャリア論

そのコード、誰でも書けますよね?— 海外でぶち当たった「Tier 1」の限界

どうも! 海外の片隅で、今日も今日とてVisual Studioと格闘しております、C#とWPFを愛するITエンジニアです。

いやー、海外でエンジニアとして働くって、響きはカッコいいっすよね。満員電車ゼロ、フレックスタイム当たり前、スタバ片手に(いや、こっちのコーヒーはデカいだけだけど)颯爽とコーディング…みたいな。

実際、そういう面もあります。日本で消耗してた頃に比べたら、働きやすさはガチで上がった。

でもね、この記事を読んでるってことは、あなたも「いつかは海外で」って思ってるか、すでに来てみて「あれ、こんなはずじゃ…?」ってなってるかのどっちかだと思うんすよ。

今日は、そういう「これから海外目指す人」や「海外来たけど伸び悩んでる人」に向けて、特に俺みたいな「Web系じゃない」スキルセット(そう、WPFとかね!)のエンジニアが、どうやって「その他大勢のコーダー」から一歩抜け出すか、っていう超重要な話をします。

これ、多分あんまり誰も言ってくれないけど、知ってると知らないとじゃ、5年後のキャリアがマジで変わる。「知ってよかった」って絶対思うはず。


夢が叶った「後」の、リアルな現実

俺も最初はそうでした。日本でWPF使ってゴリゴリのデスクトップアプリ開発。でも、「このままでいいのか?」って漠然とした不安があって、一念発起して英語勉強して、なんとかこっちの会社のポジションをゲットした。

最初の1年? そりゃもう地獄でしたよ(笑)。

まず、英語が聞き取れない。会議で何言ってるか半分もわかんないのに、とりあえず頷いて持ち帰る。WPFのXAML(ザムル)の書き方一つとっても、日本で「当たり前」だった書き方(Bindingの書き方とか、MVVMの解釈とか)が、こっちのチームの「常識」とビミョーに違ったりする。

「ああ、ここはINotifyPropertyChangedの実装、Fody(ライブラリ)使って簡略化しないんだ…」とか、「ICommandの実装、RelayCommandじゃなくてDelegateCommand(Prism)で統一してんだな」とか。

そういう細かい「郷に入っては郷に従え」をキャッチアップしつつ、とにかく必死にTaskawaitを駆使して非同期処理を書きまくり、パフォーマンスチューニングに追われる日々。

毎日が「学習」と「適応」。これが、いわゆるキャリアの**「Tier 1(ティア・ワン):Learner(学習者)」**フェーズ。

この時期は、ぶっちゃけ「コードが書ければ」よかった。バグを直し、言われた機能を実装する。それだけで精一杯だし、周りも「新しいヤツだから」って多めに見てくれる。

で、2年も経てば、仕事にも慣れるわけです。

英語も(完璧じゃないけど)会議で意見を言えるようにはなる。WPFの設計思想もチームの流儀を理解して、コードレビューでも的確な指摘ができるようになってくる。

「ああ、俺、海外でもやっていけてるわ」

そう思った矢先でした。デカい「見えない壁」にぶち当たったのは。

その日、俺は「便利なコーディング要員」だと悟った

それは、新しいプロジェクトで使うUIコンポーネントライブラリを選定する会議でのこと。

俺は、技術的な観点からA社のライブラリを推してました。パフォーマンスもいいし、WPFの標準コントロールとの親和性も高い。技術的には絶対A。

でも、リードエンジニアが選んだのは、B社のライブラリだったんすよ。B社のは、ちょっとクセがあって、パフォーマンスもAに劣る。

俺は「なんで? 技術的にはAでしょ?」って食い下がった。

そしたらリードにこう言われたんです。

「キミの言うことは技術的に正しい。でも、B社は、ウチの会社が使ってる他のクラウドサービス(Azureとか)との連携で、すでに戦略的パートナーシップを結んでるんだ。将来的に、このWPFアプリをWebやモバイルに展開するってなった時、B社のロードマップとウチの戦略が一致してる。サポート体制も手厚い。技術的なわずかな優位性より、5年後のビジョンと組織全体の繋がりが重要なんだよ」

……ガツーン、と殴られた気分でした。

俺が見てたのは「今、この瞬間のコードの美しさ」だけ。

リードが見てたのは「会社全体の未来と、その中でのこのアプリの立ち位置」。

俺は、WPFのコードは書ける。でも、**「なぜ、この技術(WPF)を今、ここで使うのか」「このプロダクトをどう成長させていくのか」**という、一段上の視点が完全に欠けてた。

その瞬間、悟ったんです。

ああ、俺は「Tier 1」、つまり**「言われたことを(うまく)実行する人」**のままだ、と。

このままだと、俺は一生「コードを書くのがちょっと速い、便利な外国人エンジニア」で終わる。給料もそこそこで頭打ち。もっとコスパのいいヤツ(それこそAIかもしれないし、もっと給料の安い国からのエンジニアかもしれない)が出てきたら、真っ先に切られる存在。

特にWPFみたいに、Web系と違って「流行りの最先端!」ってわけじゃない技術分野だと、なおさら。

技術力だけで食っていくには限界がある。

Tier 1の「沼」から抜け出すために

海外で働くって、そういう「実力主義の残酷さ」がダイレクトに来るんです。

日本みたいに「〇〇さん、ベテランだから」みたいな「空気」は存在しない。

あなたに「ユニークな価値」がないと判断されたら、そこまで。

じゃあ、どうする?

コードを書くスキル(Tier 1)を極めるのは大前提。じゃあ、その「次」は?

そこで俺が意識し始めたのが、**「Tier 2 & 3」っていうキャリアの考え方。

これは単なる「シニアエンジニア」とか「マネージャー」みたいな役職の話じゃない。「影響力のレイヤー(階層)」**の話です。

  • Tier 1: Learner (学習者)
    • スキルを学び、タスクを実行する人。
  • Tier 2: Catalyst (触媒者)
    • 学んだことを「共有」する人。
    • 自分の知識や経験をチームに還元し、周りを「加速(Accelerate)」させる「触媒」みたいな存在。
    • (例:ジュニアのメンタリング、ドキュメント整備、勉強会の開催)
  • Tier 3: Visionary (先見者)
    • 未来を「開拓(Pioneer)」する人。
    • 技術選定やプロジェクトの方向性を決め、戦略的なパートナーシップを築いて、組織の未来を形作る存在。

あの会議でリードエンジニアが持ってたのは、明らかに「Tier 3」の視点でした。

俺は、「Tier 1」の沼にハマってた。

海外で「不可欠な存在」になるためには、このレイヤーを意図的に上がっていくしかない。

「でも、いきなりTier 3なんて無理ゲーじゃね?」

「知識を共有(Tier 2)するって、具体的に何すりゃいいの?」

わかります。俺もそうでした。

でも、大丈夫。

このブログでは、俺がこの「Tier 1の壁」にぶち当たってから、どうやって泥臭く**「Tier 2: 知識をシェアする側」に移行し、さらには「Tier 3: 未来を語る側」**の議論に食い込んでいったか。

その実体験ベースの「超・具体的なステップ」を、これから余すところなくブチまけていこうと思います。

特に「ギブ(与えること)が、いかに自分の成長を増幅させるか」っていう、**「相互ネットワーク(Reciprocal network)」**の構築術。これはマジで効きます。

まずは「承」で、どうやって俺が「ただのWPFコーダー」から「WPFの設計思想を語る触媒(Catalyst)」へと動き出したか、その第一歩から話していきますね。

ギブは最強の学習戦略 — 「Tier 2(触媒者)」になるための、超具体的な3つのアクション

「起」で話した、あの忌まわしき技術選定会議(笑)。

俺が「技術的に絶対Aでしょ!」って息巻いてたのに、リードエンジニアに「会社戦略と5年後のビジョン(Tier 3の視点)でB社なんだわ、スマンな」って一蹴された、あの日。

あの瞬間、俺は「Tier 1(学習者)」の限界、つまり「コードが書けるだけの人」の天井をハッキリと見たわけです。

このままじゃ、マジでヤバい。

給料も上がらんし、いつか「キミ、WPFしか書けないんだ? じゃあ、もういいや」って言われる日が来る。

でも、いきなりリードエンジニアみたいに「会社の5年後の戦略的パートナーシップが〜」とか語れます? 無理ゲーですよね(笑)。俺だって無理だった。

じゃあ、どうする?

答えはシンプルでした。

いきなり「Tier 3(先見者)」を目指すんじゃなくて、まずは「Tier 2(触媒者)」になること。

「触媒(Catalyst)」ってのは、つまり「化学反応を促進させるヤツ」のこと。

チームで言えば、**「自分の知識や経験をシェアすることで、チーム全体の生産性やレベルを『加速』させる人」**です。

海外の現場って、日本みたいに「背中を見て盗め」とか「暗黙の了解」みたいな文化は(比較的)薄い。その代わり、「知識はオープンにしてナンボ」「知ってるヤツは知らんヤツに教えるのが当たり前」っていうカルチャーが強いんです。

だから、「ギブ(Give)するヤツ」は、めちゃくちゃ尊重される。

でもね、これ、勘違いしちゃいけない。

「ギブ」っていうのは、自己犠牲じゃない。むしろ逆。

海外エンジニアにとって、「ギブ」は最強の「学習戦略」であり、「生存戦略」なんです。

「え、人に教えてたら自分の時間がなくなるじゃん」って思うでしょ?

違うんです。

  • 教えるためには、自分の中で情報が「超」整理されてないといけない。
  • 質問されることで、自分が「わかったつもり」になってた穴に気づける。
  • 「あの人は〇〇(俺ならWPF)に詳しい」というポジション(=ブランド)が確立される。

結果、自分のスキルも上がり、社内での影響力も上がり、重要な情報(Tier 3につながる話)が自然と集まってくるようになる。

今日は、俺が「Tier 1の便利なコーダー」から抜け出すために、泥臭く実践した「Tier 2(触媒者)になるための超具体的な3つのアクション」をシェアします。

これ、特別なスキルは要りません。「ちょっとの勇気」だけ。


アクション1:「完璧主義」を捨てて、50点のドキュメントを「まず」書く

「知識をシェアしろ」って言われて、最初に思いつくのって「ドキュメント書く」ことですよね。

でも、これが一番の難関。

特にエンジニアって完璧主義多いから(俺もそう)、「こんな中途半端な情報、公開してもな…」とか「もっと完璧に検証してから…」とか思って、結局やらない。

わかる。超わかる。

でも、海外でそれやってたら、一生「知識を溜め込む(けど活用できない)ヤツ」で終わります。

俺がやったのは、「完璧な100点のドキュメント」を目指すのをやめたこと。

その代わり、**「今、チームが困ってることの50点の答え」**を、誰よりも早くWiki(こっちだとConfluenceとかが多いかな)に書く、ということ。

例えば、俺のチームでは当時、WPFアプリの「起動時間の遅さ」が地味に問題になってました。

みんな「遅いよねー」とは言うものの、誰も根本対策に手をつけてなかった。

俺も最初は「うーん、Dispatcherの処理が詰まってんのかな」とか「XAMLのBindingが複雑すぎるのかな」とか色々考えてたけど、完璧な答えは出ない。

だから、まずこう書いた。

タイトル:「WPF起動時間:現状分かってることと、やってみたけどダメだったことリスト」

  • 現状:
    • 起動に平均5秒かかってる(最悪)。
  • 調査したこと(効果薄):
    • App.xaml.csのコンストラクタで重い処理はしてないか? → してなかった。
    • 画像の遅延読み込みは? → 一部やったけど、効果は0.5秒短縮のみ。
  • たぶん、ここが怪しい(未検証):
    • A社のサードパーティ製コンポーネントの初期化が重い疑惑。
    • 膨大な数のStyle(デザイン定義)をMergedDictionaryで読み込んでるのがボトルネックかも?
  • 誰か、この辺の知見ある人いますか?(Help!)

……どうです?

これ、技術的には何も解決してないんですよ(笑)。

ただ、「俺はここまで調べた。でもわからん。誰か助けて」って言ってるだけ。

でもね、これが「触媒」になるんです。

これを書いたことで、

  1. 別のシニアエンジニアが「あ、そのMergedDictionary問題、昔ハマったわ。StaticResourceじゃなくてDynamicResource使うと遅くなるケースあるよ」ってコメントくれた。
  2. 「A社のコンポーネント、確かに怪しいと思ってた。俺、ベンダーに問い合わせてみるわ」って別プロジェクトのヤツが反応してくれた。
  3. 結果、俺が一人でうんうん唸ってた時には出なかった解決策が、チーム(というか組織)として見つかった。

俺がやったのは「完璧な答え」を書くことじゃない。

「議論の叩き台(50点)」を提供しただけ。

でも、これにより、俺は「起動時間問題に最初に取り組んだヤツ」として認識された。

これが「ギブ」の第一歩。

「完璧なコード」を書くことより、**「不完全な情報をオープンにする勇気」**の方が、Tier 2への近道だったりするんです。

アクション2:「指摘」するな、「質問」しろ — ジュニア育成という名の自己学習

次にやったのが、ジュニアエンジニアのメンタリングとコードレビュー。

「え、ただでさえ忙しいのに、人のコード見てる暇ないよ」って?

甘い(笑)。

コードレビューこそ、最強のインプットの場なんです。

特に海外のジュニアは(いい意味で)生意気というか、ガンガン「Why?(なんで?)」って聞いてくる。

こっちが「ここはasync/await使って非同期にした方がいいよ」ってレビューで指摘するとするじゃないですか。

日本の感覚だと「あ、はい、直しときます」で終わるかもしれない。

でも、こっちのジュニアは平気でこう返してくる。

「なんでです? この処理、数ミリ秒で終わるんで、asyncにするオーバーヘッド(処理負荷)の方がデカくないです? Task.Runで別スレッドにするのと、awaitでUIスレッドに戻すの、どっちがパフォーマンスいいかデータあります?」

……ぐうの音も出ない(笑)。

「なんとなく、こっちの方がイケてるから」っていうフワッとした理解じゃ、レビューなんてできないんです。

だから俺、レビューの仕方を変えました。

「指摘(Assert)」するんじゃなくて、**「質問(Inquire)」**するスタイルに。

(悪い例)

「ここ、INotifyPropertyChangedの実装、BaseViewModel継承してないからダメ。直して」

(俺が実践した良い例)

「プルリクありがとう! 1点質問。ここのViewModel、BaseViewModelを継承してないけど、何か意図がある? 例えば、このViewModelはプロパティ変更通知が不要っていう認識で合ってる?」

こう聞くと、2パターンの答えが返ってきます。

  • パターンA(ジュニアが単に忘れてた):「あ、ヤバい! 完全に忘れてました! すぐ直します!」(→ この場合、彼は「指摘された」んじゃなく「自分で気づいた」形になるから、関係性が悪くならない)
  • パターンB(ジュニアに意図があった):「ああ、ここは画面表示後に一切変更がない読み取り専用のデータだから、INotifyPropertyChangedは不要(=オーバーヘッドを減らすため)と判断して、あえて継承してないんです」(→ 俺のインプットになる! 「なるほど、そういう割り切り方もあるのか!」と)

WPFのMVVMパターンなんて、100人いれば100通りの「正解」がある世界。

自分の常識(例えば「ViewModelは必ずBaseViewModelを継承すべし」みたいな)が、常に正しいとは限らない。

コードレビューを「間違い探し」の場じゃなくて、**「お互いの設計思想をすり合わせるディスカッションの場」**に変える。

これを徹底してから、ジュニアからの信頼も得られたし、何より俺自身が「なぜ、この書き方を選ぶのか?」を言語化するトレーニング(まさにTier 2のスキル!)になりました。

アクション3:「専門家」のレッテルを貼りにいく — 社内勉強会という名の「営業活動」

ドキュメント(アクション1)とコードレビュー(アクション2)で、ちょっとずつ「WPFのことで困ったら、アイツに聞けばなんか知ってるかも」っていう空気が醸成されてきました。

ここで、ダメ押しの一手。

社内勉強会(Tech Talk)の開催です。

これはもう、はっきり言って「営業活動」。

俺は「WPFのパフォーマンスチューニングの専門家」です、っていう「レッテル」を、自分から貼りにいく行為です。

いや、待って。

「専門家って言えるほど詳しくないし…」

「人前で英語でプレゼンとか無理…」

わかります。俺もそうでした。

プレゼン資料作ったはいいけど、「こんな内容でウケるか…?」って不安で、開催ボタンを押すのを3日くらい悩んだ(笑)。

でもね、これもアクション1のドキュメントと同じ発想。

「100点の完璧なプレゼン」じゃなくていい。

**「みんながちょっとだけ得する、明日使える3つのTips」**くらいでいいんです。

俺がやった最初のテーマは、

「お前らのWPFアプリが遅い理由 Top 3 — 今すぐListViewのVirtualization(仮想化)を確認しろ!」

みたいな、ちょっと刺激的なタイトル(笑)。

内容は、

  1. WPFの仮想化(Virtualization)がデフォルトで効かないケース(StackPanelItemsControl入れるな、とか)。
  2. BindingのエラーがOutputウィンドウ(デバッグログ)に出てると、めちゃくちゃ遅くなる実演。
  3. async/awaitの「罠」(ConfigureAwait(false)の使い所)。

…みたいな、WPFエンジニアなら「ああ、あるある」って言うけど、ちゃんと説明しろって言われると自信がない、そんな内容。

結果?

そりゃもう、大成功でした。

終わった後、いろんな部署のエンジニアから「ウチのアプリもソレだわ!」とか「あのBindingエラー、放置してた…」って声かけられて。

一番デカかったのは、

あの俺をコテンパンにしたリードエンジニアが来てて、「いいまとめだった。今度、俺が考えてる新しいアーキテクチャ(Tier 3の話!)について、WPFの観点から意見くれない?」って言われたこと。

……キタコレ!!!

「ギブ(勉強会の開催)」が、見事に「リターン(Tier 3への招待状)」になって返ってきた瞬間でした。


「承」で見てきたように、「Tier 2(触媒者)」になるっていうのは、特別な才能が必要なわけじゃない。

  1. 不完全でもいいから情報を「先に」出す勇気。(ドキュメント)
  2. 「教える」フリして、自分も「学ぶ」姿勢。(コードレビュー)
  3. 「専門家」のレッテルを自分で貼りにいく「営業努力」。(勉強会)

全部に共通してるのは、**「自分の知識を抱え込まない」**ってこと。

ギブすればするほど、自分も成長できるし、周りからの信頼(=影響力)もデカくなる。

この「信頼」っていう土壌ができて、初めて「Tier 3(先見者)」の出番がやってくるんです。

次の「結」では、このTier 2活動で得た「影響力」を武器に、どうやって俺が「コードの先を見る目」、つまり技術選定や会社の戦略っていう「Tier 3」の議論に食い込んでいったのか、その具体的なステップについて話します。

技術の話はするな!? — Tier 3の会議で、俺が「C#」を封印した日

「承」で話した、あの社内勉強会。

「WPFの仮想化(Virtualization)を確認しろ!」ってやつね。

あれがウケて、俺はついに、あのリードエンジニアから「次の新アーキテクチャ会議、キミも意見くれない?」っていう「Tier 3への招待状」をゲットしたわけですよ。

いや、もうね、ガッツポーズですよ。心の中で。

「よっしゃー! 見てろよ! 俺のWPF愛と技術力で、完璧なアーキテクチャ提案してやる!」

「これで俺も『便利なコーダー(Tier 1)』卒業だ!」

って。

Tier 2(触媒者)としてのギブ活動(ドキュメント整備、レビュー、勉強会)が、ついに実を結んだ瞬間でした。

そして迎えた、運命の会議当日。

参加者は、俺をコテンパンにしたリードエンジニア、各部門のシニアエンジニア数名、そして…プロダクトマネージャー(PdM)と、なんか役職がよく分からん「ビジネス戦略担当」みたいなオッチャン。

……あれ? なんかエンジニア以外の人、多くない?

まあいい。俺は俺の仕事(WPFの知見をブチまけること)をするまでだ。

会議が始まると、リードエンジニアが口火を切った。

「さて、来期から開発する新プロダクトだが、技術スタックの候補は3つある。A案:既存のWPF資産を流用する。B案:Blazor(C#でWeb作るやつ)でWebに全振りする。C案:MAUI(モバイル・デスクトップ両対応)でマルチプラットフォームを狙う」

お、おう。いきなりWPFの存続危機かよ。

でも、待ってました。俺の出番だ。

「ちょっといいですか」

俺は満を持して切り出した。

「A案のWPF流用だとしても、今の古いMVVMフレームワークは刷新すべきです。パフォーマンスとメンテナンス性を考えると、Dependency Injection(依存性の注入)を前提とした設計にして、WinUI 3(Microsoftの新しいUI技術)への移行パスも視野に入れたViewModelの分離を…」

俺が技術的な「正しさ」を熱弁してると、その「ビジネス戦略担当のオッチャン」が、俺の言葉を遮ってこう言ったんです。

「ごめん、ちょっと待って。君の話は、技術的には正しいんだろう。でも、俺が知りたいのは『なぜ』それをするのか、だ」

……へ?

オッチャンは続けます。

「君の言う『WinUI 3への移行パス』ってのは、具体的に『いつ』『いくら(工数)』かかって、それによって『何人の新規顧客』が獲れるんだ? 『メンテナンス性が上がる』ってのは、具体的に『開発者の工数』を『何%』削減できて、それは『いくら(人件費)』のコストカットになるんだ?」

「……え」

「俺たちは『美しいコード』を作りたいんじゃない。『売れるプロダクト』を作りたいんだ。君の提案は、その『売上』にどう貢献する?『技術的負債』っていう言葉で、エンジニアの『やりたいこと』を正当化してないか?

……シーン。

会議室が静まり返った。

俺、顔から火が出るかと思った。

あの「起」で書いた技術選定会議のデジャヴ? いや、あれよりヒドい。

あの時は「会社の戦略を知らない」だけだった。

今回は**「技術(C#やWPF)」と「ビジネス(カネ)」を『翻訳』する言語を、俺が一切持っていない**ことを、白日の下に晒された。

俺が熱弁してたのは、

「このasync/awaitの書き方は美しい」

「このICommandの実装はイケてる」

っていう、完全に「Tier 1(学習者)」の視点、良くて「Tier 2(触媒者)」の視点(=エンジニア仲間にはウケる話)でしかなかった。

Tier 3の会議で求められていたのは、「技術的な正しさ」じゃなかった。

「その技術選定が、会社の『カネ』にどういうインパクトを与えるか」

その一点だけだったんです。

Tier 3の「本当の姿」

俺は、根本的に勘違いしてました。

Tier 3(Visionary / 先見者)ってのは、

「Blazorだ! これからはWebAssemblyだ!」

みたいに、技術の未来を予言する「技術の王様」みたいな存在だと思ってた。

違う。

Tier 3とは、「通訳者」であり「交渉人」だったんです。

  • 「通訳者」として:
    • エンジニアの言葉(「技術的負債」「リファクタリング」「パフォーマンス向上」)を、
    • ビジネスサイドの言葉(「コスト削減」「開発スピード向上による市場投入(Time to Market)の短縮」「解約率(Churn Rate)の低下」)に翻訳する。
  • 「交渉人」として:
    • ビジネスサイドの要望(「今すぐこの機能を追加しろ」「開発費は半分だ」)に対して、
    • エンジニアリングの現実(「その機能はアーキテクチャ変更が必要で6ヶ月かかる」「コスト半分なら品質は保証できない」)を突きつけ、落とし所を探る。

あのリードエンジニアが「起」の会議でB社を選んだのは、「戦略的パートナーシップ」っていう「ビジネス言語」で、その技術選定の「費用対効果(ROI)」を説明できたから。

あの「ビジネス戦略のオッチャン」は、俺に「WPFの技術的な詳細」なんか求めてなかった。

彼が知りたかったのは、

「WPF(A案)を選ぶと、Blazor(B案)より、いくら『得』なの?」

「開発スピードは『何倍』になるの?」

っていう、**「数字」**でした。

「C#」を封印する、という決意

その会議、俺はその後、一言も発せられませんでした。

「WPFの知見を…」とか息巻いてた自分が、恥ずかしくてたまらなかった。

会議が終わって、リードエンジニアに呼び止められた。

「キツいこと言われたけど、落ち込むなよ」

「アイツ(オッチャン)の言う通り、俺たちエンジニアはすぐ『技術』の話から入る。でも、Tier 3のテーブルでは、それは『悪手』だ」

「じゃあ、どうすれば…」

「簡単だよ。次にあのテーブルに着く時は、『技術用語』を封印してみろ

……技術用語を、封印?

C#エンジニアが、asyncもWPFもMVVMも使わずに、何を話せと?

「例えば、『技術的負債の解消』って言う代わりに、『今、バグ修正に月間40時間(=エンジニア0.25人月)かかってます。この改修で、それを月5時間に減らせます。浮いた35時間で、新機能Aが開発できます』って言うんだ」

「『パフォーマンス改善』って言う代わりに、『起動時間が3秒短縮されることで、ユーザーの離脱率が推定2%改善し、年間〇〇ドルの売上増に繋がります』って言うんだ」

「そのためには、まず『ビジネス』を理解しろ。 ウチの会社が今、どこで儲けてて、何に困ってるのか。プロダクトマネージャーが毎朝見てる『数字(KGI/KPI)』は何か。それを知ることからだ」

俺は、自分が「エンジニア」という狭い枠の中でしか生きてこなかったことを痛感しました。

Tier 1で「コード」を学び、

Tier 2で「チーム」に共有することを学んだ。

でも、Tier 3で必要なのは、「会社(ビジネス)」を学ぶことだった。

この日を境に、俺はC#の技術書を読む時間を半分にして、代わりに「プロダクトのKPIダッシュボード」と「マーケティング部の資料」を読み漁るようになりました。

「コードの先を見る目」っていうのは、新しいフレームワークの動向を追うことじゃなかった。

自分の書いたコードが、どうやって「会社のカネ」に変わってるのか、その「流れ」を見る目のことだったんです。

この「ビジネス言語」の習得こそが、俺にとって一番キツく、そして一番リターンがデカい「学習」になりました。

次の「結」では、この「Tier 3の壁」を乗り越えるために、俺が具体的にどうやって「ビジネス言語」を学び、ただのWPFエンジニアから「ビジネスを語れるエンジニア」へと変わっていったのか。その泥臭いプロセスと、そこから得た「本当の価値」について、話を締めくくろうと思います。

もう「WPFエンジニア」とは呼ばせない — あなたの本当の「価値」を定義する方法

「転」で話した、あの悪夢の会議。

「君の言う『メンテナンス性』って、いくらのコストカットになるんだ?」

「ビジネス戦略担当」のオッチャンにそう詰められて、俺が技術用語を連発した挙句に撃沈した、あの日。

あれはマジで、俺のエンジニア人生の「第二の挫折」でした。

(第一の挫折は、海外来てすぐの英語が聞き取れなかった頃ね(笑))

あの日から、俺はC#の技術書を読む時間を減らし、代わりにプロダクトマネージャー(PdM)のケビン(仮名)に「ちょっとコーヒーでもどう?」ってウザ絡みするようになりました。

「ケビン、今どの機能が一番『売上』にインパクトある?」

「今追いかけてる最重要KPI(主要業績評価指標)って何?」

「ぶっちゃけ、ウチのプロダクトの一番の『強み』と『弱み』って、営業資料になんて書いてあんの?」

最初は「なんでエンジニアがそんなこと知りたいんだ?」って怪訝な顔をされましたよ。

でも、ここで「承」で築いた**「Tier 2(触媒者)」としての信頼**が、めちゃくちゃ効いてきたんです。

ケビンは俺のことを「WPFのことなら何でも知ってる、あのTech Talk(勉強会)のヤツ」って認識してくれてた。

だから、俺が「いや、技術的にどうアプローチすればそのKPI達成に貢献できるか、マジで考えたいんだ」って本気度を見せたら、アイツ、全部教えてくれたんです。

「ウチの顧客の4割は、セキュリティが厳格な製造業だ」

「そいつらはオフライン環境のWindows端末でしか、ウCHIのソフトを使えない」

「だから、もしウCHIが『Web版(Blazor案)だけにします』なんて言ったら、売上の4割が一瞬で吹き飛ぶ。それがウCHIがWPFを捨てられない、最大の『ビジネス上の理由』だ」

……これだ!!!

俺が「起」の会議でリードエンジニアに負けた理由。

俺が「転」の会議でビジネスのオッチャンに一蹴された理由。

彼らはずっと「Tier 3(先見者)」の視点、つまり**「技術」と「カネ(売上)」が直結した視点**でモノを見ていた。

俺は「Tier 1(学習者)」の視点、「コードの美しさ」しか見ていなかった。

この「ビジネスの現実」を知ってから、俺は生まれ変わりました。


そして、次の会議で起きたこと

数週間後。

再び、あの新プロダクトの技術スタックを決める会議が開かれました。

メンバーは、前回とほぼ同じ。あのビジネスのオッチャンもいます。

リードエンジニアが「さて、前回(WPF vs Blazor vs MAUI)の続きだが…」と切り出した瞬間、俺は手を挙げた。

「その件ですが、まず『どの技術を選ぶか』の前に、『どの顧客を獲り、どの顧客を捨てるか』の議論をさせてください」

会議室が、ちょっとザワついた。

俺は、あのオッチャンの目をまっすぐ見て続けました。

「俺、PdMのケビンと話しました。ウチの現時点での売上の4割は、オフラインのWindows環境を必須とする製造業のクライアントです」

「ここでB案(Blazor / Web)を採択した場合、この4割の既存顧客を『捨てる』覚悟が必要になります。その売上減(年間XXX万ドル)を、新規のWeb顧客で回収するのに、何年かかると試算してますか?」

「逆にA案(WPF)かC案(MAUI)なら、既存の4割の顧客は維持できます。その上で、C案(MAUI)を採用した場合、新規にiOS/Android市場へアクセスできますが、そのためにはウチのWPFエンジニア(俺含む)全員の再トレーニングが必要です。そのコスト(=開発がストップする期間と研修費)は、XXX万ドルと試算しました」

「A案(既存WPFの流用)が、最も低コスト(XXX万ドル)かつ短期間(Xヶ月)でリリースでき、既存顧客も維持できます。ただし、これだと新規市場は獲れません」

「……さて、皆さん。我々が今、会社として取るべき戦略(=カネの使い方)は、どれでしょう?」


あなたの「価値」は、コードが書けること「だけ」じゃない

……会議の結果?

もちろん、俺の出した数字をベースに、議論はめちゃくちゃ前に進みました。

(結局、短期的にはA案(WPF)で足場を固めつつ、C案(MAUI)への移行をスモールチームで検証する、っていうハイブリッド案に落ち着いた)

あの「ビジネスのオッチャン」が、会議の後に俺の肩を叩いてこう言いました。

「よくやった。君はもう『WPFエンジニア』じゃないな。『ビジネス・エンジニア』だ」

泣きそうになりましたよ、マジで。

これが、俺がこのブログで一番伝えたかったこと。

海外で働く、特に俺らみたいなC# / WPFっていう、Web系ほど「流行り」じゃない技術スタ…ックで戦うエンジニアが「不可欠な存在」になるための道筋です。

  • Tier 1 (Learner):
    • まずは技術を学べ。C#だろうがWPFだろうが、コードが書けなきゃ始まらない。これは「入場券」。
  • Tier 2 (Catalyst):
    • 学んだことを、独り占めするな。ドキュメントを書き、レビューをし、勉強会を開け。
    • ギブ(Give)しまくれ。これが「信頼」と「影響力(あなたのブランド)」を作る。「あいつは〇〇の専門家だ」と認識させろ。
  • Tier 3 (Visionary):
    • その「信頼」を使って、ビジネスサイドの「数字」と「戦略」を盗め。
    • なぜ、あなたの技術が必要なのか? それが会社の「売上」や「コスト削減」にどう繋がるのか?
    • 「技術」を「ビジネス(カネ)」の言葉に『翻訳』しろ。

Tier 2(触媒者)が「横」への影響力(同僚へのギブ)だとしたら、

Tier 3(先見者)は「縦」への影響力(経営層へのギブ)です。

この**「ギブの循環(Reciprocal Network)」**を作れた人間が、海外では勝ち残る。

明日から、あなたに始めてほしいこと

「いやー、壮大な話だった。でも俺には無理そうだ…」

って思った?

大丈夫。

俺だって、最初はasync/awaitの書き方すらおぼつかなかった、ただのWPFコーダーです。

明日から、大それたことをする必要はありません。

まずは、あなたの隣にいるPdMや営業担当に、こう聞いてみてください。

「今、お客さんから一番クレーム来てる機能って、何です?」

そして、そのクレームを、あなたのWPF/C#のスキルでどう潰せるか、考える。

「そのバグ直したら、サポートチームの対応工数、月に何時間減らせます?」って見積もる。

それが、あなたが「Tier 1」のコーダーから、「Tier 3」のビジネス・エンジニアへと踏み出す、最高にクールな第一歩です。

あなたの価値は、あなたが書けるコードの行数じゃない。

あなたのコードが、どれだけ「ビジネスの数字」を動かしたかで決まる。

さあ、Visual Studio開く前に、ちょっとだけ「カネ」のこと、考えてみませんか?

コメント

タイトルとURLをコピーしました