/note/tech

Software Drives People Insane

要約:

■ 1. ソフトウェアが人を狂わせる

  • 持論としての狂気説:
    • ソフトウェアを取り巻く条件が、普通の人間から釣り合いの感覚を奪う
    • 手を洗い続けるような病理ではなく、正常な人が比例感覚を失う現象を指す
    • 十分な回数と角度から観察してきたため、単なる個人の性格の問題とは考えていない
  • 狂気を生む組み合わせ:
    • 速度、金、複雑性、抽象性、ほぼ無制限に意見を変えられる自由
    • 個々の要素は扱えるが、組み合わさると異様な副作用が生まれる

■ 2. 大半のソフトウェアの実態

  • 剥がせば退屈な中身:
    • フォーム、APIエンドポイント、権限、計算、ワークフロー、データベース
    • 規模が必要なら、あるいは冒険心があればキューが加わる程度
  • glorified spreadsheet:
    • 厳しい言い方だが、大半のソフトウェアは体裁を整えた表計算にすぎない
  • 普通の大人がB級の悪役に変わる:
    • プロジェクトは常に遅すぎるとされ、計画は急な変更への柔軟性を求められる
    • 新機能は毎回これこそが決定打とされるが、前のスプリントの決定打は忘れられる
  • 尽きない懸念:
    • 動くのか、スケールするのか、速度は足りているのか
    • そもそも全く別のことをすべきではないのか

■ 3. 摩擦の欠如

  • アイデアと実装の間に摩擦がない:
    • 出てくる案の多くが技術的には実現可能であり、それ自体が問題の一部
  • 建築との対比:
    • 枠組みの途中でキッチンを反対側へ移すと決めれば、誰もがその代償を即座に理解する
    • 板は切られ配管は通っており、固定済みのものを壊す必要がある
    • コストが物理的に明白なため、存在しないふりができない
  • ソフトウェアではコストが隠れる:
    • コストは人の頭の中と、元々理解しにくいシステムの内側に潜む
    • キッチンの移動は簡単な修正に見え、費用は静かに蓄積する
    • コンテキストスイッチ、リグレッションリスク、アーキテクチャの侵食が積み重なる
    • 失われた勢い、忘れられた前提、認識合わせのための果てしない会議が生じる
    • 埃も端材も出ないため、変更が無料だったふりをしやすい
  • 安い場合があることが事態を悪化させる:
    • 有用な調整が本当に一時間で済むこともある
    • 同じく単純に見える依頼がシステム全体に波及し、障害を引き起こすこともある
    • この不透明さが、手早く面白い思いつきを次々と緊急でロードマップに載せる危険な習慣を生む

■ 4. 「できる」から「なぜまだか」へ

  • 会議の思いつきに抵抗がない:
    • この画面の挙動を変えられないか、ビジネスモデルを変えられないか
    • 別の顧客セグメントを狙えないか、ワークフローを足せないか、自前のイベント基盤を作れないか
    • 答えはほぼ常に「まあ、できる」の変形
  • 言葉の変質:
    • 「できる」が「すべき」になり、「すべき」が「なぜまだ終わっていないのか」になる
  • 脳への作用:
    • すべてが速く動けるがゆえに、すべてが緊急になる
    • 理論上の上振れが巨大なため、あらゆる判断が戦略的に感じられる
    • 同じ問題に妥当な解法が何十通りもあるため、技術選択がイデオロギーになる
    • どこかで誰かがより速く動いているとされるため、あらゆる停滞が危機に見える
  • 十分さを告げる機構の不在:
    • 業界には、もう十分だと知らせる自然な仕組みがほとんどない

■ 5. 「完成」の不在

  • 大工との違い:
    • 大工は棚が出来上がればハンマーを置くが、ソフトウェアは常に改善できる
  • 改善余地は無限に列挙できる:
    • ボタン、クエリ速度、抽象化の清潔さ、オンボーディングの転換率、インフラのスケール
    • 隣接市場への拡大、価格の変更、より儲かる方向への全社的転換
  • 望めば、手の届く範囲に常に別のレバーがある

■ 6. レバーに囲まれた組織

  • レバーに囲まれた人間は引き始める:
    • ソフトウェア組織が神経症的になる理由の一つ
  • レバーを引く動機:
    • 本当に何かが壊れている場合もある
    • 恐怖、取締役会の成長要求、競合の出荷、今月の数字の停滞
    • 他に打つ手を誰も知らないという理由もある
  • 行為を正当化する語彙:
    • 数日おきに方向転換する創業者は、市場への対応として神話化される
    • 速度を迫り続けるマネージャーは、実行力重視と見なされる
    • 新たなインフラ部品を複数導入するエンジニアは、スケールを考えていると称賛される
    • 転換率がわずかに落ちたために動作中のUIを作り直す製品チームは、イテレーションとされる
    • 流行の別カテゴリのために当初の独自性を捨てる会社は、ピボットとされる
  • 危険の正体:
    • 動機が正当な場合もあり、速く動くべき時、ピボットすべき時、本当に設計変更が必要な時は存在する
    • 危険なのは、取り得る手段の存在と、実際に取る必要性とを混同しやすい点

■ 7. 金という燃料

  • 少人数が生む巨額の可能性:
    • 数人が部屋で数年タイプする、あるいは今ならエージェントを操縦するだけで、数億ドル規模のものを生み得る産業は稀
    • その可能性が、本来退屈な作業の情緒的な重みを変える
  • ボタン一つに一時間の議論:
    • 会話の奥でボタンが将来の金の山と結びつくため、良識ある人々が争う
    • そうなると通常の判断力は失われる
    • 議論はボタンが有用なものに結びつくかを離れ、会社への期待のすべてを背負う

■ 8. 複雑性の魅力

  • 複雑性は重要さを演出する:
    • 複雑なシステムは、平凡な問題をより深刻に見せる
  • 退屈な実態と派手な見た目:
    • レコードを保存して編集させるだけのアプリは、特に印象的には聞こえない
    • サービスメッシュとリアルタイム同期層を備えた分散イベント駆動基盤は、NORADの建設のように聞こえる
  • 心理的報酬:
    • 複雑な仕組みが本当に必要な場合もあるが、多くの場合は不要
    • 複雑さは、設計、議論、所有、最適化、書き直し、図示、ベンチマーク、話題化の対象を与える
  • 自己強化の循環:
    • 複雑性が仕事を生み、仕事が重要さの空気を生み、重要さが地位を生む
    • やがてシステムが組織を支え、組織がシステムを支える構造になる
    • 内側からは驚くほど気づきにくい

■ 9. 制御への欲求

  • コードは従順な数少ない領域:
    • 望むものを十分な精度で記述すれば、機械が確実にその指示に従う
    • 現実の他の部分ははるかに非協力的
  • 乱雑さをバグと見なす錯覚:
    • 現実は雑然として頑固だが、ソフトウェアは乱雑さがデバッグ待ちの問題だという印象を与える
  • 周囲のすべてをデバッグし始める:
    • 成長が遅ければファネルを変え、顧客が混乱すればプロダクトを再設計する
    • 開発が遅ければプロセスを変え、プロセスが遅ければツールを変える
    • 会社が苦しめば再編し、なお苦しくベンチャー資本に依存していればピボットする
    • 操作可能な変数は常に残っている
  • 会社そのものの可変化:
    • 会社自体が、永続的に可変で未完成で、あと一回のリファクタで直るものとして扱われる
    • 誰も何も放っておけなくなり、そこで狂気が本格的に定着する

■ 10. 放置する技術

  • 過小評価された工学的技能:
    • 既に役目を果たしているものに手を出さない選択から、良い仕事の相当部分が生まれる
    • その理解に至る時点がキャリアのどこかにある
  • 触らなくてよいもの:
    • データベースは常に置き換える必要はなく、フレームワークもたいてい問題ない
    • オンボーディングを今週また作り直す必要はない
    • アーキテクチャは十億ユーザーを見越す必要はない
    • 誰かがツイートに興奮したという理由でロードマップを変える必要はない
    • プロダクトはプラットフォームになる必要はなく、会社は四半期ごとに自己を再発見する必要はない
    • ただそこに在って動き続ければよい場合がある

■ 11. 忍耐への敵意

  • 時間を必要とするもの:
    • 顧客が製品を見つけるには時間が要る
    • エンジニアがシステムを理解するには時間が要る
    • 事業が事業になるには時間が要る
  • 忍耐が許されない文化:
    • ソフトウェア文化は忍耐に対して著しく敵対的
    • 忍耐は怠慢に見え、速度に取り憑かれた業界では怠慢を正当化しにくい
  • 活動の捏造:
    • 出荷、反復、最適化、ピボット、基盤刷新、再考、再発明を重ねる
    • 積み上げたものの下に、元の問題が見えなくなるまで層が重なる
    • 数年後、誰かが元の単純なものを作り直そうと静かに提案する
    • その提案者は、自らの慧眼こそが洞察をもたらしたと誇りがちである

■ 12. 答えは比例感覚

  • 遅く動くこと自体は答えではない:
    • 遅さのための遅さは別のイデオロギーにすぎず、ソフトウェアには既にイデオロギーが多すぎる
  • proportion:
    • すべての問題が存亡に関わるわけではない
    • すべてのアイデアがロードマップに載るべきではない
    • すべての抽象化が存在に値するわけではない
    • すべての停滞が介入を要するわけではない
    • すべての競合が重要なわけではない
    • すべてのソフトウェアがプラットフォームになる必要はない
    • すべての会社が世界征服を目指す必要はない
  • 有用であれば十分:
    • 装飾を除けば大半のソフトウェアは表計算であり、これは侮辱ではない
    • 表計算は有用であり、実際に有用なソフトウェアであればそれで十分
  • 本来していること:
    • 自分と他者の生活を楽にする道具を作っている
    • いじる必要のないものをいじりながら無為に過ごすことではない