资讯动态

从技术堆砌到垂直切片:让每个迭代交付完整价值

发布时间:2026/10/16 4:02:47 来源:尧图企业网站定制
1. 为什么“技术堆砌”会成为团队的默认选项1.1 一个似曾相识的失败场景先说一个我反复在团队里见到的场面项目启动第三周技术方案文档写得很漂亮数据库模型设计出来了接口定义也评审过两轮前端页面切图切了一多半。业务方每次过来问进度得到的答复都是“框架搭好了正在做底层”或者“接口快联调了下周应该能看到东西”。结果到了第一次真正演示的日子大家坐在一起点开页面登录是通的列表是空的点新增报错业务方一脸茫然地问“这跟我三个月前提的需求有什么关系”我把这种状态称为“技术堆砌”。它最典型的特征是团队里每个人都在忙任务看板上全是进行中的卡片代码仓库每天都有提交但用户能感知到的完整价值一直不出现。拆开看这种工作方式其实是“水平切片”的必然结果——大家按技术层次分工把数据库、后端接口、前端页面分别当成独立任务来做计划里写的是“完成订单表结构”“完成订单接口”“完成订单页面”唯独没有“用户能成功提交一个订单”。1.2 水平切片的内伤集成爆炸与需求真相的延迟水平切片的问题不是“分层”这个动作本身而是分层之后缺少了一个贯穿性的主线。一个订单功能数据库层做一周接口层做一周前端再做一周等到第3周才第一次把它们拼在一起。拼的时候才发现数据库设计时以为接口只需要查订单表结果接口真实需要连查商品和库存接口文档里字段名写的是orderNo前端按order_number已经写完了业务规则里“订单金额满100免运费”这件事数据库层根本不关心但接口层没有它就算不出最终价格。这些问题全都不是“技术难题”而是信息在分层传递中被稀释、被误解。水平切片的另一个内伤是需求真相延迟暴露。业务方真正想要的东西往往在第一次交互时才说得清楚。水平切片把第一次完整交互拖到了最后等于把“需求理解错误”这个最大的风险放到了最晚的时间点才引爆——到那时修改成本最高、返工范围最大、团队士气最差。越大的团队、越复杂的系统水平切片的成本越高。每个人只需要对自己的层负责看起来专业、清爽、容易并行但唯独没有人对“一个完整功能从入口到落库”负责。没有人负责就没人提前发现那些跨层的坑。等到联调期集中踩雷细看每一个单点都是小问题但合在一起就是一幅让人头大的拼接图。2. 垂直切片法的核心逻辑每一刀都要切出一个“可用价值”2.1 什么是真正的垂直切片垂直切片法Vertical Slicing的思路完全相反不按技术层切而是按“用户场景”切。每一刀下去都要横跨UI、业务逻辑、持久化、外部依赖从用户的一个真实操作出发形成一条端到端可运行的完整路径。它不是一个页面、不是一个接口、不是一张表而是一个可以讲出来的故事“用户A做了什么操作看到什么结果数据在哪里发生了怎样的变化。”为了区分我用一个例子说明。假设要做一个“用户订单管理”模块水平切片是这样排的第1周建订单表和订单项表第2周写订单CRUD接口第3周写订单列表页面第4周写订单详情页面第5周联调。而垂直切片是这样排的第1周做一个“用户下单”的最小闭环——一个极简的提交表单一个创建订单的接口一张订单表够把一条订单数据从浏览器走到数据库再回显出来第2周做一个“用户查看我的订单”切片——复用前面的表加上列表查询和简单展示第3周再做“取消订单”切片涉及订单状态变更规则第4周再做“订单详情加上商品行”切片。我们可以用一个简单的对比直观地看这两种计划的差异对比维度水平切片垂直切片周一到周三的产出表、接口、页面相互独立一个可演示的最小下单流程首次端到端联调时间第4周以后第1周或第2周业务方可感知的进展直到演示日才知道每一天都看得到完整路径风险暴露时间集成阶段集中引爆每切片完成就暴露垂直切片不代表不做后端、不做数据库而是说后端的每个部分都是为“某个当前切片”服务的只做这个切片需要的表结构和接口字段。它不做“完善的订单子系统”只做“能让当前需求跑通的那一小条路径”。2.2 判断切片是否合格的四个标准很多人说切了垂直切片但实际还是歪的。我总结了自己的四条判断标准称之为“可运行、可演示、可交付、可验收”。可运行切片完成后代码合入主干在测试环境一键部署从头到尾不需要额外的脚本和手工修补就能走通。可演示随便找一个人不限业务背景坐在电脑前告诉他一个入口语他能独立走到终点并不需要提前讲解代码和字段约定。演示是检验切片是不是“真垂直”的最好手段因为演示者只能操作界面不能读代码。如果你发现自己需要用术语来解释就已经说明这个切片没有形成完整价值。可交付切片虽然只实现一部分需求但它交付的是“质量真实”的部分而不是“临时演示版”。如果切片里的接口是写死的假数据或者数据库用的是临时表、字段长度和设计文档不一致就不能算可交付——交付意味着这个切片可以留在代码库里继续生长后续切片在它的肩膀上迭代而不是到了后期整体重写。可验收切片对应明确且可验证的验收标准不是“页面显示正确”这种空话。验收标准必须可以直接用数据和操作描述例如用户提交包含商品ID、数量、收货地址的请求后系统创建一条状态为“已提交”的订单记录并返回订单编号。任何会看这个系统的人包括三个星期后的你自己都能照着标准验证它是否通过。2.3 为什么垂直切片在协作上更符合人性我越来越觉得垂直切片的价值不只是工程组织层面的它其实抓住了人性中两个非常基础的点可见性和掌控感。人需要频繁的正反馈。一个水平切片里的开发者在第1周建了表但建表这件事本身不会带来“做成了一件完整功能”的感觉。而垂直切片做出来的每一个切片都是一个完整闭环团队每周都能发布一个可以被真实使用和评价的东西士气完全不同。掌控感来自“一个功能我能从头看到尾”水平切片下新人往往对项目感到茫然只能看到自己那一层垂直切片给了每个成员一个小的完整业务上下文即使分工只做一个环节也清楚自己这个环节在用户的哪一步、为什么存在。此外垂直切片把决策点从“交付日”拉到了“切片完成日”。每个切片都可以成为一次真实的需求确认契机业务方看到实际运行的系统会比看需求文档更诚实地表达“这不是我要的”或者“原来还需要这个”。这正是我们想要的——让错误早一点、小一点地发生。3. 实战改造如何把一个“技术堆砌”计划变成垂直切片计划3.1 第一步从一条完整的用户路径出发改造的第一步不是急着拆分任务而是先丢掉架构视角换成“用户路径视角”。拿一个具体的订单支付流程举例我们面对的描述通常是“用户浏览商品、加入购物车、填写订单、选择支付、支付回调、查看订单状态。”这句朴素的场景描述就是切片的原料。以一个典型切片“提交订单并成功创建”为例端到端路径是用户在前端表单选择商品和数量→点击提交→后端接收请求、校验库存和价格→创建订单记录状态为“待支付”→返回订单ID和支付所需参数→前端展示订单号与金额→数据已落库刷新后订单可见。注意这里的关键词是“端到端”。哪怕UI先做得非常简陋这个切片依然是完整的——因为它的目标不是“做一个好看的提交页”而是“验证一条订单创建路径从浏览器到数据库是否走得通”。在改造计划时我习惯把这条路径横向画在一张白板的顶部再把每个步骤竖向展开形成一张“用户故事地图”Story Map。从地图里选出一个横向贯穿的“最小行”就是第一个垂直切片。3.2 第二步把切片切成“生长式增量”而不是“功能堆叠”常见的一个误区是把“垂直切片”理解成“把功能竖着切成几块按块做完”。比如订单模块切出切片A做“提交订单”切片B做“支付订单”切片C做“取消订单”切片D做“查询列表”。这看起来已经垂直了但实际粒度还是粗每个切片里都藏着好几条业务规则和复杂分支一个切片做两周和之前水平切片没有本质区别。我推荐的打法是“骨架先通血肉后填”。第一个订单切片只处理最简单的规则只做一个商品、一个默认收货地址、一个固定运费。它尽量缩短“从零到一”的周期目标是几天内打通整条链路。第二个切片再处理多商品行第三个切片处理运费计算规则第四个切片处理库存扣减与回滚等等。每个切片都创建在已有代码之上像长身体一样增量扩展业务能力。为了把粒度控制好我在规划切片时有一个反问习惯如果这个切片要写超过200行核心逻辑、涉及三张以上表的新增改动或者完成需要超过三天我就会再问自己一句——它能不能拆成两个更小的切片通常是可以的。3.3 第三步给每个切片写好“验收故事”再动手改造计划的最后一步是每个切片不仅要写任务清单还要写一段“验收故事”。验收故事不是接口文档也不是需求分析而是对切片完成后系统表现的白话描述。还是用订单功能举例切片1验收故事我是一个普通用户从商品列表页面选择一个商品输入数量点击提交订单后看到提交成功页面显示订单号和订单总额随后在“我的订单”里能看到这笔订单的记录状态为“待支付”。切片2验收故事我是一个普通用户在订单详情里看到“去支付”按钮点击后跳到模拟支付页面输入卡号后四位完成支付。支付成功后订单状态变为“已支付”我的余额被扣减。这个验收故事同时承担了三个角色它是开发者的实现目标是测试者的验收用例也是业务方确认需求的沟通载体。很多团队实际操作时喜欢把验收标准写成“订单创建成功”这样的一行字这样等于没有写。好的验收故事必须有主体、有操作、有预期结果。因为这些故事描述的是“用户能做什么”所以它们天然就是垂直切片的说明书。4. 切片执行的节奏感优先级、依赖与技术债怎么平衡4.1 不安顺序切把高风险、高不确定性的切片提前垂直切片不是简单地从用户旅程的“第一步”切到“最后一步”顺序安排大有讲究。如果第一个切片只做一个简单列表页技术上没有挑战业务价值也不核心那么它作为开张切片虽然稳妥但完全没有刺探风险。我认为正确的排序逻辑有三个维度业务核心、技术风险、依赖前置。第一顺位应该是“核心业务的最小可用闭环”。比如一个支付系统核心就是支付第一个切片应该直接打通“发起支付→支付成功→状态更新”的路径哪怕连真实网关都先不用。第二顺位是“技术风险最高的切片”。比如团队从没对接过某个第三方服务第一次做地图定位那这个切片就应该尽早做让它成为最早被刺探的对象。把风险提前扎破后面的计划才会稳。排序里的“依赖前置”指的也不是“先做后端再做前端”这种技术依赖而是指底层数据模型和基础服务的最小版本。第一个切片可能很朴素但它必须定义订单表的核心字段和组织结构。后续切片可以加字段、加索引、加状态迁移这些增量比推翻表结构要轻得多——但前提是你已经通过第一个切片把最关键的骨架定了下来。4.2 切片与切片的边界硬依赖和软依赖切片多了自然会有依赖关系。我观察下来依赖有两种硬依赖和软依赖。硬依赖指的是“切片B必须在A之后做因为没有A的数据结构或服务B无法运行”。解决硬依赖最有效的办法是它根本不是依赖而是把A的产物作为B的起点。也就是说A做完后它的代码和数据结构都是B的“基础设施”这是正常生长不是阻塞。软依赖才是最常见的坑它指的是“两个切片都在改动同一块区域做完后需要合并”。比如切片A修改了订单表的索引切片B重构了订单状态枚举并行开发后一合并就冲突。应对软依赖我通常建议“同一片区域不并行同一实体只让一个团队/一个人牵头”。如果业务紧急必须并行合并动作要提前排期不要靠“到时候再看”。真正要警惕的是“反向依赖”切片A依赖一个还没有被任何切片打造的通用服务。比如“统一登录”“权限中心”如果它们还不存在而第一个业务切片又要用到用户身份正确做法是在切片A里做一个“最小可用的身份获取模块”而不是停下业务切片去把整个权限系统搭好。这恰恰就是垂直切片的精髓不为未来可能性开发通用能力只为当前切片实现最简形态。4.3 技术债也要切片化把重构装进业务交付里很多人担心垂直切片会让代码变成意大利面尤其是前期为了快速打通可能跳过抽象、跳过某些设计。这个担心有道理但解法不是回归水平切片而是把“还技术债”也切成小片混在业务切片里。每个业务切片结束前团队应该做个简短的快照评估这个切片的代码里哪些部分是为了赶时间而妥协的比如某个函数写得太长、某个表缺了索引、某个异常处理是吞掉的。把这些记进“待重构清单”。接下来每一个新的业务切片开始前先尝还一两条清单里的债务。这种做法比“集中重构周”更有效。集中重构的问题在于重构时没有业务驱动力容易为了设计而设计改完也没人验证价值。而把重构拆进后续的业务切片里每一块重构都有明确的业务目标——新增字段时顺手把字段名统一增加状态时顺手把状态机整理清楚——技术债被流水般偿还可控且不影响节奏。5. 常见问题与避坑我以为自己在垂直其实还是水平5.1 “伪垂直”切片的面孔从实操反馈来看真正踩过的坑通常不是原理不懂而是落实走样。最常见的偏差我称为“伪垂直”表面上是端到端实际上仍是半吊子。 I总结出几个典型症状伪垂直特征说明怎么识别有页面没数据前端写了一个漂亮表单提交后后端只返回假的成功消息换台电脑演示就会发现找不到记录有接口没校验接口能通但参数异常时直接500数据库出现垃圾数据有意输入超长文本、负数、空值试试有主流程没边界只做了“正确输入”的路径超库存、重复提交、网络失败都没处理反复点击提交按钮观察状态是否异常有功能没验证业务规则写在代码里但没有任何自动化测试保护改动一处逻辑三天后才发现另一处崩了有新增没重构代码在原有结构上不断堆补丁导致越来越难改同一个函数已经超过两百行还没有拆分识别伪垂直的关键方法是“换人验收”开发切片的人去讲给团队里另一个人听让对方照着验收故事走一遍。如果对方能独立复现基本没问题如果对方需要开发者的提示才能完成说明这个切片并没有真正的端到端价值它只是开发者的“自嗨”。5.2 切片太细与太粗粒度的两个极端切片切得太细细到一个切片只有“改一个按钮颜色”这会让切片完全失去“用户价值”的意义每个切片都琐碎得无法讲述一个完整故事。更麻烦的是太细的切片会产生大量上下文切换让团队陷入忙碌却低效的假象。切得太粗一个切片包含多步操作、多种业务分支做完要两周反馈周期又被拉回老样子。我的判断标准很简单切片理想大小是让“完成一个 用户故事所需的认知负荷”在一个人的工作记忆内装得下基本上也就是1到3天的工作量。小于半天太碎大于一周太厚。这只是经验值不同团队基础不同但方向是明确的——切片要小到失去“再切一刀”的欲望同时大到足够构成一个可讲述的故事。5.3 “基础设施先行”带来的诱惑垂直切片推行过程中总会有人忍不住说“这个切片的接口需要一个统一的异常响应体先把这个做了才规范。”或者“订单状态迟早要用状态机先做状态机框架吧。”这种声音本身没错但它们是在用“架构优雅”来诱惑你回到水平切片。正确的做法是基础设施跟着最近的垂直切片长出来但只长当前需要的部分。第一个切片需要异常处理那就写一个最简单的Error模型需要身份信息那就做一个最简的登录识别不要急着做统一权限中心。随着切片增多你会自然发现哪些基础设施真正被反复使用那时再做抽象和复用才有依据。我个人有个口号“让第一个切片经历一次痛苦的丑陋然后你会更清楚什么是必要的优雅。”很多通用设计在只有一个使用方时根本没法验证是否通用。先让它在一个具体的业务场景里跑起来比坐在白板前画一年架构图更接近真相。5.4 团队协同层面的隐性问题切片执行到一半还会蹦出一些跟技术无关的坑。第一个是“看板上塞了太多同时进行的切片”。垂直切片应该配合“限制在制品数量”的原则理想状态是每个开发者同一时间只做一个切片一个切片由少数几个人最好一个负责。不要所有人都在同一个切片里打乱仗那样边界和负责人很快就会模糊。第二个是“每一轮的验收者不固定”。如果每个切片都是开发者和测试员临时搭配验收标准就会时松时紧。我建议为阶段性的切片集合指定同一个验收伙伴TA从头到尾看切片生长才能积累起对系统的整体感知发现“这个切片和前一个切片的行为矛盾”这类跨切片问题。第三点是“演示变成汇报”。很多团队做着做着把垂直切片演示做成了PPT汇报对着看板讲本周完成了什么。这是完全错误的用法。垂直切片的演示应该永远对着真实环境、真实数据、真实操作让观看者自己上手。一旦演示脱离了系统本身它就不再能发挥“需求确认”和“风险暴露”的作用流于形式。我在实际带项目的时候最后都会留下一句话如果整个团队只能记住一个词那就是“从用户嘴里讲出的完整句子才是切片的真正边界”。技术堆砌是计划时看不见完整句子而垂直切片法是把每一句用户的完整故事都变成了我们每个迭代的可交付成果。别急着追求架构完备先试着把一个最小故事从头讲到尾。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑