LabHub

ブログ

エンジニアのための対話術:技術的決定を通す方法

한국어English日本語中文

はじめに — コードは正しかったが、誰も聞かなかった

キャリアを重ねれば、誰もが一度はこういう経験をします。明らかにより良いアーキテクチャが見えていたのに、会議ではその方向に決まらなかった。数か月後、別のチームがたまたま同じ結論にたどり着いて賞賛される。悔しい。自分はとっくに分かっていたのに。

ここで多くのエンジニアが間違った教訓を引き出します。「政治が問題だ」と。しかし本当の問題は、たいていもっと単純で、幸いにも直せるものです。彼らが見落としているのは、良いアイデアを持つことと、そのアイデアを他人に採用させることは、まったく別のスキルだという事実です。

シニアやスタッフエンジニアを分ける線は、コーディング力ではありません。その水準に達すれば、たいていの人は十分に良いコードを書きます。本当の差は、決定を通す力です。正しい答えを知ることを超えて、組織にその答えを選ばせる力。本記事はそのスキルを扱います。政治の話ではなく、明晰さの話です。

設計ドキュメントと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に変えましょう」。この瞬間、部屋の半分は心の中で反対側に立ちます。なぜ変えるべきかも分からないのに、もう結論を押しつけられたからです。

人は解決策を買う前に、問題を買います。 順序を逆にしましょう。

解決策に反対するのは簡単だが、よく定義された問題に反対するのは難しい。

これを逆さにすると診断の道具になります。誰かがあなたの提案に激しく反対するなら、たいていは解決策が嫌いなのではなく、そもそもそれが解くべき問題だという点に同意していないのです。そんなとき解決策をより熱心に守るのは無駄骨です。一歩下がって問題に戻らねばなりません。「私たちは今、同じ問題を見ていますか?」という問いが、十回の機能比較よりも議論を前に進めます。

聴き手に合わせてメッセージを変えよ

同じ決定でも、誰に説明するかによってまったく違う形に包み直さねばなりません。最もよくある失敗は、エンジニア同僚に対するのと同じように、経営層に実装の細部を浴びせることです。相手は5分で興味を失い、あなたは「あの人は技術が分からない」と誤解します。

肝心なのは、各聴き手が何を心配しているかを知ることです。

経営層 / リーダーエンジニア同僚
最も知りたいことコスト、リスク、スケジュールトレードオフ、実装方法
欲しい結論「いくらかかり、何が危険で、いつ終わるか」「なぜこの設計か、どこが弱いか」
好む根拠事業インパクト、機会費用、競争リスクベンチマーク、故障モード、コード構造
詳細度結論から先に、要約中心深く、根拠まで
時間の予算短い。3文で要点まで長い。掘り下げる準備がある

経営層には、結論から話します。「この移行は6週間かかり、途中でロールバック計画があり、やらなければ来四半期のトラフィックで障害リスクが大きいです」。リーダーが欲しいのは優雅なアルゴリズムではなく、意思決定に必要な材料 — コスト、リスク、スケジュール — です。彼らはこの三つで、ほかの十個の優先事項とあなたの提案を天秤にかけねばなりません。

エンジニア同僚には逆に、トレードオフと実装を深く共有します。彼らは「なぜAではなくBか」「この設計は並行処理でどう崩れうるか」を知りたがり、その問いに誠実に答えるほど信頼が積み上がります。

同じ真実を語りつつ、相手が持ち帰れる形で手渡すこと — それは操作ではなく、配慮であり翻訳です。

トレードオフを明示せよ

未熟な提案と成熟した提案を分けるたった一つの信号を挙げるなら、私は自らトレードオフを明かしているかを見ます。あらゆる技術的決定は何かを代償に払います。ただ飯はありません。ところが初心者の提案は長所だけを並べます。「これで速くなり、きれいになり、スケールします」。こういう提案はむしろ不信を買います。熟練のレビュアーは知っています。コストが見えないのは、まだそのコストを見つけていないだけだと。

だから強い提案は、自分の弱点を先に語ります。

こうしてコストに先に名前をつけると、三つのことが同時に起きます。第一に、信頼を得ます。「この人はバランスの取れた視点を持っている」。第二に、議論の主導権を握ります。相手が弱点を指摘して「捕まえた」と言う前に、あなたが先にその弱点を舞台に上げたからです。第三に、決定の質が上がります。隠れたコストではなく、露わになったコストを前にチーム全体が判断できるからです。

あらゆる決定は何かを払う。その値をあなたが呼ばなければ、後で請求書が利息つきで届く。

非同期 vs. 同期 — ドキュメントが勝つとき、会議が勝つとき

「これはドキュメントに書くか、会議を設けるか?」。毎回迷うこの選択には、実はかなり明確な基準があります。軸は二つ。情報の複雑さと、意見がすでにどれだけ収束しているかです。

非同期(ドキュメント・スレッド)が勝つ場合:

同期(会議・通話)が勝つ場合:

実務で最も強力なのは、両者を組み合わせることです。会議の前にドキュメントを先に回し、全員が同じ文脈の上に立つようにし(「read before the meeting」)、会議はすでに文書に残った相違点だけを選んでリアルタイムで縮めるのに使います。そして会議で下した決定は再びドキュメントに書き、非同期の記録として残します。アマゾンの有名な「6ページのナラティブを会議の最初の20分間、沈黙のうちに読む」慣行は、まさにこの組み合わせです。ドキュメントの精密さと会議のリアルタイム性、その両方を取っているのです。

一つのアンチパターンに警戒してください。スレッド上の終わりなき議論です。同じテーマでコメントが二十を超え、各自が少しずつ防御的になっていくなら、それは「会議を設けよ」という合図です。逆に、即答の要らない案件をやたら会議に持ち込むのも無駄です。他人のカレンダーに30分を予約する行為には、いつもそれだけの理由が要ります。

同意できないが従う(Disagree and Commit)

どれほど上手に説得しても、あなたの案が採用されない日は来ます。データが薄かったのかもしれない、リーダーがあなたの見えなかった制約を見たのかもしれない、単に組織が別の方向を選んだのかもしれない。このときあなたが何をするかが、シニアとしての成熟度を決めます。

最悪の反応が二つあります。一つは陰でむくれること — 会議では黙っておいて、出てから「あれは失敗するって言ったろ」と漏らすこと。もう一つはひそかなサボタージュ — 心から同意していないので、実行にも消極的に臨むこと。どちらもチームを蝕み、決定的に、あなたへの信頼を壊します。

成熟した代替が、アマゾンが原則に掲げる「同意できないが従う(disagree and commit)」です。これはこういう意味です。

  1. 議論の瞬間には全力で反対する。 静かに我慢するのは美徳ではありません。あなたが知るリスクを明確に、強くテーブルに上げるのは義務です。この段階で遠慮するのは、むしろ不誠実です。
  2. 決定が下されたら、完全に実行する。 ひとたび組織が方向を定めたら、あなたはその決定を、まるで自分のものだったかのように成功させるために走ります。心のわだかまりを実行に埋め込みません。

この二つを分けるのが肝心です。「説得の局面」と「実行の局面」は違います。前者では激しく異議を唱え、後者では潔くコミットします。こうできる人は、逆説的に、次はより大きな信頼を得ます。「あの人は反対するときは強く反対するが、いったん決まれば後ろから刺さない」という評判ほど価値のある資産はありません。

一つ付け加えると、コミットするとは間違いを永遠に飲み込むことではありません。 決定が実際に悪い結果を生んだなら、そのデータを持って再びテーブルに上がれます。ただしそのときの根拠は「だから言ったろ」ではなく、新たに観測された事実でなければなりません。コミットと再議論は矛盾しません。コミットは実行を怠らないという約束であって、永遠の沈黙の誓いではありません。

「強い意見を、緩く保持する」の罠

技術業界には古いスローガンがあります。「強い意見を、緩く保持する(strong opinions, loosely held)」。 もとは未来学者ポール・サッフォ(Paul Saffo)が予測の態度として提案したもので、不確かな未来についてまず強い仮説を立てつつ、新しい証拠が来れば未練なく捨てよ、という、それ自体は健全な助言です。

問題は、この言葉が現場でしばしば正反対に誤用されることにあります。実際に起きるのはこうです。

ここには静かだが深刻な副作用があります。部屋で最も慎重な人 — たいてい「確かではない」と正直に言う人、まだデータを集めている最中の若手 — の意見が、自動的に押し潰されます。強く言うことが正しさと誤解される文化では、声の大きい人の間違いが、静かな人の洞察に勝ちます。これはチームの意思決定の質を、じわじわと蝕みます。

では、どうすべきか。言葉を捨てよというのではなく、本当に実践せよということです。

強い意見を持つのは安い。それを正直に手放すことこそ、その言葉のすべてだ。

おわりに

技術的決定を通す力は、生まれつきの弁舌ではありません。それは学べるいくつかの習慣の総和です。話ではなくレビューされる文章(設計ドキュメント・RFC)で提案すること。解決策ではなく問題で人々を同じ側にすること。経営層にはコスト・リスク・スケジュールを、同僚にはトレードオフ・実装を手渡すこと。あらゆる決定の代償に自ら名前をつけること。案件に応じてドキュメントと会議を選ぶこと。議論に負けた後は潔くコミットすること。そして「強い意見」を、自信の免許ではなく正直な仮説として扱うこと。

これらすべてを貫く一つの態度があるとすれば、それは明晰さへの責任です。あなたが何を知っているかではなく、それを他人が理解し、信頼し、一緒に決められるようにすること — そこからがシニアの仕事です。良いコードを書くことが半分なら、そのコードが正しいと組織に一緒に信じさせることが残りの半分です。そしてたいてい、後者のほうが難しく、より価値があります。

参考資料

コメント

まだコメントはありません。

ログインするとコメントできます