世界一流エンジニアの思考法

概要

Microsoft(米国本社)に勤務するシニアエンジニア・牛尾 剛が、日本のエンジニア文化と国際チームの働き方の違いを観察し、「世界一流エンジニアの思考法」を体系化した書籍。Be Lazy・WIP=1・Fail Fast・自己組織チームなど、欧米のモダン開発文化の本質を日本語で解説している。

主要ハイライト

仮説駆動アプローチ

事実(データ)を一つ見つける→いくつかの仮説を立てる→その仮説を証明するための行動をとる。

理解の3要素

「理解」には3つの要素がある:

  1. その構造をつかんで、人に説明できること
  2. いつでもどこでも即座に取り出して使えること
  3. 知見を踏まえて応用がきくこと

理解の3要素(牛尾剛)

デザインドキュメント先行

手を動かす前にDesign documentを最初に書く。
(1) 書くことで自分の頭が整理され、抜け落ちた視点に気づく
(2) 考えながら書けば自動的にドキュメントになり、後でまとめる手間が省ける

デザインドキュメント先行アプローチ

2時間ルール

一つのことで2時間以上ブロックされたなら、質問するなり相談するなりして寝かせておいて、他の仕事をやっておく方が断然生産性が高い。

Be Lazy

  • 望んでいる結果を達成するために、最低限の努力をする
  • 不必要なものや付加価値のない仕事(過剰準備含む)をなくす
  • 簡潔さを目指す
  • 優先順位をつける
  • 時間や費やした努力より、アウトプットと生産性に重点を置く
  • 長時間労働しないように推奨する
  • 会議は会議の時間内で効率的かつ生産的に価値を提供する

Be Lazy原則(最小努力・最大価値)

2-8の法則(パレートの法則)

20%の仕事が80%の価値を生む。20%のタスクを終えて80%の価値を出したら、残りの80%はやらずに、次の80%の価値を生む20%の新しいタスクに取り組む。

実践4原則:

  1. 一つだけピックアップする(最初の1件から)
  2. 時間を固定して、できることを最大化する
  3. 「準備」「持ち帰り」をやめてその場で解決する(会議の場だけで完結)
  4. 物理的にやることを減らす(何をやらないかを決める)

Fail Fast(早期失敗)

リスクを受け入れる文化:

  • 間違いを厳しく批判したり懲罰したりしない
  • 失敗から学ぶ態度
  • 実験が推奨されている
  • 非難や恐怖感のない環境

検討ばかりして、さっさと「やらない」ことのほうが最大のリスク。

Fail Fast(早期失敗)

不確実性を受け入れる(アジャイルマネジメント)

モダンな開発マネジメントの要素:

  • 詳細まで細かく練られた計画を期待しない
  • 内部プロセスは計画や優先順位の変更に柔軟
  • 事前に全問題分析が完了せずとも新しいことに挑戦する
  • 学びに基づいて、変化を精力的に行う

実践3原則:

  1. 「楽に達成できる」計画で仕事をする
  2. 「無理・断る」練習をする
  3. 他の文化の視点を学んでみる

QCDSトレードオフ

Q(品質)C(コスト)D(納期)+S(スコープ)は、トレードオフの関係にある。

QCDSトレードオフ

バリューストリームマッピング

現在の開発プロセスを「見える化」して改善ポイントを見つけ、リードタイムを短縮するツール。

フィーチャーフラグ

実際の機能を実装済みにしつつ、公開スイッチを持ち、特定ユーザーにのみ公開→全体公開と段階的に展開できる仕組み。Azure・Windows等で広く使用。

フィーチャーフラグ

仕事の難易度レベル分類

  • レベル1: 何もググらずに即座に実装できるもの
  • レベル2: 解法はすぐ思いつくが具体的方法はググる必要があるもの
  • レベル3: 解法を知らないが、スパイクソリューションをしたらできそうなもの
  • レベル4: 自分だけでは解決が難しい、もしくは非常に時間がかかるもの

WIP=1(シングルタスク集中)

WIP(Work In Progress)を1に限定する。一つのことをやっているときは、他のことは一切せず集中する。

WIP=1(集中作業原則)

実践ポイント:

  • 30分〜1時間を割り当てたら、そのことのみに取り組む
  • すぐ終わらないものは人に問い合わせて待ち状態にし、次のタスクに進む
  • タスクを中断する場合、すぐに再開できるよう記録・整理する
  • タスクの残骸は消しておく(ブラウザのタブを閉じるなど)

コーネルメソッド

アウトプットを意識した3エリア構成のノート術:

  1. ノート(後から思い出しながら要点を記録)
  2. キュー(学んだことにつながる質問を書く)
  3. サマリー(後日振り返り時に要約を書く)

コーネルメソッド(ノート術)

自己組織チーム

3つの特徴:

  1. 生産性が高い
  2. チームのエンゲージメント(満足度)が高い
  3. よりよいソリューションが選択されやすい

タスク割り振りはチームが自ら行い、メンバー各自がやりたい仕事を選択。楽しんでいるかが重視される。

自己組織チーム

バックログ主導(納期なし開発)

納期の代わりに:

  • バックログ(今後やるべきことリスト)
  • 戦略とカスタマーフィードバックに基づく粗い粒度の計画

目標設定においては進捗状況でなく「やってみてどうだったか・改善ポイント・ベストプラクティス」が問われる。学びのシェアこそがバリュー。

Agree to Disagree

「どちらが正しいか」ではなく、「相手のことを理解して認める力」。意見に賛同するかどうかではなく、相手の立場を理解すること。(日本マイクロソフト エバンジェリズムトップ・伊藤かつら氏から)

関連概念

関連エンティティ