需求 · 边界

做企业后台前,必须先确认哪些需求边界?

企业后台开发前,需要确认角色、流程、数据、权限、异常情况和上线范围,否则容易越做越散、越做越贵。

后台系统看起来只是表单、列表和按钮,但真正决定成本和稳定性的,是背后的角色、流程、数据和权限。边界不清,后面每一个“顺便加一下”都会变成成本。

先确认谁在用

不同角色看到什么、能操作什么,是后台设计的第一层边界。

再确认核心流程

从创建、审核、处理、完成到归档,每个状态要清楚。

确认数据来源和去向

哪些数据人工录入,哪些来自接口,哪些要导出或同步给其他系统。

确认异常流程

撤回、作废、修改、退款、补录、权限变更,这些常常是系统复杂度的来源。

确认第一版不做什么

明确暂不做的功能,和明确要做的功能一样重要。

脱敏项目复盘:退货审批系统如何在开发前说清边界

“做一个退货审批”听起来很明确,实际会牵涉原订单、可退数量、仓库收货、质检、退款、换货和责任归属。如果开发前只画几张表单,第一次遇到部分退货、跨批次或质检不通过,原有流程就会失效。

业务边界

我们用正常退货、部分退货、超期退货、换货和拒收五个真实样例画状态图,明确首期只处理已发货订单的标准退货,退款仍由财务系统执行。系统负责申请、审批、收货、质检和退款指令交接,并保存外部退款结果;售前取消和维修返厂属于其他流程。

产品形态

申请端从原订单选择可退明细,自动带出数量上限和规则;审批端按金额与原因显示风险;仓库端扫码收货,质检端记录结果与图片;客服在同一时间线查看进度。每个角色完成一个清晰任务,而不是维护一张包含所有字段的大表。

技术解决方案

后端以退货单和退货明细为核心,显式状态机控制申请、审批、在途、收货、质检和关闭。原订单、库存与财务通过接口契约连接,外部调用使用幂等键和结果表;数量校验在事务内完成,防止同一订单被并发超退。操作和外部回调都进入审计时间线。

难点设计

边界讨论重点放在异常:实收少于申请、质检拆分结果、退款失败、审批人离职和外部系统不可用。每种异常明确责任角色、可重试动作和人工兜底,不让订单卡在无人理解的中间状态。暂不支持的场景也要在入口拦截并说明处理方式。

用户体验

界面持续显示可退数量、下一责任人和预计步骤,退回修改保留已填数据;扫码或接口失败可以稍后续办。客服能从原订单直接发起申请,仓库和质检只看到当前需要确认的字段,避免角色之间重复录入。

产品效果与验收

验收用完整样例逐状态执行,并观察超退拦截、处理周期、重复录入、客服查询耗时和异常滞留数量。同时验证退款接口失败、重复收货和并发超退可以恢复。开发前把边界说清,减少的不是会议,而是上线后的返工和业务风险。

需求边界最终要落成接口、状态和验收契约

“做一个订单系统”不是可开发的边界,“销售创建报价,客户确认后生成订单,仓库发货,财务确认回款”才开始接近工程输入。我们会把每个动作写清发起人、前置状态、输入数据、产生的记录和失败处理。这样前端、后端、测试和业务讨论的是同一条流程,而不是各自理解一组页面。

用状态表和时序图暴露歧义

流程图适合看全局,状态转换表适合约束规则,时序图适合确认多个系统之间谁先调用谁。比如付款成功后,是支付平台通知系统,还是用户页面主动查询;通知重复了怎么办;库存锁定失败是否自动退款。把这些问题画出来,往往能在编码前发现责任循环和无法恢复的中间状态。

数据契约要说明来源、含义和唯一性

“客户名称”可能来自手工输入,也可能来自工商数据;“订单号”可能是本系统编号,也可能是外部平台编号。字段字典除了类型和必填,还应写来源、单位、时区、唯一约束、敏感级别和修改规则。跨系统接口则要明确版本、超时、重试、幂等键和错误码,否则联调时最容易把业务异常当成网络异常反复重试。

非功能要求决定系统能否进入生产

并发量、响应时间、可用性、数据保留、备份恢复、浏览器范围和合规要求,常常不在页面原型里,却直接影响架构。一个内部审批系统与面向公众的秒杀活动,页面数量可能接近,容量和安全设计却完全不同。我们倾向先给关键链路设置可验证的 SLO,而不是笼统承诺“高性能”。

变更要有基线,不把讨论变成对错

确认范围后保留版本基线:本阶段包含什么、明确不包含什么、如何验收。新增需求先判断是否改变数据结构、状态机、权限或第三方接口,再决定放入当前阶段还是后续迭代。变更控制不是拒绝调整,而是让时间、成本和风险透明,避免一句“顺便加一下”掩盖一次完整的架构变化。

边界确认要落成四份可执行工件

状态迁移表决定哪些动作真正合法

每个核心对象列出当前状态、动作、操作者、前置条件、目标状态和副作用。例如退款申请通过后是否释放额度、已发货订单能否取消。接口只接受表中存在的迁移,并在数据库事务里校验当前状态。这样“按钮能不能点”不再是前端个人理解,而是后端可测试的业务规则。

接口与数据契约明确谁拥有事实

契约写清字段类型、必填条件、枚举、唯一键、时间与金额单位、错误码和分页方式,同时标注客户、商品、订单等主数据由哪个系统维护。跨系统同步要定义触发时机、最终一致性和冲突处理。没有所有权约定,两个系统都能改客户名称,迟早会出现无法判断谁是准数的情况。

异常矩阵补上主流程图没有画出的部分

针对重复提交、网络超时、第三方成功而本地失败、审批人离职、数据缺失和操作撤销逐项决定:拒绝、重试、补偿还是人工处理。每类异常指定可见提示、后台状态和责任人。复杂项目的成本往往集中在这些分支,越早确认,报价和工期越接近真实。

验收用例与非目标共同锁定第一期

每个范围项写成可执行用例,包含账号角色、初始数据、操作步骤和预期结果;同时列明第一期不做的端、报表、集成和历史迁移范围。需求变化通过变更记录评估影响,而不是在群聊里随口加入。完成标准清楚后,业务、产品、开发和测试才能对“交付了什么”达成一致。

你可以先这样判断

  • 有哪些角色
  • 每条流程有哪些状态
  • 哪些数据必须准确
  • 第一版哪些功能可以暂缓
如果你正好卡在这个问题上

先用 3 分钟描述背景,我们帮你判断该不该做、先做什么。

快速描述您的需求