在敲定某个修复方案之前,先让 Claude 基于代码里真实存在的东西,把完整的选项空间摊开来——这样你做出的选择,才会参考到那些你原本不知道自己拥有的备选项。
“Here's my rough problem: Acme users churn after onboarding. Search the codebase and brainstorm 10 places we could intervene, from cheapest to most ambitious. I'll tell you which ones resonate.”
中文大意:我的问题还很粗略:Acme 的用户在完成新手引导后就流失了。请搜索代码库,头脑风暴出 10 个我们可以干预的切入点,从最省力到最有野心排列。我会告诉你哪些让我有共鸣。
我在 apps/web、services/ 和 packages/ 里搜索了新手引导、邀请和首次会话相关的代码路径,发现一个规律:大量留存机制其实早已存在,只是彼此没有接通——下面最省力的几个选项基本是接线活儿,不用从头造。勾选有共鸣的选项,然后在底部复制回复。
代码中的发现 — 零项目状态的仪表盘只渲染了一张插图和一句文案 “No projects yet”——再没有别的了。NewProjectButton 就在两层目录之外,却从未被引入这里;唯一的出路是顶部导航里那个小小的“+”。每个流失用户看到的最后一屏,很可能就是它。
代码中的发现 — 有人已经做好了一个完整的预置演示项目——“Product teaser v3”,带一段 45 秒的片段、四条打了时间戳的评论和一个已解决的讨论串——就藏在 sample_project_v1 这个 flag 后面。这个 flag 至今对所有人都是 false,文件已经 8 个月没人碰过。功能是做完了的,只是从未上线。
代码中的发现 — 邀请只通过邮件发出。TeamPanel 查询了 team_members,却完全无视 invites 表——发出邀请的人看不到队友一直没有接受,也没有重发入口。对一个主打协作的审阅工具来说,孤身一人的用户就是尚未发生的流失。
代码中的发现 — 后端已经在 user_milestones 表里记录了 first_upload、first_comment、first_invite_accepted 和 first_approval——但没有任何客户端代码读这张表,它纯粹是为分析看板而存在的。做一个“4 步已完成 3 步”清单所需的全部原料,都躺在那里。
代码中的发现 — 带时间戳的评论是 Acme 的核心循环,但这个交互入口是隐藏的:点击时间轴会把时间戳填进评论框,却没有任何东西教用户这件事。Timeline.tsx 里还留着原作者的一条 TODO: first-run hint?。可以在首次播放时加一个幽灵图钉——“点击任意位置,在此刻发表评论”。
代码中的发现 — 转码失败时(不支持的编码格式、超大的 ProRes、损坏的 moov atom),任务会进入 failed 状态、上报到 Sentry,然后对用户只字不提——项目卡片上只剩一个永远转不完的加载圈。其实存在一条“用兜底预设重试”的代码路径,但只能从一个内部管理脚本触发。
代码中的发现 — 实时在线状态已经完整实现——共享播放头、实时光标、“Maya 正在观看”的徽章——但只有两个人碰巧打开同一条审阅时它才会亮起,没有任何机制去制造这种巧合。可以在队友接受邀请时加一个“一起审阅”的排期提醒,用深链把两个人拉进同一场会话。
代码中的发现 — 审批工作流(粗剪 → 客户审阅 → 最终签署)完全可配置——但初始状态一片空白。definitions 目录里只有测试用的 __fixtures__。从 WorkflowEditor.tsx 里的一条注释来看,资深用户是靠复制一份共享的 Notion 文档来搭建自己的工作流。可以上线 5 套有主见的模板:代理商交付、YouTube 流水线、客户签署、内部 QA、本地化审校。
代码中的发现 — 今天 Acme 的新手引导有一个硬性的外部依赖:你得先有一条做好的视频,产品才派得上用场。但 services/ingest 已经支持分块 webm 上传(当初为移动端 App 而建),所以一个基于 MediaRecorder 的“录下你的屏幕,收获反馈”流程完全不需要动管线——“只”差采集界面。它移除了试用走向沉寂的最大原因:还没有可审阅的东西。
代码中的发现 — 访客分享链接是有的,但被刻意削弱:token 24 小时就过期,访客不能评论,代码里还躺着一条两年前的 // TODO(sasha): revisit guest perms after launch。流失的用户,往往正是那些客户死活不肯注册的人。把访客升级成一等公民——常驻门户、署名评论、无需账号——每一次对外审阅就都变成了一个留存循环(顺带还是一个获客循环)。