If coding has been solved, why does software keep getting worse?

If coding has been solved, why does software keep getting worse?

如果编程问题已经解决,为什么软件反而越来越难用了?

As I’m writing this, we’re in the middle of an AI-induced mass psychosis. People are literally token-maxxing themselves into hospital beds, scrambling to capture some of that market value before everything is automated away. I can’t blame them. Models keep getting better, programmers are being laid off left and right. We’ve been repeatedly told that AI will write 100% of the code by the end of the year. Whether that’s true or not, this may not be the best time to sit back. 在我写这篇文章时,我们正处于一场由人工智能引发的集体狂热之中。人们为了在一切被自动化取代之前抢占市场价值,甚至不惜透支精力到住进医院。我不能责怪他们。模型在不断进步,程序员们也在接连被裁。我们被反复告知,到今年年底,人工智能将编写 100% 的代码。无论这是否属实,现在恐怕都不是坐享其成的时候。

The widespread excitement around the Agentic Era comes with the promise of greater productivity and higher quality. There’s no denying that these new tools have already revolutionized how we create and use software. They have raised upper management’s expectations for team output. They may have upgraded the average skill set of software teams in a way we have not seen before. So why does software keep getting worse across the board? 围绕“智能体时代”(Agentic Era)的广泛兴奋感,伴随着对更高生产力和更高质量的承诺。不可否认,这些新工具已经彻底改变了我们创建和使用软件的方式。它们提高了高层管理人员对团队产出的期望,也以前所未有的方式提升了软件团队的平均技能水平。那么,为什么软件反而全面变得越来越糟糕了呢?

A few examples from last week alone: My banking app requires, on average, three FaceID logins before the 3D Secure confirmation view appears. I opened Slack on macOS, the icon kept bouncing in the dock for a few seconds. I got impatient, switched to Ghostty, and started typing. Just then, the Slack window appeared, stole focus from Ghostty and the git pull command was sent to the group chat. My LG fridge started making weird sounds, so I tried to file a warranty claim, through a multi-step form with countless fields. It failed with a submission error at the very end. And I only found out because I looked at the JavaScript console. 仅上周就有几个例子:我的银行 App 平均需要三次 FaceID 验证,3D Secure 确认界面才会出现。我在 macOS 上打开 Slack,图标在程序坞里跳动了好几秒。我没耐心了,切换到 Ghostty 开始打字。就在这时,Slack 窗口弹了出来,抢走了 Ghostty 的焦点,导致我本想执行的 git pull 命令被发送到了群聊里。我的 LG 冰箱开始发出奇怪的声音,于是我尝试通过一个包含无数字段的多步骤表单提交保修申请。结果在最后一步提交时报错了,而我之所以发现这一点,是因为我查看了 JavaScript 控制台。

My car’s infotainment system got a software update recently. It was never great to begin with, but at least it didn’t reboot itself during every drive. Now, it’s riddled with bugs: the turn-signal sound randomly goes silent until I reboot the OS; I tap the screen to open Google Maps — the radio app shows up; there’s a 1-2-second lag before anything happens after I tap the screen. This is no longer just a UX problem at this point — those bugs affect your ability to focus on driving. A few months ago, I saw a LinkedIn thread by a PM on the team that redesigned the car’s OS. They were congratulating themselves on what an amazing job they had done. I keep thinking about that post every time I have to fight their product. 我的车载信息娱乐系统最近进行了一次软件更新。它本来就不怎么样,但至少不会在每次驾驶时都自动重启。现在,它充满了 Bug:转向灯声音会随机消失,直到我重启系统;我点击屏幕打开谷歌地图,出来的却是收音机 App;点击屏幕后会有 1-2 秒的延迟才有反应。这已经不仅仅是用户体验问题了——这些 Bug 影响了你驾驶时的专注力。几个月前,我在 LinkedIn 上看到负责重构该车载系统的团队的一位产品经理发的帖子,他们还在为自己完成了一项了不起的工作而沾沾自喜。每次我不得不与他们的产品“斗智斗勇”时,我都会想起那篇帖子。

While I can’t know the full story, I’m willing to bet that most of the teams behind those bugs have access to the latest models, with generous token budgets. LLMs can be really good at squashing bugs if given the chance. Software has always had bugs, and the nostalgia for the good old macOS Snow Leopard era when everything was stable is mostly the product of selective memory. Software may have been better back in the day, but that was mainly because it was much simpler. Since then, we have kept coming up with new abstractions, new frontend frameworks, and more infrastructure complexity. The bar for “user experience” has kept rising, but everything has become increasingly fragile. 虽然我无法得知全貌,但我敢打赌,这些 Bug 背后的团队大多拥有最新的模型使用权和充足的 Token 预算。如果给大语言模型机会,它们在修复 Bug 方面其实非常出色。软件一直都有 Bug,对 macOS Snow Leopard 时代那种“一切都很稳定”的怀旧,大多是选择性记忆的结果。软件在过去可能更好,但那主要是因为它简单得多。从那时起,我们不断提出新的抽象概念、新的前端框架以及更复杂的架构。对“用户体验”的要求不断提高,但一切却变得越来越脆弱。

We’ve reached a point where an update to macOS — or to any app I rely on, really — is a source of dread rather than excitement. I now expect the new version to be worse. This isn’t a rant against AI. Those humming GPU farms have given us superpowers, but we still don’t use them to build better software. Software vendors have long been KPI-oriented, and making things more stable doesn’t always have a direct effect on the numbers. It doesn’t look exciting in presentations: This quarter, we won’t be releasing any new features, and we have no plans to redesign anything — we will exclusively focus on fixing bugs. — Imaginary PM at a BigCo 我们已经到了这样一个地步:macOS 或任何我依赖的 App 的更新,带来的不再是兴奋,而是恐惧。我现在预设新版本会更烂。这不是在抨击人工智能。那些嗡嗡作响的 GPU 集群赋予了我们超能力,但我们并没有利用它们去构建更好的软件。软件供应商长期以来以 KPI 为导向,而提高稳定性并不总是能直接反映在数据上。在演示文稿里,这看起来一点也不令人兴奋:“本季度,我们将不会发布任何新功能,也没有任何重构计划——我们将专注于修复 Bug。”——某大厂的虚构产品经理。

Until this attitude changes, the great software quality decay will continue. That doesn’t sound optimistic, but I’m actually excited about what comes next. As companies collectively spiral into AI debt, individual developers have a unique opportunity to build software that would previously have been beyond their reach. I have no hope for my car’s Android Auto or LG’s stupid website — but I choose to believe that everyday software will get better as a result of this frustration. We’re already seeing acts of rebellion against the current state of macOS and Windows, and I hope the trend will spread across the stack. 除非这种态度有所改变,否则软件质量的全面衰退将持续下去。这听起来并不乐观,但我实际上对未来充满期待。随着公司集体陷入“AI 债务”的泥潭,独立开发者拥有了一个独特的机遇,去构建那些曾经遥不可及的软件。我对我的车载 Android Auto 或 LG 那愚蠢的网站不抱任何希望,但我选择相信,正是这种挫败感将促使日常软件变得更好。我们已经看到了针对 macOS 和 Windows 现状的反抗行为,我希望这种趋势能蔓延到整个技术栈。