售前售后都得管的项目故事

我就是那条龙

第一季:先把告警接进来

“你们提供一条龙服务吗?”
“提供。我就是那条龙。”

一个项目,十段故事。
从那句“整体没问题”,到后来每一步怎样兑现。

从第1期开始

由多份项目素材脱敏重构为一个虚构项目。人物、机构、时间线、对话及部分情节经艺术加工,不对应单一真实项目。每季围绕一个项目展开,后续另起新季。

我就是那条龙 · 第一季 / 01

那句“没问题”,后来找上了我

一句轻松的承诺,在另一场会议上等着兑现。

“这条关联,之前不是说能自动做吗?”

客户把鼠标停在一条没有归属的告警上,没再往下翻。

实施工程师在另一端共享屏幕。他刚才已经演示了接入、查询和归并,轮到责任信息时,列表里空了一截。

“样本换了。”他说,“之前有对象标识,这一批只有名称。同一个名字能找到几个对象,直接选一个,负责人可能就错了。”

客户看向我:“那为什么前面没提?”

我打开方案。几条线画得很顺,告警接入,标准化,关联应用,再带出归属。旁边写着“自动关联”,没有写无法唯一匹配时会怎样。

我记得那次电话。

对方问,现有数据接过来,能不能直接关联。

我说:“整体没问题,字段再对一下。”

现在,问题落在后半句里。

那句话说出口时,我脑子里想的是:能力方向没问题,等拿到样本再确认具体条件。客户听到的却很可能是:这件事已经答应,只剩技术人员做一点配置。

两种理解,在电话里都不显得突兀。真正到要交东西的时候,差别才露出来。

我扫了一眼参会名单。销售同事也在,但这时请他解释当时的语境,只会把客户拉进我们内部的分工。工程师更不该替我解释。他拿到什么输入、做出什么结果,可以讲清楚;客户为什么形成这样的期待,得由我往前追。

客户等了一会儿,问:“今天能不能先告诉我,还有多少类似的?”

我把原本准备说的“这个比较特殊”收了回去。我们还没查其他来源,凭什么说特殊。会议剩下的时间不多,至少要先给出核对办法和反馈安排,不能拿一句技术上可以解决,换来下一次同样的追问。

项目经理开着会议记录,光标停在“待确认事项”下面。实施工程师没有继续解释,等我接话。

我负责这一带的技术工作。前期跟客户讲方案,后面实施有事,也会找到我。有人听完这种分工,问是不是一条龙。

我说是。

他问龙在哪里。

“我。”

那个时候,这个笑话还没那么具体。后来才知道,一条龙的意思,有时就是你半个月前说过的一句话,会在另一场会议上原样等你。

我请工程师先保留当前输入和结果,别急着改规则。

他刚才在聊天窗口里问过,能不能先按名称取第一条,至少页面不会空。

我回的是先别动。

空白难看,但至少说明我们不知道。随便选一个负责人,等人真的按这个结果去联系,错得会更具体。

“这批数据的对象标识,原来由哪个系统维护?”我问客户。

“可以找人看。”他说,“但是不是又要我们重新梳理一遍?”

他的语气并不重。我却知道,继续解释技术原理已经没用了。他问的是,为什么一项谈过的工作,到现场又成了他的任务。

“前面条件没说清,这一点我们补。”我说,“今天先把这条走通。现有字段能做什么,缺什么,分别需要谁确认。我来约相关的人,不让现场拿着一张空表到处找。”

项目经理终于敲下一行字,随后抬头问:“后面还有哪些结果依赖这张映射?”

专家接过话:“归属展示、相关告警查询,还有交接摘要。先别只补这一列。映射错了,后面看起来可能都有内容,但不一定是同一个对象。”

他一直没抢话。现在只用了两句,就把问题从页面拉回了数据。

客户说,可以请台账维护人员参加下一轮。但他还要知道,这会不会影响原计划。

我没有当场报日期。

“先确认缺口,再调整受影响的工作。能并行的照常做,不能做的明确告诉您。”

项目经理补充:“我会把等待条件和实施任务分开列,免得过两天大家看同一张计划,又在说不同的延误。”

会开到这里,页面仍然没变绿。但我们至少不再围着那块空白各说各话。

这件事要从第一次见面说起。

当时,客户运维负责人拿来的并不是一份详细需求。他说,告警太分散,值班人员每天在不同工具之间来回跳,准备把告警统一起来,再加一些智能分析。

销售同事问我带了哪些材料。

“平台介绍,告警案例,关联分析。”

“差不多。”他把电脑往我这边推了推,“你先讲。”

我已经打开第一页。客户却低头回了一条消息,然后说,先等一下,值班的人刚好有个问题,可以让他们过来。

来的是值班负责人。他没看平台图,先问:“以后看到一条告警,能不能知道该找谁?”

我原本准备讲的算法,还没找到出场机会。

值班负责人把手机放到桌上,屏幕朝下。他说刚结束一次交班,先前的事还有一部分没有说完,过一会儿可能得接电话。

我问能不能看看他们交班时怎么描述问题。他没有直接转发记录,只在白板上写了几个动作:看到提示,查对象,找相关人,说明现象,等回复。

“等回复时做什么?”

“看谁先回。有人让再查一项,就再查。”

这才是我们准备进入的工作环境。新平台再多一个入口,意味着值班人员多一个需要确认的信息来源。假如它说不清对象、时间和依据,应用团队还是会回头问,甚至要再问一句这个结论从哪里来的。

我请他先别评价我们能做多少,选一个最希望少绕路的环节。他想了想,指着“说明现象”:“起码别每换一个人,都像从头报案。”

我请他选一个最近处理起来费劲的情况。他描述了一次查询超时:告警陆续进来,值班人员先问应用,再问基础环境。几边都说自己看起来正常,等能确认接手的人,前面已经来回核对过几轮。

“不是没有工具。”他说,“是不知道哪些信息该放在一起看。现在谁熟悉系统,谁就快一点。”

客户运维负责人补了一句:“人不能一直靠记住这些事。”

我问他,几边都说正常时,通常由谁把事情接下去。

“看谁熟。”他说,“有时还是要找应用的人。但只给他发一条标题,对方也得重新问。”

“问什么?”

“什么时候开始,影响哪种请求,其他地方有没有异常。说一遍,换个人,再说一遍。”

客户运维负责人转过来,看着我:“所以我们要的不是再开一个查询页面。”

我把原本准备讲的功能记在一边,先问这轮建设准备改善哪段过程。如果只是统一入口,现有工具整合也许可以解决一部分;如果要让人更快形成判断,就要看信息是否足够、怎样对应,以及接手的人需要什么。

他问,那是不是前期得把所有系统关系都梳理完。

“不用一开始铺那么大。”我说,“先选一个使用任务,拿现有记录走通。走不通的地方,再分别看是数据缺、关系不清,还是工作交接的问题。”

销售同事在旁边补充,可以先安排小范围验证。

客户看了他一眼:“那你们别最后只拿一个演示来,说任务完成了。”

我答应先共同确认任务和判断办法。也请他帮忙约能说明数据的人一起参加,不能只让值班人员替所有接口和业务含义作决定。

这一步谈得不快。我们甚至还没讨论具体产品能力,但我终于知道后面需要把谁带进来。

中间休息时,销售同事问今天算不算把方向谈定了。

“方向有了。”我说,“能不能立项、做到什么程度,还差几件事。”

他让我说具体点。我把下一次交流要解决的事讲给他听:使用者得带一段处理经过,数据维护方要能解释输入,实施同事提前看看条件,客户负责人再确认这些动作是不是本轮真正想改善的。

他听完,把下一封邀请里“智能运维整体能力交流”改成了“告警处理任务与输入条件核对”。

“名字没刚才气派。”他说。

“到时候能请对人就行。”我说。

我也知道,只要后面的电话又变成一句能力支持不支持,今天好不容易问出来的条件,照样可能被省掉。那时我还没把这种省略看得足够重。

我关掉了平台介绍,打开一个空白页,先记下他刚才做过的动作。

谁先看到异常,查了什么,为什么联系下一个团队,最后凭什么确定由谁接手。

销售同事看了我一眼,没有催我翻回去。

那次交流比原定时间长。临走时,客户问我们的实施团队是不是只管部署,业务关系要他们自己整理。

“需要一起做。”我说,“哪些关系现在就有,哪些要你们确认,哪些能从数据里得到,要先走一遍。”

这句话本来是清楚的。

后来,我们在几轮电话里压缩了表达。讨论从“需要哪些条件”变成“能力能不能支持”,我也顺手把几个前提装进了“再对一下字段”。

前提没有消失,只是被留给了后面的人。

想到这里,我重新看了一眼会议记录。项目经理把那句话拆成了几项,没有替我写“客户配合问题”。

他写的是:“前期未明确的数据关联条件,联合核对。”

我点了点头。

会议快结束时,他翻到范围页。

“后面的应用,也都按这个办法接?”

我看着那页上的清单,没急着点头。

我们当时说的“先把告警接进来”,究竟包含了多少件事,得从头再讲清楚。

故事从这里开始本季目录下一期
我就是那条龙 · 第一季 / 02

客户说的“接进来”,和我们想的不是一回事

数据到了,值班人员的难处却还没有解决。

第一次详细调研,我坐在值班人员旁边看他操作。

他打开告警,再开日志,切到一张自己维护的关系表。几分钟里,鼠标没有离开过屏幕右下角那排窗口。

“每天都这么查?”我问。

“熟的不用。”他说,“不熟的,就问熟的人。”

这句话让我把笔记里“统一展示”四个字划掉了。

统一放在一个页面,仍然可能要问同样的人。

客户说“接进来”,我之前理解为把不同来源的告警汇集到一个入口。值班人员期待的,却是接进来之后能少猜一点:这是哪个应用,影响什么,先找谁。

工程师提前拿到了几条样本,字段看上去挺齐。他用测试环境很快接通,列表里有标题、等级、时间和对象名称,往下滚还有不少记录。

“已经能看了。”他给我发消息。

我请值班人员挑一条试试。

他点开,停住了。

“这个名称是采集端的,还是发生问题的那个对象?”

工程师把原始记录展开。里面确实有名称,却没有说明这个字段在不同来源里指什么。

值班人员继续问:“如果按这个名字找台账,能找到唯一一条吗?”

这次谁也没急着回答。

我请工程师先别把字段表关掉,顺着这条记录再核对时间。来源里既有事件发生的时间,也有这次转发的时间,页面只叫时间,谁也没说它展示的是哪一个。

值班人员指着屏幕:“如果是半小时前的异常,现在才转过来,我会先问它还在不在。要是以为刚发生,就可能重新拉一拨人。”

工程师说两个值都能保留,问默认选哪个。我让他先记用途,不在现场凭习惯选。发现延迟要看接收与发生的差异,排查先后要看来源语义,复盘还得知道当时页面已经收到哪些信息。

接口字段看着齐全,只能说明有东西可读。客户每天据此作什么判断,才决定我们应该怎样解释。

专家把椅子拉近,先问数据从哪里发出,再问哪一层可能改过标题。他没有先建议多加几个字段,拿了两条看似相同的记录作对照。

一条记录的是被监控对象,一条记录的是转发节点。名字都像系统名,用法却不一样。

“先把含义分开。”他说,“名字一样好处理,含义混了,后面的关联会越做越乱。”

客户运维负责人说,以前人工看习惯了,能猜出来。

“熟悉的人能猜,规则不能靠习惯。”专家说,“规则要知道依据是什么,猜不出来时怎么停。”

我请工程师暂时不要继续扩大接入。先拿当前几条记录,给值班人员走完一次从发现到交接的过程。

项目经理在旁边问:“我们原定今天确认多少来源?”

“数量先别往上加。”我说。

他看了一眼计划,没有直接改日期,问:“那今天要交出什么,明天凭什么继续?”

这是我后来很习惯他的一种问法。

他不负责判断字段该叫什么,但如果我们说不清今天做到哪一步,他就不会把“继续梳理”原封不动放进计划。

我们最后约定,今天只走通一条完整路径:原始告警到对象,必要的关联信息,再到接手的人。每一步都标明信息来自哪里,哪些可以直接使用,哪些还要人工确认。

走到第二步,就卡在了应用归属。

维护人员拿来的清单是静态导出,值班人员手里的关系表有自己的补充,两份内容并不完全一致。

我没有让工程师挑一份导进去。

“哪一份现在作为正式依据?”我问。

客户运维负责人也没有立刻指定。他把维护台账的人叫进来,让对方解释更新方式。

大家聊了十几分钟,才发现有些临时调整只在值班群里通知,尚未回到正式清单。系统导出没有错,使用者补充的也并非没有道理,只是两边代表不同时间的状态。

这已经不是我多写一条解析规则就能解决的事。

台账维护人员有些为难,说他能确认清单内容,但不负责所有临时调岗和值班安排。如果我们要求他一个人签下全部归属,后面出了变化,他也不知道。

客户负责人让我们把应用归属和当前值班接手分开。前者说明系统属于哪个团队,后者还得沿用他们现有的轮值安排,不能导入一个姓名,就让人以为任何时段都能找到那个人。

我把原笔记里的负责人改成归属团队,又在旁边记了通知路径。这一改,工程师少了一种含糊实现,客户也不用为了页面好看临时维护另一份通讯录。

我们约定只取本轮任务必要的信息,样本在获准的环境里核对。调研要理解工作的含义,不需要把完整资产清单和联系信息搬进每个人的电脑。

我提出,试点先选归属能够确认的一小段范围,缺失和冲突明确显示;同时请客户指定关系更新的确认方式。我们负责接入、校验和状态表达,业务含义由了解对象的人员确认,不能让实施工程师凭名字决定。

“那展示会有空白。”销售同事在休息时提醒我。

“有空白,总比把人指错好。”

他说没反对,就是担心客户觉得东西还没做出来。

我理解他的担心。前期每个人都希望尽快拿出一个能看见的结果。一张完整页面容易解释,一堆待确认事项不容易。

下午,我们给客户展示了两条路径。

第一条能关联,归属也能确认,值班人员知道下一步找谁。第二条出现两个候选对象,页面没有替他选,只列出冲突和需要确认的信息。

客户没有先挑第二条的空白。他问第一条能否带上同一时段的相关告警,减少再次搜索。

我把这个要求记下来,先确认是查看相关信息,还是要直接决定哪些属于同一事件。

“先能看见。”他说,“别一上来就把它们都算成一个故障。”

我们终于开始讨论同一项工作。

我请值班人员反过来走一次:假设你收到了这份摘要,原来处理这件事的人已经下班,你会先问什么?

他看了几行,说现在能知道查过哪些对象,但不知道哪些是确定对应、哪些只是同时出现。工程师把两类线索分别显示,保留回看输入的入口,没有直接把所有相关信息排成一条确定的故障链。

值班人员又问,如果一条都没有关联到,是确实没有其他异常,还是这部分还没接入。

我们又补了一种表达:结果为空时,要能看见当前查询范围与数据覆盖。不能因为列表没有内容,就替使用者作出周边都正常的结论。

项目经理看着几轮修改,问这算不算需求增加。我说,先别急着数功能点。我们正在把原本那个使用任务说清楚,哪些属于说明不足,哪些确实扩了范围,要带着这条处理路径一起核对。

他说可以,但得把这版结果留下。不然下一次换一批参会人,又得从一张页面开始猜。

接着我问,谁会判断这项工作真的有所改善。

客户运维负责人说,当然先看值班用起来怎样,也需要相关应用团队确认交过去的信息有帮助。

值班人员说,他不希望只是少看几条通知,接手方收到以后却问更多问题。

于是我们请应用侧也看了一次摘要。对方先删掉了几项他们用不上的展示,又要求保留对象、时间范围、已经核对过什么,以及仍不确定什么。

其中一个描述看起来很专业,写着疑似根因。应用人员问依据是什么。我们目前只有同时段的异常线索,没有足够证据确定原因。

他建议先写观察事实。

我同意,把那几个字改了。前期讲方案时,几个专业名词能让人很快理解方向;真正进入处理过程,含糊的结论会增加沟通成本。

项目经理问是否把本轮确认的输出样例保存,作为后面核对任务的依据。我让客户和接手角色一起看过再确认,而不是内部觉得好就当成最终需求。

客户随后问,繁忙时段与日常是否按同一套方式使用。

这又提醒了我们。眼前这次演示,只覆盖当前这段输入。不同业务时段的数据量、处理节奏和关注点,还需要分别准备。我们把它列进后续验证,没有用一句支持全天运行就回答过去。

工程师看着新记的事项,半开玩笑地说,接进来这三个字真是很省纸。

“省下来的,现场再补。”值班人员接了一句。

临走前,项目经理把原来的“数据接入完成”改成几个可核对的事项。工程师看完说,工作看起来变多了。

“原来就有。”项目经理说,“之前挤在四个字里。”

我笑了。

售前也容易这样。客户说一句,我们记成一个功能;下一次讲方案,又把那个功能解释成好几项能力。等到交付,每一项都要有人真正完成。

那天我们没有多接一个来源,却少留下了几种误解。

回程路上,我给专家打电话,问下一轮演示该准备哪些样本。

“别只带能成功的。”他说,“再带几条会让我们不舒服的。”

我就是那条龙 · 第一季 / 03

演示跑通了,客户却没有认可结果

一组新样本,让顺利的演示停了下来。

专家说的“不舒服的样本”,很快派上了用场。

正式验证前,工程师给我看了一遍演示。重复告警被归并,应用信息能带出来,点开摘要还能看到原始记录。屏幕比之前清爽很多。

销售同事看完说:“这回容易讲了。”

我也觉得顺。

进会议室后,客户运维负责人没有让我们从平台介绍开始。他请值班人员拿一组新样本,按平时的方式处理。

第一组就没归到一起。

标题几乎一样,时间也接近,列表却分成几行。工程师放大字段,一条应用名后面多了空格,另一条使用旧别名。规则按标准名称分组,新的输入没经过相同转换。

“调一下就行。”工程师说。

客户问:“现场每来一种情况,都要你们调吗?”

我请他先把样本留住。数据标准化确实需要规则,但我们还没向客户说清谁维护、怎样识别新的差异。只改到这一组能归并,回答不了那个问题。

专家提议,把当前配置和样本作为一轮记录保存,再用单独的样本调试。

“等会儿再测时,不能只拿改过的这几条。”他说。

客户点了点头,又拿来一组。

在等样本的间隙,工程师小声问我,是否可以把所有名称都去空格、转成同一种大小写,这样能少出很多差异。

我把问题转给专家。他让工程师先保留原值,再核对各来源的命名约定。有的空格只是展示习惯,有的字符差异却可能代表两个不同对象,统一得越彻底,错误匹配也可能越难发现。

“别拿字符串长得像,代替对象确实相同。”他说。

客户的数据维护人员补充,有些旧别名已经停用,但历史记录仍在使用。映射要带清适用范围,不能把当前规则不加区分地套到所有过去的数据上。

工程师把准备批量替换的动作停了。他后来跟我说,少写一段代码不一定轻松,要解释为什么这次不能自动替换,也得有依据。

这一次归并成功,屏幕上很干净。我正准备接着介绍,值班人员点开原始成员,问为什么两个不同对象会在一组里。

工程师看了一眼规则。演示配置按应用、标题和时间窗归并,适合那组准备好的数据。新的样本里,同一个应用下有多个对象,标题也一样。

销售同事想解释,归并之后还能展开看,信息并没丢。

客户说:“可我先看到的是一条。我会以为只用管一个地方。”

他说完,把列表切回折叠状态。

刚才我们觉得清爽的页面,此时有点过分清爽。

专家没有直接说该增加哪个字段。他问值班人员,什么情况下愿意把这些信息放在一起,什么情况下必须分别看。

几轮讨论后,大家把重复归并与疑似关联分开了。确实是同一对象、同一状态的重复信息,可以减少重复展示;不同对象间的线索可以放在一起查看,但不能轻易暗示已经确定为一个故障。

这会影响界面,也影响规则和验收。

我看向项目经理。他没有参加刚才的技术争论,一直在记用例。

“原先演示的结果,先按什么状态记?”他问。

这句话听着有点扫兴,但必须有人问。

“演示完成。”我说,“新的验证还没通过。规则和表达方式需要调整,改完再测。”

销售同事低头喝水。我知道他担心什么。原计划希望这轮结束就推进下一步,现在多出一次验证,相关人员还得重新安排。

休息时,他问能不能先把总体认可拿到,剩下作为优化。

我说,展示细节可以优化,结果会让人误判,就不能只叫优化。

这话说出去,我也得承担后面的安排。专家第二天要去另一现场,工程师手上还有其他任务。客户这边的使用者也没有义务一直坐着配合我们。

我先和专家确认,哪些地方必须他判断,哪些能交给工程师按已确认规则处理。接着请项目经理分开排调试和复测,把需要客户参加的时间集中起来。

我再去找客户,说明这一轮已经证明什么,暴露了什么,下一次需要拿哪几类样本。

“别再完整讲一遍产品了。”客户说,“就把这几个问题测清楚。”

他说得对。

第二轮验证前,项目经理把我叫住,问这次是不是也需要先商量什么叫通过。

我们原先的口头目标,是能接、能关联、能看。真出了分歧,这几个字几乎没有帮助。客户说看到了错误的组,我们说展开以后原始记录还在,双方都能解释自己完成了什么。

我约值班人员和应用接手人,把任务结果先说出来:该分开的对象不误并,有依据的归属能查到,缺失和冲突能看明白,交过去的信息足够继续判断。不能确认的条件单列,不拿平均表现盖过去。

项目经理问,如果某一项失败,能不能先推进不依赖它的工作。专家把依赖说明白后,大家同意分别记结果,不用一个总通过把所有问题绑在一起,也不用一个失败让全部准备停住。

之后那轮,我们没有准备更多好看的页面。工程师准备了正常、缺失、别名和冲突输入,先固定预期,再执行。调试样本与最后核对的样本分别保存,改过的规则有版本,失败的结果也没删。

对恢复消息,我们验证了顺序正常的几种情况,同时在记录里留下需要扩展检查的输入边界。那时,大家对乱序数据会造成什么影响,还没有后面那样深的体会。

有一轮,客户问归并效果到底怎样计算。

工程师想先报输入和输出的数量。专家让他再说明,其中是否混入重复发送、恢复记录和过滤掉的无关信息,以及两次比较是不是同一批输入。

“如果一边先筛掉一些,再拿剩下的算,数字当然容易好看。”他说,“先把分母讲清楚。”

值班人员还提出一件事:即使数量少了,如果关键记录被放进不合适的组,展开查询更费劲,也不能直接算节省工作。

我请他们选几个日常任务实际走一遍,分别记录是否能正确找到对象、是否要重新搜索,以及摘要交过去后还缺什么。没有测量的耗时,就不在汇报里推算收益。

这些问题让会议变慢,却让结果更容易解释。客户也提供了新的异常与正常输入,而不只等我们演示。

客户还问了一句:“今天样本过了,是不是就说明正式用的时候也可以?”

我把那句差点说出口的基本可以咽了回去,请工程师说明本轮环境和输入。当前是可控样本,处理节奏、数据覆盖和运行时长都有范围,尚未证明持续输入下的表现。

专家说,后续要分别看持续负载、失败重试和消息顺序。这次先给出已经验证的结果,但这些后续项不能消失在一页总结后面。

我请项目经理把它们交给后续试用安排。后来我们确实补了负载观察,却没有把所有时序变化都落实成用例。这笔账在当时还没找上门。

销售同事看着那份不算漂亮的结论,问这样的材料会不会影响推进。我说会让推进多一些条件,但现场不能靠客户不知道这些条件来变顺利。

销售同事休息时说,现场现在像双方一起找问题。

我说,这是好事,等真正使用才开始找,代价会更大。

专家提醒,我们也不能把所有调查都变成客户的任务。能够从处理记录核对的先自己核对,需要他们确认业务含义的集中提问。技术人员自己没查清,不能靠多开几场会来补。

我把这点记进安排。负责人要约人,也要让这场会值得别人腾出时间。

专家把一条缺少唯一标识的样本停在屏幕上。

“这条不自动给归属。”他说,“按目前条件,只能待确认。”

客户没有要求把它强行变成成功。他让我们把条件写进说明,等相关数据准备好再扩大范围。

验证结束后,项目经理发来的结果没有一整页绿色,里面有通过、有受限,也有后续条件。

销售同事看完,问我客户到底认不认可。

“认可这一次测出来的东西。”我说,“没测出来的,我们也没替他认可。”

他想了想,把原来的汇报标题改了。

正式推进前,我们还要把范围、投入和承诺一起核对。工程师看见会议邀请,问这是不是最后一次讨论需求。

项目经理说:“如果是,我愿意把这封邀请收藏起来。”

没人接着保证。

我就是那条龙 · 第一季 / 04

交接会上,两边说的是两个项目

资料里都有依据,为什么两边仍然理解不同?

项目正式启动那天,工程师带了一份实施清单,销售同事带了一份客户交流记录。

两份东西放在一起,看着不像同一个项目。

清单上写的是告警接入、标准化、对象关联、归并、相关线索展示和通知。交流记录里还有自动定位、主动派发、故障分析,后面跟着一句“后续逐步完善”。

项目经理没有先宣布开始时间,先问:“这句后续,是本期后半段,还是另一期?”

销售同事说,当时是讲建设方向。

工程师说,客户上周又问过什么时候能看到。

我把自己的笔记打开,里面确实记着那次讨论。我当时讲的是可能的演进方向,没有展开说前提,也没有明确指出哪些不在本期里。

难怪两边都觉得自己有依据。

“先别争谁记得对。”我说,“把现在每一项承诺找出来,看它会让我们做什么。”

专家指着“自动派发”问,究竟是显示归属,按规则通知,还是创建一项必须有人接单的任务。

这几个动作,在交流时很容易被一句话带过去。实施时却涉及不同接口、状态和责任。

客户已有自己的处理流程。一个新入口若自动创建任务,就得说明谁接、谁转、重复怎么办、关闭以后如何同步。光把消息发出去,不能算完成派发。

工程师说,他的估算按现有渠道通知计算,没有包含新任务流程。

项目经理接着问,还有哪些词也这样。

我们逐项翻。有人负责查正式要求,有人查验证结论,我查前期交流中有哪些容易引起误解的说法。没有一句“资料里应该有”,因为那句话说完,通常还是得有人去找。

最麻烦的倒不是明显新增的内容,而是那些说起来都差不多的词。

“关联”可以指一起展示,也可以指判断同一原因。

“恢复”可以指收到恢复消息后更新状态,也可以让人想到平台执行了什么操作。

“智能”最省字,也最容易把大家尚未确认的期待都装进去。

我把这几项列成需要客户确认的问题,没有让实施团队自己作解释。

翻到验证附件时,工程师又停了一次。附件里列着已经接通的来源,但正文里没有说明哪些依赖稳定标识、哪些只验证了部分样本。

“我按这个来源数排人,到现场才发现还要改输入,工期就不一样了。”他说。

我请他把最影响实施估算的条件挑出来,不要求大家重新读完所有交流记录。输入范围、关联依据、已有接口、客户配合和未验证项,分别找到当时的结论。找不到的就待确认,不能因为资料很多,默认关键问题一定有人说过。

销售同事也帮着查。他提醒,有些能力只在客户问后续方向时讨论过,不能把一整页交流纪要都算成当前承诺。我同意,既要防漏,也不能见过一个词就给现场增加一项建设。

客户沟通那天,对方运维负责人没有追着每句话算账。他更关心哪部分能改善当前工作,哪部分还需要他们内部配合。

我先说明这次验证通过的内容,再展示本期准备如何使用,最后把需要另外设计的工作分开。

“也就是说,责任信息能给出来,通知走现有方式,先不新建一套接单流程。”他复述。

“对。关系不能确认的,明确提示。我们不替值班人员猜。”

他问自动分析什么时候做。

我没有回答一个日期。先问他想解决的是哪一步:看见相关线索、减少查询,还是直接拿到原因结论。

他说目前最费时间的是前两步,原因仍需要应用和基础环境的人一起判断。

这就有了可以确认的范围。未来方向保留下来,但没有继续混在本期任务里。

客户随后问,如果不新建任务流程,出现无人响应的通知,谁跟下去。

这个问题不能用接口成功发送回答。我们请他说明现有值班流程的转交与升级方式,明确平台提供什么信息、发送失败怎么提示,以及业务处理仍由哪个既有角色接手。

专家核对技术状态,项目经理核对组织上的接手点。我负责把两边说的完成放到一起:平台投递成功,不等于客户已经处理;客户接手,也不意味着页面可以替他把故障关闭。

客户负责人复述一遍后,问我为什么不在第一次就这样讲。

我说那时候讲方向多,动作讲得少。现在补清楚,后面不能再让同一项工作在两份材料里各长一个样。

他点头,让值班负责人一起核对,没有只在负责人之间把这件事定掉。

回到内部,工程师松了口气,准备按新清单往下拆。

项目经理却把人又留了半小时。

“刚才确认的是范围。”他说,“开工条件、人员和顺序还没对。”

他让工程师讲第一周准备做什么,让专家指出必须参与的判断,再问我客户侧需要提前约谁。每个等待条件都找接手的人,不能只写“客户提供”。

我原本想把几项工作并行压快一点。专家说,有的可以,规则验收要依赖对象关系确认,不能把两个未知量一起往前推。

我们重新排了计划。资源准备、样本核对和界面配置可以分头进行;生产联测要等相关条件满足。哪些事情等待,哪些照常做,写在同一份安排里。

排工作量时,工程师把现场配置、远程开发、联调和测试分别说了一遍。我看有几段可以同时进行,问能不能再压一点。

项目经理没马上说不行,把需要同一个专家参加的事项圈了出来。

同一个人,在两条任务上都写可并行,日程也不会凭空多出一份。

专家又指出,某段联调必须先取得关系确认;如果现在按假设往前做,后面可能返工。这不是绝对不能提前,而是要说明提前做什么、哪些结果暂时不能当成确认。

我让他们把可以准备的部分保留,依赖未满足的单独列出。人天是投入,日历时间还包括等待与安排,两者不能互相替代。

销售同事问,客户希望的时间是不是就没有办法争取了。

“可以争取。”我说,“但得具体谈,哪些条件早点准备,哪些范围先做。总不能把等待从计划上删掉,就算已经缩短。”

这轮谈完,原来有些看着重复的管理和测试工作,也有了明确去处。项目经理不再只拿着一个总投入追进度,工程师也知道哪些额外情况会触发重新评估。

我最后又问了培训和后续支持由谁接。交付结束的日期在纸上很好画,客户开始自己使用后,问题不会跟着那条线一起停下。

工程师说培训已经算了几场,项目经理问教谁、教完要会做什么。

值班人员要看懂状态并完成交接,维护人员要更新关系、核对规则和处理异常。两类人听同一份部署讲义,可能都觉得讲过了,回去却谁也不敢动。

我让大家按使用动作准备内容,培训前先确认参与者。客户原有支持路径也一起对齐,别验收时发了一份名单,遇到事情仍然只会打给现场工程师。

远程开发的配合也重新约了:什么条件下提交问题,需要带哪些输入和版本,改完由谁合并、由谁复测。现场需要技术帮助,不代表每次都得从一段临时聊天里重新建立上下文。

项目经理把这些投入放回计划。我看着总量,才意识到前面那几个听起来只是沟通一下的事项,原来一直在占人的时间,只是以前没有放到纸上。

项目经理又问,现场遇到新的格式,算缺陷还是新增。

工程师说得看原来的输入范围。我说还得看前期有没有留下不清楚的承诺。

“那就先对事实,不在现场随口定性。”项目经理记下来,“需要评估的单列,别所有问题都往工程师当天的待办里塞。”

这句话也说给我听。

我有个不算好的习惯:客户当面提出一件小事,只要技术上看着能做,就容易说先加上。对我是一句顺手,对现场可能是下一轮联调、测试和文档。

那次交接,真正交出去的并不是一个资料目录。实施团队知道本期该做什么、哪些还没确认,也知道遇到分歧可以找谁。

临走时,工程师问我,既然清单这么清楚,后面应该顺了吧。

我看见项目经理已经把几项条件标成待确认。

“清楚了,至少知道哪里还不顺。”我说。

几天后,人员按计划到了现场。

第一项要开的权限,还没开。

我就是那条龙 · 第一季 / 05

人都到齐了,项目还是开不了工

审批完成,距离真正能够联调还差几步。

工程师把电脑放下,连接测试入口,页面转了一圈,提示没有访问权限。

客户协调人员说,申请已经批了。

工程师说,他知道,但现在用不了。

两个人都没说错。

我原本以为,这一天会从技术联调开始。项目经理把计划展开,先核对审批、账号、网络路径和具体环境,发现我们之前确认了“批准”,没有确认这个身份是否能够访问本轮所需的接口。

维护方开的是另一环境的查询范围。

现场有人说,先借一个权限更高的账号试试,等正式权限下来再换。

客户运维负责人直接摇头。

我让工程师把失败时间和请求范围记下来,停止重复尝试。再试十遍不会让一次审批自动变成另一种授权。

工程师把返回信息展开,确认请求到了接口,当前身份却不在允许的查询范围里。他特意把网络可达与业务访问可用分开记,免得后面几方都拿着已经通了互相解释。

客户协调人员想把错误截图转进大群。我请他先遮掉账号和环境细节,只把必要信息交给有权限处理的人。排障确实需要证据,不代表每个参会人都需要看到配置。

维护方很快问清了目标环境、调用身份和允许查询的内容。工程师没有顺势申请更宽的权限,只核对本轮任务要用的部分。对方安排了实际验证,我们把依赖这条接口的工作列成验证通过后才能开始,没有把已经受理改写成已经可用。

“我们现在等着?”他问。

项目经理已经把任务分开了。依赖真实接口的联测暂停,样本核对和规则整理继续,通用页面也可以按已确认的输出做准备,但都不能写成真实集成完成。

我去联系接口维护方,请客户协调人员一起说明这次究竟要读什么,不把问题重新丢给他们发一遍申请。

对方先问范围有没有变化。

我拿出前次确认的任务,说明不是增加数据,只是原来的访问条件尚未对应到正确环境。仍有不明确的部分,重新确认,不能靠一句已经批过了往下推。

那天下午,权限问题终于有了处理人和预计确认时间。工程师没空等着松口气,转头就遇到对象映射问题。

客户新提供的样本里有名称,没有我们此前用于核对的稳定标识。

这就是故事开头,那条没有归属的告警。

客户问为什么没提前提。我能做的,先是认下没有讲清的部分,再把相关人员约到一起。

台账维护人员来时,带了一份导出说明。他说名称只是展示用的,正式对象有自己的标识,只是告警来源并非都传了这个字段。

工程师问能不能先用环境加名称。

“先查能不能唯一。”专家说,“多加一个条件,可能减少冲突,不代表就没有冲突。”

工程师拿出两个同名对象,一处来自测试范围,一处来自正式业务,环境确实能分开。但继续往下看,同一环境里也有命名相近、维护团队不同的对象。

“那就再加一个标签?”他问。

专家让他先查标签由谁维护、是否随调整更新。每加一个条件,都要有可靠来源,不能为了得到唯一结果,临时拼出一个只有当前这批数据碰巧成立的规则。

我请客户维护人员帮忙确认名称重用和别名的情况。对方提醒,有的旧对象下线后,名称可能再次使用。现在查到唯一一个,也未必能解释过去那条告警。

我们把已经确认的关系与候选关系分开保存。工程师可以展示候选并请求核对,真正用于通知和交接的,仍然要有确认依据。

我们挑了几组数据对照。有的能够确认,有的仍然有多个候选,还有一部分需要由来源补充字段。

客户运维负责人看完,问是不是每条都要他们人工处理。

我把结果分开说。已有稳定关系的,由规则使用;可以通过已确认别名对应的,建立受控映射;仍无法唯一判断的,保留冲突,由了解对象的人确认。需要来源改造的,单独列条件和影响。

“能确认的先用起来,不让所有人都等最难的一部分。”我说,“但暂时不能确认的,不拿一个默认值假装完整。”

这次,客户没有再问为什么不直接自动做。他开始问哪一部分可以先交给值班人员试用。

专家请台账维护人员再说一下关系更新的过程。归属调整以后,原关系什么时候结束,新关系什么时候生效,有没有待确认的阶段。

对方说,现在能给出当前关系,但不一定能直接提供完整历史变化。

“那历史告警查归属,是按发生时,还是按现在?”工程师问。

这个问题把大家又留住了一会儿。值班当前事件时想知道现在找谁,复盘过去事件时却可能需要理解当时的关系。两种需要不能靠一个字段混过去。

我们先按本期任务确认展示含义,保留关系有效信息和当前限制。没有历史依据的部分,不让页面假装已经还原过去。

我看见工程师在做记录,问他是不是又增加了工作。

他说,增加了核对,但总比实现完了再被问这句话好。

客户运维负责人也笑了。他说,以前他们自己使用清单,熟悉的人知道什么时候要再问一下,变成系统以后,原来省掉的说明都要补。

我请他指定关系确认的接手角色。工程师可以负责处理方式,不能长期替客户判断某个对象现在该归谁。专家把输入要求整理出来,项目经理把这项责任放进后续交接,而非只作为今天联调的临时配合。

这次讨论没有给页面多加多少内容,却把后来每天会遇到的问题提前拿到了桌上。

方向清楚以后,专家和工程师讨论字段与映射,客户的人核对业务含义,项目经理记录各项结果和后续依赖。我在旁边盯着另一件事:我们刚才对客户说的限制,是否也进入了实施和测试安排。

以前我容易在这种时候放松。大家已经坐到一起,技术讨论也很热烈,就觉得事情正在解决。

项目经理却问:“刚才说来源补字段,谁联系,什么时候回来确认?”

一句话,讨论又落到实际动作上。

有些字段能在试点内补,有些需要排入来源系统的变更。我们没有把后者假定为随时能做,也没有为了按原日期交差,让客户仓促改生产。

我和客户重新确认先行范围。项目经理据此更新安排,保留旧计划和变化原因。现场同事不再一边赶旧节点,一边私下等新条件。

客户问,先行是不是意味着后面的缺口没人管了。

项目经理把待确认项翻出来,每一项都带着影响范围和接手角色。需要来源补字段的,安排下一次确认;暂时无法取得历史关系的,写明当前展示口径;先行对象则按已经核对的条件验证。

我补充,这次范围缩小以后,后续不能用试点结果直接宣称全部接入完成。客户可以先得到一段真正能用的过程,我们也要继续跟着未完成的条件走。

运维负责人看完,重新安排了值班参与时间。他没有无限抽人陪我们,而是让对应维护方带着待确认问题来,核对完再退出。

这给现场省了不少无效等人,也让我看到,协调不只是把人都拉进一个会。每个人知道自己需要确认什么、何时能离开,下一次才更愿意来。

收工时,工程师把几个成功样本展示给我看。它们没有多炫,归属旁边却能看到使用的关系版本;缺失的记录有原因,冲突也能展开。

“今天终于接上了。”他说。

“哪一项接上了?”项目经理从旁边问。

工程师笑了一下,重新回答:“这几个对象的关联走通。接口联测还等明天确认。”

我说,他再这样问下去,我们以后说话都要自带状态。

“挺好。”他把电脑合上,“省得大家各自理解一个完成。”

那天以后,我们在安排里加了一个很小的检查:条件确认,要有实际可用的依据,不能只收一条已经办理的回复。

第一批范围终于具备了受控试用条件。客户保留原来的工作渠道,我们这边先观察数据处理和关联表现,不替换既有处置。

我给专家打电话,确认他下一次能参加的时间。

他让我先发试运行的输入安排。

“样本跑通,只算开头。”他说。

我就是那条龙 · 第一季 / 06

第一次试运行,数据越跑越慢

样本运行顺畅,持续输入却暴露新的限制。

最先发现问题的是工程师。

他没有说平台卡了,发来的是几张监测记录:输入仍在继续,处理速度跟不上,待处理记录持续增加。工作入口也还能打开,就是看到的数据越来越落后。

我问是不是历史数据回放造成的假象。

他说已经区分了发生时间和进入处理链路的时间,当前批次的处理等待也在增长,不只是旧记录的时间看起来远。

我让他先保留这一轮输入、配置和观测。客户原渠道照常工作,试用结果标明时效,不拿滞后的页面给人判断当前状态。

这个节点,专家正在另一个现场。

我打电话时,他先问是否影响原处理链路。我说明当前是受控试用,问题在新增处理部分,但如果继续不受控地增加输入,积压还会扩大。

“先别急着加机器。”他说,“把每段耗时和等待情况发过来。”

我想请他立刻上线。他说另一个现场有已经约定的工作,不能直接丢下,需要先确认什么可以远程看、什么必须现场处理。

这也是我的责任范围,不能只对着眼前的项目喊最急。

我请项目经理和工程师先把当前影响、已保留证据、能够继续的任务列出来,再与另一个现场的负责人协调专家时间。我们没有用谁催得响决定先后,先核对风险和是否存在替代安排。

另一个现场很快回了消息。对方已经约齐相关人员,有一段工作必须由专家判断,临时撤走同样会让几方白等。

我先确认两边的实际影响,没有直接拿区域负责人的身份改安排。当前项目保留原工作路径,新增部分可以控制观察;另一边的关键判断有固定参与窗口。我们最后拆出了专家可以先远程核对的资料,约定回来的时间,再安排本地人员继续收集。

项目经理问我,这个决定由谁告知受影响的参与者。

“我来。”

安排资源时很容易只讨论把谁调过来,忘记另一边也有已经承诺的事。这个解释不能让工程师自己去做,更不能让两个现场在群里各自催同一个人。

工程师准备把所有监测截图都发出去,我请他先整理问题:哪段变慢、从什么时候开始、改过什么、哪些已排除、还需要专家判断什么。资料多不代表专家能更快看到关键处。

等电话接通,他很快进入了具体问题。没有花前半小时重新问现场到底发生了什么。

客户运维负责人问,会不会影响试用计划。

我给了他当前事实和下一次同步时间,没有给一个还没依据的修复时长。

他说:“我需要的是知道你们在做什么,别让我去问现场才知道还没结论。”

我记下这句话。

挂断电话,我把下次同步的时间交给项目经理。他提醒我,到时即使没有最终原因,也得说明已排除什么、正在验证什么,以及是否需要客户作选择。

工程师说怕客户听着觉得没进展。我让他把事实摆出来:页面还能打开,不代表处理跟得上;队列仍在增长,也不代表输入已经丢失。这两种判断都要分别核对,不能用一个严重或不严重概括。

他随后在测试记录里补上输入数量、成功处理、失败重试和剩余等待,并说明统计的时间范围。把几段处理位置对齐后,我们才能继续问积压在哪里,而不是拿各自刷新时间不同的截图比快慢。

这一次,给客户的同步终于不只剩正在紧急处理。

专家远程参加后,先看输入与输出,再看各处理段。他把注意力停在对象归属查询。

为了让信息尽量新,工程师最初让每条记录都查询一次关系数据。低速样本没暴露明显问题,连续输入后,重复查询和接口等待拖慢了整个处理。

机器资源并没有全部吃满。若只看总使用率,很容易以为还有余量。

工程师建议先增加处理线程。他试着解释,当前还有空闲资源,多跑几个查询应该能快一点。

专家先问关系接口能同时接住多少请求,等待时有没有超时和重试。假如外部调用已经受限,线程增多,可能只是让更多请求一起等,失败后再一起重试。

我们在隔离的验证环境里,用固定输入观察各段耗时,先检查不含关联查询的处理,再加入相同对象反复出现的输入。差异逐渐落在查询等待上,而不是所有环节都同样变慢。

工程师把之前想做的几项改动先放一边,只保留用于核对这一解释的调整。专家看完,说现在能讨论查询策略了,还不能据此宣布存储、通知和持续运行都没问题。

“先用一段相同输入复现。”专家说,“再把关联查询的耗时和等待单独拿出来。别同时改好几个地方,改完只知道快了,不知道为什么。”

工程师点点头。他早就想过做缓存,但担心负责人变化后还会读到旧关系。

专家说这个担心是对的。缓存能减少重复查询,但不能只讨论快,还要讨论有效期、失效、版本和查询失败时的表现。

我没有插话给一个技术答案。我请他们把两件事分开:先验证慢在哪里,再设计怎样提速而不把关系变旧的问题藏起来。

临时控制输入和观察范围,由客户与项目团队按约定处理,原始记录保留,不删积压来让曲线变好看。工程师继续复现,专家核对处理等待,项目经理追踪哪些测试会因此重做。

等到两段结果能够对上,方案才逐渐清楚:减少同一对象的重复查询,按已确认的关系版本使用结果,增加受控的缓存与异常状态;关系更新时,有对应的失效和核对办法。

专家还要求核对处理失败以后怎样重试。数据如果重复进入,页面数量和通知会不会跟着重复;如果暂时查不到归属,是否会挡住其他记录。我们没有因为找到了一个慢点,就假定其他条件都成立。

缓存方案也被问了个来回。客户维护人员确认关系变化后,更新怎样进入处理,旧结果什么时候不能再用,这些都要跟原来的版本约定对应。

工程师想在查询失败时先用旧值,专家请他区分两种用途:旧值可以作为待核对的历史线索,但不能不作说明地当成当前负责人发出去。过期、失效和暂时查不到,都需要让后续处理知道发生了什么。

我让项目经理把这几种情况加进复测,同时约客户维护方参与一次关系更新。性能问题如果只由我们内部造一份永远不变的台账来验证,下一次现场修改关系,又会出另一种看似毫不相关的故障。

复测时,工程师特意保留失败记录,并检查通知是否重复。速度曲线改善后,他仍然往下翻了一会儿,确认刚才被挡住的那批输入有了对应结果,才把当前状态发给我。

工程师说,以前样本小,失败几条很容易在界面上看出来,连续输入以后得有运行记录帮助定位。

我请他把这些观察留给后续维护使用。故障恢复后才能靠回忆补的监测,往往正是下一次还会缺的东西。

这些听起来不像一场精彩救火。没有谁敲下一个命令,屏幕上的曲线就立刻服从了。

我们先在可控输入下验证,再逐步扩大。处理速度恢复以后,还要看旧的等待是否真正消退,结果是否完整,关系更新是否仍正确。

专家看完一段曲线,说这一轮只能说明当前条件,不要立刻在汇报里写稳定承载。

工程师叹了口气:“刚想截图。”

“可以截。”专家说,“把条件一起截进去。”

项目经理把原先准备结束的观察阶段延长,相关人员的安排跟着调整。我负责向客户解释变化,也和团队核对后续资源,不能让现场自己把多出来的工作吞掉。

销售同事问,有没有更好听一点的说法。

我说有,可以讲清楚我们发现了什么、改了什么、还在确认什么。

他听完,自己把“全面稳定”那几个字删了。

这轮之后,工作入口显示的时效信息得以保留。客户知道何时数据尚未跟上,工程师也能看到等待从哪段开始增长。

又观察了一段时间,相关用例逐项复测通过,才继续推进试用。

客户说,页面看着终于不落后了,下一步想看告警降下来以后,值班能少做多少重复处理。

这件事在原目标里。

我知道接下来要讨论规则,却没想到最先让值班人员不放心的,是告警变少之后,页面上那个过早出现的“已恢复”。

我就是那条龙 · 第一季 / 07

告警安静了,值班的人却不放心

数量减少之后,使用者更在意每个状态是否可信。

值班负责人给我看了一段操作记录。

告警已经归并,数量明显少了。关联对象能展开,归属也能看见。按我们最初的设想,这正是容易让人满意的页面。

他却说:“这个恢复,我不敢信。”

一组告警显示已恢复,点开成员,有一条异常仍未确认结束。

我先问原来的告警渠道是否还在。

他说在。他就是在原渠道看见异常还没结束,才回来核对。

工程师很快把输入和状态变化找出来。专家让他先按接收顺序摆,再单独按来源事件的发生顺序摆。

两种顺序不一样。

工程师起初怀疑是缓存里的旧归属把状态带错了,因为我们前一轮刚动过关联查询。专家让他先别沿着最近改过的地方猜,把这条记录在哪一步改变状态找出来。

他们核对后发现,对象归属仍然正确,错误发生在恢复关联。两件事显示在同一行,不等于共用同一条判断依据。

我看着记录,提醒自己也别顺嘴说一定是上次没改干净。客户听到负责人这样讲,会以为原因已经确认;工程师则可能花时间去证明或反驳这个猜测。我们需要的是每次状态变化的输入与依据,不能先替排查选一个熟悉的答案。

同一对象前后有过两次相似异常。上一轮的恢复信息晚到,进入标准化处理后,剩下的关联条件已经不足以明确指出它属于哪次异常。

规则按对象和标题找到当前一组,更新了状态。

“它恢复的是上一轮。”专家说,“页面关掉的是现在这一轮。”

值班负责人问,这类东西是不是只能靠他们发现。

工程师说验证时测过恢复,确实能正常变化。

“测的是哪种顺序?”我问。

他把用例打开。先发生,后恢复,消息依次进来,整个过程很顺。

这一组乱序输入不在当时的覆盖里。我们在记录中留过扩展检查的事项,但没把它变成此次接入后的必测项。

我没有用那封验证通过的邮件继续解释。

“这一类漏测了。”我说,“先把受影响的规则和输入范围查清楚。不能确定恢复的,别替人关掉。”

客户运维负责人赶来时,先问是否已经让值班按错误状态停止处理。

值班负责人说,这轮仍在对照原渠道,没有直接接管。客户要求保持现状,不扩大试用。

我同意。

专家和工程师开始核对来源中是否有事件标识,以及标准化时保留了什么。能可靠关联到具体异常实例的,按实例处理;没有足够依据的,不再仅凭相似标题关闭当前异常。

“发生时间也不能单独救这件事。”专家说,“得看来源怎么定义,时钟和重发是什么情况。拿不准就把状态说清楚。”

工程师问,归并之后的恢复怎么处理。

专家让他把组和成员分别画出来。组可以减少重复展示,但每个成员仍有自己的状态。某一条恢复,并不意味着这组所有异常都结束了。

值班人员想了一下,说更希望看到还有哪些未结束、哪些状态不确定,而不是只看到一个大大的正常标记。

专家在纸上画了两次异常。上一轮发生、上一轮恢复,接着是新一轮发生。他又把恢复消息的接收位置往后移,放在新一轮发生之后。

“对处理程序来说,接到得晚,不代表属于后发生的这次。”他说。

工程师指着标准化后的内容,说现在只剩能够分组的信息,区分两轮的依据不够。

他们继续往来源查。有的来源能提供实例信息,需要完整保留;有的定义不同,要单独核对;没有可靠依据的,只能按明确的受限方式处理,不能用同一条规则强行统一。

客户运维负责人问,统一平台不是应该让来源尽量一样吗。

我解释,我们可以统一展示和可确认的含义,但来源本身没有的信息,平台不能凭空补出来。规则遇到不确定时停在哪一步,也应该让使用者知道。

专家接着请值班人员看原始成员。组上的状态怎样表达,要和成员的实际状态相符;若还剩未结束的异常,就不能用其中一条恢复把整组涂成正常。

我把纸上的时间线拍成内部工作记录,连同当时的输入一起保存。需要修订的不只是哪行程序,后续扩大来源时的验证办法也得跟着变。

值班人员要能解释一个状态,比我们内部选哪种颜色更要紧。

工程师担心,遇到没法确认的恢复消息就保留异常,列表会不会越积越多。

值班负责人说,待核对不能成为另一个没人管的角落。他需要知道为什么不能确认、可以找谁补信息,以及人工核对以后怎样留下结果。

项目经理把接手方式也放进讨论。技术规则可以停止自动关闭,但不能顺便把解释与核对的工作藏起来。按客户已有流程需要人工确认的,明确由谁处理;来源缺字段的,则回到接口维护的问题,不让值班人员每天猜一遍。

专家补充,人工确认也不能覆盖原始来源状态。来源说过什么、平台怎么算、人员后来确认了什么,应该能够区分,免得以后复盘又把三种信息混成一条确定事实。

我们把这些约定放进修订,才有条件继续讨论展示多少个状态。

修改范围很快超过了一条规则:标准化保留哪些字段,消息怎样关联,组状态怎样计算,页面怎样显示,哪些历史结果要核对,都需要检查。

项目经理没有把它们一股脑塞给工程师。他把工作拆开,标明谁确认来源含义,谁修处理,谁核对展示,谁准备复测。涉及既定行为未正确实现的部分,按问题处理,没有全部改名叫新增需求。

我负责向客户说明影响范围和安排,也去协调专家后续参与时间。给客户的说明里没有“只是一个小问题”。影响还没核对完整时,先替它定大小,很容易让下一次沟通更加困难。

修订后的第一轮演示,比之前没那么安静。

原来被过早关掉的状态,现在有的继续保持异常,有的标明待核对。工程师说,看着像告警又变多了。

值班负责人说:“但这次我知道为什么还在。”

专家请他再看一组:重复消息、先到的恢复、晚到的异常、缺少实例信息的恢复。每次变化都能找到输入和处理依据,不能确认的也有明确表现。

我们没有只复测那一条失败记录。相关来源、归并和摘要都重新检查,避免修好状态却让通知或交接丢失信息。

有一组输入,工程师连续发送了同一条恢复。页面第一次变化正确,后面几次没有再次触发相同通知,他正准备切走,专家让他再看处理依据是否仍然可查。

另一组里,恢复先到,异常后到。工程师没有把先收到的恢复直接丢掉,也没有拿它去关闭以后所有相似异常,而是按当前来源能够提供的实例信息核对;无法确定的部分保留待确认。

我请值班人员自己解释这几种结果。他能讲清楚当前为什么没有恢复,又指出摘要里有一句仍然像已经结束。工程师当场记下,回去连同摘要生成一起修改。

那次复测终于不像我们操作、客户点头。客户把日常会据此采取的动作说出来,专家检查技术依据,两边在同一条记录上互相核对。测试多花了一点时间,却没有再把理解差异留给下一班人。

客户问,为什么前面不一开始就做得这么细。

我说,我们对正常路径准备得更充分,对来源差异和消息顺序考虑得还不够。下一轮扩大接入前,这些条件都要逐项核对,不只复用一段配置。

客户没有接着批评,只让项目经理把这件事写进后续检查。

我们还把受影响期间的状态变化拿出来核对。系统已经重新显示正确,不代表过去可能被误导的记录就可以不看。客户按自己的工作过程检查是否存在遗漏,我们补充所需线索,没有直接替他宣布没有影响。

这一步没有漂亮截图,复测也没因此少做,但客户知道我们没有只把眼前页面改好就结束。

那一阵,我看见告警数量下降,反而会先问一句:是重复少了,还是本来该留着的也不见了。

销售同事笑我,说那条龙现在看见绿色都要犹豫。

我说不是绿色的问题,是得知道这块绿色在说什么。

后来,这句话在另一场会上又回到了我面前。

屏幕上的资源状态都正常,客户却拿出查询超时的反馈,问我们:“那这个,算谁正常?”

我就是那条龙 · 第一季 / 08

系统都绿了,交易为什么还在超时?

资源指标正常,还不足以回答业务发生了什么。

客户把两块屏幕并排放着。

一边是资源监测,当前没有越过设定阈值;另一边是业务人员反馈的查询超时。两边看起来都很有说服力,放在一起却让人不知道先相信谁。

“平台是不是没发现?”他问。

工程师先看数据有没有延迟,确认当前记录仍在更新。上次积压的问题没有重新出现。

专家问,这几块绿色具体表示什么。

工程师把已接入指标列出来,主要是资源使用和服务可用性。当前都没有触发既定条件。

“那只能说明这些项目没触发。”专家说,“查询本身的耗时、排队和失败比例,有没有同一时段的记录?”

客户运维负责人去联系应用团队。对方接到电话,先问是不是又要加日志、改代码。

“先看已有信息。”我说,“我们还没确定缺什么,不先安排改造。”

我请客户帮忙明确这轮排查的参与范围。涉及应用内部的判断,由应用团队确认;我们负责把相关时间段和对象的线索摆在一起,不能对着一张资源图就给人派根因。

应用负责人远程加入,给出了已有的耗时汇总和池状态观测。没有交易明细,也不需要把用户信息拿出来。

两边先花了一会儿对时间。资源页面按一段间隔汇总,应用记录的范围更细,直接把峰值摆到一起,看起来甚至不像同一次问题。

工程师标出采样窗口和时区,应用负责人确认超时统计的口径。失败请求是否计入耗时、重试是否另算一次,也分别说明。不能让超时请求从某个平均值里消失,再拿平均表现去反驳业务反馈。

我请他们先固定同一类查询和同一时间段。展示暂时不那么整齐没关系,至少我们现在比较的是同一件事,不是在各自最正常的范围里找证据。

其中一段时间,请求等待明显增加,资源使用却没有同样上升。数据库侧已有观测也不足以支持“所有查询都变慢”的说法。

专家没有立刻宣布答案,问等待发生在请求的哪个阶段,连接借出和归还是否能对应,期间有什么相关任务。

应用负责人翻了作业安排,说一项后台任务与查询入口共用部分资源。但他提醒,这只是可能有关,还不能因为时间接近就下结论。

专家说同意。

我很喜欢这样的配合。两边都不急着替自己的系统辩护,也不因为出现一个听起来合理的解释,就结束排查。

他们继续核对记录。应用团队发现,后台任务与查询入口共用一个连接池;任务运行时,部分连接被长时间占用,查询请求在获取连接的阶段等待。池外的资源指标没越线,池内却已经有人排队。

这还只是一条解释。连接为什么占着不还,是任务确实执行得久,还是实现有问题,还得往下查。

有人提议把连接池开大。我请应用负责人先说这会改变什么,他回答,可用连接多了可能暂时减少等待,也可能把压力继续推到数据库,不能把上限调大当作原因已经解决。

专家让大家把等待连接与查询执行慢分开看。当前证据指向前一段,排查就顺着连接的取得、使用和归还继续;数据库里是否存在另一类慢查询,可以单独核对,不用把所有超时都装进同一个原因。

客户运维负责人听到这里,终于把那张全部绿色的截图收了起来。他说先跟着请求走,等查清楚再回来看该补什么。

期间有同事提到,既然应用有等待,先重启一次看看。

应用负责人没有马上接受。他想先知道当前在等什么,否则短暂恢复之后,下一轮同样的任务可能还会再来。

专家也请大家保留当前观测,把几种解释分开。资源使用不高,不排除请求在等待;同时段出现后台任务,也不自动证明它就是原因。需要看等待位置、相关资源的占用与归还,以及条件改变后表现是否跟着改变。

测试验证时,他们固定查询负载,分别观察后台任务启动前后的等待,再核对应用实现。应用团队确认,原来的批量处理把连接占用跨过了整批任务,查询高峰与它重叠时就容易耗尽可用连接。他们在测试环境调整批次和并发,核对连接按预期归还,并重新观察查询等待。没有拿两段业务本来就不同的曲线直接作结论。

我听着他们讨论,问自己能帮上什么。此时插一句似懂非懂的技术判断,只会多一个声音。我更需要确认相关团队是否到场、数据能否在授权范围提供、当前试用是否需要限制,以及何时向客户同步已确认的部分。

当有人问什么时候出最终原因,我先请专家说还缺什么,不用一个客户期待的时间替他作保证。

这一段讨论不快,却让几个团队逐渐不用再先证明自己没问题。

生产上的安排,由客户按自己的变更要求评审,我们没有在远程会议里让人随手改个参数试试。

排查过程中,项目经理问我一件看似离技术有点远的事:“这次是原范围内的问题,还是客户在要求新的建设?”

我说先分开看。

工作入口如果把有限指标的状态表达成整项业务健康,是我们要检查的表达问题。按原目标补齐辅助判断中已约定的信息,需要回到需求核对。若要增加一整套业务观测、长期改造日志或自动确定根因,就得另行设计。

不能因为这轮排查很重要,就顺手把未来建设都答应下来;也不能因为源头涉及应用,就说与我们无关。

我请项目经理把这几类事项分别记。工程师先修正状态的说明,保留监测覆盖和数据更新时间;专家整理已确认与未确认的线索;客户决定应用侧的后续动作。

应用团队完成变更评审和回退准备,按客户安排实施后,又核对了一段包含相关任务的业务时段。查询等待回落,也没有只凭资源仍然绿色就结束观察。随后,我们和使用者一起复看页面。值班负责人说,他希望先看见当前到底监测了什么,免得一片绿色让人以为所有事情都已经确认正常。

这项调整没有增加多少炫目的元素。它只是把平台知道什么、不知道什么,说得更清楚。

复看页面时,工程师准备把几个资源指标汇成一个总状态,值班负责人问,总状态正常时,尚未覆盖的查询链路算什么。

我们最终没有给整项业务贴一个缺乏依据的正常标签。资源状态按资源说,已有业务观测单独展示,尚未接入的部分明确标识;汇总时也保留覆盖与时效的说明。

项目经理请客户确认这是否满足原先的辅助判断任务,再记录后续想增加的观测。一次联合排查带来的想法很多,分清当前应修的表达问题与未来建设,反而方便客户自己安排轻重缓急。

回程时,工程师问我,这样讲会不会显得平台能力少。我说,客户这次已经知道哪些信息帮上了忙。我们把依据讲清楚,比替它多认几项没有验证的本领更经得住下一次使用。

应用团队后续也提出,已有的一部分业务耗时信息可以按约定提供。我们先检查它与原任务的关系、口径和更新方式,再决定怎样接入。缺少的数据继续留条件,不把一次联合排查写成平台已经自动获得的能力。

客户运维负责人说,这次最有用的是几方能用同一段时间、同一个对象讨论。他过去收到的往往是几张各自没有异常的截图。

我请工程师保留这次组织线索的办法,也请专家标明哪些判断必须由应用侧继续确认。下次值班人员可以少绕几步,但不能照着这回的原因套每一次超时。

客户运维负责人在会后问我,专家是不是一开始就知道问题在应用池。

“他先知道该问什么。”我说,“原因是后面一点点核对出来的。”

专家后来听见这句话,说我总算没给他包装成看一眼就会诊断的神医。

我说那条龙偶尔也得给自己请个专家。

“请可以。”他回我,“别替专家答应下次也一眼看出来。”

这段排查让客户对辅助判断有了更具体的期待。他开始讨论,哪些日常反复查询和确认可以减少,哪些信息能够提前整理。

我们把这类真实使用反馈留了下来。对项目来说,这是好事,也意味着接下来的范围确认不能马虎。

验收准备会上,客户指着一项处理建议问:“既然以后能知道大概怎么处理,能不能顺手把动作也做了?”

会议室里,有人已经准备说技术上可以。

我先问了一句:“您说的动作,具体到哪一步?”

我就是那条龙 · 第一季 / 09

验收前,客户又提了一件“顺手的事”

一个合理的新想法,需要有人把代价说清楚。

“比如采集进程异常,既然知道了,能不能直接拉起来?”

客户说完,看了看工程师。

工程师的第一反应和我以前一样,想解释接口和实现。专家问了另一个问题:“您希望系统判断后直接执行,还是先给值班人员确认?”

“能直接做当然更好。”客户说,“现在值班还要找人。明明都是重复动作。”

客户又解释了一句,值班期间有些操作重复发生,人员不一定随时在同一个入口,看见问题后还要重新找人。他们希望减少这段等待,并不是想在最后几天多塞一项功能。

我听完,先把准备引用的范围说明合上。

范围当然要核对,但如果不先理解这项诉求,拿条款挡回去,也可能把原目标里没做好的地方一起挡掉。

我请他把现在的处理过程讲一遍。

告警发生,值班人员先确认是不是确实停止,再找有权限的人检查。确认可按既有办法处理,才执行动作。执行后还得观察是否恢复,反复发生时需要继续排查。

“您最想减少的是哪段等待?”我问。

他说,主要是找到人、把信息重新讲一遍。也希望有条件时能自动处理。

这两件事可以分别讨论。

专家解释,当前异常提示并不总能区分进程退出、数据延迟、访问失败或来源没有更新。若只要没有数据就执行恢复动作,有时可能做错。

真要自动执行,还要确认目标、触发、权限、重复动作、失败停止和结果核验。某个接口能被调用,只是其中一步。

专家拿当前提示举例:数据没有继续更新,可能是采集停止,也可能是中间链路延迟。若触发条件只认最后收到数据的时间,执行动作的目标就可能找错。

客户问,那让系统先检查进程是不是还在,不就清楚了。

工程师解释,进程存在也不代表正在正常采集,检查还要有独立于当前异常链路的依据。即使动作返回成功,后面仍要确认数据恢复、是否重复上报,以及下一次相同触发要不要再次执行。

我请大家先别急着把这些检查都拼成一个现场承诺。可以评估的场景,需要由实际维护它的人一起解释;否则我们会把人的一整段判断,误当成系统调用一次接口。

项目经理把原需求与当前要求并排打开。他先问,原来是否承诺了自动执行。

没有。我们核对过,当前范围是关联、通知与辅助判断,处置沿用客户既有流程。

但原范围内还有一项交接信息不够方便,值班人员需要再次整理才能转给接手团队。这是已有任务没有做利索,不能因为同时出现新要求,就把它一起算成新增。

我请工程师把这部分改进按原任务处理,再请专家明确自动化需要另外验证的条件。

我们没有在现场争谁多做了多少,而是拿现有使用过程比:哪些步骤本来就约定减少,哪些是把人的确认替换成系统动作。前者要继续完成,后者需要新设计。

项目经理让工程师说明修订会影响哪些用例,并把尚未验证的动作留在本轮范围之外。他不是只守着一个日期催大家结束,也要防止为了赶日期,连原来该做的都混进以后再说。

客户这边也需要向使用者解释决定。运维负责人请我们提供清楚的理由,别只有“不在范围”四个字。

我请专家说明当前判断的限制,再把几种选择各自需要的条件写清。客户可以决定先把信息准备充分,或另选一个条件明确的动作做小范围验证;无论选哪种,都不能跳过授权、失败处理和结果确认。

我们约定后续讨论的参与者和输入,没有把还没评估的事情写成下一次一定能交付。

客户运维负责人听了一会儿,说:“你们直接告诉我,这次能给什么,下次还要做什么。”

我回答,这次先把约定的关联和交接摘要做好,减少找人和重复描述。现有处理建议应说明适用条件,由获准人员按既有流程确认执行。如果要让系统直接动作,另选一小类明确场景评估,不把所有异常都交给一条自动规则。

“什么时候能评估?”

我先与专家、项目经理核对资源和输入,再给他一个下一步安排,而不是把未来投入挤进当前验收前几天。

销售同事事后问,刚才是不是说得太保守。

我说,我愿意继续往前做,但不能让工程师回去以后才发现,刚才那几分钟又增加了一套要运行、要审核、要维护的东西。

他想了想,说那就把下一步写清楚,别让客户觉得只是把问题往后推。

这次我们观点一致。

销售同事又问,如果客户坚持把自动动作作为签字条件,怎么办。

我说,先确认是客户在重新选择本期范围,还是我们对原任务确实有遗漏。两者的处理不同,不能一听到影响验收就答应,也不能拿最初清单压住所有使用反馈。

项目经理建议,若需要换范围,投入、周期和验证都要重新谈,不是一项新能力加进去,原来每一项仍默认按原日期交完。客户有权选择更需要的结果,我们也必须让他看见选择会改变什么。

我们没有等到双方争起来才讨论这个办法。下一次交流中,客户同意先完成已经约定的任务,把自动执行的候选场景另行评估。值班负责人还提醒,信息交接那项改进不能因此拖到以后。

我答应把它留在当前待办里,验收时实际走一次。

项目经理随后把验收安排发过来。前面几轮的问题、复测和限制都能对应到当前版本,需要确认的使用任务也列了出来。

他请客户的使用和维护人员一起参加,不只约一个能签字的人。

验收现场,值班人员用了新的任务输入。异常提示进来,关联结果能查依据,归属冲突不再强行选一个人;恢复与成员状态可以展开核对,数据覆盖和时效也看得见。

专家没有只等正常用例。他请工程师再展示输入缺失和接口失败时的表现,确认原工作渠道仍然可用。

客户问,为什么还要看失败。

“现场迟早会遇到。”工程师说,“至少要知道它失败时告诉您什么。”

这句话不需要我替他补充。

开始演示前,项目经理核对了交付版本。他把最近几次修改与复测记录对了一遍,防止测试时使用的修订没有进入当天环境,或者某个临时配置只在工程师电脑上存在。

客户挑的输入也没有提前给我们排好顺序。值班人员先找到对象,再检查归属依据,把摘要交给接手团队。对方反问一项信息时,工程师没有替客户点页面,只观察是否能从当前输出里找到。

有一处提示仍然容易让人误解,大家记下后先判断影响。项目经理让专家说明它是否改变处理结论,再确认修订与复测安排,没有凭看起来只是一行字就把它降成小问题。

我坐在后面,第一次没有急着补一句其实它的意思是。页面要让使用者自己读懂,不能把我每次坐在旁边解释,当作系统的一项运行条件。

不是所有事项当天都结束。几项不影响当前任务的使用调整保留了接手安排,明确影响、责任和后续确认;需要满足的关键事项则核对完成,不用一个总体满意把它们带过。

培训时,项目经理让维护人员自己走一遍对象更新和规则核对。讲解的人先不碰鼠标,看到哪一步不清楚,再补说明。

客户维护人员说,有一段资料写得太像给实施看。

工程师原本想解释,想了想,重新截取了操作过程,把使用条件和失败后的联系人补清楚。

我坐在旁边,忽然发现有一段时间没人找我。

他们已经能直接把问题交到对的人手里。我不需要每次先解释一遍前面发生过什么。

验收按约定流程推进。相关负责人核对结果、遗留和维护安排,签字的事情终于来到桌面上。

客户运维负责人合上资料时,仍然提起自动化。

“这个事情,后面继续讨论。”他说,“先从能确认的那一小类开始。”

我答应的是继续讨论与评估,没有顺手再包下结果。

回去路上,销售同事问,那条龙今天怎么没喷火。

我说,今天负责把话说完整。

我就是那条龙 · 第一季 / 10

字签完了,电话又响了

新的变化出现时,这次不再只等一个人接电话。

验收后的一个工作日,我刚坐下,客户的电话就来了。

“有一条归属又不显示了。”

我第一反应还是打开电脑。接着问了对象、当前状态和是否影响处理,请对方按既有支持安排把必要信息发到记录里。

客户说,值班人员已经联系维护方,先告诉我一声。

他没有等我接过全部事情。

以前,这类电话我习惯先说我来找人,随后再问现场谁有空。有时问过两轮,客户还不知道现在是谁在处理。

这次我先看记录里的状态。接手角色已经回应,问题有编号,下一次反馈也明确。我只补充确认影响,并把自己知道的背景加进去,没有另开一条私下处理的线,让几个人分别以为自己在负责同一件事。

工程师后来问我,要不要拉专家。

我让他先按已有检查确认。确实超出当前办法,再带着事实请专家参与,不用因为是客户电话转来的就自动把所有人叫齐。

项目经理很快在支持记录里回应。工程师核对输入与关系版本,发现这次归属发生调整,相关更新还没有完成确认。平台返回待核对状态,原通知渠道没有中断。

页面不好看,但没有把旧负责人当成当前结论继续传下去。

客户维护人员找到待确认记录,联系对应角色,按约定更新后再检查相关输出。工程师负责核对处理表现,项目经理跟踪确认,结果在记录里留了下来。

我一直在看,没有给出一套新的分工。

事情处理后,客户问:“以后这类调整,是我们先按现在的方式更新,对吧?”

“对。有处理异常再按支持路径找人,不用每次从我这里转。”

他说这样方便。

我也觉得方便,只是这种方便来得比一个按钮慢得多。

电话结束后,支持同事补了一条说明:这次关系更新并没有按时完成,待核对状态虽然合理,也要继续确认是谁没收到更新、哪个环节停了,不能因为平台没有报错就让问题结束。

项目经理仍在交接后的跟踪期,帮着核对遗留与维护安排;日常问题则由已经明确的支持角色接手,不能默认他永远负责把每一通电话转一遍。

我请他们将这次经过补进现有说明,特别写清业务信息发生变化和平台处理异常分别找谁。客户不需要先替我们判断所有技术原因,但第一位接到问题的人,要能继续把事情交到合适的位置,不能只说这不归我。

这次我仍然要跟结果。只是跟结果不等于再建一个群,把已经开始工作的那套安排重新绕过。

项目复盘会上,项目经理先放了最初那份计划,又放了当前结果。他没让我先讲总体感受,而是问哪些工作和原估计差得最多。

数据含义和对象关系的确认,联调中补出的条件,新增输入后的复测,还有专家与现场之间的配合,都占用了投入。

有的属于原来应做但低估的工作,有的来自条件变化,有的确实是范围调整。我们分开看,没有把所有增加都说成客户变更,也没有把所有延后都算给现场。

专家提到,前期验证更关注功能是否运行,后面才充分暴露时序、持续负载和更新责任的问题。测试准备要回到真实使用方式,不能每次从熟悉的成功样本开始。

工程师说,希望之后遇到新来源,先拿够能解释差异的记录,再确定接入安排。最费时间的是已经排好日期,又一边等条件一边改。

项目经理说,那就把条件核对纳入计划,不只记录功能任务。他也承认,审批完成与实际可用当时没有区分得足够清楚。

轮到我时,我把前期那句“整体没问题,字段再对一下”写了出来。

几个人都认得。

“技术方向可以支持,不代表当前输入已经满足。”我说,“这类话,后面我得把条件当面讲出来。不能让别人到交接附件里找重点。”

销售同事补充,客户听到限制时并不一定反对。他更怕的是前面没说,后面突然告诉他还差很多条件。

我点头。

项目经理后来拿出一项曾经被我口头答应的小调整,让我回忆当时为什么觉得不影响安排。

我记得那段代码不复杂,没想到还要改摘要、补测试、更新说明,再请客户确认。工程师把这些实际动作列出来,我才看见自己当时省略了什么。

销售同事也翻了一段客户反馈。对方并不反对分阶段,反对的是已经排好了自己的人,临时才知道验证还要再来一次。

我们没有在复盘里只写加强沟通。项目经理把关键条件的确认放到安排之前,工程师说明最小验证输入,专家补充哪些结论必须带适用范围。我负责把这些内容带回前期交流,讲建设方向时也讲清当前还缺什么。

没有新增一个包治百病的流程,只是下一次谁准备说没问题时,有人能够接着问一句:按什么条件?

这次也没必要写成一场皆大欢喜的复盘。那些多花的时间是真实工作,处理过的问题也不能因为最后能够验收,就从材料里消失。

我们留下几份简短的案例记录。每一份都写当时条件、具体问题、处理依据和仍然存在的限制,相关人能找到原记录,但不把客户数据和访问配置混进通用材料。

工程师看见一项新要求:说明哪些办法不能直接复制。

“经验还要写不能用?”他问。

专家说,归并规则、关系缓存、恢复处理,每个都有输入前提。没有这些前提,拿过去可能刚好复制出下一个问题。

整理记录时,工程师想把当时的完整输入留进通用案例,省得以后再造样本。专家让他先去掉能够识别对象的内容,只保留解释机制所需的结构和变化,另做可验证的构造记录。

改好的样本还要走一遍原问题:重复是否仍然重复,冲突是否仍然无法唯一判断,乱序是否仍然能暴露状态错误。把所有名称随手替换成一样,可能连问题本身都改没了。

我请他在说明里保留这些条件,不保留客户环境和访问配置。以后同事能拿来理解为什么出错,而不是把一份旧项目配置当成现成答案。

项目经理则把等待与返工的原因留下,具体商业数据不放进共用材料。下一次估算能记住哪些工作容易漏,并不需要把上一位客户的全部账本带过去。

后来做另一个项目的前期交流,我请实施同事提前看了数据条件。没有把完整方案扔给他,只问几个可能影响工作量和使用结果的地方。

他看完,提醒其中一种记录没有稳定对象标识。

我没有说先接进来再看。

这句话差点脱口而出,我自己都笑了。

同事问我笑什么。

“以前吃过这道菜。”

第一季这个项目并没有因此变成什么万能范本。客户的来源、团队和处理流程都有各自条件,换一处就要重新确认。但有几件事,确实不必每次等到现场再想起来。

那次新的前期讨论,实施同事顺手翻出上一项目留下的输入检查。我看见他先问样本含义,再问对象怎么识别,没有等我提示。

项目经理则在排期之前询问谁确认依赖,问到一个尚未安排的接口时,先记待确认,没有擅自填上客户希望的时间。

我把客户接下来的交流目的解释给他们听,也把尚未答复的地方分别约人核对。没有召开一次关于经验复用的大会,旧项目里留下的几件做法,就这样进入了下一轮工作。

至于那份项目总结,我们后来还改过。初稿里有一句明显提升效率,专家问依据是什么,工程师说没有统一计时。我让它回到能证明的变化:哪些关联走通、哪些状态能解释、哪些任务已经有人接手。没测量的部分继续留在后续观察里。

我也不用每一件事都亲自处理。

该问清的地方问清,该找的人尽早找,问题出现后继续跟结果。专家讲技术时我认真听,项目经理核计划时我别替他省步骤,客户要作选择时,我把事实和代价说清楚。

有一天,销售同事又问起一条龙的笑话。

“现在人都能自己接上,你这条龙是不是轻松了?”

我说还不错,至少不用从头一直喷到尾。

他给我发来另一项交流安排,问能不能一起看看。

我先问,客户现在具体卡在哪段工作。

他停了一下:“你先听我讲完。”

我把电脑打开。桌面上,上一项目的待办还剩几项有接手人的跟踪,不再是一长串只写着我的名字。

新项目要开始了。

那条龙还在,只是这回,知道第一句话该问什么。

第一季完

上一项目的电话还会再来,下一项目的问题也已经到了。
那条龙,继续在场。