你有一个交易终端的产品想法,有预算,没有工程团队。自己招一支团队和签一家伙伴来做,并不是同一件东西的两个价格:它们分配时间、知识和风险的方式不同。本文讲两条路各自向你收取什么、交接里必须包含什么,以及工作停下那天你手里握着什么。
你有一个交易终端的想法,有预算,没有工程团队。接下来的问题几乎总是被摆成一次价格比较:招工程师要花多少,找一家公司把东西做出来再交付过来又要花多少。
这样提问,反而把真正的决定藏了起来。两条路最后都会得到能跑的代码。区别在于:第一个可用版本什么时候出现、一年之后谁懂这套系统、关键的人离开时会发生什么,以及工作停下时你手里握着什么。
简短的答案:比较两条路要看四件事,而不是看费率——多久能拿出一个可以摆到交易者面前的版本、系统的知识住在哪里、一次离职之后还剩下什么,以及工作停下那天你拥有什么。一条在费率上赢、在这四件事上全输的路,才是更贵的那条。
交易终端不是一个系统。它是一条行情路径、一条下单路径、交易前风控检查、到交易场所或经纪商的连接、持仓与账户状态、一块在账本变动时必须持续重绘的界面,以及收盘后把这一切对上账的后台。
当你选择招人,你买的并不是那套系统。你是在建造将来生产它的那个组织,而关于它如何运作的知识从零开始,积累在你雇来的人的脑袋里。人在,这是资产;人不在,这就是全部风险。
当你签下一家伙伴,你买的是一套系统,外加一份已经存在于别处的决策历史。知识的起点更高,但第一天它坐在你公司之外。它会不会挪到公司里来,取决于合同条款和日常做法,不会自己发生。
这里说的「系统的知识」具体指什么,值得讲清楚,因为它不是源代码:
这些东西默认都不住在代码仓库里。在某个流程逼着它落到纸面之前,它住在一个人身上——不管这个人是你的员工,还是伙伴那边的工程师。
自招这条路前面排着一条队,预算并不能把它消掉。你要写出一份自己在技术上站得住的岗位描述,在交易工程师稀缺的市场里找人,面试一些公司内部还没人能评估的技能,熬过离职通知期,然后在最初一段时间里看着一支新团队争论架构,而不是搭建架构。
伙伴这条路的起点是定范围而不是找人,时间上的差别就是从这里来的。它消不掉的,是只有你才能做的工作:决定这个终端是干什么用的、哪些合约和交易场所要先做,以及第一批用户是谁。
还有一部分工期不属于任何一条路。不管代码由谁来写,下面这些事都按自己的节奏走:
所以诚实的比较不是两个交付日期之间的赛跑。它要问的是:哪条路在工作前面摆的、你无法左右的事情更少,以及哪条路更早开始你能左右的那部分。
对两条路问同一个问题。写行情处理器的那个工程师周一不干了,周二会怎样,之后的那个季度又会怎样。
在你自己招来的小团队里,答案通常取决于某一个人的名字。早期团队天然会把知识集中:一个人负责热路径,另一个人负责连接,路线图则悄悄围着还在的人重新排列。在与伙伴合作的安排里,答案取决于那边是不是不止一个工程师读过代码,以及你的合同里有没有这么写。
两种结构本身都不安全。伙伴那边只安排一个工程师负责你的项目,风险敞口与一个两人内部团队完全一样,而两种情况下的防御手段也完全相同:知识在产生的当下就写下来,而不是事后再拼回去。
两条路都适用的验收测试:找一个从没见过这套系统的工程师,给他文档和一台干净机器,让他在测试环境里把终端跑起来并下一笔单。凡是他必须去问活人的地方,都是你还没拥有的知识。
「交接」这个词盖住了两件很不一样的事。一件是文件的转移。另一件是能力的转移——在没有原班人马的情况下继续走下去的能力,而只有第二件值得花钱买。
把第二件事写进项目范围,写成一份实物清单,每一项都附一个验收测试。一份合理的清单大致是这样:
从未演练过的交接是一份计划,不是一件交付物。演练要放在开发中途,而不是最后一张发票之后;演练本身很简单:让你的工程师部署一次变更再回滚,写这套系统的人在旁边看着。
所有权和交接是两个问题,它在开工之前就写进合同定下来,而不是到最后才发现。我们自己的答案就是一句话,而且在任何文档的任何版本里,我们都不把它缩短。
客户拥有产品与代码的全部所有权,我们的可复用组件除外。这个例外,是跟任何一家伙伴——包括我们——都要仔细读的部分:问清楚可复用组件都是哪些、你在什么条件下可以继续使用它们、系统在不依赖任何你自己重建不了的东西时能不能构建出来,以及双方停止合作之后这些组件会怎样。
这个问题通常被提成非此即彼——要么自己招一支团队,要么把整件事交给别人。实际上多数项目都落在两极之间,而且随着系统成熟,位置是允许移动的。
三种形式:全包交付、专属团队,或把工程师嵌入你的团队。我们自己这一侧就是这么描述的,而三者之间的区别不在发票——在于计划由谁握着、优先级由谁握着、结果由谁负责。
最后这一点,把最初的问题化掉了大半。伙伴这条路最好的走法,是从一开始就为你自己的团队做打算:你是对着一套已经存在的系统去招人,面试问什么由候选人将来要维护的代码来决定,而新人读到的第一份东西是决策记录,不是一个空仓库。
在这个决定里,费率对比是最没用的数字,因为两条路的计价单位根本不同。把两份清单并排放好,老老实实各算一遍账。
自招这条路向你收取的是:
伙伴这条路向你收取的是:
然后把退出也算进账,因为两条路都有退出。自招这条路的收尾是裁减你亲手建起来的团队,知识装在那些脑袋里一起走掉。伙伴这条路的收尾是一次交接,演练过或者没演练过,而这两种结局之间的距离,就是这条路的风险。
签字之前,把两个选项都放进同一个问题里过一遍:如果这件事周五停了,周一我们手里还剩什么。答案要用实物来回答——代码仓库、可复现的环境、文档,以及能凭这些把系统重建起来的人——因为意愿撑不过一次离职,实物可以。
amBrain 可以公开证实的内容:我们自 2019 年起在亚美尼亚埃里温做软件,热路径用 Rust 编写;我们构建了 Spectre Trade 交易终端;我们构建的一个迷你交易所在 MOEX 托管机房的生产环境中运行。如果你正在为自己的终端权衡自招还是找伙伴,把上面那份交接清单带进第一次谈话,让坐在对面的人——也包括我们——逐条回答。
带上您当前的架构和让您担心的故障场景,我们用半小时一起梳理。