技术Leader的“第一性原理”:我是如何做技术决策的?

作为一个技术Leader,我最常被问到的问题就是:"老大,我们这个新项目,到底该用A方案还是B方案?"

而最安全、也最无用的回答,就是那句经典的 - 看情况决定。

看情况 当然是对的,因为所有技术决策都离不开具体的业务场景、团队能力和时间窗口。但如果我们的思考只停留在这里,那决策过程就很容易变成 凭感觉随大流,或者谁声音大听谁的。

为了摆脱这种决策模式,我花了很长时间,总结出了自己的一套 第一性原理


什么是技术决策的第一性原理?

第一性原理 这个词,最近几年很火。它的核心,就是 回归本质,从事实出发

说白了,就是把一个复杂的问题,拆解成最基础、最不可动摇的事实,然后从这些事实出发,一步步推导出结论。

在技术决策中,它最大的作用,是帮助我们对抗类比思维的诱惑

  • 类比思维 :"A公司用了微前端,我们也用吧!"、"B框架在GitHub上Star最多,我们就选它!"
  • 第一性原理思维 :"我们的业务模块,真的需要被独立部署和迭代吗?我们团队的规模和DevOps能力,是否足以支撑多个独立仓库的维护成本?"

你看,后者虽然更累,但它能让你做出真正适合你的决策,而不是盲目地抄别人的作业。


我个人的技术决策清单

下面就是我的4条 第一性原理,每次遇到重要的技术决策时,我都会用它们来拷问自己和团队。

问题和工具匹配-原则

"我们遇到的,真的是个钉子吗?还是我们只是想试试手里的新锤子🔨?"

这是我放在第一位的原则。永远从问题出发,而不是从解决方案出发。

工程师,尤其是热爱技术探索的工程师,很容易犯一个毛病:看到一个很酷的新技术,就总想在项目里找个地方把它用上(所谓的技术或简历驱动开发)。

举个例子:

前段时间,团队里有同学提议,要在我们新的中后台项目里,引入GraphQL。

我的第一反应不是去讨论GraphQL的好坏,而是拉着团队一起回答几个问题:

  1. 我们当前遇到了什么现有REST API无法解决的、极其痛苦的问题吗?
  2. 前端是否真的需要那么高的查询灵活性?我们的后端接口,是不是已经足够稳定和定制化了?
  3. 我们团队,包括后端同学,对GraphQL的学习成本和服务端改造的成本,有充分的评估吗?

最后我们发现,对于我们这个业务相对固定的中后台来说,引入GraphQL的复杂性,远远大于它带来的收益。我们不能因为手里拿着锤子,就把所有东西都看成钉子。

可逆性原则

"我们做的这个决定,是一扇双向门🚪,还是一扇单向门?"

这是 亚马逊创始人贝索斯 提出的一个著名心智模型。

  • 双向门 :决策是可逆的,如果你选错了,可以比较轻松地退出来,再走另一扇门。
  • 单向门 :决策是不可逆的,或者逆转的成本极高。一旦走进去,就很难回头。

我们应该把绝大部分的精力和争论,都花在单向门的决策上。

双向门: 为项目选择一个状态管理库,是用Zustand还是Valtio?它们都是轻量级的,API也很简洁。即使我们选错了,未来花一两个星期的时间,迁移成本是完全可以接受的。对于这类决策,我会鼓励团队快速尝试,不用过度纠结。

单向门: 选择整个项目是基于Next.js的App Router(服务端组件),还是基于Vite的纯客户端渲染(CSR)?这个决定,会深远地影响我们后续的开发模式、部署方式、性能模型、招聘标准。这是一个典型的单向门,一旦选定,未来想要更换架构,成本是灾难性的。对于这类决策,我会组织多次的深入调研、技术分享和方案评审。

维护成本

"这个技术方案,半年后、一年后,谁来为它维护?"

一个技术方案的成本,绝不只是前期的开发成本。总拥有成本(TCO) = 开发成本 + 维护成本 + 学习成本 + 沟通成本... 而其中,维护成本往往是最大、也最容易被忽略的。

举个例子:

一个新人提议,用一个GitHub上刚火起来的、非常酷的CSS-in-JS库,它能解决我们现在方案的一些小问题。

我会问他几个问题:

  1. 这个库的社区活跃吗?作者弃坑的风险有多大?
  2. 它的文档和生态完善吗?遇到问题,我们能快速找到解决方案吗?
  3. 半年后,当作者不再维护时,我们团队有能力接手它的源码,自己维护吗?
  4. 如果我明天招一个新人,他需要花多久才能上手这个小众的库?

很多时候,选择一个更无聊、但更主流、社区更稳定的技术(比如Tailwind CSSCSS Modules),对团队的长期健康来说,是更明智的选择。

简单性原则

"有没有更简单的方案,能实现80%的效果?"

如无必要,勿增实体 。这是架构设计中的 奥卡姆剃刀 原理。当面对两个都能解决问题的方案时,永远选择那个更简单的。复杂性,是软件质量的头号杀手。

为了实现一个简单的、跨组件的通信,我们真的需要引入Redux吗?

一个简单的React Context,甚至一个从上层传下来的回调函数,是不是就足够了?

我们不要为了追求所谓的架构完整性,而去堆砌我们根本不需要的复杂性。

在很多场景下,没有设计,就是最好的设计。


写在最后

第一性原理,它给我的不是一个答案,而是一个提问的框架。

它强迫我慢下来,强迫我穿透技术的表象,去思考那个最本质的问题:

我们到底要解决什么?我们付出的代价是什么?我们能否承担这个代价?

一个技术Leader的价值,不在于他知道所有技术的答案,而在于他拥有一套可靠的决策流程,来带领团队,在充满不确定性的技术世界里,找到那条最适合自己的路。

这个观点你们怎么看?🤞

相关推荐
沙蒿同学7 分钟前
我把架构约定编译成了会变红的测试:Wails v2 + Go + Vue3 桌面脚手架实战
前端·后端·github
cpolar技术支持10 分钟前
本地 Playwright 测试报告怎么远程复盘?Trace Viewer 跑起来后,用 cpolar 分享失败现场
前端·自动化测试·测试工具·cpolar·playwright
wordbaby10 分钟前
企业级后台管理系统路由设计与最佳实践指南
前端
胡志辉的博客20 分钟前
【完全开源】IP 纯净度检测 可一键部署到自己的CF
前端·javascript·chrome·ip·chromium
Hilaku1 小时前
作为面试官,我最怕遇到什么样的候选人?
前端·javascript·程序员
TiDi1 小时前
Pinia优化重复请求
前端
web3d5201 小时前
01-用 Leafletjs 10 分钟搭一张水利一张图(Vue3 + Vite 实战)
前端·javascript
晚安日记wanna1 小时前
Vue2 的 defineProperty 差在哪四层追问筛掉九成候选人
前端·vue.js·面试
TiDi2 小时前
吸顶导航交互实现
前端
kisshyshy2 小时前
从Props透传到自定义Hook:系统梳理React跨层级通信与逻辑复用
前端·架构·代码规范