データ構造をimmutableにしたい、イベントは起きたことをそのまま記録したい、更には監査の観点から修正させたくない、という人類の夢と希望に対して、「だってそれじゃあ現場は回らないんだよ」という例外運用のバランスをどこで取っていくか?というのは昨日・今日出てきた話ではないんですよ
— magnoliak🍧 (@magnolia_k_) 2021年11月28日
所謂、業務システムの設計の一番肝心なところって、「起きた事実をありのまま記録する」っていう要件と、実際の運用がそうなっていない現実との戦いなんじゃないかって
— magnoliak🍧 (@magnolia_k_) 2021年11月28日
みんなそうしたいんだよ、でもできないんだよっていう
「データを活用しよう」って言い出しても、「活用できるように維持していましたっけ?」みたいな話も同じなんだけど、とにかく例外との戦いなんですよ
— magnoliak🍧 (@magnolia_k_) 2021年11月28日
その時はそれで回るからいいじゃん!って積み重ねで、性別「男」「女」「1」「2」「その他」みたいなのが発生するんですよ
— magnoliak🍧 (@magnolia_k_) 2021年11月28日
でも、ここまでわかりやすい事例はまずなくて、不整合を検知するのは難しいんだ
最近のimmutableデータにしようって話、メモリやディスクが貴重だった時代の、「イベントと、何でも状態フラグ」が混在しているテーブル設計からの呪いみたいな話で、それからは脱出できると思うけど、その先の業務の本質と向き合うフェーズがすぐに来るんですよ
— magnoliak🍧 (@magnolia_k_) 2021年11月28日
汎用性を持たせようとしたり、一定のルールに基づいて設計しようとすると「無駄じゃない?」みたいな話が出てくるんだけど、データを活用する時代に異なる要件は分離しておかないといけないっていうのを浸透させていかないと
— magnoliak🍧 (@magnolia_k_) 2021年11月28日
ほんとシステム開発の原理原則は、「混ぜるな危険!」なんですよ
たぶんこの辺ももっと言語化されても良い領域なんじゃないかなと。
システムと運用の境目をどこに置くのかによって設計の複雑さは大きく変わっていって、immutableにしたい気持ちと、どんどんmutableな要望が出てきた時、それは実はそもそも境目の前提が合っていないんじゃないかとか何とか。