プログラミング
ソフトウェアは人を狂わせる
Software Drives People Insane (graybeard.ing)
要約
この記事は、ソフトウェア開発を取り巻く環境が、なぜ通常の人々を常軌を逸した状態に陥らせるのかを探求しています。スピード、複雑さ、変更の自由度といった要素が組み合わさることで、本来は単純な作業が、非現実的なプレッシャーや終わりのない改善要求を生み出し、開発者を精神的に追い詰めるメカニズムを解説しています。
全文翻訳
ソフトウェアは人を狂わせる
10 Sep, 2026
ソフトウェアが人々を狂わせるというささやかな仮説がある。それは「ハワード・ヒューズのように30分ごとに手を洗う」といった意味合いではなく、むしろソフトウェアを取り巻く状況が、普段は常識的な人々を物の道理をわきまえない状態にするのに驚くほど効果的であるという点だ。
私は様々な角度からこの現象を十分に見てきたので、これが完全に個人の性格の問題だとは思わない。ソフトウェアはスピード、お金、複雑さ、抽象化、そして考えをほぼ無限に変えられる自由を組み合わせている。これらは単独では全く問題なく管理できるものだが、それらを組み合わせると、本当に奇妙な副作用が生じ始める。
ほとんどのソフトウェアは、ブランディングやアーキテクチャ図を取り除いてしまえば、驚くほど退屈なものだ。ここにあるフォーム、そこにあるAPIエンドポイント、権限、計算、ワークフローを散りばめ、どこかにデータベースを置く。スケールさせる必要がある場合(あるいは冒険心を感じている場合)にはキューを追加するかもしれない。しかし、どんなに厳しい言い方をしても、ほとんどのソフトウェアは単なる立派なスプレッドシートに過ぎない。
それにもかかわらず、この種のものを生産するプロセスは、ごく普通の大人をB級のボンドヴィランに変えてしまうことがある。プロジェクトは決して十分に速く進んでおらず、計画は突然の変更に常に柔軟でなければならず、そして新しい機能は常に「次のもの」になる(しかし、前のスプリントで「次のもの」になるはずだったものではないことは確かだ)。それが機能するかどうか、スケールするかどうか、十分に速く進んでいるかどうか、あるいは全く別のことをすべきかどうかについて、常に新たな懸念がある。
ソフトウェアの奇妙なところは、これらのアイデアの多くが技術的に可能であることだ。それが問題の一部である:アイデアとその実装の間には、自然な摩擦がほとんどない。
家を建てているときに、誰かがフレーミングの途中でキッチンを建物の反対側にしたいと決めたら、その決定にはコストがかかることを誰もがすぐに理解する。木材はカットされ、配管は設置され、人々はすでに固定されたものを分解しなければならない。コストは物理的であるため、誰もそれが存在しないと偽ることはできない。
ソフトウェアでは、そのコストは人々の頭の中や、通常はすでに理解が難しいシステムの中に隠れている。ソフトウェアでキッチンを移動することは、「簡単な修正」のように見えるかもしれない。作業は依然としてコストがかかるが、実際の費用は静かに蓄積される。
コンテキストスイッチング、リグレッションリスク、アーキテクチャの侵食の間で、私たちは失われた勢い、忘れられた仮定、そして「連携を取る」ための終わりのない会議を見つける。
実際の複雑さに関わらず、変更が無料(ビールのように)であったと装うのは簡単だ。なぜなら、目に見えるほこりやスクラップがないからだ。
ソフトウェアの変更が本当に安価になることがある、あるいはその逆であるという事実によって、問題は悪化する。有用な調整は本当に1時間で済むかもしれないが、同様に単純に見える別の要求はシステム全体に波紋を広げ、障害を引き起こす可能性がある。
その不透明さは、あらゆる「クールなアイデア」が「超迅速」にロードマップに追加されるという危険な習慣を生み出す。会議で誰かがアイデアを思いつき、アイデアと現実の間にはほとんど抵抗がないことが多い。「この画面の動作を変えられますか?」「ビジネスモデルを変更できますか?」「別の顧客セグメントを追いかけられますか?」「別のワークフローを導入できますか?」「独自のイベントシステムを構築できますか?」答えはほとんど常に「はい、できます」のバリエーションだ。
やがて、「できる」は「すべき」になり、「すべき」は「なぜまだ終わっていないのか?」となる。
ここでソフトウェアは人々の脳に奇妙なことをし始める。すべてが緊急になる。なぜなら、すべてが迅速に動くことができ、すべての決定が戦略的に感じられるようになるからだ。なぜなら、理論上のアップサイドは莫大になりうるからだ。すべての技術的な選択も、イデオロギー的になる。なぜなら、同じ問題を解決するための数十のもっともらしい方法があるからだ。
すべての減速は危機のように見える。なぜなら、どこかで誰かが(伝えられるところによると)より速く動いているからだ。
業界には、人々が「十分」を知るための自然なメカニズムがほとんどない。ソフトウェアには「完了」の明確な定義はほとんどない(この姿勢をよく表している「ソーシャル・ネットワーク」からのクリップを不本意ながら共有する)。大工は、キャビネットが存在するので最終的にハンマーを置くが、ソフトウェアは常に改善できる。
ボタンはもっと良くできるかもしれない、クエリはもっと速くできるかもしれない、抽象化はもっときれいにできるかもしれない、オンボーディングはもっと多くの人をコンバートできるかもしれない、そしてインフラはもっとスケールできるかもしれない。
製品は隣接市場に拡大できるかもしれない、価格設定は変更できるかもしれない、あるいは会社全体がより収益性の高い方向性を発見したと決定するかもしれない。
ポイントは、もしあなたがそれを望むなら、常に手の届くところに別のレバーがあるということだ。
これがソフトウェア組織が神経質になる理由の一つだと思う:彼らはレバーに囲まれており、レバーに囲まれた人々は最終的にそれらを引っ張り始める。
時には、本当に何かが間違っているから引っ張る。時には、彼らは恐れているから、取締役会が成長を望んでいるから、競合他社が何かを出荷したから、今月の数字が横ばいだったから、あるいは誰も他に何をすべきかわからないから引っ張る。
数日おきに方向転換する創業者は「市場に対応している」と神話化される。人々を速く動くように常に圧力をかけるマネージャーは、実行に集中していると見なされ、インフラコンポーネントをいくつか導入するエンジニアは、スケールを考えていると賞賛されるかもしれない。
コンバージョンがわずかに低下したために動作中のインターフェースを再構築するプロダクトチームはイテレーションしており、別のカテゴリが突然流行になったために元のアイデンティティを放棄する会社はピボットしている。
この言語の一部は、根本的な動機が正当であるために存在する。速く動くべき時、ピボットすべき時、そしてアーキテクチャが本当に変更される必要がある時がある。
ソフトウェアを危険なものにしているのは、取るべき行動の存在と、実際にそれを行う必要性を混同することがいかに簡単かということだ。
そして、これが十分に悪くないとしても、お金はすべてにガソリンを注ぐ。
少人数のグループが部屋に座って数年間(あるいは今ではエージェントを操縦して)タイプするだけで、数億ドルの価値があるものを plausibly に生み出せる産業は非常に少ない。
その可能性は、伝統的に平凡な仕事(オタクでない人にとって)の感情的な重みを変化させる。
ボタンが将来のお金の山につながっていると、心の奥底で会話がなされているため、まともな人々がボタンについて1時間議論するのを見ることができる。それが起こると、通常の判断は捨てられる。
仕事は、ボタンが何か有用なものにつながっているかどうかではなくなり、会社がなりうるすべてのものへの希望を運ぶようになる。
複雑さは同じギャップを埋めるために殺到する。ソフトウェアは、複雑さを重要に感じさせるのが非常に得意だ。なぜなら、複雑なシステムは普通の問題をより深刻に見せるからだ。
データベースにレコードを保存し、人々が編集できるようにする退屈なアプリケーションは、特に印象的ではないように聞こえるが、サービスメッシュとリアルタイム同期レイヤーを備えた分散イベント駆動プラットフォームは、NORADを構築しているように聞こえる。
時には本当に複雑なものが必要になる。ほとんどの場合、おそらくそうではない。
しかし、複雑なシステムは、単純なシステムが提供しない心理的な報酬を提供する。それらは、人々が設計し、議論し、所有し、最適化し、書き直し、図式化し、ベンチマークし、そして話すためのものを提供する。複雑さは仕事を生み出し、仕事は重要性の空気を生み出す。重要性はステータスを生み出し、すぐにシステムは、システムをサポートするために存在する組織をサポートするために部分的に存在するようになる。
全体が、内側から気づくのが驚くほど難しい方法で自己強化される。
これらすべての下に、より深い魅力もあると推測している。ソフトウェアは私たちに異常なほどのコントロールを与えてくれる。なぜなら、コードは、あなたが望むものを十分な精度で記述し、それを実現できる場所の1つだからだ。