找回密码
立即注册
搜索
发回帖 发新帖

6667

积分

0

好友

808

主题
发表于 昨天 23:04 | 查看: 11| 回复: 0

我有一段时间没有写团队管理的文章了,这次聊聊最近一直在思考的一个问题。

我习惯定期回看自己的日程,看时间都花在了哪里。结果发现,大量时间都用于解决问题——架构问题、需求问题、人的问题。这种状态会让人很忙,也会带来一种充实感,觉得自己确实在发挥作用。

我们常说测试左移、需求左移。其实,问题同样需要左移。

如果今天正在忙的事情,下个月很可能还会以相似的形式再次出现,那不妨想一想:我今天究竟解决了什么?真正的变化,应该从接到一个明确任务,延伸到问题还没被准确描述的时候。

题目从哪里来

工程师接到任务,通常会先看约束:吞吐量要达到多少,延迟要控制在什么范围,需要兼容哪些调用方,什么时候上线。约束越清楚,技术讨论越容易收敛,方案可以比较,工作可以拆分,结果也有验收标准。

进入管理岗位以后,麻烦的地方在于:这些约束本身也需要被检查。

假设业务提出,要把某个接口的响应时间减半。团队可以研究索引、缓存、并发和计算过程,也可以重新分配机器资源,这些工作当然都有工程价值。但我会先追问一句:用户真正在等待什么?

如果用户完成任务要经过多个环节,而接口只占其中很小一部分时间,局部优化可能无法改变整体体验。如果等待主要发生在人工审核阶段,继续压缩服务端耗时,投入方向就需要调整。如果响应已经足够快,用户却仍然反复提交,那我们更需要检查状态反馈和操作流程。

这里并不是要贬低性能优化。真正的问题是,团队拿到的技术指标,是否足以代表我们想要改善的结果。

我经常告诉业务、商务以及其他提需求的人:讲需求,不要讲方案。因为很多人习惯把自己的方案当成需求。我会要求他们描述:谁遇到了什么困难,发生在什么条件下,造成了什么损失,现有证据是什么。先不要写方案。

管理者需要对任务的来源负责。 方案评审只能检查给定题目下的解法,无法自动纠正题目本身。

扁鹊的难题

《鹖冠子·世贤》里,扁鹊评价兄弟三人的医术,将长兄排在最前,中兄其次,自己居后。长兄在疾病尚未显形时处理,中兄在病情轻微时处理,扁鹊的治疗动作更显著,名声也传得更远。

引用这个故事,我想讨论的是背后的评价问题。

问题严重以后,损失是可见的,处理动作也是可见的。系统恢复了,业务继续运行了,参与者很容易理解这项工作的价值。提前处理却有一个天然困境:我们无法直接观察那个没有发生的结果。

一个团队说,经过架构调整,避免了一次严重故障。这个说法可能成立,也可能只是把一种担忧包装成了成绩。没有发生故障,可能与改造有关,也可能因为流量没有达到预期,或者相关路径根本没有被触发。

大家常说“预防很重要”,但往往不太愿意为没有直接产出的预防性投入买单。

假设有人提出,某项依赖存在单点风险,需要增加冗余。我希望看到的是:这个依赖失效后会影响哪些功能,现有替代路径是否可用,恢复需要什么条件,团队通过什么方式验证过。随后才讨论增加冗余的成本,包括建设、切换、演练和持续维护。

故事里的医者似乎能够准确识别尚未显形的疾病。技术管理没有这种确定性。我们面对的是不完整的信息、会变化的业务,以及随时可能被新证据推翻的判断。因此,观察到了什么,推测了什么,准备如何验证,判断错误时损失有多大,这些都需要提前想清楚。

发现得早,只有在判断质量和处理成本都合适的时候,才值得投入。

把症状写清

很多问题刚被提出时,责任归属就已经确定了,这其实并不合理。

项目延期,于是被归结为执行力不足;线上出错,于是被认为质量意识不够;评审反复,于是成了技术能力欠缺。这些解释很容易进入管理讨论,因为它们足够简短,也容易对应到熟悉的动作:催进度、加审核、做培训。

但它们经常缺少可以验证的内容。

以延期为例,我会先把工作过程拆开:需求什么时候达到可开发状态,编码用了多久,等待联调用了多久,返工发生在哪个阶段,验收条件是否改变过。

假设一个任务总共经历了两周,其中多数时间在等待依赖方确认接口。这时要求开发人员提高编码效率,无法覆盖主要损失;继续增加进度会议,还会占用原本可以用于协调和实现的时间。

不过,看到等待时间很长,也不能立即宣布“跨团队协作有问题”。等待可能来自接口定义不清,也可能来自对方没有资源,还可能因为我们过早启动了一个条件尚未具备的任务。几种情况需要不同的处理方式。统一加一个协调角色,可能只会多出一次信息转述。

有效的方法是区分三层信息:已经观察到的事实、基于事实形成的解释、准备采取的动作。

例如,几个任务都在同一个依赖环节停留较久,这是事实;对方资源不足,这是待验证的解释;调整双方排期,是一种候选动作。如果不加区分地写在一起,很容易让后续讨论默认接受前面的推测。

问题描述越接近可观察的行为,团队越容易讨论具体改动。把大量精力花在解释一个人“为什么不够负责”上,通常得不到能够验收的方案。

寻找提前信号

等到事故发生再分析,证据往往比较集中。寻找早期问题,面对的信号要模糊得多。

我会优先关注那些暂时没有形成损失,却持续依赖额外劳动才能维持的环节。比如:

  • 告警频繁发生,需要开发反复介入排查;
  • 每次发布都依赖某个人手工确认;
  • 某类数据每天都要人工补一次;
  • 某个模块只有固定的人敢修改;
  • 项目能按时交付,前提却是临时取消测试或压缩验收。

这些现象还不足以证明系统即将失控,但值得进一步检查,因为当前结果里包含了没有被正式记录的人工投入。如果只看交付是否完成、服务是否可用,我就无法知道团队为维持这些结果付出了多少补偿性劳动。

我会让团队用较低成本记录几类信息:重复的人工操作、等待外部决定的时间、计划外的工作,以及必须依赖特定人员才能完成的事项。记录的目的是找到重复出现的位置,不追求把每个人的一天切成几十个时间片。粒度过细,记录会变成负担,数据也容易围绕考核要求失真。

技术系统的观察也需要类似取舍。我不会因为担心遗漏,就要求所有路径全量记录详细日志。采样比例、保存时间、字段数量和查询需求,都需要对应到具体诊断问题,并给采集开销和存储费用设预算。如果新增一组数据无法回答任何决策问题,我倾向于先不采集。

告警同样需要说明后续动作:某个指标越界以后,谁要介入,要判断什么,允许等待多久?回答不了这些问题的告警,我会先把它放进观察范围,避免直接打断值班人员。

提前发现需要足够的信息,却不能靠无限增加信息量完成。可以从几个高损失场景倒推:在结果恶化之前,我们有没有机会看到变化?现有信息能否区分不同原因?缺少的那部分,怎样以最小代价补上?

追问到哪一层

发现重复问题以后,很容易进入另一个极端:不停追问原因,直到得到一个足够宏大的解释。

一次发布失败,可以追到测试不足;测试不足,可以追到排期紧张;排期紧张,可以追到业务压力;最后写成“组织需要加强质量文化”。讨论完成了,下一次发布怎么做,仍然没有答案。

我的建议是,把分析停在当前能够改变、能够验证的层次,同时记录更上层的约束。

假设某次故障涉及配置变更。恢复服务后,我希望继续弄清楚:配置是否经过校验,发布前能否发现异常,变更是否可以独立回退,为什么已有检查没有覆盖这条路径。如果缺少校验,就讨论怎样增加校验;如果具备校验能力,却因为发布时间紧张被跳过,就需要检查绕过条件和批准权限;再往上,若每次承诺交付时都默认压缩验证时间,排期方式也要进入改进范围。

这几个层次可以同时存在。没有必要强行选出唯一的“根因”。我更关心哪一项改动能切断已知的失败路径,哪一项能缩短恢复时间,以及哪些约束暂时只能接受。

增加发布审核,是一种常见选择,但我会谨慎使用。它需要持续占用审核者时间,也会让发布等待另一个人的判断。如果某类错误可以通过确定性检查识别,我会优先评估自动校验;如果必须依赖业务背景判断,人工审核才有对应价值。

自动化是一种常见的策略,但也要考虑成本。一个发生频率很低、每次处理只需少量时间的例外,未必值得建设复杂流程;反过来,高频且规则稳定的操作,长期依赖人工检查,我会要求说明理由。

分析问题的深度,应当服务于干预选择。继续追问已经无法改变行动时,我会停止扩展讨论,把精力转向验证。

问题也要排期

发现问题的能力提高以后,待办事项很可能先变多。

代码有债,流程有缺口,人员有依赖,业务假设也有风险。如果每一个发现都必须立即解决,团队会同时启动大量改善工作,原本的交付计划也失去可信度。

管理者需要对“暂时不处理”承担责任。

判断一个问题是否进入排期,我会看几件事:已经造成了什么损失,未来损失可能如何扩大,判断依据有多可靠,处理成本是多少,以及推迟以后是否会失去调整空间。

简单来说,就问一个问题:不做什么会怎么样,做又要多少成本?这其实算是两个问题。

假设两项改造都能减少一定维护工作。其中一项随时可以做,另一项涉及即将被多个团队依赖的接口约定。后者一旦扩散,迁移就需要更多参与者配合。我可能优先处理后者,即使它眼前节省的时间更少。

但我不会把这些因素全部塞进一个精确分数,然后按小数点排序。概率、影响和工作量里包含大量估计,算式不能消除不确定性。对于信息不足的问题,我会单独安排验证工作。

例如,先花一个有限时间窗口检查实际调用情况、做一次容量实验,或者回放一批历史任务。验证结束后,再决定是否启动完整改造。验证任务需要有结束条件,不能以“持续调研”的形式长期占用人力。

我也会区分两种决定:允许风险暂时存在,以及承诺在某个时间解决。前者需要记录接受风险的人、接受范围和重新检查的条件。不能把所有暂缓事项都放进一个没有期限的技术债列表,等下一次出事再说“早就提过”。

有限的资源只能处理有限的问题。管理者的工作包含排序、延后和拒绝,不能只提供一份越来越长的风险清单。

先做有限验证

提前发现的问题,往往还没有足够证据支持大规模改造。我们需要优先寻找能改变判断的小实验。

假设团队认为,交付慢主要来自公共组件不好用。直接重建组件库,投入很大,验证周期也长。可以先选一类重复任务,调整其中一个高频接口,再比较接入步骤、返工次数和总耗时。

这个实验不需要证明新方案在所有场景都更好。它需要回答:当前识别出的障碍,是否确实影响了交付;移除障碍以后,预期变化有没有出现。

实验设计里,要特别检查比较条件:两次任务的复杂度是否接近,参与者是否不同,是否有额外辅导,新方案是否获得了旧方案没有的资源。如果这些条件发生变化,就要缩小结论的范围。

如果测试任务都是规则清楚、信息完整的样本,结论也只能覆盖这部分任务。遇到资料缺失、规则冲突或无法判断的情况,系统怎样退出,谁来接手,都要进入验证范围。

有限实验也有局限。它可能遗漏低频问题,额外受到团队关注,或者无法覆盖规模扩大后的协作成本。因此,通过一次实验以后,我会继续限制推广范围,保留回退条件。

我愿意为这些步骤支付一些时间。相较于一次性更换完整流程,分阶段验证让我有机会在投入扩大之前修正判断。

授权与介入

发现问题容易让管理者产生一种冲动:既然我已经看到了,亲自处理应该最快。

紧急情况下,这可能是合适的选择。但如果每一次复杂问题最后都回到我这里,我就需要检查自己的介入方式。

我会区分三个环节:识别风险、作出决定、执行处理。它们可以由不同的人负责。管理者发现某个发布环节存在风险,可以要求补充证据、确定负责人和完成期限。除非风险已经超过团队当前能力,或者需要跨越现有权限,否则没有必要接管全部实现。

授权时,我需要交代的是目标、约束、可使用的资源,以及什么情况下必须升级。对于实现细节,我会留出空间。

这里存在实际代价。团队选出的方案可能与我的习惯不同,局部实现也可能没有我亲自处理得快。如果每次出现这种差异,我就收回任务,成员很难积累完整判断的经验。

但授权也不能变成不检查。我会根据风险安排检查点:可以轻易撤销的局部改动,允许负责人快速推进;涉及数据破坏、跨团队承诺或难以回退的迁移,需要更早检查方案和前提。检查频率随风险变化,避免所有任务都接受相同强度的管理。

我也需要亲自参与一部分现场工作,例如阅读一次故障时间线,跟进一个长期受阻的任务,或者检查一次改造的实际使用情况。如果信息只来自层层整理后的汇报,我很难判断哪些成本被省略了。亲自接触现场,是为了校准判断;后续仍然要让明确的负责人完成处理和验收。

发现问题之后,我还欠团队一个决定:谁负责、投入多少、何时检查,以及哪些事情因此不做。

让风险能上来

如果我希望团队提前报告问题,就需要检查自己怎样回应坏消息。

成员提出风险以后,立刻被要求证明一定会出事;承认进度存在不确定性以后,被评价为缺乏担当;发现历史缺陷以后,首先被追问为什么之前没有发现。面对这些回应,一个人有理由等证据更充分以后再开口。可等到证据充分,调整空间可能已经缩小。

我会允许风险报告保留不确定性,但要求表达具体:观察到了什么,可能影响什么,还缺少哪些信息,希望获得什么支持。

“这个项目肯定要延期”和“关键依赖尚未确认,如果本周无法完成,我们需要调整后续联调安排”,信息量完全不同。后一种表达让管理者可以作出决定,也允许后续事实修正判断。

对于善意提出、最终没有发生的风险,我不会仅凭结果认定提出者判断失误。我会回看当时的信息是否足以支持担忧,验证动作是否合理,以及是否因为提前处理才没有继续恶化。

同样,我也不会奖励没有证据的持续悲观。风险提出以后,需要有人补充信息、缩小范围,必要时撤回判断。只负责提醒所有可能性,却不参与验证,会把筛选成本转移给整个团队。

预防性工作的评价也需要证据。我会看风险路径有没有被验证,改造是否覆盖了它,回退或恢复是否经过检查,后续维护责任是否落实。至于“避免了多少损失”,没有足够依据就不写一个夸张数字。

对于重复的人工劳动,可以比较前后的处理次数和时间;对于恢复能力,可以记录演练中实际完成的操作与耗时;对于协作改善,可以检查等待和返工有没有变化。评价应当尽量落在能够复查的记录上。

这样做会增加一些记录成本。我愿意保留与决策和验收有关的部分,不要求团队为每项改善制作完整汇报材料。

检查已经完成的

还有一类问题,很容易被技术管理忽略:任务完成了,但投入没有产生预期结果。

系统按时上线,功能通过验收,接口符合设计,团队也没有犯明显错误。几个月以后,使用量很低,原有人工流程仍在继续,新系统还多了一份维护责任。如果我的检查到上线就结束,这类问题不会进入视野。

我会在立项时约定一次投入后的复查。具体检查什么,取决于项目要解决的问题:人工步骤是否减少,用户是否完成了原来难以完成的任务,业务是否真的采用了新流程,旧系统是否按计划退出。不能用“已经上线”替代这些问题的回答。

如果结果没有出现,我需要重新检查原来的假设。也许我们识别错了障碍,也许方案只处理了一小部分,也许业务条件已经发生变化。继续增加功能之前,先确认追加投入还有没有依据。

停止项目在这里也是一种需要认真评估的选择。它涉及已有投入、人员安排和承诺调整,处理起来往往比批准下一期更麻烦。但维护一个缺少使用理由的系统,同样会持续消耗资源。

发现问题,因此也包括检查团队正在解决的问题是否仍然存在,解决方式是否仍然适用,以及目标是否已经改变。

这会改变我安排时间的方式。我仍然需要参与故障处理,理解技术细节,对交付结果负责。同时,我会固定留出时间检查重复劳动、尚未验证的判断和上线后的实际结果。对于已经暴露的问题,要求处理闭环;对于只有迹象的问题,安排有限验证;对于暂时接受的问题,留下重新检查的条件。

我也会定期回看自己提出的问题:有多少得到了证据支持,有多少被否定,哪些因为迟迟没有决定而继续消耗团队,哪些处理动作带来了新的负担。否则,所谓发现问题,很容易变成管理者不断向团队追加任务。

从解决问题到发现问题,对我意味着工作范围扩大了:需要参与定义,需要作出取舍,还需要在结果出现以后检查当初的判断。问题提前进入视野,只是给了我们更多处理空间。这个空间有没有被用好,最终仍然要回到具体的行动和结果上。

以上。




上一篇:DeepSeek Harness 到底做了什么?详解 Agent 循环、Session 与工具管道
下一篇:DeepSeek Harness 与 Pi 的 Agent Loop 结束判断:五层边界与收口机制
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-10-25 03:38 , Processed in 0.065220 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表