アーキテクチャ設計 — 後から変えられないものを見分ける
設計判断のうち、後から安く取り消せるものと二度と戻せないものをどう見分けるか。可逆性の測り方、ADR(設計決定記録)の書き方、トレードオフを言葉にする型を、前提知識ゼロから解説します。
壁紙は貼り替えられるが、柱は抜けない
家のリフォームを想像してください。壁紙の色は、気に入らなければ来週貼り替えられます。キッチンの位置を動かすのは一週間と数十万円かかります。しかし建物を支える柱を抜くとなると、間取りの前提そのものを引き直す話になり、そもそもできないこともあります。
ソフトウェアの設計判断も同じ構造をしています。厄介なのは、家と違ってどれが柱でどれが壁紙かが目で見えないことです。しかも作業量の見た目とは相関しません。ログ出力のライブラリを入れ替えるのは、触るファイルは多くても壁紙です。一方、ユーザーIDを連番の整数にするかランダムな文字列にするかは、たった三行で書けるのに柱です。前者は誰も気にしませんが、後者は数年後に「別のシステムと統合したいがIDが衝突する」という形で牙をむきます。
アーキテクチャ設計とは、四角と矢印の図をきれいに描く作業ではありません。目の前の決定が壁紙か柱かを見分け、柱にだけ時間を使う技術のことです。新人がやりがちなのは全部の決定に同じ熱量で悩むことで、ベテランがやっているのは、九割を五分で捨てて残り一割に一週間かける配分です。
直感: 決定の値段は「取り消しコスト」で決まる
ある決定が重いかどうかは、それを間違えたときに払う金額で測ります。ここで大事なのは、間違える確率と、間違いを取り消す費用は別物だということです。よく間違えるが取り消しが安い決定は、気にする必要がありません。むしろ早く間違えたほうがいい。逆に、めったに間違えないが取り消しが破滅的な決定は、時間をかけて調べる価値があります。
この二つを掛け合わせたものが、決定の重さです。
は「その決定にどれだけ時間をかけるべきか」の目安、 はその判断が後で間違いだったと分かる確率、 はそのとき元に戻すのにかかる費用(人月・停止時間・失う信頼のすべて)です。つまり「外す見込み」×「外したときの痛さ」が大きい決定だけを慎重に扱えと言っています。
この式の効用は、慎重さを一律に配ってはいけないと分かる点にあります。 が小さければ、 がどれだけ高くても は小さいまま。だから可逆な決定は、会議で議論するより試したほうが速い。そして は時間とともに増えます。作った翌日なら誰も使っていないので取り消しはタダですが、外部の三十社が呼んでいるAPIの形は、もう自分だけの持ち物ではありません。同じ決定でも、遅れるほど不可逆に近づいていくわけです。
仕組み: 不可逆性の三つの発生源
「取り消しが高い」には、原因が三つしかありません。ここを押さえると、初めて見る技術選定でも柱かどうかを判定できます。
一つ目は、自分の外に出てしまった約束です。 公開APIのフィールド名、URLの形、Webhookのペイロード、SDKの関数シグネチャ。これらは他人のコードに焼き付いているので、変えるには他人を動かす必要があります。自分の努力だけでは終わらないものは、すべて不可逆側に倒れます。
二つ目は、蓄積されたデータです。 スキーマそのものより厄介なのは、データに込めた意味のほうです。金額のカラムを「税込」で貯め続けたとして、三年目に「税抜が必要」と言われても過去分は復元できません。捨てた情報は戻ってこない。同じ理屈で、タイムゾーンを落として保存した日時、正規化しすぎて元表記を失った住所、論理削除にしなかったレコードは、すべて取り返しがつきません。
コメント
コメントにはログインが必要です