「バグ修正」なんて言うな!海外現場で学ぶ、技術的負債を「未来への投資」に変える信頼再構築の技術

  1. 信頼の崩壊と「言葉」の壁:なぜ「リファクタリングさせてください」は経営層に響かないのか?
      1. 異国の地で直面した「負債」という名の怪物
      2. 「Fixing Bugs」という言葉の罠
      3. 信頼残高の枯渇
      4. 視点を変える必要性
      5. エンジニアの孤独と連帯
  2. マインドセットの転換:「未来のベロシティ」への投資として負債を定義し直す
      1. エンジニアは「翻訳者」であれ
      2. 「負債」のメタファーを正しく使いこなす
      3. 具体的な「翻訳」テクニック:FixingからInvestingへ
      4. 実例:C# WPFプロジェクトでの「神クラス」解体交渉
      5. 「ボイスカウト・ルール」の限界と「戦略的負債」
      6. 「見えないもの」への恐怖を取り除く
      7. 自分自身への問いかけ
  3. 心理的安全性の確保:犯人探しを辞め、エンジニアが自律的に動く「聖域」を作る
      1. 敵は「経営陣」だけではない。最大の敵は「隣の席の同僚」かもしれない
      2. 「心理的安全性」がない場所で、リファクタリングは生まれない
      3. 具体策1:Blameless Post-Mortem(非難なき事後検証)
      4. 具体策2:負債の「見える化」と「聖域化」
      5. 具体策3:エンジニアを「被害者」から「オーナー」へ
      6. 「カオス」を楽しむ余裕
  4. 測れるインパクト:コード行数を超えて、DORA指標で成果を証明する
      1. 経営陣は「頑張り」を買わない。「成果」を買う
      2. 「ベロシティ」の罠と「虚栄の指標」
      3. 共通言語としての「DORA指標」
        1. 1. デプロイ頻度:QAに届ける回数を増やす
        2. 2. 変更のリードタイム:アイデアから実装までのスピード
        3. 3. 変更障害率:バグの再発防止
      4. 数字を使った「信頼回復」のプレゼン
      5. 究極のゴール:エンジニアが「幸せ」になること
      6. 最後に:これから海外を目指す、あるいは今戦っているあなたへ

信頼の崩壊と「言葉」の壁:なぜ「リファクタリングさせてください」は経営層に響かないのか?

異国の地で直面した「負債」という名の怪物

海外に来て数年、C#とWPFを使ったデスクトップアプリケーション開発の現場で、僕は毎日コードと格闘しています。海外就職と聞くと、キラキラしたオフィスで最先端の技術を……なんて想像するかもしれませんが、現実はもっと泥臭いものです。特に、長く使われている基幹システムなんかを担当すると、そこには歴代のエンジニアたちが積み上げてきた「地層」のようなレガシーコードが眠っています。

WPFのXAMLは複雑怪奇にネストされ、ViewModelは数千行に肥大化し、MVVMパターンなんて名ばかりのスパゲッティコード。ボタン一つ追加するのに、なぜか3つの異なるクラスを修正しなきゃいけない。そんなコードベースを前にして、僕たちエンジニアは日々こう思うわけです。「一度全部止めて、きれいに書き直したい!」と。

でも、ここに海外ならではの、そしてエンジニアならではの大きな壁が立ちはだかります。それが「ビジネスサイドとの断絶」です。

「Fixing Bugs」という言葉の罠

ある日のスプリントプランニングでのことです。僕はプロダクトオーナー(PO)に向かってこう言いました。

「次のスプリントでは、少し機能開発のペースを落として、メイン画面のViewModelのリファクタリングをしたい。バグの温床になっているから、今のうちに直しておきたいんだ(I want to fix bugs and refactor the code so…)」

POの反応は冷ややかなものでした。

「またか? 先月も『クリーンアップ』の時間取ったよね? ユーザーには関係ない内部のことに時間を使うより、約束した新機能をデリバリーするのが先決だ。バグが出たらその時直せばいい。」

この時、僕は強烈な違和感を覚えました。日本にいた頃は、「品質向上のため」と言えば、ある程度は「じゃあ頼むよ」と任せてもらえていました。でも、ここでは違う。「なぜ今やる必要があるのか?」「それをやることで幾ら儲かるのか?」という問いに即答できなければ、提案は却下されます。

そして気づいたんです。僕が使っていた「Fixing Bugs(バグ修正)」や「Refactoring(リファクタリング)」という言葉が、ビジネスサイドには「マイナスをゼロに戻すだけの、生産性のない作業」として響いていることに。彼らにとってバグ修正は「エンジニアが作ったミスの尻拭い」であり、そこにコスト(時間とお金)をかけることは、損失でしかないんです。

信頼残高の枯渇

こうして「技術的負債」を放置したまま開発を続けると、どうなるか。当然、開発スピード(ベロシティ)は落ちていきます。以前なら1日で終わっていた機能追加が、複雑な依存関係のせいで3日かかるようになる。するとビジネスサイドはこう思います。「最近、開発チームの動きが遅いな。サボってるんじゃないか?」

エンジニアは「コードが汚いから時間がかかるんだ!」と主張したい。でも、その汚いコードを放置してきた(あるいは作ることを許容してきた)のは自分たちだと思われている。ここで「信頼」が音を立てて崩れていきます。

海外の現場、特に多国籍なチームでは、この「信頼(Trust)」こそが通貨です。信頼があれば、少々無理な提案でも「君が言うなら」と通る。信頼がなければ、どんなに正論を言っても「言い訳」と捉えられる。

僕は、WPFの依存プロパティが予期せぬ挙動をするバグを追いかけながら、絶望的な気分になりました。コードが腐っているだけじゃない。チームと経営陣の間の「信頼関係」が腐ってしまっている。これを何とかしない限り、どれだけ優れたアーキテクチャを提案しても、C#の最新機能を使おうとしても、何も変わらない。

視点を変える必要性

そこで僕は、アプローチを根本から変えることにしました。コードを直す前に、まずは「会話」を直さなければならない。

技術的負債の話をするとき、僕たちはつい「過去」の話をしがちです。「昔のコードが悪い」「設計が古い」。でも、経営陣が見ているのは常に「未来」です。「次の四半期にどう勝つか」「来年どう成長するか」。

ここに大きなギャップがありました。僕たちがすべきだったのは、「過去の尻拭い(Fixing Bugs)」の話ではなく、「未来への投資(Investing in Future Velocity)」の話だったんです。

例えば、WPFのレンダリングパフォーマンスが悪いとして、「描画ロジックが古いから直したい」と言うのと、「この改修を行えば、画面の応答速度が上がり、ユーザーの待機時間が30%削減されます。さらに、今後のUI変更にかかる工数が半分になるため、次のリリースのサイクルを2週間短縮できます」と言うのとでは、相手の受け取り方は天と地ほど違います。

前者は「コスト」の話、後者は「戦略」の話です。

エンジニアの孤独と連帯

海外で働いていると、孤独を感じることがあります。言葉の壁、文化の壁。でも、コードという共通言語を通じて、世界中のエンジニアと繋がれる瞬間もあります。

技術的負債に苦しんでいるのは、僕だけじゃなかった。同僚のインド人エンジニアも、ブラジル人のQA担当も、みんな同じ痛みを抱えていました。「このままじゃ、いつかシステムが破綻する」と。

だからこそ、この「会話のシフト」は、僕一人の問題ではなく、チーム全体で取り組むべきミッションになりました。僕たちは、単にコードを書く「コーダー」から、ビジネスの成長を技術で支える「パートナー」へと脱皮する必要があったんです。

これから続く章では、具体的にどうやってその「会話」を変えていったのか。そして、どのようにしてチーム内に「負債を恐れず、立ち向かう文化」を作っていったのか。さらには、それをどうやって「数字」で証明し、信頼を勝ち取っていったのか。僕の実体験と、泥にまみれた試行錯誤の記録をお話しします。

これは、C#の文法書には載っていない、でも現場で最も必要とされる「エンジニアリング・マネジメント」のリアルな記録です。

さあ、まずはその第一歩、「マインドセットの転換」から始めていきましょう。

マインドセットの転換:「未来のベロシティ」への投資として負債を定義し直す

エンジニアは「翻訳者」であれ

海外で働いていて痛感するのは、僕たちエンジニアには「2種類の翻訳」が求められるということです。一つはもちろん、日本語から英語(または現地の言葉)への言語的な翻訳。そしてもう一つ、意外と見落とされがちなのが**「エンジニアリング言語」から「ビジネス言語」への翻訳**です。

僕たちC#使いが「WPFのBindingがリークしてメモリを食いつぶしているから、WeakEventManagerを使うか、ReactivePropertyに置き換えたい」と言ったところで、非技術者のマネージャーやプロダクトオーナー(PO)には呪文にしか聞こえません。彼らの脳内で起きているのは「ふーん、なんか難しそうだけど、それでお金になるの?」という冷徹な計算だけです。

ここで、「わかってくれない」と嘆くのは簡単です。かつての僕もそうでした。「技術的な正しさ」は正義であり、それを理解しないのは不勉強だ、とすら思っていました。でも、それは傲慢な「職人気質(Craftsmanship)」の履き違えだったんです。

ビジネスサイドの人間にとって、関心事は「機能(Feature)」と「納期(Timeline)」、そして「コスト(Cost)」です。僕たちがすべきは、技術的負債の話をこれら3つの要素に翻訳して届けることなんです。

「負債」のメタファーを正しく使いこなす

「技術的負債(Technical Debt)」という言葉は、ウォード・カニンガムが金融の借金をメタファーにして作った言葉ですが、この「金融」の側面をうまく利用しない手はありません。

借金自体は悪ではありませんよね? ビジネスを加速させるために融資を受ける(=急いでリリースするために、あえて汚いコードを書く)ことは、戦略としてアリです。問題なのは、「利子(Interest)」を払い続けていることに無自覚な状態です。

僕はPOとのミーティングで、よくこんな風に説明します。

「今のコードベースは、クレジットカードのリボ払いが限度額いっぱいになっている状態だ。毎月の支払いが『利子』だけで消えていて、元本(新機能開発)に回せるお金がない。このままだと、新しい機能を追加しようとしても『カードが使えません』って言われる日が来るよ」

こう伝えると、彼らの目の色が変わります。「開発が遅い」のではなく、「支払い能力(キャパシティ)が利子に食われている」と理解してもらう。これがマインドセット転換の第一歩です。

具体的な「翻訳」テクニック:FixingからInvestingへ

では、具体的にどう言葉を変えればいいのか。僕が現場で実践している「翻訳テーブル」を紹介します。

【NGワード:エンジニア視点】

  • 「コードが汚いのでリファクタリングしたい」
  • 「テストコードがないので書きたい」
  • 「ライブラリのバージョンが古いので上げたい」
  • 「この設計だと拡張性がない」

これらは全て「エンジニアの都合」に聞こえます。これを「ビジネスの価値」に翻訳します。

【OKワード:ビジネス視点(投資への転換)】

  • リファクタリング → 「将来の開発速度(ベロシティ)を現在の1.5倍にするための準備期間が欲しい。今この投資をすれば、Q3の大型機能追加にかかる工数を2週間短縮できる」
  • テストコード → 「リグレッション(先祖返り)のリスクを自動検知する仕組みを入れることで、QA(品質保証)コストを30%削減し、リリースサイクルを現在の2週間から1週間に短縮できる」
  • バージョンアップ → 「セキュリティリスクによるサービス停止の損害賠償リスク(数百万ドル規模)を回避し、かつ最新機能によるパフォーマンス向上でユーザー離脱率を下げる」
  • 拡張性 → 「市場の変化に合わせて、競合他社より早く新機能を投入するための**適応能力(Agility)**を確保する」

どうでしょう? やることは同じ「コードの修正」ですが、文脈が「コストの消化」から「未来の利益のための投資」に変わっていますよね。

特に海外の現場では、**「Time to Market(市場に出すまでの時間)」**が何より重視されます。「きれいなコード」そのものに価値はなく、「速く、安全に市場に出し続けられる状態」にこそ価値がある。そう定義し直すのです。

実例:C# WPFプロジェクトでの「神クラス」解体交渉

以前、あるプロジェクトで「神クラス(God Class)」と化した巨大なViewModelに遭遇しました。5000行を超え、あらゆるビジネスロジックがUI処理と密結合している悪夢のようなコードです。

ここに新しい機能を追加するタスクが降ってきました。普通にやれば、「とりあえず動く」コードを継ぎ足して、6000行にするのが一番早いです。

でも僕は、ここでブレーキを踏みました。POにこう提案したのです。

「この機能追加、普通にやれば3日で終わります。でも、僕はあえて5日くださいと言いたい」

POは当然、「なんで? 3日でやってよ」という顔をします。

そこで僕はホワイトボードにグラフを書きました。

「今のまま継ぎ足せば3日です。でも、次の機能追加は4日、その次は5日かかるようになります(複雑度が増すから)。これは『複利』で借金が増えるのと同じです。

でも、今回5日かけて、この部分を別クラスに切り出して疎結合にさせてくれれば(ここがWPFのBehaviorやServiceへの切り出しです)、次の機能追加は2日で済みます。そしてその次も2日です。

1ヶ月後のトータルで見れば、今5日かけた方が圧倒的に速い。 どちらを選びますか? あなたが『開発スピード』を重視するなら、5日の方を選ぶべきです」

このロジックは強力でした。彼は少し考えた後、「わかった。ただし、本当に次から速くなるんだな?」と念を押し、GOサインを出してくれました。

結果、そのリファクタリングのおかげで、その後のUI変更要望にはXAMLの修正だけで対応でき、爆速でデリバリーできました。これが「信頼」の積み立てになります。「あいつの言う『遅延』は、後で『倍速』になって返ってくる」と認識させることができれば、勝ちです。

「ボイスカウト・ルール」の限界と「戦略的負債」

もちろん、すべてのリファクタリングに許可が必要なわけではありません。日常的な小さな改善(変数名の変更、小さなメソッドの抽出など)は、許可を求めず息をするようにやるべきです。これは「来た時よりも美しく」というボイスカウト・ルールです。これはプロとしてのマナーであり、見積もりに含めるべき「作業の一部」です。

しかし、アーキテクチャに関わるような大きな変更や、数日単位の時間が必要な改修については、隠れてやってはいけません。それは「隠れ借金」の返済と同じで、透明性を損ないます。

ここで重要なのが**「戦略的負債(Strategic Debt)」**という考え方です。

「今回は展示会に間に合わせるために、あえてテストを書かず、コピペで実装する。その代わり、展示会後のスプリントで必ずペイバック(返済)する時間を確保する」

このように、チームとビジネスサイドが合意の上で背負う負債は、健全な負債です。

マインドセットの転換とは、エンジニアが一方的に「コードをきれいにしたい」と願うことではなく、ビジネスサイドと**「どの程度の品質とスピードのバランスで攻めるか」を合意形成できる関係**になることです。

「見えないもの」への恐怖を取り除く

ビジネスサイドが技術的負債を嫌うもう一つの理由は、「見えないから」です。新機能は画面で見えますが、リファクタリングの成果は画面には現れません(現れてはいけません)。

人間は、見えないものにお金を払うのを嫌がります。

だからこそ、僕たちはその「見えない効果」を「見える化」する必要があります。

「開発スピードが上がった」という感覚値ではなく、リードタイムの短縮などのデータで示す。あるいは、バグ発生率の推移グラフを見せる。

これについては、最後の「結」のパートで詳しく触れますが、まずは「言葉」を変えることで、相手の脳内に「これは必要な投資なんだ」というイメージを植え付けることが、このフェーズのゴールです。

自分自身への問いかけ

最後に、このマインドセットの転換は、実はエンジニア自身のメンタルヘルスにも良い影響を与えます。

「汚いコードを書かされている」という被害者意識から、「ビジネスの状況に合わせて、最適な技術的判断を下している」という当事者意識(Ownership)へと変わるからです。

「このコードはクソだ」と愚痴を言うのは簡単です。でも、「このコードは、過去のビジネスを支えてきた遺産だ。そして今、僕がそれを未来のために磨き上げる番だ」と思えたら、ちょっとカッコよくないですか?

海外の荒波の中で生き残るには、技術力と同じくらい、この「捉え直す力(Reframing)」が必要です。

さあ、経営層との会話のチャンネルは合いました。次は、現場のエンジニア同士、チーム内部の話です。負債を返済しようと立ち上がった時、誰かを責めたり、犯人探しをしてしまっていませんか?

次の「転」では、チーム内に「心理的安全性」と「自律的な解決の文化」を作る方法についてお話しします。

心理的安全性の確保:犯人探しを辞め、エンジニアが自律的に動く「聖域」を作る

敵は「経営陣」だけではない。最大の敵は「隣の席の同僚」かもしれない

「承」のパートで、ビジネスサイドへの翻訳術についてお話ししましたが、仮に経営陣から「よし、リファクタリングに工数を割いていいぞ」と許可が出たとしましょう。

これで全て解決……とはなりません。むしろ、ここからが本当の戦いです。

僕が海外に来て最初に配属されたチームは、技術力は高いものの、雰囲気は最悪でした。

プルリクエスト(PR)のレビューはまるで「公開処刑」。

「このXAMLの書き方はパフォーマンスを殺してる。勉強不足だ」

「ViewModelでViewを参照するなんて正気か?」

飛び交うコメントは鋭利な刃物のよう。そして、誰かがバグを出すと、すぐに犯人探しが始まる。

git blame というコマンドがありますよね。行ごとに誰が書いたかを表示する機能です。本来は「誰に詳細を聞けばいいか」を知るためのコマンドですが、当時のチームでは文字通り「Blame(非難)」するために使われていました。

「ああ、このメモリリークの原因、3年前に辞めたマイクのコードだよ。あいつ本当にひどかったな」

「いや、先週ここを触ったのは君だよね?」

こんな空気の中で、誰がリスクを冒してまで「古いコードの大規模改修」に手を挙げるでしょうか?

答えは「No」です。触らぬ神に祟りなし。「動いているコードには触るな(If it ain’t broke, don’t fix it)」という、エンジニアとしての死を意味するスローガンが、保身のために蔓延してしまうのです。

「心理的安全性」がない場所で、リファクタリングは生まれない

Googleの研究チームが発表した「プロジェクト・アリストテレス」をご存知の方も多いでしょう。「生産性の高いチームに共通する唯一の因子は『心理的安全性(Psychological Safety)』である」というアレです。

これは、技術的負債の解消においても決定的に重要です。

なぜなら、技術的負債の返済(リファクタリング)は、本質的に「リスクを伴う行為」だからです。

スパゲッティ化したWPFのBindingを整理しようとして、誤ってデータコンテキストの継承を切ってしまい、画面の一部が更新されなくなる……なんてことは日常茶飯事です。

もしチームに「失敗しても許される」「挑戦したこと自体が評価される」という安全基地がなければ、誰も負債になんて立ち向かいません。現状維持バイアスがかかり、コードは腐り続けます。

僕はチームリーダーになった時、まずコードの話をするのを止めました。代わりに**「Blameless Culture(非難なき文化)」**の構築に全力を注ぎました。

具体策1:Blameless Post-Mortem(非難なき事後検証)

本番環境で障害が起きた時、あるいはリファクタリングでバグを埋め込んでしまった時。以前なら「誰がやった?」でしたが、これを徹底的に禁止しました。

代わりに導入したのが**「Blameless Post-Mortem」**です。

ルールは簡単。**「主語を『人(Who)』から『仕組み(What/How)』に変える」**こと。

× 「ジョンがNullチェックを忘れたのが原因です」

〇 「Nullチェックが漏れるような『プロセス』や、それを検知できなかった『テスト環境』に不備がありました。なぜCI(継続的インテグレーション)で弾けなかったのかを議論しましょう」

人間はミスをします。優秀なエンジニアでも、疲れていればミスをする。だから、人を責めても再発防止にはなりません。

「我々はチームとして、個人のミスをカバーする仕組みを持っていなかった。だからこれはチーム全員の責任であり、プロセスの敗北だ」

こう定義し直すことで、当事者の心理的負担を下げ、隠蔽を防ぎ、チーム全体で「仕組みによる解決(自動テストの拡充やLintの導入)」に向かうエネルギーに変えるのです。

この文化が浸透すると、不思議なことが起きます。

「すみません、僕がバグを入れました!」と、自分から明るく申告するメンバーが出てくるのです。隠す必要がないからです。早期発見、早期解決。これこそがアジャイルなチームの姿です。

具体策2:負債の「見える化」と「聖域化」

次に、「負債を隠さない」仕組みを作りました。

多くの現場では、技術的負債はJiraのバックログの深淵に沈んでいき、二度と日の目を見ません。これではエンジニアのモチベーションも下がります。

僕たちは、オフィスのホワイトボード(リモートならMiroなど)に**「Debt Wall(負債の壁)」**を作りました。

「ここの非同期処理、async/awaitじゃなくてDispatcher.Invokeを多用してて重い」

「コンバーターが汎用性なさすぎ」

といった愚痴レベルのものから、アーキテクチャ上の欠陥まで、付箋に書いて貼り出します。誰でも、いつでも貼っていい。

そして、スプリントの中に**「20%の聖域」を設けました。

金曜日の午後は、機能開発を一切しない。この「Debt Wall」から好きなカードを選んで、ひたすらハックしていい時間にする。

これを「Boy Scout Friday」**と名付けました。

これが効果覿面(てきめん)でした。エンジニアにとって、自分の気になっていた汚いコードを、誰にも邪魔されずにきれいにできる時間は、ある種の「ご褒美」なんです。

「見てくれ! あの300行の冗長なロジック、LINQ一発で書き直してやったぜ!」

「おおー! すげえ!」

Slackに流れる「Before/After」のコードスニペット。飛び交う称賛のスタンプ。

かつて「処刑場」だったコードレビューの場が、互いの「掃除の成果」を自慢し合う「発表会」に変わりました。

具体策3:エンジニアを「被害者」から「オーナー」へ

技術的負債の話をする時、エンジニアは得てして「被害者面」になりがちです。

「前の担当者がクソだった」「仕様変更が多すぎた」「時間がなかった」

でも、被害者のままでいる限り、状況は変わりません。

僕は1on1ミーティングで、メンバーにこう問いかけ続けました。

「このコードベースのオーナーは誰?」

答えはCEOでもPOでもない。今キーボードを叩いている君たちだ、と。

海外では「Ownership(当事者意識)」が非常に重視されます。

「汚い部屋に住まわされている」と思うなら引っ越せばいい。でも、まだここに住むなら、文句を言いながら暮らすより、自分の手で住みやすくリフォームした方が楽しくないか?

C#の最新機能(Record型やPattern Matchingなど)を使いたいなら、それを使えるようにレガシーコードを書き換えればいい。WPFのパフォーマンスが出ないなら、プロファイリングツールを回してボトルネックを特定し、改善案を出せばいい。

「不満」を「タスク」に変える権利は、君たちの手にあるんだ。

そう伝えると、若いエンジニアたちの目が変わってきます。

「実は、Prismのライブラリを使ってモジュール化したいと思ってたんです」

「やってみよう。失敗してもいい。責任は僕が取る」

こうして、トップダウンで「負債を返せ」と命令するのではなく、ボトムアップで「これを直したい!」という声が上がるチームへと変貌していきました。

エンジニアが自律的に動き出した時、そのパワーは凄まじいものがあります。彼らは週末を使ってでも、自分の「作品」を磨き上げようとします(もちろん労働時間は管理しますが、その熱意という意味で)。

「カオス」を楽しむ余裕

海外の現場は、日本ほど整っていません。仕様はコロコロ変わるし、人の出入りも激しい。カオスです。

でも、だからこそ面白い。

カオスなコードを、秩序ある美しいコードに変えていく過程は、まるでパズルを解くような知的な喜びがあります。

チームに心理的安全性が確保され、互いに背中を預けられる信頼関係(Trust)が生まれた時、技術的負債との戦いは「苦役」から「ゲーム」へと変わります。

「今週はどれだけ借金を返せたか?」

「俺たちのベロシティ、先月より上がってるぞ!」

ここまで来れば、もう大丈夫。チームは自走し始めます。

しかし、ここで満足してはいけません。

冒頭の「起」で約束しましたよね。経営層には「ビジネスへのインパクト」で語ると。

チーム内の熱気を、どうやって冷徹な「数字」に変えて、経営層を納得させ続けるか。

それが最後の仕上げです。

「コードがきれいになりました」ではなく、「開発スピードが○倍になり、障害率が○%下がりました」と胸を張って言えるようになるために。

最終章「結」では、エンジニアの成果を正当に評価させるための**「計測可能なインパクト」**についてお話しします。

測れるインパクト:コード行数を超えて、DORA指標で成果を証明する

経営陣は「頑張り」を買わない。「成果」を買う

海外のエンジニアリングマネージャーやテックリードと話していると、彼らは驚くほど「数字」にシビアです。

日本だと「遅くまで残業して頑張っている」ことがなんとなく評価に繋がったりしますが、こちらでは「残業している=マネジメント能力不足か能力不足」と見なされかねません。

僕たちがこれまでやってきた「技術的負債の返済」や「チーム文化の改革」。これらは間違いなく素晴らしいことですが、経営陣(CFOやCEO)から見れば、まだ「コスト」の域を出ていません。

「エンジニアたちが楽しそうにリファクタリングしているが、それで売上は上がったのか?」

この冷徹な問いに、イエスと答え、証拠を叩きつける。ここまでやって初めて、プロフェッショナルとしての仕事が完結します。

「ベロシティ」の罠と「虚栄の指標」

成果を測る時、多くの現場で陥りがちな罠があります。それは「ベロシティ(ストーリーポイントの消化数)」や「コード行数(LoC)」を目標にしてしまうことです。

「今月は先月より多くのストーリーポイントを消化しました!」

これは危険なアピールです。なぜなら、ポイントの見積もりは相対的で水物だからです。負債の返済を正当化するために、見積もりを意図的に膨らませる(サンドバッグ詰めする)ようになれば、チームは腐敗します。

また、「コード行数」なんてもってのほかです。

C#でWPFを書いていると、自動生成されるコードや冗長なXAMLで行数は簡単に稼げます。

優秀なエンジニアの仕事は、コードを増やすことではなく、**「不要なコードを減らし、価値を最大化すること」**です。

「5000行のスパゲッティコードを削除し、機能はそのままに、可読性の高い500行に書き直しました」

これこそが賞賛されるべきですが、行数をKPIにしていると、これが「マイナス成果」になってしまいます。

では、何を測るべきか? ここで登場するのが**「DORA指標(Four Keys)」**です。

共通言語としての「DORA指標」

DevOpsのバイブル『Accelerate』で提唱された4つの指標(DORA指標)は、ウェブ系だけでなく、僕たちのようなデスクトップアプリ(WPF/Windows Forms)開発や、エンタープライズ領域でも極めて有効です。

  1. デプロイ頻度 (Deployment Frequency)
  2. 変更のリードタイム (Lead Time for Changes)
  3. 変更障害率 (Change Failure Rate)
  4. 復旧時間 (Mean Time to Restore)

僕はこの4つを、C# WPF開発の現場に合わせて少しアレンジして導入しました。

1. デプロイ頻度:QAに届ける回数を増やす

デスクトップアプリの場合、エンドユーザーへのリリースは頻繁に行えない(強制アップデートが嫌われる)事情があります。

そこで僕は、「QA(品質保証)環境へのインストーラー生成回数」を指標にしました。

以前は手動ビルドで半日かかり、週に1回しかQAに渡せませんでした。

これをCI(Azure DevOps)で自動化し、リファクタリングで依存関係を整理したことで、ビルド時間が短縮。結果、「毎日(Daily)」 QAチームに最新ビルドを渡せるようになりました。

これは「開発のリズム」が高速化したことの証明です。

2. 変更のリードタイム:アイデアから実装までのスピード

「ここ、ちょっと直したいな」と思ってコードを書き始め、それがマージされ、ビルドされて動く状態になるまでの時間です。

技術的負債が解消されると、この時間が劇的に短くなります。

「以前はViewModelの修正の影響範囲を調べるだけで2日かかっていました。リファクタリングで疎結合になった今、修正からテスト完了まで4時間です」

これは経営陣に**「我々は以前より敏捷(Agile)になった」**と伝える強力な武器になります。

3. 変更障害率:バグの再発防止

リファクタリングの効果が最もわかりやすく出るのがここです。

「以前のリリースでは、毎回3〜4個のクリティカルなバグが見つかり、手戻りが発生していました。しかし、ユニットテストのカバレッジを上げ、複雑度(Cyclomatic Complexity)を下げた結果、直近3回のリリースで障害発生率はゼロです」

品質はお金です。手戻りのコスト削減は、そのまま利益に直結します。

数字を使った「信頼回復」のプレゼン

ある四半期の終わり、僕はこれらのデータをまとめて経営陣へのプレゼンに臨みました。

スライドに映し出したのは、右肩上がりの「デプロイ頻度」と、右肩下がりの「障害率」のグラフ。

「見てください。我々が『リファクタリングの時間(20%の聖域)』に投資した結果がこれです。

最初の1ヶ月は機能開発の絶対量は減りました。しかし、2ヶ月目から開発スピード(リードタイム)が向上し、3ヶ月目には以前の生産性を追い越しました。

そして何より、バグ対応に費やす無駄な時間(手戻りコスト)が40%削減されました。

浮いた時間で、来期はさらに攻めの新機能開発ができます」

CEOが頷き、こう言いました。

「なるほど、君たちが『掃除』をしたいと言っていた理由はこれか。ただの自己満足じゃなくて、次の成長のための足場固めだったんだな。OK、来期もその『20%ルール』を継続してくれ。頼むよ」

この瞬間、**「信頼(Trust)」**が再構築されました。

もう、「サボっているんじゃないか」なんて疑われることはありません。エンジニアとビジネスサイドが、同じ方向を向いて走れるようになったのです。

究極のゴール:エンジニアが「幸せ」になること

技術的負債の解消、心理的安全性の確保、そして成果の数値化。

これら全ての取り組みの先に何があるのか。

それは、エンジニアがエンジニアらしく、誇りを持って働ける環境です。

海外で働いていると、日本以上に「プロフェッショナルとしての自律」を求められます。

誰も守ってくれません。でも、自分で環境を変える自由はあります。

「コードが汚い」と嘆くのではなく、「このコードを直すことがビジネスにどう貢献するか」を語り、仲間を巻き込み、結果で黙らせる。

そのプロセスこそが、エンジニアとしてのキャリアを最強に輝かせるポートフォリオになります。

C#やWPFという技術は、あくまで道具です。

本当に大切なスキルは、その道具を使って、「カオスな現状」を「価値ある未来」へと書き換える力です。

最後に:これから海外を目指す、あるいは今戦っているあなたへ

ここまで長い連載にお付き合いいただき、ありがとうございました。

異国の地で、言葉も文化も違う中で働くのは、正直しんどいことも多いです。

理不尽な要求、通じないジョーク、孤独感。

でも、コードという共通言語と、論理(ロジック)という武器があれば、僕たちはどこでだって戦えます。

「技術的負債」という厄介な敵を、チームの結束を高め、ビジネスを成長させるための「味方」に変えてしまってください。

あなたが書く一行のコード、あなたが発する一言の提案が、チームを救い、世界中のユーザーを幸せにする可能性を秘めています。

さあ、明日もまた、Visual Studioを開いて、最高の仕事をしましょう。

Good Luck!

コメント

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