她忽然想逗逗他。
“那咖啡机那个呢?”她问。
陈序愣了一下。
许知然歪着头看他,眼里带着笑:“咖啡机美式太苦,那个bug你怎么分析的?”
陈序沉默了两秒,然后嘴角微微扬起。
那个弧度很小,但许知然看见了。这是她第一次看见他笑,不是嘴角动一下的那种,是真的、发自内心的笑。
“那个我无能为力。”他说,“咖啡机不归我管,行政不会听我的。”
许知然点点头,故意叹口气:“那算了,以后继续喝苦的。”
陈序看着她,那个笑容还在嘴角,淡,但是真的。
“不用。”他说,“咖啡机我管不了,但我可以每天给你带拿铁。”
许知然心跳漏了一拍。
她看着他,他也看着她。
周围还有键盘声,还有同事说话的声音,还有远处打印机工作的嗡嗡声。但这些声音好像都隔得很远,远到听不清。
“每天?”她问。
陈序点点头,目光没躲开:“每天。”
许知然回到工位的时候,苏桐已经等在那儿了。
“怎么样?”苏桐凑过来,一脸八卦。
许知然没说话,但嘴角的笑压都压不住。
苏桐盯着她看了三秒,然后长长地哦了一声。
“完了完了,”苏桐靠在椅背上,夸张地捂着脸,“你沦陷了。你彻底沦陷了。”
许知然还是没说话,但脸红了。
苏桐从指缝里看她,问:“他说什么了?”
许知然抿了抿嘴,声音小小的:“他说明天还给我带咖啡。”
苏桐翻了个白眼。
“你就为了一杯咖啡?”她无语,“许知然,你清醒一点,咖啡能收买你吗?”
许知然想了想,认真地说:“不是咖啡。”
苏桐看着她。
许知然的目光越过电脑屏幕,落在开发组的方向。403工位被挡住了,看不见,但她知道他在那里。
“是他愿意每天给我带。”她说。
苏桐愣了一下,然后笑了。
“行吧,”她拍拍许知然的肩,“你完了,我也救不了你了。”
下午,项目群里弹出一条通知。
【紧急通知】因项目上线在即,即日起至周五,全员进入冲刺状态。每天需安排两人值班至22:00,负责线上监控和紧急问题处理。值班表稍后下发。
五分钟后,值班表出来了。
许知然点开,找到自己的名字。
周一值班:许知然。
搭档:陈序。
她盯着那行字,心跳忽然快起来。
苏桐在旁边探头看了一眼,然后意味深长地笑了。
“今晚?”她压低声音,“就你们两个?”
许知然没说话,但手指在桌面上轻轻敲了两下。
晚上七点,办公室里的人陆续走了。
窗外的天色暗下来,灯光一盏一盏亮起。许知然坐在工位前,盯着屏幕,但其实什么也没看进去。
她听见开发组那边有脚步声,然后是陈序的声音。
“走吧,吃饭。”
她抬起头,看见他站在过道里,手里拿着手机,表情很平静,像只是随口一问。
许知然站起来,拿上手机,跟他一起往外走。
电梯里只有他们两个人。数字一格一格往下跳,没人说话。
但许知然觉得,这种沉默和以前不一样了。
晚上九点五十五分,办公室里的灯已经灭了一半。
许知然盯着屏幕上的数据报表,眼睛有点酸。她揉了揉眉心,刚想站起来倒杯水,肚子突然发出一声响。
在安静到能听见中央空调嗡嗡声的办公室里,那声响格外清晰。
她下意识捂住肚子,抬头看向开发组那边。
陈序正对着屏幕,手指在键盘上敲着,像是没听见。但许知然注意到,他的动作顿了一下,然后继续敲,节奏比刚才慢了一点。
又过了十分钟,陈序站起来,走到她工位旁边。
“饿了?”他问。
许知然有点不好意思:“中午吃太早了。”
陈序看了眼时间,十点零五分。他拿出手机,划了几下,递到她面前:“想吃什么?”
许知然看着屏幕上的外卖界面,愣了一下:“你请客?”
陈序没回答,但手机又往她面前递了递。
许知然随便点了一家简餐,把手机还给他:“就这个吧。”
陈序下单,然后说:“等着。”
二十分钟后,外卖送到。陈序下楼去拿,回来时手里提着一个袋子,放到许知然桌上。
许知然打开一看,愣住了。
一份饭。只有一份。
她抬起头看陈序,他已经回到自己工位,正对着屏幕,像是要继续工作。
“陈序。”她叫他。
他回头。
“你点的是一份?”
陈序点点头。
“你不吃?”
“我不饿。”他说。
许知然盯着他看了两秒,然后站起身,端着饭走到他工位旁边,把饭往他桌上一放。
“一起吃。”
陈序摇头:“你吃吧,我真不饿。”
许知然已经把饭盒打开了。一份简餐,上面是菜,下面是米饭,中间用隔板分开。她拿起筷子,夹了一块肉,递到他面前。
“张嘴。”
陈序愣住了。
他看着那筷子肉,又看着她,耳尖开始泛红。
许知然的手悬在半空,没动。
僵持了三秒,陈序低头,把那块肉吃了。
许知然满意地收回筷子,自己夹了一口菜,就着饭盒吃。吃完一口,她又夹了一筷子菜,递给他。
这次陈序没等,直接张嘴接了。
两人就这样,你一口我一口,分完了一盒饭。中间偶尔筷子碰到一起,偶尔手指碰到一起,每一次触碰都让陈序的耳朵更红一点。
吃完最后一口,许知然把饭盒盖上,扔进垃圾桶。回来时,陈序已经泡了两杯茶,一杯放在她平时坐的位置上。
许知然坐下,捧着茶杯,忽然问:“你大学的时候,也经常这样加班吗?”
陈序想了想:“看情况。项目紧的时候会。”
“在实验室?”
“嗯。研究生的时候跟着导师做项目,经常熬夜。”他顿了顿,“那时候觉得写代码挺有意思的,一坐就是一晚上,不觉得累。”
许知然侧头看他:“为什么学编程?”
陈序沉默了几秒,然后说:“喜欢吧。喜欢那种创造的感觉。一行代码写下去,跑起来,功能就有了。能解决问题,能让人用得上。”
他说这些话的时候,语气很平,但许知然听出了认真。
“我学人机交互也是。”她说,“想做出温暖的产品。不是那种冷冰冰的功能堆砌,是真的能让人用着舒服、用着开心的东西。”
陈序转头看她。
“你做的那些bug,就挺温暖的。”他说。
许知然愣了一下:“bug还有温暖的?”
陈序点头:“你提的bug不是找茬。你是真的在想,用户会怎么用,会在什么场景下用,会有什么感受。字体锐利那个,我调完之后自己用了两天,确实舒服。”
许知然看着他,忽然不知道该说什么。
他继续说:“以前我觉得,产品体验官就是找麻烦的。后来发现,不是。”
“是什么?”
陈序看着她,目光很专注:“是把代码变成产品的人。”
许知然心跳漏了一拍。
她垂下眼,假装喝茶,但茶杯已经空了。她放下杯子,转移话题:“你代码写那么好,没想过自己创业?”
陈序摇头。
“为什么?”
“我只会写代码,不懂产品。”他说。
许知然正要开口,他又补了一句。
“但认识你之后,我开始懂一点了。”
空气突然安静了。
许知然看着他,他也看着她。办公室的灯光很暗,只有他们头顶的几盏还亮着。远处有服务器的嗡嗡声,近处有她自己的心跳声,快得离谱。
她张了张嘴,想说点什么,但不知道该说什么。
陈序也没说话,就那么看着她。
时间好像过了很久,又好像只过了几秒。
然后陈序的手机响了。
刺耳的铃声划破安静。他低头一看,表情立刻变了。
“服务器报警。”他站起来,快步走向自己工位,“线上出问题了。”
许知然跟着过去。陈序已经坐在电脑前,手指飞快地敲着键盘,屏幕上闪过一串串她看不懂的命令。
她站在旁边,安静地看着他忙。
十分钟后,陈序松了口气,靠进椅背里。
“解决了。”他说。
许知然点点头,看了眼时间,快十二点了。
“回去吧。”她说,“明天还要上班。”
陈序站起来,收拾东西。两人一起走出办公室,锁门,等电梯。
电梯里还是只有他们两个人。数字一格一格往下跳,和几个小时后前一模一样。
但又不一样。
许知然看着电梯门上倒映的他的影子,想起刚才那句话。
认识你之后,我开始懂一点了。
电梯到了一楼。门打开,冷风灌进来。
许知然走出去,陈序跟在后面。走到大楼门口,她忽然停下脚步,转身看他。
“陈序。”
他看着她。
许知然想说什么,但话到嘴边又咽回去了。最后只是笑了笑:“明天见。”
陈序点点头:“明天见。”
许知然转身往地铁站走,走出几步,回头看了一眼。
他还站在大楼门口,看着她的方向。
第二天早上,许知然到公司的时候,发现气氛不太对。
茶水间里有人在小声议论,看见她进来就停了。电梯里有人看她,眼神怪怪的。
她走到工位,刚坐下,苏桐就凑过来了。
“听说了吗?”苏桐压低声音。
许知然摇头:“什么?”
苏桐看了眼四周,声音压得更低:“新项目要抽调一个产品体验官,你是候选人之一。”
许知然愣了一下。
“调走?”她问,“调去哪儿?”
“新成立的项目组,要做个新产品,需要从各部门抽人。”苏桐说,“听说那边老大看过你的体验报告,点名要你。”
许知然没说话。
她抬起头,看向开发组的方向。403工位被挡住了,看不见。
但苏桐看见了她的目光。
“这下麻烦了。”苏桐叹了口气。
周三上午,许知然的屏幕右下角弹出一封邮件。
发件人:产品总监李姐。标题:关于新项目人员征集的通知。
她点开,快速扫了一遍。公司要成立一个新项目组,做一款面向年轻用户的社交产品,需要从各部门抽调人手。产品体验官这边,有一个名额。
邮件最后附了候选人名单。一共五个人,她排在第三个。
许知然盯着自己的名字看了几秒,然后关掉邮件,继续工作。
对面开发组,陈序也收到了那封邮件。
他本来没在意。新项目征集,每年都有几次,跟他没关系。他是后端开发,手里这个项目还有一堆事要做。
他随手往下滑,滑到候选人名单。
许知然。
他的手指停在鼠标上。
旁边何照凑过来:“陈哥,那个接口问题你看一下,我这边……”
他说了一半,发现陈序没反应。
“陈哥?”
陈序还是没动,盯着屏幕。
何照顺着他的目光看过去,看见了那份名单,看见了“许知然”三个字。他愣了一下,然后笑了。
“怎么,”他压低声音,“舍不得许老师?”
陈序没说话,但握着鼠标的手指紧了一下。
何照拍拍他的肩:“别紧张,就是候选人,不一定选上。”
陈序还是没说话。
下午两点,全员会议。
产品总监李姐主持会议,介绍新项目的整体规划。屏幕上放着PPT,她讲得眉飞色舞,下面的人听得昏昏欲睡。
许知然坐在第三排,手里转着笔,目光落在讲台上,但其实什么也没听进去。
她想起上午那份名单,想起自己名字后面的括号里写着“重点考虑”。苏桐打听来的消息说,那边老大看过她之前写的几份体验报告,点名要她。
她不知道这是什么感觉。新项目,新机会,按理说应该高兴。但她脑子里冒出来的第一个念头是——
走了之后,每天一杯的拿铁还有吗?
她被自己这个念头吓了一跳。
讲台上,李姐讲完了项目规划,进入问答环节。
“大家有什么问题?”
安静了几秒。有人问预算,有人问 timeline,有人问人员调配的具体流程。
李姐一一回答。
然后后排有人举手。
陈序。
许知然回过头,看见他站起来,手里没拿话筒,但声音足够清晰。
“新项目调人,是强制性的吗?”
全场安静了一秒。
所有人都转过头看他。有人脸上带着疑惑,有人已经开始憋笑。
李姐也愣了,话筒举到一半,停在半空。
“小陈,”她反应过来,语气有点意外,“你对新项目感兴趣?”
陈序站在那儿,表情很平静,但许知然看见他的耳朵红了。
他沉默了两秒,然后说:“不是。”
更安静了。
李姐等着他的下文。
陈序憋了半天,终于憋出一句完整的话:“我是觉得,现在这个项目也需要人。”
有人没忍住,噗地笑出声。
李姐也笑了,但笑得很有涵养:“小陈,你放心,调人是循序渐进的过程,不会影响现有项目的进度。”
陈序点点头,坐下。
旁边何照低着头,肩膀一抖一抖的。
会后,茶水间成了八卦中心。
何照笑得直不起腰,靠在墙上,声音都劈了:“陈哥,你为了留人,连这种问题都问得出口?”
陈序站在咖啡机前,背对着他,不接话。
何照笑够了,凑过去,压低声音:“你是怕许老师走了吧?”
陈序的动作顿了一下。咖啡流出来,差点满出来,他赶紧关掉。
何照看着他的反应,笑得更欢了。
“行了行了,我不说了。”他拍拍陈序的肩,“不过你刚才那个问题,李姐肯定懂了,全场都懂了。”
陈序端着咖啡往外走,耳朵红得发亮。
许知然在工位上看到了群消息。
有人把会上的事截图发了出来,配文:陈序今天怎么了?问那种问题?
下面一排评论。
“舍不得许老师呗。”
“这还不明显?”
“我第一次见陈序在会议上举手,居然是为了问这个。”
“公费恋爱实锤了。”
许知然看着那些评论,心里又甜又酸。
甜的是,他当着那么多人的面,问出那样的问题。酸的的是,如果她真的走了,那每天一杯的拿铁,每天午休时的几分钟相处,每天bug系统里的那些“收到”,都会变成回忆。
她关掉群聊,继续工作。
下班前,手机震了。
陈序的私聊消息。
陈序:你会走吗?
许知然盯着这三个字,心跳快了一拍。
她想了很多种回复。说“还没决定”,说“看公司安排”,说“你希望我走吗”。
但最后她只回了四个字:还没决定。
发送。
对面一直显示“对方正在输入”。
许知然等着。一分钟,两分钟,三分钟。
消息终于弹出来。
陈序:能不能……不走?
五个字。后面跟着省略号。
许知然看着这五个字,眼眶有点热。
她想起他刚才在全会上站起来的样子,想起他憋了半天说出的那句话,想起他被何照笑得耳朵通红还要端着咖啡假装没事。
她想起每天早上一杯的拿铁,想起他说“你的bug我接”,想起他写的那个小工具,想起他说的“认识你之后,我开始懂一点了”。
她想了很久,然后回了一条消息。
许知然:我还没决定。但如果要走,我会好好告别。
陈序没有再回。
第二天早上,许知然到公司后,打开bug系统,点新建。
【bug编号】1085
【严重级别】P3
【bug标题】关于现有项目的若干体验优化建议
【bug描述】整理了入职以来对这个项目的观察,共23条优化建议。包括交互细节、视觉呈现、文案表达、功能逻辑等几个方面。希望能对后续迭代有帮助。
附件里是一份二十多页的文档,图文并茂,每一条建议都有截图、有分析、有改进方案。
她盯着屏幕看了几秒,然后点了提交。
处理人默认分配:后端开发组,陈序。
对面开发组,陈序打开这个bug,看到了那份文档。
他一条一条往下翻。
第一条,首页按钮的反馈延迟已经优化过,但建议增加触感反馈。
第二条,购物车页面的并发问题已修复,但建议增加状态提示。
第三条,个人中心的字体调整后效果不错,建议推广到其他页面。
……
他翻到最后一页。
第二十三条,建议项目组建立一个体验优化备忘录,记录每次迭代背后的用户洞察。这样即使有人离开,思考也能留下。
陈序看着这一条,手指停在鼠标上。
她已经在准备告别了。
周五下午,bug系统弹出一条通知。
陈序正在调试一段代码,余光瞥见那个小红点,手比脑子先动,点了进去。
【bug编号】1092
【严重级别】P3
【提交人】许知然
【bug标题】综合建议:关于星辰App现有功能的若干体验优化方向(共27条)
【附言】可能是我在这个项目提的最后一个bug,希望能对后续优化有帮助。
陈序盯着那行附言,手指停在鼠标上。
最后一个bug。
他点开附件,是一份文档,标题写着“星辰App体验优化备忘录”。文档很长,他往下滑,页数显示:共12页。
他开始看。
第一条,首页。建议优化下拉刷新的触感反馈,当前震感偏强,长时间使用手指会麻。附了不同场景下的使用时长数据,平均每个用户每天下拉首页11.3次。
第二条,购物车。建议增加批量操作时的状态提示,当前选中商品后没有任何视觉反馈,用户容易忘记自己选过什么。附了用户调研截图,67%的人表示“有时候会选重复”。
第三条,个人中心。字体调整后效果很好,建议将同样的逻辑应用到所有列表页。附了四个页面的对比截图,圈出当前不一致的地方。
陈序一条一条往下看。
每一条都有详细的说明,有数据支撑,有改进方案。有些是她之前提过的bug的延伸,有些是新的观察,有些他甚至不知道她什么时候做的调研。
第四条,第五条,第六条……
第十条,建议优化夜间模式的对比度。当前设置在某些机型上偏蓝,长时间阅读眼睛会累。附了七款主流机型的屏幕参数对比。
第十五条,建议在结算页面增加“再次购买”的快捷入口,复购用户占比38%,当前需要重新搜索商品。附了复购用户的路径分析图。
第二十条,建议把404页面的文案改得友好一点,当前“页面丢失”四个字太生硬,用户会以为是自己的错。附了五个竞品的404文案截图,圈出最受欢迎的几句。
他翻到最后一页。
第二十七条,建议项目组能有一个固定的bug复现搭档。因为有些问题,只有两个人一起才能找到根源,一个人操作,一个人看日志,一个人还原场景,一个人分析数据。这种配合,比一个人埋头查效率高很多。
最后一行字:这段日子,谢谢搭档。
没有指名道姓。
但陈序知道说的是谁。
他盯着那行字,盯着那个“搭档”,一动不动。
办公室里很吵。有人在讨论需求,有人在打电话,何照在旁边啃苹果,咔嚓咔嚓的声音很响。但这些声音好像都隔得很远,远得听不清。
他脑子里只有那行字。
这段日子,谢谢搭档。
何照啃完苹果,把核扔进垃圾桶,回头看见陈序盯着屏幕发呆。
“陈哥?”他叫了一声。
没反应。
何照凑过去,看见屏幕上那份文档,看见了最后那行字。他愣了一下,然后默默退回去,没再说话。
陈序坐在那儿,盯着那行字,看了很久很久。
久到何照以为他要石化了,他才动了一下。
他关掉文档,关掉bug系统,打开私聊窗口。
陈序:晚上有空吗?
发送。
等了几秒,那边回:有。
陈序:最后一个bug,我想当面和你确认。
那边沉默了一会儿。
然后回:好。几点?哪里?
陈序:七点。公司露台。
那边回:好。
许知然看着聊天窗口,心跳得很快。
最后一个bug。当面确认。公司露台。
她不是三岁小孩,知道这意味着什么。
苏桐从旁边探过头来:“看什么呢,脸这么红?”
许知然下意识关掉窗口,但已经来不及了。苏桐眼尖,看见了那几句对话。
“哟,”她拖长声音,“最后一个bug?当面确认?公司露台?”
许知然没说话。
苏桐笑得很暧昧:“这个bug,和工作有关吗?”
许知然还是没说话,但耳根红了。
苏桐拍拍她的肩:“去吧去吧,记得回来汇报。”
七点,许知然准时推开露台的门。
傍晚的风灌进来,带着初秋的凉意。露台上没有人,她往里走了几步,才看见栏杆边站着一个人。
陈序背对着她,穿着件深灰色的外套,手插在兜里,望着远处的晚霞。
她走过去,在他旁边站定。
“陈工。”
陈序转过身,看着她。
许知然愣了一下。
他的眼神和平时很不一样。平时他看她,总是躲躲闪闪的,看一眼就移开,假装在看别的地方。现在他没有躲,就那么直直地看着她,目光很深,像是有很多话想说,又不知道从哪一句开始。
晚霞在他身后铺开,橘红色的光落在他肩上。
“那个bug,”他开口,声音比平时低一点,“我看完了。”
许知然点点头。
“27条。”他说,“每一条都看了。”
许知然又点点头。
陈序沉默了几秒,然后说:“不是最后一个。”
许知然愣了一下。
他看着她的眼睛,一字一字说清楚:“你还可以提很多bug。第28条,第29条,第30条。提到你觉得这个项目完美为止。”
许知然没说话。
他继续说:“固定的bug复现搭档,不只是这段日子。以后也可以有。”
风从两人之间穿过,带着远处街道的喧嚣。但露台上很安静,安静得能听见彼此的呼吸。
许知然看着他,忽然问:“你叫我来,就是为了说这个?”
陈序沉默了几秒。
然后他说:“不是。”
他往前走了一步,离她更近一点。近到能看清她睫毛的弧度,近到她身上的香味飘过来,很淡,但他闻到了。
“我叫你来,是想问你一个问题。”
许知然看着他,心跳开始加速。
陈序深吸一口气,然后问——
手机响了。
刺耳的铃声划破安静。许知然的手机,在她口袋里疯狂震动。
她愣了一下,想挂掉,但看见来电显示,是苏桐。
她犹豫了一秒,还是接了。
“知然!”苏桐的声音从话筒里传来,又急又快,“李姐刚发通知,新项目的最终人选定了,明天公布!听说……”
后面的话,许知然没听清。
她抬起头,看着陈序。他站在那儿,离她一步之遥,等着她打完电话。
但她知道,刚才那个问题,他可能不会再问第二遍了。
许知然挂掉电话,把手机关了静音,塞回口袋里。
露台上重新安静下来。远处的晚霞已经暗下去,天边只剩一抹橘红色的余晖。风比刚才大了一点,吹起她的头发,几缕发丝拂过脸颊。
她转回头,看着陈序。
他站在原地,还是那个姿势,手插在兜里,目光落在她脸上。被电话打断之后,他好像不知道该从哪儿接上了。
许知然往前走了一步,离他更近一点,笑着问:“陈工,什么bug这么急,非要当面说?”
陈序看着她,张了张嘴,又闭上了。
那个表情太明显了——想说什么,又不知道怎么说;准备了一肚子话,临到嘴边全忘了。
许知然也不催,就安静地等着。
风从两人之间穿过,带着远处街道的车流声。
陈序憋了半天,终于开口:“你那个建议27,我看了。”
许知然嗯了一声。
他又说:“你说的那个固定的bug复现搭档……”
他说了一半,停住了。
许知然歪着头看他:“嗯?”
陈序深吸一口气:“是我吗?”
许知然笑了。她看着他,眼睛亮亮的:“你觉得呢?”
陈序没说话。但他的耳朵红了,从耳垂开始,一点一点蔓延到耳廓。
许知然等了几秒,见他又憋住了,正要开口,他却突然说话了。
“我发现了一个bug。”
他的声音比平时低一点,但很认真。
许知然愣了一下:“什么bug?”
陈序看着她,眼神很专注,像是在复现一个复杂的问题:“在我自己的系统里。”
许知然没说话,等着他继续。
“这个bug的表现是,”他顿了顿,像是在组织语言,“当特定用户不在身边的时候,系统反应迟钝。注意力无法集中。代码质量下降。写出来的东西,自己都不想看第二遍。”
许知然听着他一本正经地用技术语言描述,心里又好笑又感动。
“我想修复这个bug,”陈序继续说,眉头微微皱着,“但不知道从何下手。没有报错信息,没有崩溃日志,找不到根因。”
他说完了,看着她,像是在等她给个解决方案。
许知然忍着笑,故意问:“那这个特定用户是谁?”
陈序看着她,目光很深。
“是你。”他说,“许知然,是你。”
晚风从两人之间穿过,吹起她的头发。许知然站在原地,看着他,心跳漏了一拍。
这是他第一次,把话说得这么清楚。
不是“你的bug我接”,不是“可以每天给你带拿铁”,不是“认识你之后我开始懂一点了”。是直接说,是你,让我注意力无法集中,让我代码质量下降,让我找不到根因。
她看着他,没说话。
陈序等了几秒,脸上的表情开始变了。从认真,到紧张,到慌张。
“你……”他张了张嘴,“你怎么不说话?”
许知然还是没说话,只是歪着头看他。
陈序的耳朵红透了。他开始语无伦次:“我知道这个bug描述不够清晰,没有复现步骤,没有稳定复现的概率。但它是真实存在的。我试过很多次,每次都是同样的表现。你能不能……”
他说不下去了。
许知然看着他着急的样子,终于没忍住,笑了。
陈序愣住。
许知然走近一步,离他只有半步远。她抬起头,看着他的眼睛,声音里带着笑意:“陈工,你这个bug描述确实不够清晰。”
陈序张了张嘴,想说什么,又闭上了。