周一早上,孙姐在群里发了份文档,把联合开发的项目安排说清楚了。对方是一家叫华信软件的传统企业服务公司,做政务系统出身,最近接了智慧园区项目,把其中的用户移动端分包给了蔚蓝科技。华信负责后端接口和部分核心业务逻辑,蔚蓝负责前端和用户体验。两边需要在两周内完成接口联调和技术方案的统一。
沈瑶看了文档之后给吉彤发了一条私信:下午两点去华信开第一次对接会,咱俩一起去。带个本子就行。
吉彤回了个,然后翻出华信那边发来的接口文档预览。他扫了几页,眉头渐渐皱起来。
文档是word格式,排版粗糙,没有数据字典,没有异常码定义,每个接口的返回字段下面只有一行简略的中文描述。有一个用户状态字段,只写了返回用户当前状态,没列状态码清单。另一个涉及权限的接口,返回值类型标注为object,具体结构什么样完全没有说明。
他给沈瑶发消息:他们的文档有点粗糙啊,很多字段没有明确定义。
沈瑶回了个无奈的表情:看到了吧。孙姐上周说的习惯就好,指的就是这个。华信那边做开发的大概率全是男的,技术老员工居多,文档习惯就这样。咱们下午去主要是把接口契约对齐,每一字段当场问清楚,回来我们自己补文档。
下午一点四十五分,吉彤和沈瑶打车去了华信软件的办公楼。那是一栋九十年代风格的老写字楼,电梯间铺着米黄色瓷砖,楼层指示灯是红色的LEd数字。九楼走廊的灯管有一根在闪,像某种不稳定的信号。
会议室的门虚掩着,里面传来男人的说话声。沈瑶敲了两下门推门进去,吉彤跟在她身后。
会议室里坐了四个人,全是男性。最靠近投影幕的是一个头发微秃的中年男人,穿着皱巴巴的深蓝polo衫,面前的笔记本电脑边缘贴着两枚褪色的企业贴纸。他旁边坐了两个年轻些的,一个戴黑框眼镜,一个低头刷手机。靠门口还坐着一个西装革履的,看起来像是项目经理,面前摊着一份打印好的议程表。
蔚蓝科技的沈瑶是吧?穿polo衫的站起来伸手,我姓刘,华信技术部负责后端架构的。这位是小张和小王,接口开发的。那边是陈经理,项目统筹。
沈瑶一一握了手,然后侧身介绍吉彤:这是我们前端开发吉彤,负责这次联调的主要对接。
吉彤跟几个人依次握了手。刘师傅的手掌很厚,握得用力,嘴里说了句年轻小伙子啊,不错。西装陈经理则只是点了点头,目光在吉彤身上停了一下,又落回议程表上。
会议开始的前二十分钟还算顺利。刘师傅打开一份ppt,大致讲了后端的整体设计和各模块的职责划分。他的语速很快,偶尔夹杂一些缩写词——b端这边咱们用RbAc控权,统一走Jwt,refresh机制你们前端配合一下。吉彤一边记一边在心里补全这些术语的含义。
沈瑶坐在吉彤旁边,偶尔在笔记本上画几笔,没有打断刘师傅的讲述。
转折出现在接口细节讨论环节。沈瑶翻开自己打印的接口清单,指着一个用户信息查询的接口问:刘师傅,这个接口的返回字段里,角色列表这一项的具体结构是什么样的?文档里只写了,没有说明每个对象的键名和类型。
刘师傅愣了一下,转头看向旁边的小张:这个接口谁写的?
小张推了推黑框眼镜:我写的。角色列表那边就是个普通的对象数组,键名就id和name。
有嵌套吗?角色如果有子权限呢?
没有,暂时没做那么复杂。
沈瑶记下来,又问:那错误码这边呢?文档里没有列出各个错误码对应的含义,前端这边需要根据错误码给用户做提示,缺了这个到时候联调的时候可能要来回确认。
刘师傅表情微微僵了一下。他旁边刷手机的小王抬起头来,语气有点不耐烦:错误码到时候接口调试阶段自然会调通的,前端自己看日志不就行了?
沈瑶不慌不忙:因为移动端用户场景不一样,如果接口返回错误码,我们需要把用户能看懂的中文提示映射上去。比如token过期权限不足在界面上的反馈是两种完全不同的呈现方式,提前定好可以省掉后面的返工。
小王张了张嘴,似乎想说什么,被刘师傅抬手拦住了:行,回头我把错误码表补充一版给你们。
吉彤坐在旁边没有说话,但他注意到刘师傅补充完回头补之后,并没有在电脑上做任何标记。他想起孙姐之前说过的那句沟通清楚再动手,返工反而少,又看了看华信这边桌面上那份只写了接口路径和字段名的word文档,忽然觉得这句话的分量不只是说说而已。
会议进行到后半程时,吉彤开口了。他问的是验证码发送接口的限流策略——如果同一手机号短时间内多次请求验证码,后端怎么处理。刘师傅说限流我们做了,每分钟三次,吉彤追问超过限流之后接口返回什么状态码,前端好做防抖提示,刘师傅迟疑了两秒,说这个我们再看一下。
沈瑶侧头看了吉彤一眼,嘴角微微向上弯了一下。
会议最终在两个半小时后结束。刘师傅合上电脑时用力搓了把脸:行,今天就到这儿。接口清单上的疑问你们整理一下发邮件给小张,我们逐条回复。
走出华信办公楼的时候,沈瑶长长舒了一口气:每次来都这样。
什么?
就是那种感觉。沈瑶边走边说,他们技术能力不差的,但总是不愿意把东西写清楚,觉得到了调试的时候自然就通了。可一旦到了调试阶段,每一处不清楚的地方都得来回问,一个简单的接口联调能拖出三倍的时间。
吉彤点点头。他想起自己在恒远科技的时候,周围也几乎全是这种风格——文档能省则省,口头沟通靠吼,出了问题再补锅。他当时觉得所有人都这样,那就是正常的。
可刚才在华信会议室里,他坐在沈瑶旁边听她一遍遍地追问字段定义和错误码映射,忽然从第三方的视角看清楚了那种到底意味着什么——意味着把时间花在了后面补救上,而前面该省的时间并没有真正省下来。
他们打车回公司,路上沈瑶靠在椅背上闭了一会儿眼,忽然没头没脑地说了一句:吉彤,你刚才问限流那块问得很好。这种边界情况他们经常漏,不问的话上线之前才暴露,那时候压力就大了。
我之前公司也经常漏。
所以你问得特别自然。沈瑶睁开眼睛笑了笑,但你刚才问的时候语气挺淡定的,没有不耐烦。
吉彤沉默了两秒。他意识到沈瑶在说的是什么——华信那边的人不耐烦,但沈瑶没有。刘师傅虽然没在电脑上做标记,但沈瑶全程记了四页笔记。散会时她还语气平缓地说了一句大家辛苦了,咱们后面随时沟通。
我其实挺佩服你们这种耐心的。吉彤说。
练出来的。沈瑶又闭上眼睛,孙姐当年带我的时候说过一句话——别人不写清楚,你就去问清楚,问清楚比发脾气有用。我头一年一直拿这句话逼自己。
出租车拐上高架,窗外快速掠过一片灰蓝色的城市天际线。吉彤靠在另一侧的车窗边,脑子里开始整理今天获取的接口信息,默默在心理补了一份待确认问题清单。
回到公司已经快五点半了。沈瑶把笔记本放在工位上就去茶水间倒水,吉彤坐下来打开电脑,开始把下午的对接内容梳理成邮件。写到三分之一处,赵宇从旁边探头过来:回来了?华信那边怎么样?
还行,就是文档有点糙。
我听说华信全是男的?
吉彤想了想下午会议室里的四个人,点了点头。
赵宇无声地比了个的口型,缩回自己的工位继续写代码了。
吉彤把邮件写到一半的时候,沈瑶端着两杯水走过来,在他桌边放了其中一杯:别写太晚,明天还有一天可以整理。对了,刚才跟林悦提了一嘴华信那边的对接情况,她说这周需求上可能要做一些小调整,把错误码映射的UI状态提前加进去,你有个心理准备。
沈瑶端着水走回自己工位了。吉彤喝了口水,继续写邮件。茶水间那边传来谁在打电话的声音,声音轻柔但条理清晰,像是在跟某位客户说明时间节点。
他把最后一句话写完,检查了一遍错别字,点击发送。邮件抄送了孙姐、沈瑶、林悦,以及华信那边的小张。
五分钟后,孙姐在群里回了一句:辛苦了,周五之前我会跟华信陈经理通个电话。
吉彤关了电脑。今天没有红豆汤,也不到茶歇时间,办公室只亮着几盏灯,偶尔传来键盘的敲击声。他站起来伸了个腰,经过沈瑶工位时看见她正在屏幕上画一张流程图——接口联调的时序图,每个节点的超时处理和重试策略都用橙色字标注了。
走了啊,明天见。
明天见。沈瑶头也没抬,但左手朝他的方向挥了挥。
吉彤走进电梯,手指无意识地按了一层。手机震了一下,是赵宇发的私信:兄弟,华信那边不会拿我们当乙方使唤吧?我听说那种老牌公司对接外部供应商的时候特别摆架子。
吉彤盯着消息看了几秒,打字回复:他们技术确实一般,但态度还行。就是做事方式跟咱们不一样。
怎么个不一样?
电梯到了底层。吉彤走出去,一边穿过大堂一边打字:咱们花时间把事想清楚再动手,他们边干边想。过去我觉得后者是正常的,现在觉得前者才是。
赵宇回了一串省略号,然后又补了一条:你变了。
吉彤笑了一下,把手机揣回兜里。初夏的风从旋转门外灌进来,带着街道上烤串摊的烟火气。他推开玻璃门走出去,混进晚高峰的人群里,脚步比平时轻快了一些。