内部系统常常把功能完整放在体验之前。理由是使用者都是同事,可以培训,也可以在群里问。于是页面不断增加字段、按钮和状态,流程知识依赖口头传递。

这种成本不会消失,只是从产品开发转移到每个使用者和支持人员身上。

理解真实任务

研发平台的用户不是为了“使用平台”,而是为了创建工程、完成发布或定位失败。页面结构应围绕任务,而不是围绕后端模块。用户进入页面后要快速知道当前状态、下一步动作和阻塞原因。

以发布任务为例,页面最需要的不是把流水线所有字段铺开,而是稳定回答五件事:

  1. 正在发布哪个提交到哪个环境。
  2. 当前运行到哪一步,已经完成什么。
  3. 是否正在等待某个人或某个外部系统。
  4. 失败会不会影响已经在线的版本。
  5. 用户现在能重试、回滚还是修改配置。

这些信息对应一个任务视图模型,而不是若干后端表的直接拼接:

type ReleaseTaskView = {
  target: { project: string; commit: string; environment: string };
  status: "running" | "waiting" | "failed" | "succeeded";
  currentStep: string;
  completedSteps: string[];
  blocker?: { owner: string; reason: string };
  availableActions: Array<"retry" | "rollback" | "edit-config">;
};

危险操作需要明确范围和后果,但不能用多次无意义确认替代权限与可恢复设计。普通操作则应减少表单输入,尽量从已有上下文推导默认值。

错误信息是关键界面

外部系统失败时,平台不能只展示状态码。它要说明哪一步失败、是否影响已有结果、可以重试还是需要修改配置。错误越具体,恢复越不依赖平台开发者。

同一个 403 在不同阶段可能意味着完全不同的动作。读取仓库时的 403 需要检查代码平台授权;部署生产环境时的 403 可能需要申请环境权限。平台在调用外部服务时就要记录领域阶段,不能把解释责任留给 UI 猜测。

一条可行动错误至少包含:发生位置、用户影响、是否可重试、推荐动作和追踪编号。堆栈可以放在开发视图,不应该成为用户唯一能看到的答案。

内部产品也需要观察使用:哪些入口没人找到,哪些步骤反复失败,哪些流程仍然在线下完成。用户反馈不只是需求列表,而是判断默认路径是否成立的证据。

培训不能代替设计

培训适合解释组织规则和少见风险,不适合弥补每次操作都要记忆的界面细节。如果同一个问题在群里重复出现,应先检查信息是否应该直接显示在任务附近,或者默认值是否可以从上下文推导。

帮助内容也要连接到当前状态。相比一份覆盖全平台的手册,错误旁的一段恢复说明、字段旁的来源解释更容易被使用。用户需要的不是知道系统拥有多少能力,而是在当前一步获得下一步答案。

好的内部平台不会让工程师感到自己在操作另一个复杂系统。它应该把组织经验变成清晰路径,把复杂度留在必要的位置。

内部用户从找到入口到自助恢复完成的任务漏斗

图:跳出平台找人手工处理,也应该进入产品失败数据。

观察用户在哪里离开平台

我们给核心任务画漏斗:找到入口、通过权限、配置任务、首次执行、失败恢复、最终完成。用户跳去群里找人或登录服务器手工处理,也算平台任务失败,而不是“线下解决”。

每月选三条真实失败会话复盘,优先修阻断最多人的一步。内部用户不会因为没有竞品就接受糟糕体验,他们只会绕过平台;这些绕路正是最真实的产品反馈。