- はじめに — コードは正しかったが、誰も聞かなかった
- 設計ドキュメントとRFC — なぜ話すより書く方が勝つのか
- 解決策ではなく、問題から説得せよ
- 聴き手に合わせてメッセージを変えよ
- トレードオフを明示せよ
- 非同期 vs. 同期 — ドキュメントが勝つとき、会議が勝つとき
- 同意できないが従う(Disagree and Commit)
- 「強い意見を、緩く保持する」の罠
- おわりに
- 参考資料
はじめに — コードは正しかったが、誰も聞かなかった
キャリアを重ねれば、誰もが一度はこういう経験をします。明らかにより良いアーキテクチャが見えていたのに、会議ではその方向に決まらなかった。数か月後、別のチームがたまたま同じ結論にたどり着いて賞賛される。悔しい。自分はとっくに分かっていたのに。
ここで多くのエンジニアが間違った教訓を引き出します。「政治が問題だ」と。しかし本当の問題は、たいていもっと単純で、幸いにも直せるものです。彼らが見落としているのは、良いアイデアを持つことと、そのアイデアを他人に採用させることは、まったく別のスキルだという事実です。
シニアやスタッフエンジニアを分ける線は、コーディング力ではありません。その水準に達すれば、たいていの人は十分に良いコードを書きます。本当の差は、決定を通す力です。正しい答えを知ることを超えて、組織にその答えを選ばせる力。本記事はそのスキルを扱います。政治の話ではなく、明晰さの話です。
設計ドキュメントとRFC — なぜ話すより書く方が勝つのか
技術的決定を推し進める最も強力な道具は、スライドでも、会議での熱のこもった発言でもありません。設計ドキュメント(design doc)、あるいは**RFC(Request for Comments)**と呼ばれる、よく書かれた一編の文章です。Googleが設計ドキュメントをエンジニアリング文化の要と位置づけるのには理由があります。
書くことが話すことに勝つ理由は具体的です。
- 文章はレビューされる。 会議で口頭で投げた提案は、その場の空気と声の大きい人に左右されます。ドキュメントは、人々が各自のペースで冷静に読み、余白に反論を書き込みます。良いアイデアはこの精査に耐え、悪いアイデアはここで濾し取られます。
- 文章は思考を強制する。 あるアイデアは頭の中では完璧に見えて、文にした瞬間に穴が露わになります。「このケースはどう扱う?」という問いが、書いている途中で自然と浮かびます。書く行為そのものが設計です。
- 文章はスケールし、残る。 会議はその部屋にいた人しか知りません。ドキュメントは、別のタイムゾーンの同僚にも、半年後に加わる新人にも、決定の背景を知りたい未来の自分にも、等しく届きます。
良い設計ドキュメントには、たいてい共通の骨格があります。
タイトル / 作成者 / ステータス(草案・レビュー中・承認・廃止)/ 日付
1. 背景と問題 (Context)
- 今なにが、なぜ問題なのか。この文書を読む理由。
2. ゴールと非ゴール (Goals / Non-Goals)
- 何を解こうとし、明示的に何は解かないのか。
- 非ゴールは、議論が脱線しないよう守る柵である。
3. 提案 (Proposed Design)
- 中核となるアプローチ。図、データフロー、主要インターフェース。
4. 検討した代替案 (Alternatives Considered)
- 他の選択肢と、なぜそれを採らなかったか。
5. トレードオフ / リスク (Trade-offs / Risks)
- この選択が何を諦めるのか。どこで間違いうるか。
6. ロールアウト / 移行(任意)
このうち多くの人が飛ばす二つの節こそ、実は最も重要です。検討した代替案とトレードオフです。この二つがない文書は「私の答えを受け入れてくれ」という主張ですが、この二つがある文書は「一緒に判断しよう」という招待です。レビュアーは後者をはるかに信頼します。自分が持ち出そうとしていた代替案が、すでに文書の中で真剣に検討され却下されているのを見ると、「この人はちゃんと考えたな」と安心するからです。
解決策ではなく、問題から説得せよ
エンジニアが犯す最もよくある説得の誤りは、自分がすでに惚れ込んでいる解決策から切り出すことです。「これ、Kafkaに変えましょう」。この瞬間、部屋の半分は心の中で反対側に立ちます。なぜ変えるべきかも分からないのに、もう結論を押しつけられたからです。
人は解決策を買う前に、問題を買います。 順序を逆にしましょう。
- まず問題を鮮明に描く。「今、注文処理がピーク時に滞っていて、直近一か月で決済後の在庫反映が平均40秒遅れ、その間に売り越しが217件発生しました」。
- この時点で、部屋の全員が同じ側に立ちます。誰も売り越しなど望まないからです。あなたは今、一緒に問題を見つめる人々を手に入れました。
- そのうえで初めて、解決策を代替案とともに取り出します。人々はすでに問題に共感しているので、解決策を「敵か味方か」ではなく「どれだけ合うか」で見るようになります。
解決策に反対するのは簡単だが、よく定義された問題に反対するのは難しい。
これを逆さにすると診断の道具になります。誰かがあなたの提案に激しく反対するなら、たいていは解決策が嫌いなのではなく、そもそもそれが解くべき問題だという点に同意していないのです。そんなとき解決策をより熱心に守るのは無駄骨です。一歩下がって問題に戻らねばなりません。「私たちは今、同じ問題を見ていますか?」という問いが、十回の機能比較よりも議論を前に進めます。
聴き手に合わせてメッセージを変えよ
同じ決定でも、誰に説明するかによってまったく違う形に包み直さねばなりません。最もよくある失敗は、エンジニア同僚に対するのと同じように、経営層に実装の細部を浴びせることです。相手は5分で興味を失い、あなたは「あの人は技術が分からない」と誤解します。
肝心なのは、各聴き手が何を心配しているかを知ることです。
| 軸 | 経営層 / リーダー | エンジニア同僚 |
|---|---|---|
| 最も知りたいこと | コスト、リスク、スケジュール | トレードオフ、実装方法 |
| 欲しい結論 | 「いくらかかり、何が危険で、いつ終わるか」 | 「なぜこの設計か、どこが弱いか」 |
| 好む根拠 | 事業インパクト、機会費用、競争リスク | ベンチマーク、故障モード、コード構造 |
| 詳細度 | 結論から先に、要約中心 | 深く、根拠まで |
| 時間の予算 | 短い。3文で要点まで | 長い。掘り下げる準備がある |
経営層には、結論から話します。「この移行は6週間かかり、途中でロールバック計画があり、やらなければ来四半期のトラフィックで障害リスクが大きいです」。リーダーが欲しいのは優雅なアルゴリズムではなく、意思決定に必要な材料 — コスト、リスク、スケジュール — です。彼らはこの三つで、ほかの十個の優先事項とあなたの提案を天秤にかけねばなりません。
エンジニア同僚には逆に、トレードオフと実装を深く共有します。彼らは「なぜAではなくBか」「この設計は並行処理でどう崩れうるか」を知りたがり、その問いに誠実に答えるほど信頼が積み上がります。
同じ真実を語りつつ、相手が持ち帰れる形で手渡すこと — それは操作ではなく、配慮であり翻訳です。
トレードオフを明示せよ
未熟な提案と成熟した提案を分けるたった一つの信号を挙げるなら、私は自らトレードオフを明かしているかを見ます。あらゆる技術的決定は何かを代償に払います。ただ飯はありません。ところが初心者の提案は長所だけを並べます。「これで速くなり、きれいになり、スケールします」。こういう提案はむしろ不信を買います。熟練のレビュアーは知っています。コストが見えないのは、まだそのコストを見つけていないだけだと。
だから強い提案は、自分の弱点を先に語ります。
- 「このキャッシュ層は読み取りを大きく速くしますが、キャッシュ無効化の複雑さという新しい種類のバグを持ち込みます」。
- 「マイクロサービスに分ければチームは独立してデプロイできますが、その代償に分散トランザクションと運用の複雑さを抱えます」。
- 「このライブラリを使えば2か月を節約できますが、私たちを彼らのリリースサイクルに縛りつけます」。
こうしてコストに先に名前をつけると、三つのことが同時に起きます。第一に、信頼を得ます。「この人はバランスの取れた視点を持っている」。第二に、議論の主導権を握ります。相手が弱点を指摘して「捕まえた」と言う前に、あなたが先にその弱点を舞台に上げたからです。第三に、決定の質が上がります。隠れたコストではなく、露わになったコストを前にチーム全体が判断できるからです。
あらゆる決定は何かを払う。その値をあなたが呼ばなければ、後で請求書が利息つきで届く。
非同期 vs. 同期 — ドキュメントが勝つとき、会議が勝つとき
「これはドキュメントに書くか、会議を設けるか?」。毎回迷うこの選択には、実はかなり明確な基準があります。軸は二つ。情報の複雑さと、意見がすでにどれだけ収束しているかです。
非同期(ドキュメント・スレッド)が勝つ場合:
- 情報が複雑で、精密さが重要なとき。アーキテクチャ提案、障害のポストモーテム、API設計 — 人々が各自のペースで噛みしめ、正確に反論する必要があるもの。
- 複数のタイムゾーンにまたがるチーム。ドキュメントは、眠っている人を起こさずに議論を進めます。
- 記録が残らねばならないとき。半年後に「なぜこう決めたのか」の答えが必要になる、あらゆる決定。
同期(会議・通話)が勝つ場合:
- 意見が割れ、感情が乗っているとき。スレッドで五往復しても縮まらない対立が、15分の通話で解けることは多いです。テキストは誤解と防御を増幅しがちです。
- まだ問題の定義すら曖昧なとき。何を解くべきかを一緒に手探りするブレインストーミングは、リアルタイムのキャッチボールが圧倒的に速いです。
- 緊急で、関係が懸かっているとき。信頼を築いたり衝突を繕ったりする仕事には、顔(あるいは声)が要ります。
実務で最も強力なのは、両者を組み合わせることです。会議の前にドキュメントを先に回し、全員が同じ文脈の上に立つようにし(「read before the meeting」)、会議はすでに文書に残った相違点だけを選んでリアルタイムで縮めるのに使います。そして会議で下した決定は再びドキュメントに書き、非同期の記録として残します。アマゾンの有名な「6ページのナラティブを会議の最初の20分間、沈黙のうちに読む」慣行は、まさにこの組み合わせです。ドキュメントの精密さと会議のリアルタイム性、その両方を取っているのです。
一つのアンチパターンに警戒してください。スレッド上の終わりなき議論です。同じテーマでコメントが二十を超え、各自が少しずつ防御的になっていくなら、それは「会議を設けよ」という合図です。逆に、即答の要らない案件をやたら会議に持ち込むのも無駄です。他人のカレンダーに30分を予約する行為には、いつもそれだけの理由が要ります。
同意できないが従う(Disagree and Commit)
どれほど上手に説得しても、あなたの案が採用されない日は来ます。データが薄かったのかもしれない、リーダーがあなたの見えなかった制約を見たのかもしれない、単に組織が別の方向を選んだのかもしれない。このときあなたが何をするかが、シニアとしての成熟度を決めます。
最悪の反応が二つあります。一つは陰でむくれること — 会議では黙っておいて、出てから「あれは失敗するって言ったろ」と漏らすこと。もう一つはひそかなサボタージュ — 心から同意していないので、実行にも消極的に臨むこと。どちらもチームを蝕み、決定的に、あなたへの信頼を壊します。
成熟した代替が、アマゾンが原則に掲げる**「同意できないが従う(disagree and commit)」**です。これはこういう意味です。
- 議論の瞬間には全力で反対する。 静かに我慢するのは美徳ではありません。あなたが知るリスクを明確に、強くテーブルに上げるのは義務です。この段階で遠慮するのは、むしろ不誠実です。
- 決定が下されたら、完全に実行する。 ひとたび組織が方向を定めたら、あなたはその決定を、まるで自分のものだったかのように成功させるために走ります。心のわだかまりを実行に埋め込みません。
この二つを分けるのが肝心です。「説得の局面」と「実行の局面」は違います。前者では激しく異議を唱え、後者では潔くコミットします。こうできる人は、逆説的に、次はより大きな信頼を得ます。「あの人は反対するときは強く反対するが、いったん決まれば後ろから刺さない」という評判ほど価値のある資産はありません。
一つ付け加えると、コミットするとは間違いを永遠に飲み込むことではありません。 決定が実際に悪い結果を生んだなら、そのデータを持って再びテーブルに上がれます。ただしそのときの根拠は「だから言ったろ」ではなく、新たに観測された事実でなければなりません。コミットと再議論は矛盾しません。コミットは実行を怠らないという約束であって、永遠の沈黙の誓いではありません。
「強い意見を、緩く保持する」の罠
技術業界には古いスローガンがあります。「強い意見を、緩く保持する(strong opinions, loosely held)」。 もとは未来学者ポール・サッフォ(Paul Saffo)が予測の態度として提案したもので、不確かな未来についてまず強い仮説を立てつつ、新しい証拠が来れば未練なく捨てよ、という、それ自体は健全な助言です。
問題は、この言葉が現場でしばしば正反対に誤用されることにあります。実際に起きるのはこうです。
- 会議で最も自信たっぷりに、最も大きな声で断言する人が部屋を支配します。「強い意見」の部分だけが実践されたわけです。
- ところが「緩く保持する」の部分は蒸発します。反論されても考えを変えるのではなく、次の話題でまた別のことを同じくらい強く断言します。
- 結果として、このスローガンは自信を根拠に偽装する免許になります。実際にはデータではなく、声の大きさが勝つのです。
ここには静かだが深刻な副作用があります。部屋で最も慎重な人 — たいてい「確かではない」と正直に言う人、まだデータを集めている最中の若手 — の意見が、自動的に押し潰されます。強く言うことが正しさと誤解される文化では、声の大きい人の間違いが、静かな人の洞察に勝ちます。これはチームの意思決定の質を、じわじわと蝕みます。
では、どうすべきか。言葉を捨てよというのではなく、本当に実践せよということです。
- 意見を出すとき、確信の度合いを一緒に明かしましょう。 「これはほぼ確実です」と「これは直感ですが」を区別して言うだけで、議論の質が変わります。
- 何が自分の考えを変えるかを、あらかじめ言いましょう。 「もしベンチマークでXが出たら、私は自分の立場を降ろします」。この一文が「緩く保持する」を、言葉ではなく行動にします。
- そして実際に反論されたら、目に見える形で考えを変えましょう。 「ああ、その点を見落としていました。あなたが正しい」と公然と言えるシニアは、チームに強力な信号を送ります。ここでは正しさが自尊心の上にある、という信号を。
強い意見を持つのは安い。それを正直に手放すことこそ、その言葉のすべてだ。
おわりに
技術的決定を通す力は、生まれつきの弁舌ではありません。それは学べるいくつかの習慣の総和です。話ではなくレビューされる文章(設計ドキュメント・RFC)で提案すること。解決策ではなく問題で人々を同じ側にすること。経営層にはコスト・リスク・スケジュールを、同僚にはトレードオフ・実装を手渡すこと。あらゆる決定の代償に自ら名前をつけること。案件に応じてドキュメントと会議を選ぶこと。議論に負けた後は潔くコミットすること。そして「強い意見」を、自信の免許ではなく正直な仮説として扱うこと。
これらすべてを貫く一つの態度があるとすれば、それは明晰さへの責任です。あなたが何を知っているかではなく、それを他人が理解し、信頼し、一緒に決められるようにすること — そこからがシニアの仕事です。良いコードを書くことが半分なら、そのコードが正しいと組織に一緒に信じさせることが残りの半分です。そしてたいてい、後者のほうが難しく、より価値があります。
参考資料
- Google, "Design Docs at Google" (Industrial Empathy): https://www.industrialempathy.com/posts/design-docs-at-google/
- Amazon Leadership Principles, "Have Backbone; Disagree and Commit": https://www.amazon.jobs/content/en/our-workplace/leadership-principles
- IETF, "The Tao of the IETF" (RFCプロセス): https://www.ietf.org/about/participate/tao/
- Google SRE, ポストモーテム文化と書き方: https://sre.google/
- Paul Saffo, "Strong Opinions, Weakly Held": https://www.saffo.com/02008/07/26/strong-opinions-weakly-held/
- "Strong opinions, weakly held" (Wikipedia, Paul Saffo): https://en.wikipedia.org/wiki/Paul_Saffo
현재 단락 (1/83)
キャリアを重ねれば、誰もが一度はこういう経験をします。明らかにより良いアーキテクチャが見えていたのに、会議ではその方向に決まらなかった。数か月後、別のチームがたまたま同じ結論にたどり着いて賞賛される。...