ソフトウェアエンジニアリングは、コードが使われ続ける間、チームで手を入れ続けられるようにすること。プログラミングとは時間・スケール・トレードオフの3つで分かれる。


目次

  1. 変化に反応できる状態を保つ
  2. 繰り返す作業を人数に比例させない
  3. 決定をコストと根拠で説明する
  4. 決定は見直せるようにしておく

変化に反応できる状態を保つ

価値のある変更が来たときに反応できる状態を保つのが本題

  • 寿命は書く時点で分からず、変更は外から迫られる
  • 最初の大きな更新で懲りて止めると、書き直すか据え置くかしか残らない
  • Hyrum の法則:約束していない挙動にも誰かが依存する

繰り返す作業を人数に比例させない

ビルドや移行の手間が組織より速く伸びるなら、持続可能でない

  • 移行は利用者に配らず、提供側がまとめてやる(バージョン管理)
  • CI に載っていない使われ方は守らない(Beyonce ルール)
  • 頻繁にやって1回を小さくし、問題は左へ寄せて早く見つける

決定をコストと根拠で説明する

決定は、次のコストを比べた結果として説明できなければならない

コスト例
金銭お金
資源CPU 時間
人エンジニアの労力
処理行動したときにかかるもの
機会行動しなかったときに失うもの
社会社会全体への影響
  • 創造的な仕事で効くのはたいてい人のコスト
  • 理由は「必須だから」か「いまの根拠で最良だから」。権威は理由にならない
  • データ構造やプロトコルのように長く生きるものはフォークしない

決定は見直せるようにしておく

新しいデータで前提が崩れれば、当時正しかった決定も誤りになる

  • 解決策も新しいコストを生む(分散ビルドで消費が膨らんだ)
  • 方針を変えるには、決めた人が誤りを認められること

関連