見出し画像

【凡人の苦悩】大規模システムって、正直複雑すぎる


最近、
「大規模システムって、そりゃ簡単に変えられないよな……」
と強く実感する場面がありました。

一般論として
「なぜ大規模システムはここまで複雑になるのか」
「その中でエンジニアとして何をキャッチアップすべきか」
を整理してみます。


大規模システム=機能が多い、だけではない

よくある誤解として、

大規模システム = 画面や機能が多い

と思われがちですが、
本当の難しさはそこではありません。

大規模システムが難しい理由は、

  • 責務が多い

  • 関係者が多い

  • 歴史が長い

この3点が絡み合っていることです。


1つの変更が、連鎖的に影響する世界

小さなアプリなら、

  • ボタンを変える

  • APIを1本直す

これで済むことも多いです。

でも大規模システムでは、

  • 通信

  • 認証

  • 課金・決済

  • ログ

  • 障害検知

  • 他システム連携

などが密結合しています。

その結果、

「ここを直すと、どこが壊れるか分からない」

という状態が生まれます。


なぜリリースまで何年もかかるのか

外から見ると、

  • 「そんなに時間かかる?」

  • 「もっと早くできないの?」

と思われがちですが、
中身を見ると話は変わります。

理由はシンプルで、

  • 既存ユーザーを止められない

  • 既存データを壊せない

  • 既存システムと並行稼働が必要

だからです。

止められない前提で作り替える
これが一番難しい。


「作る」より「壊さない」が最優先になる

大規模システムでは、

  • 新機能を作ること

  • 便利にすること

よりも、

今動いているものを壊さないこと

が圧倒的に優先されます。

そのために、

  • 影響範囲調査

  • 設計レビュー

  • 段階リリース

  • 切り戻し設計

こういった作業が膨大になります。

コードを書く時間より、
考える時間・確認する時間の方が長いことも珍しくありません。


ここでSSOTの話につながる

以前書いたSSOT(Single Source of Truth)の話は、
まさにこの文脈で効いてきます。

大規模システムでは、

  • 仕様書

  • 設計書

  • 実装

  • 運用ルール

このどれかがズレるだけで、
一気に混乱が広がります。

だからこそ、

「どれが正なのか」

を決め続ける必要がある。

SSOTは、
大規模システムを人間が扱えるサイズに保つための知恵
とも言えます。


凡人エンジニアがキャッチアップすべき視点

正直、最初は圧倒されます。

でも、全部を理解しようとしなくていい。

大事なのは、

  • どこが責務の境界か

  • どこが変更に弱いか

  • どこが「触ると危険」か

こうした 構造を見る目 を養うこと。

コード量よりも、
設計思想・分離の仕方 を追う方が学びが大きいです。


複雑さは「悪」ではない

大規模システムが複雑なのは、
無能だからでも、古いからでもありません。

  • 多くの人が

  • 長い時間

  • 真剣に使ってきた

その結果として、
どうしても複雑になる。

だからこそ、

シンプルにする努力
分かりやすくする設計
情報を一元化する思想

これらが、
現場で一番価値を持つのだと思っています。

いいなと思ったら応援しよう!