Writing

我在美国接触到的两类顶级程序员

fde

我在美国接触到的顶级程序员,大致可以分成两类。这里的分类不是按 title 来分,而是按他们创造价值的方式来分:一种人擅长把模糊的业务问题快速变成可验证的产品;另一种人擅长把已经跑通的 workflow 沉淀成稳定、可复用、可扩展的系统。

这里说的“顶级”,不只是代码写得漂亮,或者掌握多少新框架。更重要的是 judgment:能判断什么问题值得解决,什么复杂度现在值得引入,什么technical debt可以暂时接受,什么债一旦留下未来会非常昂贵。顶级工程师的共同点,是他们都对结果负责,只是他们负责的时间尺度不同。

第一类现在常被叫作 FDE(Forward Deployed Engineer)。其实在这个词流行之前,这类人就一直存在:很多 startup CTO、fractional CTO、早期 product engineer,本质上都在做类似的事情。他们的强项不是一开始就把系统设计得完美,而是在高度不确定的环境里,用最快的速度理解用户、判断商业价值,然后 cut corners & ship fast。

他们往往有企业家精神,喜欢直接和用户聊天,能在对话里迅速抓住 business context。比如一个客户说“我们需要一个 dashboard”,普通工程师可能会立刻问字段、图表和权限;好的 FDE 会继续追问:你每天什么时候打开它?你现在用什么绕过去?这个 dashboard 是为了省时间、减少错误,还是给老板汇报?很多真正的需求,都是在这些追问里才浮出来的。

技术上,FDE 通常偏好简单、直接、容易修改的方案。因为在 startup 早期,最大的风险往往不是代码不够优雅,也不是系统能不能支持百万级并发,而是做了很久才发现没有 product-market fit。这个阶段,过度追求严谨有时反而会变成成本:东西终于做出来了,钱也烧完了,用户却并不需要。

第二类是 platform engineer,也可以叫 principal engineer、staff engineer 或 software engineer。如果说 FDE 擅长把问题往前推,platform engineer 擅长的是在幕后把已经被验证过的 workflow 抽象、泛化,变成长期可运行的系统。他们做事看起来更慢,因为他们考虑的不只是“这个功能怎么做出来”,还包括:哪些能力应该沉淀成 core?哪些差异应该通过 adapter、config、route 或 policy 表达?这套系统换一个平台、客户或业务线时,能不能低成本复用?

比如同样是一个客户要的新 app,product-facing engineer 可能会先做一个让客户满意的版本,把需求跑通;platform engineer 则会多想几层:UI 可以不同,但 backend 是否能共享?权限、数据模型、workflow、observability 是否应该统一?今天为了快而写死的逻辑,未来会不会让每个新需求都变成一次重写?

一个具体的例子是 onboarding workflow。早期为了拿下客户,你可能直接写一个“客户 A 专用”的流程:这个表单多两个字段,那个审批多一个 manager sign-off,某个通知只发给他们的 Slack channel。FDE 可能会先把它做出来,因为这能立刻验证客户是否真的愿意用。platform engineer 看到同样的问题,会想的是:这些差异到底是客户配置、权限策略、state machine、通知 adapter,还是应该成为 core workflow 的一部分?如果这个判断做错了,未来每来一个新客户,系统里就会多一个 special case。

所以这两类人的差异,不是“一个快、一个慢”这么简单,而是他们负责的风险不同。FDE 更关注从 0 到 1:这个问题是不是真的重要,用户能不能立刻变得更高效,产品有没有商业价值。Platform engineer 更关注从 1 到 N:当用户变多、需求变化、系统出错、团队交接之后,它还能不能继续可靠地运转。

顶级工程师都会对质量负责,只是质量的含义不止是界面好不好看、功能能不能跑。它还包括更隐性的能力:

  • effectiveness:解决的是不是正确的问题,用户是否真的更高效。
  • performance:响应、吞吐、延迟是否撑得住真实使用。
  • security:权限、数据和攻击面是否可控。
  • reliability / availability:系统是否稳定,不轻易挂。
  • maintainability:代码和架构是否长期可维护。
  • observability:出问题时能否看见、定位、解释。
  • scalability:用户量或复杂度上来后是否还能扩展。
  • recoverability:失败后能否降级、恢复、回滚。
  • privacy / compliance:数据边界、权限和合规风险是否清楚。
  • cost efficiency:算力、存储和人力成本是否可控。

FDE 往往思维发散、爱好广泛,喜欢看 Hacker News,快速尝试新工具、新 framework,判断哪些东西能替代现有做法。他们知道,不是所有新东西都应该立刻进 production;有时候老的、冷门的工具反而更稳定。Platform engineer 则更倾向于长期阅读 platform-level 文档和 architecture,在一个技术栈里深耕,理解系统为什么这样设计,抽象边界在哪里,哪些 trade-off 不能轻易打破。

这两类人通常都不是朝九晚五意义上的工程师。这里不是在赞美加班,而是说他们对产品和代码的 ownership 很强。公司也往往给他们很大的自由,因为他们足够熟悉产品和代码的 ins and outs,有自己的 code metrics、security standards 和 engineering guidance。他们还有一个共同点:都很“懒”。但这种懒不是少做事,而是讨厌重复劳动和不必要的工作,所以会不断做工具、抽象流程、自动化琐事。

最好的状态不是让所有工程师都变成同一种人,而是让这两种能力互相尊重。FDE 不会为了快而故意留下无法收拾的烂摊子;platform engineer 也不会为了抽象而抽象。一个负责把真实需求从混沌里拉出来,一个负责让被验证过的需求在更长时间、更大规模下稳定运行。

我在两种类型的团队都待过,感兴趣的欢迎交流。