完璧主義は「悪」?海外現場で叩き込まれた “Fail Fast” の衝撃
こんにちは!海外でC# WPFを使ってデスクトップアプリの設計開発をしている現役エンジニアです。
今日は、これから海外を目指すエンジニアの皆さん、あるいは今まさに異文化の洗礼を浴びて溺れかけている同胞たちに向けて、ちょっと「耳の痛い」、でも知っておくと劇的に生存率が上がる話をしようと思います。
突然ですが、皆さんは「完璧なコード」を書きたいですか?
僕たち日本人のエンジニア、特にC#やJavaのような静的型付け言語をガッツリやってきた人間には、ある種の「職人気質」がDNAに刻まれていますよね。
設計をきっちり固め、クラス図を引き、MVVMパターンに則り、ViewModelの責務を綺麗に分離し、単体テストが通る美しいロジックを組み上げる……。そのプロセスに美学を感じるし、それがプロの仕事だと信じて疑わない。
僕もそうでした。日本で働いていた頃は、仕様書とにらめっこして、エッジケースを網羅するまでキーボードを叩かない、そんな慎重派のエンジニアでした。
でも、海外に出てその価値観は粉々に砕け散りました。
今日はその話をします。「Rapid Prototyping(ラピッドプロトタイピング)」と「Iteration(イテレーション)」の話です。カタカナで書くと小難しそうですが、要するに**「さっさと失敗しろ、そして速攻で学べ」**という、海外テック企業の鉄の掟についてです。
渡航直後の「赤っ恥」体験
僕が今の国に来て間もない頃、ある業務アプリの新規機能開発を任されました。WPFを使った、データ可視化のためのダッシュボード機能でした。
「よし、日本のクオリティを見せつけてやるぞ」と意気込んだ僕は、まず要件定義を読み込み、データベースのスキーマを慎重に検討し、XAMLのスタイルリソースを整備し始めました。Prismを使ってモジュール分割をどうするか、DIコンテナの登録はどうするか……頭の中で完璧なアーキテクチャを描いていたんです。
3日後、テックリード(アメリカ人)との進捗ミーティングがありました。
僕は自信満々で、作成したクラス図と、まだ画面には何も表示されないけれど綺麗に整頓されたプロジェクト構成を見せました。
「見てくれ、この堅牢な設計を。これなら将来的な拡張もバッチリだ」
そう伝えた僕に対して、彼が放った言葉は衝撃的でした。
“Where is the working trash?”(動くゴミはどこにある?)
彼は笑いもせずこう続けました。
「君が3日かけて作ったその設計図は素晴らしいかもしれない。でも、もしユーザーが『やっぱり円グラフじゃなくてリスト形式がいい』って言ったらどうする? この3日間の美しい設計は全部無駄になるんだよ。なぜ、もっと早く『汚いもの』を見せてくれなかったんだ?」
僕は言葉を失いました。
日本では「未完成のものを見せるなんて失礼だ」と教わってきたからです。中途半端なものを見せて突っ込まれるのが怖かった、というのもあります。
でも、彼の言うことは正論でした。海外の現場、特にアジャイルが徹底された環境では、「フィードバックを得られない時間」こそが最大のリスクと見なされるんです。
ソフトウェア開発における「リスク」の正体
ここで、少し真面目な話をしましょう。
僕たちがやっているWPFのようなリッチクライアント開発は、Webフロントエンドに比べて「重厚」になりがちです。ビルドも遅ければ、XAMLの記述量も多い。だからこそ、手戻りが怖い。「作り直し」は精神的にも工数的にもダメージが大きいですよね。
だからこそ、僕たちは「間違えないように」時間をかけて計画します。
しかし、海外のエンジニアリング文化、特に「Fail Fast(早く失敗せよ)」を掲げるチームでは、「何も作らずに悩んでいる時間」を最大のリスクと捉えます。
なぜなら、ソフトウェア開発における最大のリスクは「バグがあること」ではないからです。
「誰も欲しがらないものを、完璧な品質で作ってしまうこと」。これが最大のリスクであり、最も避けるべき罪なのです。
僕が3日かけて設計したアーキテクチャは、確かに技術的には正しかったかもしれない。でも、それが「ユーザー(あるいはビジネスサイド)が求めているものか」を検証する役には立っていませんでした。
もし最初に、紙に手書きしたUI(ペーパープロトタイプ)や、ロジックなんて空っぽでボタンを押してもメッセージボックスが出るだけの「ハリボテ」を作って見せていれば、その場で「あ、ここは違うね」と5分で修正できたかもしれない。
30時間の「孤独な設計」より、30分の「雑なプロトタイプ」と「対話」。
これが、海外の現場で求められるエンジニアの在り方だったんです。
なぜ日本人は「プロトタイピング」が苦手なのか?
これ、文化的な背景も大きいと思うんです。
日本の「減点方式」の教育や評価制度だと、失敗は「恥」であり「ペナルティ」ですよね。だから、100点になるまで隠しておきたくなる。
でも、こっちでは加点方式です。「早めに見せて、間違いを見つけた」ことは、「将来のコストを削減した」という手柄になります。
「これ、作ってみたけど全然ダメだったわ!ハハハ!」とチームに共有することが、「ナイス!おかげでその道がダメだとわかったよ」と称賛される。この感覚に慣れるまで、僕は半年かかりました。
特にWPFのような技術スタックだと、ついつい「データバインディングが正しく動いてから見せたい」とか「MVVMの作法を守らないと気持ち悪い」とか思っちゃうんです。エンジニアとしてのプライドが邪魔をする。
「コードビハインドにロジックを直書きするなんて汚らわしい!」って思うでしょ? 僕も思います(笑)。
でも、プロトタイピングの段階では、**「美しさ」は「悪」**になり得ます。美しく書こうとするあまり、検証のスピードが落ちるなら、それはプロとして優先順位を間違えていることになるからです。
「Fail Fast」は「雑にやる」ことではない
誤解してほしくないのは、「Fail Fast(早く失敗しろ)」というのは、「適当に仕事をしろ」という意味ではないということです。
これは、**「検証のサイクルを極限まで速く回せ」**という、極めて高度なエンジニアリング戦略です。
これから海外を目指す皆さん、あるいは今海外で苦戦している皆さんに伝えたい。
英語力も大事です。C#の深い知識ももちろん大事。
でも、それ以上に評価されるのは、**「不確実な状況の中で、いかに素早く『答え』の輪郭を掴めるか」**という能力です。
「設計が終わるまで待ちます」というエンジニアと、「とりあえず動くものを作ったので触ってみてください。あ、バグっても気にしないで」と言えるエンジニア。
変化の激しい海外のビジネス環境で、どちらが重宝されるかは明白ですよね。
このブログでは、そんな「Rapid Prototyping & Iteration」の真髄について、僕の失敗談と具体的なノウハウを交えて解説していきます。
次章からは、実際にどうやってWPFのような重厚な環境で「リスクを最小化」し、「低コストなプロトタイプ」を作っていくのか。その具体的な手法に入っていきます。
単なる精神論ではありません。これは、あなたの開発時間を劇的に減らし、ビジネス価値を最大化し、何より**「あんなに頑張って作ったのに全ボツ」という悲劇からあなた自身を守るための、最強の防具**になる話です。
準備はいいですか?
それでは、完璧主義という重い鎧を一度脱ぎ捨てて、軽やかに「失敗」しに行きましょう。
リスクを最小化する技術:低忠実度(Low-Fidelity)プロトタイプという武器
「起」のパートでは、僕が海外のテックリードに「動くゴミを出せ」と怒られた話をしました。
では、具体的にどうすればいいのか?
そして、なぜC# WPFエンジニアである私たちが、あえて「作り込まない」技術を身につける必要があるのか。
この「承」のパートでは、リスクを最小化するための具体的なメソッドと、開発プロセスの中に「フィードバックループ」を組み込むための設計図について話します。
1. 「開発におけるリスク」を再定義する
まず、認識を合わせましょう。私たちエンジニアにとって、最大の「リスク」とは何でしょうか?
サーバーが落ちること? バグが出ること? スケジュールが遅れること?
もちろんそれらもリスクですが、Rapid Prototypingの文脈において、最大のリスクはこれです。
「誰も使わない機能を作るために、人生の貴重な時間を浪費すること」
これを「無駄(Waste)」と呼びます。
リーン・スタートアップやアジャイル開発の根底にあるのは、この「無駄」との戦いです。
WPFでの開発を思い出してください。
美しいUIを作るために、ControlTemplateをオーバーライドし、Triggerを書き、VisualStateManagerでアニメーションを設定する……。これ、めちゃくちゃ時間がかかりますよね。
もし、そうやって1週間かけて作り込んだ機能が、ユーザーに見せた瞬間に「あ、これじゃないわ。もっとシンプルでいい」と言われたら?
その1週間の工数は、単なるコストではなく、あなたのモチベーションを削ぐ「負債」になります。
このリスクを回避するための唯一の方法が、**「不確実性が高い段階では、コストをかけずに検証する」**ことです。これが、Low-Fidelity(低忠実度)プロトタイプの真髄です。
2. Low-Fidelity(低忠実度)プロトタイプの魔力
「Low-Fidelity」とは、完成度が低いという意味ですが、ポジティブな意味合いで使われます。
具体的には、紙への手書き(ペーパープロトタイプ)、ホワイトボード、あるいはパワーポイントやFigmaなどのデザインツールを使った、コードを書かない段階での試作品のことです。
「え、俺はプログラマーだぞ? コードを書いてなんぼだろ」
そう思う気持ち、痛いほどわかります。僕もVisual Studioを開いていないと不安になる病にかかっていましたから。
しかし、海外の優秀なエンジニア(特にシニアレベル以上)ほど、コードを書くタイミングを極限まで遅らせます。
なぜなら、**「コードは書いた瞬間にメンテナンスコストが発生する負債」**だからです。
一行でもコードを書けば、それはバグの温床になり、修正にはコンパイルとデバッグが必要になります。しかし、ホワイトボードの図なら、指で消して書き直すのに3秒しかかかりません。
【実例:WPFエンジニアが陥る罠】
ある時、複雑なデータグリッドのフィルタリング機能を実装するタスクがありました。
僕はすぐにVisual Studioを開き、DataGridのライブラリ選定や、フィルタリングロジック(LINQ式)の構築に入ろうとしました。
そこで同僚のPM(プロダクトマネージャー)に止められました。
「Hey、コードを書く前に、この紙にどう動くか描いてみてくれ」
僕は渋々、裏紙に四角い枠を書き、ここにドロップダウンがあって、ここを押すとリストが絞り込まれて……と手書きしました。
するとPMは言いました。
「なるほど。でもユーザーはマウス操作よりも、キーボードだけで完結したいって言ってたよ。このUIだとTab移動が多くなりすぎて使いにくいんじゃない?」
戦慄しました。
もし僕がWPFでガチガチに画面を作っていたら、「キーボード操作に最適化する」という修正には、フォーカス制御やキーバインディングの見直しなど、多大な手戻りが発生していたでしょう。
紙に書いたおかげで、僕たちはまだ1行もコードを書いていない段階で、致命的なUXの欠陥に気づくことができたのです。所要時間はたったの10分。これが「Fail Fast(早く失敗する)」の威力です。
3. 「捨てられるコード」を書く技術(Throwaway Code)
もちろん、紙だけでは検証できないこともあります。
データのレスポンス速度や、実際の操作感、既存システムとの連携などです。ここで初めて、僕たちエンジニアの出番、**「High-Fidelity(高忠実度)プロトタイプ」**が登場します。
ただし、ここで絶対に守らなければならないルールがあります。
それは、**「捨てるために書く」**ということです。
真面目な日本人エンジニア(過去の僕含む)は、プロトタイプを作る時でも、ついつい将来のことを考えてしまいます。
「後で本番コードに流用できるように、クラス設計をちゃんとしておこう」
「変数名は命名規則に従おう」
「エラーハンドリングを入れておこう」
これらはすべて、プロトタイプにおいては「悪」です。
なぜなら、それらは「検証のスピード」を落とすからです。
海外のハッカソンやプロトタイピングの現場で僕が学んだ、**「正しい手抜き(Quick & Dirty)」**のテクニックを紹介します。
- ハードコーディングを恐れない: データベース接続? API連携? そんなもの後回しです。
List<Customer>を作って、そこに直書きで “John Doe”, “Jane Smith” とデータを突っ込んで表示させれば十分です。ユーザーが見たいのは「DBの接続確立」ではなく「画面にデータがどう表示されるか」だからです。 - 「アーキテクチャ」を無視する: MVVM? Prism? いりません。MainWindow.xaml.cs(コードビハインド)に全部書いてください。イベントハンドラにロジックを直書きしてください。テスト容易性なんて無視です。
- 例外処理はしない: エラーが出たらアプリが落ちればいいんです。「ここを押すと落ちますが、仕様です」と言えば済みます。落ちないように頑張る時間は、検証には寄与しません。
こうやって作ったプロトタイプは、いわば**「ハリボテ」**です。
映画のセットと同じで、正面から見れば立派な家に見えるけど、裏に回ればベニヤ板一枚。それでいいんです。
目的は「この家(機能)に住みたいか?」をユーザーに問うことであり、実際に住めるようにすることではないからです。
そして検証が終わったら、そのコードはどうするか?
迷わず全消去します。
「もったいない」と思ってはいけません。そのコードは「正解への地図」を手に入れるための使い捨てカイロのようなものです。役目を終えたら捨てる。そして、得られた知見(地図)をもとに、改めてゼロから「美しいアーキテクチャ」で本番コードを書き始めるのです。
結果的に、その方が手戻りがなく、圧倒的に早く高品質なものが出来上がります。
4. Feedback Loops that matter:意味のあるフィードバックを得る
プロトタイプを作っても、ただ見せるだけでは意味がありません。
「どうですか?」と聞くと、相手(ユーザーやクライアント)は気を使って「いいですね」と言いがちです。
海外の現場では、よりアグレッシブに、本音を引き出すためのフィードバックループの設計を行います。
ここで重要なのが**「IKEA効果(IKEA Effect)」の排除**です。
行動経済学の用語ですが、人は「自分が手間暇かけて作ったもの」に対して、客観的な価値以上に愛着を感じてしまう傾向があります。
3日かけて作った設計図や、1週間かけて作ったUIに対して、開発者は「これは良いものだ」と思い込みたくなる。そして無意識に、否定的な意見をシャットアウトしようとします。
だからこそ、Low-Fidelity(低クオリティ)であること自体が、フィードバックの質を高めるのです。
手書きのメモや、雑なハリボテアプリを見せられた相手は、「ここは未完成なんだな」と直感します。だからこそ、「ここはこう直してほしい」「このボタンはいらない」と、遠慮なく言えるのです。
完成度が高すぎると、相手は「もうほとんど出来上がっているし、今更変更を言ったら悪いかな」と忖度してしまいます。
【効果的な質問の技術】
プロトタイプを見せながら、僕はよくこう聞きます。
× ダメな質問:「これでいいですか?(Is this good?)」
○ 良い質問:「この画面で、あなたが一番最初にクリックしたい場所はどこですか?(Where would you click first?)」
○ 良い質問:「この機能がないとしたら、どうやって業務を回避しますか?(If this feature didn’t exist, how would you work around it?)」
行動を観察し、相手の「メンタルモデル(頭の中にある操作のイメージ)」と、自分が作ったものが一致しているかを確認する。
言葉での「いいね」ではなく、行動としての「迷い」を見逃さない。
これがエンジニアに求められる「実験家」としての観察眼です。
5. 30時間の開発より、30分の対話を
以前、ある機能開発で、僕が「C#でバックグラウンド処理を実装して、プログレスバーを出して、キャンセル可能にする」という複雑な要件を検討していた時のことです。
プロトタイプ(画面上のボタンを押すと、3秒待ってダイアログが出るだけのもの)を作ってユーザーに見せました。
ユーザーは言いました。
「あれ? この処理って1日1回、僕たちが帰った後の夜中に動けばいいんだよ。画面で待つ必要なんてないよ」
……聞こえましたか?
僕がこれから実装しようとしていた「非同期処理」「プログレスバー」「キャンセル処理」、これら全てが不要になった音が。
もしプロトタイプなしで実装していたら、僕は30時間以上かけて「誰も見ないプログレスバー」という、技術的に高度な無駄を作っていたことになります。
30分のプロトタイプ作成と、5分の対話が、30時間の開発工数を消滅させたのです。
これを「手抜き」と言う人はいないでしょう。これこそが、エンジニアリングにおける最高の「効率化」であり、ビジネスへの貢献です。
承のまとめ:スピードは質を凌駕する(初期段階において)
日本の現場では、「品質」が最優先されがちです。それは素晴らしいことですが、フェーズを間違えると毒になります。
開発の初期段階、まだ「何を作るべきか」が曖昧な霧の中では、スピードこそが品質です。
早く作り、早く見せ、早く壊し、早く学ぶ。
このサイクル(Iteration)を高速で回すことだけが、不確実な海外プロジェクトという荒波を乗り越えるための羅針盤となります。
さて、ここまで読んで「頭ではわかるけど、実際のマインドセットを変えるのは難しいよ」と思ったあなた。
あるいは、「雑なコードを書くことに罪悪感がある」という真面目なあなた。
次章の「転」では、さらに深く踏み込んで、「エンジニアから『実験家』へ」というアイデンティティの変革についてお話しします。
単なるスキルの話ではありません。これは、AI時代に生き残るエンジニアとしての、キャリアの再定義に繋がる話です。
「失敗」を「データ」と呼び変える時、あなたのエンジニア人生は劇的に面白くなります。
その思考の転換点を、次回お見せしましょう。
エンジニアから「実験家」へ:マインドセットの転換がキャリアを変える
ここまで、散々「雑に作れ」「コードを捨てろ」と言ってきました。
テクニックとしての「Low-Fidelityプロトタイプ」や「Throwaway Code」については理解してもらえたと思います。
しかし、ここで多くの日本人エンジニア(そして過去の私)は、ある巨大な壁にぶつかります。技術的な壁ではありません。メンタル(心理的)な壁です。
「転」のパートでは、この壁の正体と、それを乗り越えた先にある**「実験家(Experimenter)」**という新しいエンジニア像について語ります。これは、単に仕事が速くなるというレベルの話ではありません。AI台頭時代における、私たちの「生存戦略」そのものです。
1. あなたの「作品」はコードではない
私たちエンジニアは、無意識のうちに**「自分=コードを書く人(Builder)」**と定義しています。
C#の美しい構文、完璧なMVVMパターン、再利用可能なコンポーネント……これらを積み上げ、城を築くことに喜びを感じます。だからこそ、その城(コード)を壊したり、捨てたりすることに生理的な拒絶反応を示します。自分のアイデンティティが否定されたように感じるからです。
しかし、海外の厳しいビジネスの最前線で学んだ真実は残酷でした。
「顧客にとって、あなたの書いたコードは1ミリも価値がない」
極論に聞こえますか? でも事実です。
顧客が欲しいのは「課題が解決されること」だけです。その裏側が、最新の.NET Coreで書かれていようが、泥臭いExcelマクロで動いていようが、あるいは人力でオペレーターが動かしていようが、課題さえ解決すればどうでもいいのです。
むしろ、ビジネスオーナーの視点(そしてシニアエンジニアの視点)からすれば、**「コードは資産(Asset)ではなく、負債(Liability)」です。
コード行数が増えれば増えるほど、バグの確率は上がり、読解コストは増え、変更は難しくなります。
「最高のコード」とは、ロジックが美しいコードではありません。「機能を実現するために必要な、最小限のコード(あるいはNo Code)」**です。
この視点の転換(パラダイムシフト)ができるかどうかが、プログラマーと「エンジニアリング・パートナー」の分かれ目です。
「俺の書いたコードを見てくれ!」という職人マインドから、**「俺たちが解決した課題を見てくれ!」**という解決者マインドへ。
これを受け入れた瞬間、プロトタイプを捨てる痛みは消え去ります。なぜなら、捨てたコードは「失敗」ではなく、真の価値にたどり着くための「燃料」だったと理解できるからです。
2. 仮説駆動開発(Hypothesis-Driven Development):エンジニアを科学者にする
では、「コードを書く人」でなければ、私たちは何者になるべきなのでしょうか?
海外のテック企業でよく耳にする言葉があります。
“Treat everything as an experiment.”(すべてを実験として扱え)
私たちは「実験家(Experimenter)」あるいは「科学者(Scientist)」になるべきです。
理科の実験を思い出してください。
- 仮説を立てる(Hypothesis): 「この薬品AとBを混ぜれば、赤くなるはずだ」
- 実験する(Experiment): 実際に混ぜてみる。
- 検証する(Validate): 「あ、青くなった」
- 学習する(Learn): 「なぜ青くなったのか? 次はCを混ぜてみよう」
ソフトウェア開発も全く同じです。
新しい機能を実装する時、それは「仕様」ではなく「仮説」です。
「ユーザーはこのボタンを欲しがっているはずだ(仮説)」
「このUIなら迷わず操作できるはずだ(仮説)」
従来の私たちは、この「仮説」を「確定事項」と思い込み、いきなり本番用の立派な実験装置(本番コード)を作り始めていました。そして数ヶ月後、「あ、赤くならなかった(誰も使わなかった)」と絶望する。
「実験家」としてのエンジニアは違います。
「この仮説を検証するために、最も安上がりな実験はなんだろう?」と考えます。
それが、前回話した紙のプロトタイプかもしれないし、ダミーデータを使ったハリボテアプリかもしれない。
コードを書くことは目的ではなく、**「仮説を検証するための手段の一つ」**に過ぎなくなります。
C# WPFエンジニアとして、私は以前こう考えていました。
「この画面を表示するには、非同期読み込みが必要で、その間UIをロックして……」
今はこう考えます。
「この画面が必要だという仮説を検証したい。とりあえずデータはCSVから読み込むことにして、同期処理でUIが固まってもいいから、30分で挙動だけ見せよう。もしユーザーが『これ便利!』って言ったら、その時初めて非同期処理を実装しよう」
これが**「実験家としてのエンジニアリング」**です。
3. サンクコスト(埋没費用)の呪いを断ち切る
このマインドセットの最大の敵は、「サンクコスト(埋没費用)」です。
「せっかく3日かけて作ったんだから、なんとかして使いたい」
「ここまで苦労してXAMLを書いたんだから、捨てたくない」
人間心理として当然です。しかし、これが開発現場では猛毒になります。
「もったいない」という感情が、ダメな機能を無理やり存続させ、さらに複雑なコードを生み出し、最終的に誰もメンテナンスできないスパゲッティコードの山(技術的負債)を築き上げます。
海外のリードエンジニアたちは、このサンクコストに対して非常にドライです。
“Kill your darlings.”(愛するものを殺せ)
これは元々ライティング(執筆)の世界の言葉ですが、エンジニアリングでも金言です。
自分が手塩にかけて育てた機能やコードであっても、データ(ユーザーの反応)が「No」と言えば、瞬時に切り捨てる。
その潔さこそが、プロフェッショナルです。
僕はあるプロジェクトで、1週間かけてWPFで複雑な3Dグラフ描画機能を実装しました。自信作でした。
しかし、ユーザーテストの結果、「3Dだと正確な数値が読み取れない。普通の2Dの棒グラフがいい」という結論が出ました。
以前の僕なら「いや、でも設定で角度を変えれば見やすいですし……」と食い下がったでしょう。
でも、その時は「OK、わかりました!」と笑顔で言い、そのブランチを削除しました(心の中で少し泣きましたが)。
その結果、シンプルで使いやすい棒グラフが半日で実装され、ユーザーは大喜びしました。
僕の1週間の努力は「3Dは不要である」という貴重なデータを生み出したのです。それは無駄ではありませんでした。
4. AI時代における「人間のエンジニア」の価値
さて、ここからが「転」の核心です。
なぜ今、この「実験家」へのシフトが急務なのか。それは、生成AI(ChatGPTやCopilot)の存在があるからです。
コードを書くスピード、正確な構文、一般的なアルゴリズムの実装……これらにおいて、私たちはもうAIに勝てないかもしれません。
「仕様通りに綺麗なコードを書く(Builder)」というスキルの価値は、今後急速に暴落していきます。
しかし、AIが苦手なことがあります。
それは、「何を作るべきか(What to build)」という問いを立てること、そして**「不完全なフィードバックから文脈を読み取ること」**です。
AIに「完璧なWPFのコード」を書かせることは簡単です。
でも、「まだ何が正解かわからないカオスな状況で、最小限のコストでユーザーの本音を引き出すための、いい感じに雑なプロトタイプ」を設計し、ユーザーの「うーん、なんか違う」という曖昧な反応から「あ、こっちの方向性か!」とピボット(方向転換)する判断。
これは、人間にしかできません。
「Rapid Prototyping & Iteration」をマスターすることは、AIの下請けになるのではなく、AIを道具として使いこなす「意思決定者」になることを意味します。
AIに「雑なプロトタイプ」を爆速で作らせ、人間がそれを持ち込んでユーザーと対話し、方向性を修正し、またAIに作らせる。
このサイクルを回せるエンジニアこそが、これからの時代に「高単価」で生き残るエンジニアです。
5. 「失敗」の定義を書き換える
最後に、マインドセットの最大の転換点をお伝えします。
それは「失敗」の定義です。
日本の学校や一般的な企業では:
- 成功 = 計画通りに進むこと
- 失敗 = 計画通りにいかないこと、手戻りが発生すること
実験家の世界(アジャイルな海外現場)では:
- 成功 = 新しい知見が得られること(たとえ機能がボツになっても)
- 失敗 = 新しい知見が得られないまま、時間だけが過ぎること
最悪の失敗は、バグを出すことでも、作った機能を捨てることでもありません。
**「半年かけて完璧に作り上げたものが、誰にも使われないこと」**です。
これに比べれば、プロトタイプの段階での小さな失敗など、かすり傷ですらない。いや、それは成功への通過点です。
「Fail Fast(早く失敗せよ)」という言葉は、少し乱暴に聞こえるかもしれません。
正確に言うなら、**「Learn Fast(早く学べ)」**です。
失敗はそのための授業料であり、プロトタイピングはその授業料を「激安」にするためのクーポン券なのです。
転のまとめ:恐怖を好奇心に変える
「完璧でないものを出すのが怖い」
その恐怖心は、あなたがプロフェッショナルである証拠でもあります。
でも、その恐怖を**「ユーザーがどう反応するか知りたい」という好奇心**に変えてみてください。
エンジニアとしてのプライドを、「バグのないコードを書くこと」から「最速で正解にたどり着くこと」へ置き換えてみてください。
そうすれば、あなたはもう「仕様変更に怯えるコーダー」ではありません。
変化を歓迎し、未知の領域を楽しみ、コードを武器にビジネスを切り拓く「実験家」です。
さあ、マインドセットの準備は整いましたか?
最後の「結」では、この新しいアイデンティティを持って、明日から具体的にどう行動を変えればいいのか。あなたの職場(たとえそれが保守的な現場であっても!)で、この「小さく試す文化」をどうやって植え付けていくのか。
その実践的なアクションプランで締めくくりたいと思います。
失敗を資産に変える:明日から始める「小さく試す」習慣
ここまで、長々とお付き合いいただきありがとうございました。
「完璧主義を捨てろ」「ゴミ(動くプロトタイプ)を作れ」「エンジニアから実験家になれ」。
言うのは簡単です。読んで納得するのも簡単です。
でも、本当に難しいのは**「明日、会社に行って、それを実行すること」**ですよね。
特に、まだ「Fail Fast」の文化が浸透していない現場や、重厚長大なウォーターフォール開発が主流のプロジェクトにいる方にとって、いきなり「動かないコード」をコミットするのは自殺行為に見えるかもしれません。
この「結」のパートでは、そんなあなたが、明日から少しずつ、しかし確実に「実験家」へと変貌するための具体的なアクションプランを提示します。
これは、私が海外の荒波の中で、時には失敗し、時には冷や汗をかきながら編み出した、現場レベルのハック集です。
1. 魔法の言葉「Work In Progress (WIP)」を使い倒せ
明日からできる最初の一歩。それは、あなたの作業中の成果物に、ドデカく「WIP(作業中)」というラベルを貼ることです。
Gitを使っているなら、プルリクエスト(PR)のタイトルに [WIP] や [Draft] と付けましょう。
SlackやTeamsでスクショを共有する時は、画像編集で赤字で「DRAFT」と書きなぐりましょう。
WPFの画面なら、画面の右上に半透明の赤い文字で「PROTOTYPE – DO NOT TEST」とTextBlockを配置しましょう。
これは単なるマーキングではありません。「心理的安全性」を確保するための結界です。
「これは未完成です」と宣言することで、あなたの心から「完璧なものを見せなきゃ」というプレッシャーが消えます。
そして見る側(レビュアーや上司)の期待値を強制的に下げることができます。
「WIPなんだけど、方向性が合ってるかだけ見てくれない?」
こう言われて、「なんだこの汚いコードは!」と怒る人は稀です。「ああ、方向性の確認ね」と、脳のスイッチを「粗探しモード」から「コンセプト評価モード」に切り替えてくれます。
海外のエンジニアは、書きかけのコードでも平気でPRを出します。「Draft PR」機能を使って、「今ここ悩んでるんだけど、どう思う?」とコードベースで会話を始めます。
完成してから見せるのではなく、見せることで完成に近づける。
この順序の入れ替えこそが、最初の一歩です。
2. 「隠れプロトタイピング」のススメ(保守的な上司への対策)
「ウチの上司は、未完成品を見せると『品質が低い』って評価を下すタイプなんだよ……」
そんな嘆きも聞こえてきそうです。わかります。日本にはまだそういう文化も残っています。
そんな環境でこそ有効なのが、**「隠れプロトタイピング(Stealth Prototyping)」**です。
上司やクライアントには、従来のスケジュール通り「設計期間」として報告しておきます。
しかし、裏では最初の1日で雑なプロトタイプを爆速で作ってしまうのです。
例えば、「1週間で詳細設計をする」というタスクがあったとします。
真面目な人は、Excelの設計書を1週間かけて埋めます。
実験家(あなた)は、最初の半日でWPFのモックアプリを作ります。中身は空っぽ、ハードコーディングの塊でOKです。
そして、そのモックを自分で触りまくります。
「あ、この画面遷移だとデータ入力が面倒だな」
「このボタン、ここにあると誤クリックするな」
そうやって**「一人Fail Fast」**をやるのです。
そして、そこで得た知見をもとに、残りの4.5日でExcelの設計書を書きます。
するとどうなるか?
あなたの書く設計書は、空想上の産物ではなく、**実体験に基づいた「手戻りのない最強の設計書」**になります。
上司は驚くでしょう。「君の設計は、なぜそんなに精度が高いんだ?」と。
その時、心の中でニヤリと笑って答えればいいのです。「念入りにシミュレーションしましたから」と。
プロトタイプを見せる必要はありません。プロトタイプが生んだ「確信」だけを成果物に込めればいいのです。
3. 「15分タイムボックス」で強制的にクオリティを下げる
ついつい凝ってしまうあなたへの荒療治です。
新しい機能を考える時、タイマーを15分にセットしてください。
そして、「15分以内に、相手に伝わる説明資料(またはデモ)を作る」と自分に課します。
15分しかありません。
Visual Studioを立ち上げて、Nugetパッケージを探している暇なんてありません。
XAMLでStyleを調整している暇もありません。
自然と、手元の裏紙にペンで画面を描くか、ホワイトボードに書き殴るか、付箋をペタペタ貼るしかなくなります。
それでいいのです。いや、それがいいのです。
時間がたっぷりあると、人間は余計なことをします。
「綺麗に清書しよう」「フォントを揃えよう」「色は……」
これらは全て、初期段階の検証においてはノイズです。
強制的に時間を区切ることで、脳は「本質」だけにフォーカスせざるを得なくなります。
「一番伝えたい機能はこれ。だからここだけ描く。他は口頭で説明!」
この**「捨てる判断」のスピード**を養うトレーニングとして、タイムボックスは最強です。
4. 失敗を「祝う」儀式を作る
チームで開発しているなら、失敗の捉え方を変える儀式を導入しましょう。
海外のチームでは**「Post-Mortem(検死/事後検証)」**という文化があります。
プロジェクトや機能が失敗に終わった時、「誰が悪かったか」を吊し上げるのではなく、「何が学べたか」を共有する会です。
もしあなたがプロトタイプを作って、それが「ボツ」になったら。
落ち込むのではなく、チームチャットでこう宣言してください。
「朗報! 3時間かけて作ったプロトタイプのおかげで、この機能がユーザーに不要だと判明しました! これにより、本実装にかかるはずだった2週間の工数が浮きました!」
そして、浮いた2週間で何ができるかを提案するのです。
これを繰り返すと、周囲の目も変わってきます。
「あいつがボツを出すたびに、プロジェクトのリスクが減っていく」
「あいつは失敗しているのではなく、地雷を撤去しているんだ」
失敗を隠すから「ミス」になるんです。
失敗を明るく、速やかに、学びとして共有すれば、それは**「成果(Saving)」**になります。
5. 最後に:アンチフラジャイルなキャリアを
最後に、少し大きな話をします。
『ブラック・スワン』の著者、ナシーム・タレブは**「アンチフラジャイル(反脆弱性)」**という概念を提唱しました。
「衝撃を受けると壊れる(脆い)」の対義語は、「頑丈」ではありません。
**「衝撃を受けると、さらに強くなる」**性質のことです。
完璧主義で作られたシステムやキャリアは「脆い」です。一つの想定外(仕様変更、技術の陳腐化、AIの台頭)で崩壊します。
しかし、Rapid PrototypingとIterationを繰り返す「実験家」としてのキャリアは、「アンチフラジャイル」です。
失敗すればするほど、データが溜まる。
市場が変われば、すぐにピボットして適応する。
AIが出てくれば、それを実験ツールとして取り込む。
変化の激しい海外で、そしてこれからの不確実な世界で生き残るのは、最強の剣を持った騎士ではありません。
転んでもすぐに立ち上がり、「おっ、こっちの道は行き止まりか。面白い、じゃああっちを試そう」と、泥だらけの顔で笑える冒険者です。
C#やWPFという技術は、あくまで今の道具に過ぎません。
しかし、**「仮説を立て、安く試し、早く学ぶ」というOS(思考回路)**は、言語が変わろうが、役割が変わろうが、一生あなたを支え続ける最強の武器になります。
さあ、Visual Studioを開く前に、まずはペンを手に取りましょう。
そして、同僚や上司に向かって、自信を持って見せてやりましょう。
あなたの最高にクールで、最高に汚い、**「動くゴミ」**を。
そこから、あなたの新しいエンジニアリングが始まります。
Good luck!

コメント