Nguyen Le Phong

やさしく効果的なエンジニアリング全 5 回中第 4 回

届くフィードバック:エンジニアとして批評を与え、受け取る方法

フィードバックの与え方を学んでいるエンジニアはほとんどいません——受け取り方も同様です。具体的で、優しく、実行可能なフィードバックへのフィールドガイド、そして受け取る側で開かれた姿勢を保つための方法。すぐに使えるスクリプト付き。

フィードバックの与え方を教えてくれる人はいません。データ構造、デザインパターン、デプロイメントパイプラインを学ぶのに何年も費やした後、ある日同僚がプルリクエストを提出して、歯が鳴るような思いをする——しかし、その気持ちをどうしたら良いかまったくわかりません。何も言わないか(最も楽な道)、レンガのように届くことを言うか:素っ気なく、厳しく、意図していなくても何か個人的なものとして受け取られるように。

同じことは逆の場合にも当てはまります。リードが「このコードは複雑すぎる」と言ったり、同僚が「このアプローチには確信が持てない」と言ったりすると、私たちの神経系はそれを脅威として扱います。防衛が上がります。正当化し、かわし、あるいはスプリントの残り中、静かな怨恨の中に座ります。どちらも成長には役立ちません。

このガイドはその会話の両側のためのフィールドマニュアルです。フィードバックが実際に機能するものを見ていき、厄介な状況に対するすぐに使えるスクリプトを紹介し、落ち着きを失わずに批評を受け取る方法をカバーします。コードレビューを初めて与える新卒者でも、チームのフィードバックを安全にしようとするスタッフエンジニアでも、ここに何かがあります。

フィードバックがこんなに難しい理由

フィードバックはプロフェッショナルな衣装を着た社交行為です。表面上はコードや設計上の決定についてのものです。その下には、しばしばアイデンティティに触れるものがあります——自分がどれほど有能かについて自分に語る物語。誰かが私たちの仕事に疑問を呈するとき、脳の脅威検知機構は「この関数は長すぎる」と「あなたは十分に優秀ではない」の違いをいつも見分けられるわけではありません。

二つの恐れが支配する傾向にあります:

  • 衝突への恐れ(与える側のため)。もし反論されたら?もしぎこちなくなったら?もし不公平だと思われたら?内向きな傾向のエンジニア——私たちの多くがそうですが——は、誠実さの短期的な不快感よりも沈黙の一時的な快適さをしばしば好みます。
  • 無能に見えることへの恐れ(受け取る側のため)。特にジュニアだったり、チームに新しかったり、自分を証明しようとしている真っ最中だったりすると、批評は自分自身について最悪だと疑っていることの証拠のように感じることがあります。

不快な真実があります:フィードバックを避けることは、その気持ちをなくしません。ただ問題を複利にするだけです。正直なシグナルを決して得ないジュニアエンジニアは同じ習慣を作り続けます。アーキテクチャの選択が決して問われないシニアエンジニアはますます脆弱なシステムを出荷します。難しい会話を避けるチームは最終的にはその会話をします——最悪の瞬間に、最悪のプレッシャーの下で。

沈黙のコスト

心理的安全性に関する研究——最も有名なのはGoogleとハーバードでのAmy Edmondsonの研究——は一貫して、声を上げることが安全なチームは安全でないチームを上回ることを示しています。それらのチームが常に同意するからではなく、問題を修正できる速さで表面化させるからです。控えられたフィードバックは隠れた借金です:複利になって高くなるまで見えません。

良いニュースは、フィードバックを与えることと受け取ることはスキルであり、特性ではないということです。練習でき、コメントのフレーズの仕方や批評への反応の仕方のわずかな改善が、仕事上の関係に測定可能な違いをもたらします。

良いフィードバックとは実際どのようなものか

スクリプトに入る前に、私たちが目指しているものを理解すると助けになります。良いフィードバックには四つの特性があります:

  • 具体的。曖昧な感覚をジェスチャーするのではなく、具体的なもの——ファイル、関数、フレーズ、会議での行動——を名指しします。「このサービスはやりすぎです」は出発点です;「UserServiceは認証とプロファイル更新の両方を担っており、どちらも分離してテストするのが難しくなっています」は誰かが行動できるフィードバックです。
  • タイムリー。イベントの直後に与えられるフィードバックは、コンテキストが薄れ仕事が進んだ数週間後に伝えられるフィードバックよりも有用で感情的な負荷が少ないです。コードレビューのコメントは著者がまだ理由を覚えているうちが最も効果的。1対1の観察は起きた週が最も効果的です。
  • 行動や仕事についてであり、人についてではない。「あなたはいつも物事を複雑にしすぎる」(性格への攻撃)と「過去三つのプルリクエントで、データ変換ロジックが複数の抽象化レイヤーに分散しており、追いにくいです」(仕事についての観察)には意味のある違いがあります。前者は人を裁判にかけます。後者は調べるものを与えます。
  • 実行可能。良いフィードバックは前進への道を示唆(または明示)します。「これは読みにくい」は誰かを行き詰まらせます。「マッピングロジックを明確な戻り値の型を持つ名前付き関数に抽出することでこれを追いやすくなります」は次のステップを与えます。

SBIモデル

これら四つの特性を一緒に保つシンプルな構造がSituation–Behaviour–Impact(状況–行動–影響)モデルです。元々はリーダーシップトレーニングのために開発され、今はソフトウェアチームで広く使われています。すべてのコメントにロボット的に展開する必要はありませんが、どこから始めればいいかわからないときの信頼できる足場です。

SBIフィードバックモデル:状況から行動、影響へと流れる。 Situation いつ・どこで起きたか Behaviour 何が言われ、行われたか Impact それがもたらした影響 コンテキストを固定 → 観察可能な行為を名指し → 結果を説明
SBIモデルはフィードバックを根拠に基づかせます:共有のコンテキストのために状況から始め、具体的な行動(観察可能なもの、推測でなく)を名指しし、影響——それがあなた、チーム、または仕事にもたらした効果——を説明する。

実際には、SBIはこのように聞こえます:「昨日のインシデントレビューで[状況]、オンコールのエンジニアが調査結果を説明している間に三度割り込んだとき[行動]、チームがタイムラインを追いにくくなり、オンコールのエンジニアはその後貢献するのをやめたのを私は気づきました[影響]。」

それら三つの部分のどれも意図を裁きません(「あなたは部屋を支配しようとしていた」)、性格を割り当てません(「あなたは軽蔑的です」)、または一般化しません(「あなたはいつもこうします」)。事実として何が起き、そこから何が続いたかを説明します。それが防衛的な遮断を引き起こさずに届く傾向がある理由です。

すぐに使えるスクリプト:曖昧から具体的へ

私たちのほとんどは、他者の仕事に対して直感的な反応——何かがずれているか、より良くできるという感覚——を、それを表す言葉を持つ前に持っています。課題は、その直感を相手が実際に使えるフィードバックに変換することです。以下の表は、よくある曖昧または感情的な反応と、よりきれいで具体的な代替案を示しています。

直感的に言いたいことより良く届く言い方(とその理由)
「複雑すぎます。」 parseConfig関数は三つのことをしています:環境変数の読み込み、スキーマのバリデーション、デフォルトの設定。それぞれを別の関数に分割することで、各関数がテストしやすく、理由付けしやすくなります。」——何が複雑かを正確に名指しし、修正を提案します。
「このアプローチが好きではありません。」 「500ミリ秒ごとのポーリングが現在のトラフィック量でデータベースに過度の負荷をかけないか心配です——ここでWebhookやキューベースのアプローチを検討しましたか?」——懸念を具体的なリスクに根拠付け、対話を開きます。
「あなたはいつもエッジケースを見逃します。」 「このプルリクエントでprocessItemsの空の配列に対する処理がないことに気づきました——42行目でTypeErrorをスローします。ガード節かそのためのテストを追加できますか?」——「いつも」を削除し、特定のインスタンスに結びつけます。
「これは完全に書き直す必要があります。」 「このコンポーネントでのデータ層とプレゼンテーション層の結合が、どちらかを変えようとすると両方に触れなければならなくします。マージ前に、データフェッチのロジックをカスタムフックに抽出できますか?」——構造的な問題を名指しし、具体的な最初のステップを提案します。
「これには同意しません。」 「この決定について私の懸念は、同期インターフェースに縛られることで、負荷時にイベントループをブロックする可能性があるということです。あなたが検討したトレードオフを理解するのを助けてもらえますか?」——懸念を述べ、相手の理由付けを招きます。
「良い仕事。」(それだけ) DataTableのエラー境界の構造の仕方が本当にきれいです——ネットワークエラーと解析エラーの両方を、実装の詳細をツリーの上に漏らすことなく処理しています。コピーする価値のあるパターンです。」——称賛にも具体性が必要な理由については次のセクションを参照してください。
一文テスト

レビューコメントを投稿する前に、著者として受け取ったようにそれを読み返してみてください。何を変えるかとなぜを正確に知っているか問いかけます。どちらかの答えが「あまりよくわからない」なら、具体性の一文を追加しましょう。「曖昧」から「実行可能」に変わる一文が追加されることがいかに多いか、驚くでしょう。

称賛もフィードバックです

エンジニアはしばしば、うまくいっていることを認めるよりも問題を指摘する方が得意です。しかし、ポジティブなフィードバック——具体的であれば——はチームメンバーに与えられる最も高いレバレッジのものの一つです。何を続けるべきかを伝えます。これは、何をやめるべきかを知ることと同じくらい有用です。

罠は曖昧な称賛です。「マイグレーションの仕事が良かった」は何もないよりは良いですが、何も教えません。具体的に何が良かったのですか?ロールバック計画の徹底性?ステークホルダーへの状況の伝え方?カナリアで本番に触れる前にマイグレーションを実行したこと?それぞれが異なる教訓であり、名指しすることで繰り返し可能になります。

実際に届く称賛のいくつかの原則:

  • 行動について具体的に。同じSBI構造を使ってください:「水曜日のインシデントレビューで、障害モードをステップバイステップで説明したとき、それはチーム全体が根本原因を素早く理解するのに役立ちました。」
  • 影響を名指しする。「あなたが書いた明確なロールバック計画のおかげで、エッジケースに当たったとき、オンコールのエンジニアは何をすべきかを正確に知っていました。それによって少なくとも40分の混乱が節約されました。」
  • 相応しいときは公の場で。プライベートな称賛は意味があります。公の称賛——チームチャンネルで、振り返りで、グループのコードレビューで——はチーム全体に優秀さとはどのようなものかを示します。また、受け取る側の人、特にジュニアだったり会社に新しかったりする場合、非常に多くを意味します。
  • 遅らせない。称賛は建設的なフィードバックと同様に価値が下がります。誰かが何かうまくやっているのに気づいたら、その週に言いましょう。

コードレビュー文化のガイドがポジティブなコメントの重要性を特に指摘している良い理由があります:批判的な観察しかないプルリクエントは、すべての観察が公正であっても、地雷のように感じ始めます。「このアブストラクションが好きです——きれいです」というコメントは5秒かかり、レビュー全体の感情的なトーンを変えることがあります。

フィードバックをうまく受け取る

フィードバックをうまく与えることが難しいなら、うまく受け取ることはさらに難しいかもしれません。批評は仕事に感情的に投資しているときに届きます。時として、良くない届け方で——ぶっきらぼうで、不明確で、または意地悪さえも含んで。「誰かが私のコードを批評している」と「誰かが私を批評している」のギャップは、神経学的に言えば、私たちが望むより狭いのです。

役立つ五つのステップのプラクティスを紹介します:

  1. 証明されるまでは善意を前提にする。批判的なレビューコメントを残すほとんどのエンジニアは、あなたを傷つけようとしているのではなく、コードをより良くしようとしています。そこから始めましょう。届け方が荒っぽいなら、届け方をシグナルから切り離しましょう——片方が悪くても、もう片方は価値があるかもしれません。
  2. 返答する前に間を置く。防衛のスパイクを感じたら、それは情報です:フィードバックが何か本物に触れました。そのスパイクから反応しないでください。一呼吸置きましょう。10分後にもう一度コメントを読みましょう。対面の会話なら、「それについて考えさせてください」と言っても大丈夫です。
  3. 明確化の質問をする。フィードバックが曖昧——「これは過剰設計に感じます」——なら、具体性を求める権利があります。「具体的にどの部分が過剰設計に感じますか?抽象化の数ですか、インターフェースの表面積ですか、それとも他の何かですか?」これは挑戦ではありません;実行できるフィードバックを得る方法です。
  4. シグナルを届け方から切り離す。誰かが内容については正しく、言い方については間違っていることがあります。あなたの仕事は有用なシグナルを抽出し、それに基づいて行動するかどうかを決めることです。悪い届け方を報いる必要はありませんが、それがあなたが何か真実を学ぶことを妨げないようにしましょう。
  5. ありがとうと言う。フィードバックに同意しなくても、誰かが視点を提供する時間を取ったことを認めることは良い実践です。「これを指摘してくれてありがとう——考えてみます」は正直で、同意にコミットせずにループを閉じます。
意見を言うことについて

フィードバックをうまく受け取ることは、そのすべてを受け入れることを意味しません。意見を言うことは許されています。重要なのは、感情ではなく証拠をもって意見を言うことです。「懸念はわかります。でもXのためにこのアプローチを選びました——それは対処しますか?」は健全な反応です。沈黙の後にフィードバックを無視することはそうではありません——ループを閉じ、声を上げることは努力する価値があることをフィードバックを与えた人に伝えることを止めます。

上向きおよびピアへのフィードバックを与える

ほとんどのフィードバックガイダンスは、シニアからジュニアへのフィードバックの視点で書かれています。しかし、最も重要な——そして議論が少ない——方向の二つは、ピア間と上向きです。

ピアフィードバック

同じレベルの同僚に正直なフィードバックを与えることは、後ろに隠れる公式な権限がないため気まずく感じることがあります。越権行為のように感じることがあります。そうではありません。うまく届けられたピアフィードバックは、高パフォーマンスなチームで最も価値あるものの一つです。

助けになるいくつかのこと:不確かな場合は質問としてフレームする(「Xに気づきました——それは意図的なものですか?」)、公の場の前に1対1のコンテキストで与える、そして人ではなく仕事に焦点を当てる。継続的な仕事上の関係があれば、正直なフィードバックへの投資は時間とともに信頼を築きます。常に聞きたいことを言う人は心地よいですが、真実を言う人は有用です。

上向きのフィードバック

マネージャーやテックリードへのフィードバックを与えることは本当に難しいです。権力の非対称性があり、最も心理的に安全なチームでもそれを完全に消すことはできません。実践的なアプローチ:

  • 1対1を使う。プライベートな会話が正しい場所です。マネージャーの行動に触れるフィードバックをチームの会議で与えないでください——それは公平ではなく、どちらも必要としない聴衆を作ります。
  • 性格ではなく影響に焦点を当てる。「スプリントのスコープが最後の二日間で変わるとき、うまく優先順位をつけるのが難しくなります——もう少し早くスコープを固定する方法はないでしょうか?」は「あなたはいつも最後の瞬間にスコープを変えます」より聞きやすいです。前者は一緒に解決する問題を説明します;後者は非難のように聞こえます。
  • 具体的かつ前向きに。一〜二度の特定の出来事を名指しする——一般化されたパターンではなく——何が役立つかを説明する。このようにフィードバックを受け取るリーダーは、ほぼ常に曖昧な不満より良く反応します。
  • タイミングを選ぶ。マネージャーが危機の最中、締め切りのプレッシャー下、または明らかにストレスを受けているときに上向きのフィードバックを与えないでください。取締役会の五分前ではない、落ち着いた1対1——それが届くときです。

コンテキストとチームの規模によるフィードバック

すべてのフィードバックが同じ設定で起きるわけではなく、適切なアプローチはどこにいるかによって変わります。

コードレビューにおいて

コードレビューはほとんどのエンジニアにとって最も一般的なフィードバックチャンネルであり、独自の規範を持っています。書かれたコメントは非同期で、再読可能で、永続的です——つまり、より少なくではなくより多くのケアが必要です。対面では大丈夫なコメント(「これは少し長い」)がプルリクエントでは冷たいか見下すように読めることがあります。コンテキストの一文を追加すること(「これは少し長い——バリデーションロジックを独自の関数に抽出することで読みやすさが向上するかもしれません」)はコストが低く非常に助けになります。この特定のコンテキストの詳しい考察についてはコードを優しくレビューするのコンパニオン記事を参照してください。

1対1において

1対1は、より個人的で、より繊細で、またはより縦断的な——時間をかけたパターン、キャリアの方向性、対人のダイナミクス——フィードバックの自然な場所です。同期的でプライベートな性質により、相手がどのように受け取っているかを見て調整できます。月日をかけて積み上げた不満のリストを持ち込むのではなく、一〜二つの具体的なポイントを準備してください。

インシデントレビュー(ブレームレスな事後分析)において

インシデントレビューは一つの交渉不可能なルールを持つ特殊なフィードバックコンテキストです:ブレームレス。目標は何が起きたかを理解してシステムを改善することであり、個人に責任を割り当てることではありません。実際には、フィードバックはプロセス、ツール、知識のギャップに向けられます——人々にではなく。「アラートがメモリリークを十分に早く検出しませんでした——しきい値アラートを追加すべきでしょうか?」が正しいレジスターです。「なぜこれを見つけられなかったのですか?」はそうではありません。ブレームレスな振り返りをマスターしたチームは、失敗から学ぶことが劇的に上手くなります。

チームの規模によって

小さなチーム(10人未満)は非公式なフィードバック文化を持つことが多いです——会話の中で、共有のSlackスレッドで、昼食時に言われます。その非公式さは機能です:フィードバックが速く頻繁に起きます。リスクは、一部の人が多くの正直な意見を得て他の人が得ないなど、一貫性が失われたり不平等になったりすることです。チームが成長するにつれ、軽い構造——定期的な1対1、明示的な振り返り時間、書かれたプルリクエントの規範——がフィードバックが既存の社会的なラインだけでなく公平に分配されることを確保するのに役立ちます。

まとめ

  • フィードバックを避けることは中立ではありません——問題を複利にし、時間とともに信頼を侵食します。
  • 良いフィードバックは具体的で、タイムリーで、仕事(性格ではなく)についてのものであり、実行可能です。SBIモデル(状況–行動–影響)が信頼できる構造を与えます。
  • 曖昧な直感を具体的な観察に変換する。ファイル、関数、会議、行動を名指しする——一般的な感覚ではなく。
  • 称賛もフィードバックです。具体的で公の称賛はチームに優秀さとはどのようなものかを教え、意図的に与える価値があります。
  • 受け取るためには:善意を前提にし、間を置き、明確化の質問をし、シグナルを届け方から切り離し、ありがとうと言う。
  • 上向きとピアのフィードバックは同じルールに従います——1対1を使い、影響に焦点を当て、具体的かつ前向きに。
  • コンテキストが重要:コードレビュー、1対1、インシデントレビューはそれぞれ独自の規範を持っています。ブレームレスな事後分析はフィードバックをシステムに向け、人々にではなく。

フィードバック文化は一つの会話ずつ築かれます。次にレビューするプルリクエントから始めましょう:批判と一緒に一つの具体的なポジティブなコメントを追加し、一つの観察をSBIでフレームしてみてください。数ヶ月後、その習慣がチーム全体のコミュニケーション方法を変えます。エンジニアリングの人間的な側面にもっと深く投資する準備ができたら、エンジニアのメンタリング——キャリアのより長い弧で誰かの成長を助ける方法の考察——で続けましょう。

よくある質問

関係を損なわずに同僚に建設的なフィードバックをどうやって与えますか?
人ではなく仕事に焦点を当ててください。SBIモデルを使いましょう:状況(いつどこで)を名指しし、具体的な行動(何が言われ、行われたか)を説明し、影響(それが持った効果)を説明します。「いつも」のような一般化を避け、観察したことにとどまりましょう。まずプライベートで届け、判断ではなく情報としてフレームし、最後に彼らの視点を招きましょう。一貫してやると、具体的で正直なフィードバックは侵食するのではなく信頼を築きます。
SBIフィードバックモデルとは何ですか?
SBIはSituation–Behaviour–Impactの略です。観察を根拠に基づかせ非個人的に保つためのフィードバックの三部構成です。まず、フィードバックを特定の状況に固定します(「昨日の計画セッションで…」)。次に、意図を推測せず観察可能な行動を説明します(「…テストの見積もりを議論なしに却下したとき…」)。第三に、その行動が持った影響を述べます(「…チームはタイムラインへの信頼を失い、二人のエンジニアが後に私に別々に懸念を伝えてきました」)。SBIが機能する理由は、何が起きたかを誰がその人であるかから切り離し、防衛を下げてフィードバックを行動しやすくするためです。
防衛的にならずに批判的なフィードバックを受け取るにはどうすればいいですか?
相手があなたを攻撃しようとしているのではなく助けようとしていると前提にすることから始めましょう。防衛のスパイクを感じたとき、それをフィードバックが何か本物に触れたシグナルとして扱いましょう——スパイクから反応するのではなく間を置きましょう。フィードバックが曖昧なら明確化の質問をしましょう:「具体的にどの部分が気になりますか?」これは考える時間を買い、より実行可能な意見を得ます。届け方の質をコンテキストの質から切り離しましょう——誰かがぶっきらぼうまたは下手な言い方であっても、正しいことがあります。最後に、同意しなくてもありがとうと言いましょう;ループを閉じてチャンネルを開き続けます。
マネージャーにどうやってフィードバックを与えますか?
1対1を使いましょう——グループの設定は決してNG。特定の状況があなたの仕事に与えた影響に焦点を当て、マネージャーの性格や意図についてではなく。例えば:「スプリントのスコープが最後の二日間で変わるとき、優先順位をつけるのが難しくなります——もう少し早く固定する方法はないでしょうか?」具体的に(一〜二つの名指しされたインスタンス、何ヶ月ものパターンではなく)、前向きに(何が役立つか)、そして危機の最中ではなく落ち着いた瞬間を選んでください。このようにフィードバックを受け取るマネージャーはほぼ常に建設的に反応します;うまくいかない傾向があるのは、一度にまとめて伝えられる曖昧で積み重なった不満です。
どのくらいの頻度でチームメンバーにフィードバックを与えるべきですか?
それがイベントのように感じられないほど頻繁に。目標は、四半期ごとの大きな正式な報告ではなく、継続的な低レベルのシグナルです。実際には:毎週コードレビューで具体的なポジティブなコメントを残す、1対1でそれがあれば具体的な観察を共有する、懸念されるパターンは溜め込むのではなく気づいてから一〜二週間以内に対処する。正式なパフォーマンスフィードバックの場合、四半期に一度が合理的な最低ラインです。頻度は具体性とタイムリーさより重要ではありません——適時に与えられた一つのうまくフレームされた観察は、遅れて届いた十個の曖昧なものより価値があります。