后台系统看起来只是表单、列表和按钮,但真正决定成本和稳定性的,是背后的角色、流程、数据和权限。边界不清,后面每一个“顺便加一下”都会变成成本。
先确认谁在用
不同角色看到什么、能操作什么,是后台设计的第一层边界。
再确认核心流程
从创建、审核、处理、完成到归档,每个状态要清楚。
确认数据来源和去向
哪些数据人工录入,哪些来自接口,哪些要导出或同步给其他系统。
确认异常流程
撤回、作废、修改、退款、补录、权限变更,这些常常是系统复杂度的来源。
确认第一版不做什么
明确暂不做的功能,和明确要做的功能一样重要。
脱敏项目复盘:退货审批系统如何在开发前说清边界
“做一个退货审批”听起来很明确,实际会牵涉原订单、可退数量、仓库收货、质检、退款、换货和责任归属。如果开发前只画几张表单,第一次遇到部分退货、跨批次或质检不通过,原有流程就会失效。
业务边界
我们用正常退货、部分退货、超期退货、换货和拒收五个真实样例画状态图,明确首期只处理已发货订单的标准退货,退款仍由财务系统执行。系统负责申请、审批、收货、质检和退款指令交接,并保存外部退款结果;售前取消和维修返厂属于其他流程。
产品形态
申请端从原订单选择可退明细,自动带出数量上限和规则;审批端按金额与原因显示风险;仓库端扫码收货,质检端记录结果与图片;客服在同一时间线查看进度。每个角色完成一个清晰任务,而不是维护一张包含所有字段的大表。
技术解决方案
后端以退货单和退货明细为核心,显式状态机控制申请、审批、在途、收货、质检和关闭。原订单、库存与财务通过接口契约连接,外部调用使用幂等键和结果表;数量校验在事务内完成,防止同一订单被并发超退。操作和外部回调都进入审计时间线。
难点设计
边界讨论重点放在异常:实收少于申请、质检拆分结果、退款失败、审批人离职和外部系统不可用。每种异常明确责任角色、可重试动作和人工兜底,不让订单卡在无人理解的中间状态。暂不支持的场景也要在入口拦截并说明处理方式。
用户体验
界面持续显示可退数量、下一责任人和预计步骤,退回修改保留已填数据;扫码或接口失败可以稍后续办。客服能从原订单直接发起申请,仓库和质检只看到当前需要确认的字段,避免角色之间重复录入。
产品效果与验收
验收用完整样例逐状态执行,并观察超退拦截、处理周期、重复录入、客服查询耗时和异常滞留数量。同时验证退款接口失败、重复收货和并发超退可以恢复。开发前把边界说清,减少的不是会议,而是上线后的返工和业务风险。
需求边界最终要落成接口、状态和验收契约
“做一个订单系统”不是可开发的边界,“销售创建报价,客户确认后生成订单,仓库发货,财务确认回款”才开始接近工程输入。我们会把每个动作写清发起人、前置状态、输入数据、产生的记录和失败处理。这样前端、后端、测试和业务讨论的是同一条流程,而不是各自理解一组页面。
用状态表和时序图暴露歧义
流程图适合看全局,状态转换表适合约束规则,时序图适合确认多个系统之间谁先调用谁。比如付款成功后,是支付平台通知系统,还是用户页面主动查询;通知重复了怎么办;库存锁定失败是否自动退款。把这些问题画出来,往往能在编码前发现责任循环和无法恢复的中间状态。
数据契约要说明来源、含义和唯一性
“客户名称”可能来自手工输入,也可能来自工商数据;“订单号”可能是本系统编号,也可能是外部平台编号。字段字典除了类型和必填,还应写来源、单位、时区、唯一约束、敏感级别和修改规则。跨系统接口则要明确版本、超时、重试、幂等键和错误码,否则联调时最容易把业务异常当成网络异常反复重试。
非功能要求决定系统能否进入生产
并发量、响应时间、可用性、数据保留、备份恢复、浏览器范围和合规要求,常常不在页面原型里,却直接影响架构。一个内部审批系统与面向公众的秒杀活动,页面数量可能接近,容量和安全设计却完全不同。我们倾向先给关键链路设置可验证的 SLO,而不是笼统承诺“高性能”。
变更要有基线,不把讨论变成对错
确认范围后保留版本基线:本阶段包含什么、明确不包含什么、如何验收。新增需求先判断是否改变数据结构、状态机、权限或第三方接口,再决定放入当前阶段还是后续迭代。变更控制不是拒绝调整,而是让时间、成本和风险透明,避免一句“顺便加一下”掩盖一次完整的架构变化。
边界确认要落成四份可执行工件
状态迁移表决定哪些动作真正合法
每个核心对象列出当前状态、动作、操作者、前置条件、目标状态和副作用。例如退款申请通过后是否释放额度、已发货订单能否取消。接口只接受表中存在的迁移,并在数据库事务里校验当前状态。这样“按钮能不能点”不再是前端个人理解,而是后端可测试的业务规则。
接口与数据契约明确谁拥有事实
契约写清字段类型、必填条件、枚举、唯一键、时间与金额单位、错误码和分页方式,同时标注客户、商品、订单等主数据由哪个系统维护。跨系统同步要定义触发时机、最终一致性和冲突处理。没有所有权约定,两个系统都能改客户名称,迟早会出现无法判断谁是准数的情况。
异常矩阵补上主流程图没有画出的部分
针对重复提交、网络超时、第三方成功而本地失败、审批人离职、数据缺失和操作撤销逐项决定:拒绝、重试、补偿还是人工处理。每类异常指定可见提示、后台状态和责任人。复杂项目的成本往往集中在这些分支,越早确认,报价和工期越接近真实。
验收用例与非目标共同锁定第一期
每个范围项写成可执行用例,包含账号角色、初始数据、操作步骤和预期结果;同时列明第一期不做的端、报表、集成和历史迁移范围。需求变化通过变更记录评估影响,而不是在群聊里随口加入。完成标准清楚后,业务、产品、开发和测试才能对“交付了什么”达成一致。
你可以先这样判断
- 有哪些角色
- 每条流程有哪些状态
- 哪些数据必须准确
- 第一版哪些功能可以暂缓
