停止过度工程化(2025)
Source: Dev.to
请提供您希望翻译的具体文本内容,我将为您翻译成简体中文。
为什么你的“专业”架构在扼杀你的创业公司
专业主义悖论
大多数开发者失败并不是因为缺乏技术能力,而是缺乏保持简单的纪律。即使是初学者,项目也能存活并迭代。但如果你把它淹没在过度工程中,它就会失败。行业已经陷入一种危险的妄想:认为 更复杂 = 更专业。记住:简单永远胜过花哨。
故事陷阱:第一天就使用微服务
我们最清楚地看到这一点是在“Rahul”陷阱——典型的过早扩展案例。我的朋友 Rahul 想要构建一个学习管理系统(LMS)。他被打造一个 dahsu(强大/令人印象深刻)架构的欲望驱动,想让客户仅凭技术栈就排队,却忽视了基础。
方案 A – 过度工程的灾难
- 立即选择 micro‑services 架构。
- 为认证、视频处理、通知、游戏化和网站构建器分别建立服务。
- 在甚至没有单个用户之前,就加入 Kafka 来解耦通知。
方案 B – 实用的现实
- 单一后端服务器和一个数据库。
- 如果绝对需要缓存,可以加入 Redis,但仅作为战术必要。
选择方案 A,Rahul 陷入了基础设施开销的深渊。他把 90 % 的时间花在调试服务间通信和部署配置上,而不是构建 LMS 实际需要的功能。
“对于你在起始阶段构建的 99 % 项目来说,方案 B——一个简单的服务器和一个数据库——已经足够。”
过度工程的三种心理
为什么聪明的工程师会一再破坏自己的项目?这很少是技术决定,而是心理决定。
- 疯狂思维 – 无意识地需要使用每个流行工具,只为感受“先进”。
- 对扩展的恐惧 – “如果项目明天突然变得很大?”导致开发者在用十个用户验证产品之前,就为一百万用户构建。
- 大厂趋势 – “Google 使用 micro‑services,我也应该用。”他们忘记 Google 拥有成千上万的工程师和完全不同的约束。
复杂性的隐藏成本
你添加的每个组件都是负债。如果你有 17 个活动部件而不是一个,你就有 17 个故障点。这产生两种不同的债务:
- 技术与运营债务 – 分布式系统更难调试,部署更慢。每个服务都需要自己的配置、CI/CD 流水线和监控。
- 人力债务 – 过于复杂的系统让初级和中级开发者感到“笨拙”并陷入瘫痪。入职培训变成噩梦,只有“架构师”能在系统中游走。
数学很简单:简化降低认知负荷。
真正的“大厂”进化路径
大型公司的实际扩展遵循逻辑演进,而不是第一天就跳入深水区:
- 单体 – 从单一代码库和一个数据库开始。使用清晰的文件夹结构(
/controllers、/models、/routes、/utils)组织代码。这保持部署简单,心智模型清晰。 - 模块化单体 – 随着项目增长,在同一仓库内隔离模块(例如 Auth、Courses)。可以使用多个数据库 schema 来分离数据关注点,但仍保持在同一数据库服务器上,以避免基础设施膨胀。仍然是单一部署。
- 微服务 – 最终阶段,通常不是由流量驱动。公司在团队规模大到单一仓库难以管理时才会转向此阶段,出现构建系统冲突和代码合并瓶颈。只有那时才采用独立部署、不同语言和独立数据库所有权。
实用技巧
- 可解释性:如果你不能在白板上用 60 秒解释你的架构,那它就太复杂了。简化到逻辑不可争议为止。
- 2026 年的三条规则
**:
- 从单一仓库开始 – 一个后端,一个数据库。就这么简单。
- 一次只添加一个工具 – 不要一次性把 Redis、Kafka 和消息队列全部塞进项目。只有在出现特定、无法解决的瓶颈时才引入它们。
- 等出现问题再进行优化 – 不要为假设的规模做优化。当性能问题真实出现在你的指标中时再去修复。
结论:伟大工程的标志
复杂性是一种选择,而不是才能的象征。作为架构师,你的工作是为用户提供价值,而不是管理一堆尚未必要的服务。最优秀的工程师是那些能够把混乱、复杂的问题转化为看起来平淡无奇的简单解决方案的人。
“伟大的工程不是让事情变得复杂,而是让复杂的事物看起来简单。”
看看你当前的项目。如果今天把文档交给一位新入职的同事,他们是能够在午餐前完成第一个功能的发布,还是会被你那套‘专业’架构的认知负荷所瘫痪?