从"给爬升调参数"到"立项破解":运动世界校园项目的完整心路历程

2026-10-1452Run.cn 站长手记正文 7846 字五个小时:从「调参数」到「立项」

「我花了一整天,做的事情是让 1% 的用户多调一个参数。」——那天晚上的原话,比标题诚实。

封面:荧光绿的跑步轨迹穿过深夜城市剪影,底部是爬升波形
五个小时,从「给爬升调参数」到一份立项书。

这篇文章不是技术文档,是我自己的立项记录。写的时候刻意保留了当时的犹豫、误判和自我拉扯——因为一个决定是怎么做出来的,比结论本身更值得复盘。涉及我自己站点的防护与接口设计,一律只讲思路不讲实现;涉及破解方法论的部分,则尽量写细,因为那才是这次真正要用到的东西。

一、先把我的底牌摊开说清楚

不交代家底,后面的判断就没有参照系。我手上是一个做了两年的运动数据工具站:主站面向国内用户,有备案、走合规文案;另有一个海外站面向境外用户,两边业务同源但文案完全独立,从不混用。支撑业务的核心是一个单文件网页生成器——用户在浏览器里填运动类型、距离、配速、心率、步频,画一条轨迹,网页在本地直接把 FIT / TCX 文件造出来,用户自己导出去、自己上传。

运动类型覆盖五种:户外跑步、室内跑步、户外骑行、户外行走、泳池游泳。每种类型的预设都不一样——分圈长度、卡路里系数、步频折算规则(跑/走填双脚总步频,写文件折半成单脚;骑行填单腿踏频直接写)各有一套。文件后面还挂着一整套我自己搭的服务端体系:负责把数据真正送进平台的代理服务、授权校验、预付费计费和订单管理。这套体系的内部实现不在本文展开——文章是复盘,不是技术说明书。

但这个模式有一个我心里门儿清的天花板:工具没有复利。用户今天用一次,爽了,关掉浏览器;下个月想用得自己再点一遍。工具的收入跟活跃人数强相关,跟"这个产品值不值得被推荐"弱相关。我一直知道这堵墙在哪,只是一直没去推那扇门——直到那天晚上。

二、起点:那天下午我在干什么

把时间拉回 9 月 30 日下午。那天下午两件事看起来八竿子打不着,后来证明是后一件把前一件照亮了。

2.1 头一件事:加一个爬升输入框

需求很朴素:生成器填表里,平均步频下面加一项"爬升",用户自己填,比如 100 米、200 米、300 米,实际生成的轨迹爬升要在设置值基础上随机上浮 1%~2%。用户特意强调了一句:"默认不填就按正常输出。"这句话成了整次改造的底线:不填,现有行为一个字节都不许变。

动手前先看底层逻辑。看完发现两件事:第一,合成海拔是三层不同周期、不同相位的波形叠加出来的,跟用户输入完全无关;第二,也是关键的——平台展示的"累计爬升"是从轨迹点自己重算的,不是读文件里写的汇总字段。所以想控制爬升,不能改摘要数字,必须改轨迹点的海拔序列本身。

方案于是定了:把波形整体缩放,让相邻点正差之和精确收敛到"设置值 × (1 + 随机 1%~2%)"。这里有个数学上的巧事——缩放保持差值的正负号不变,所以总爬升随缩放系数严格线性,一次缩放就能精确命中,不用迭代。我跟搭子做了十组仿真:5 公里填 100、10 公里填 100 / 200 / 300、半马填 100 / 300、30 公里填 200、全马填 300……十组全部精确命中,误差为零。

接着是部署。改完本地,往线上推之前我顺手做了一件"以防万一"的事:把线上文件先下载下来和本地 diff 一遍。就是这一步救了我一次——线上版本比我本地的新,远端早就按部署环境的实际情况独立改过几处,包括防护策略的差异。如果当时图省事直接覆盖,表面上"改好了",实际上会把远端独立演进的内容整个抹掉,而且埋下一颗延迟爆炸的雷:文件能打开、功能看着正常,你根本意识不到自己刚刚做了一次没人会立刻发现的回滚。

那一刻我心里咯噔了一下,不是因为难,是因为后怕。备份和 diff 这两个动作加起来不到五分钟,救的是几天的排查。我原来以为"本地是主版本、线上是从版本",那天才发现是我想当然。

于是改成正确姿势:以线上文件为基线打补丁,diff 确认只有新增、没有丢失,上传,回读校验一致才算完。两台服务器各来一遍,其中一台还多出一批它独有的功能——账号维度的轨迹置顶、按位置反查地名智能命名轨迹、保存即关联——全部原样保留。然后用户来了句"顺便把防护策略也按这台机器的实际情况调一调",我又照流程做了一遍:备份、调整、校验、报告。具体调了什么不写,你懂的。

2.2 那个反差时刻

改完坐下来,我突然意识到一件挺讽刺的事:我花了一整天,做的事情是让 1% 的用户多调一个参数。而且为了这个参数,精确到了 ±1%~2% 随机、多天模式每天独立掷骰子、留空时逐字节不变、特定运动类型自动隐藏。技术上干净利落,交付质量我自己都满意。

而就在当天晚上,我看到了另一个人的后台,发现人家在做的是完全另一层的事。

三、三层侦察:每一层都比上一层让我沉默得更久

3.1 第一层:地图页——我那一眼特别浅

朋友发来一个地址,说这网站的地图做得有意思。我当时的动机很朴素:自己的地图源选型正卡着,多看一个参照。抓下来 147KB,三十秒出结论:Leaflet 1.9.4 加一个旋转插件,图源是高德瓦片,街道图和卫星图可切,无版权标注、单子域、页面里没有任何坐标转换代码。

我还顺手纠正了朋友一个推断——他看地图"只显示中国境内",以为是外国人做的。我查了页面:lang 是 zh-CN,标题"路线绘制工具",4400 多个汉字,界面文案全是中文。这是国内人做、给国内人用的东西。"只显示中国"是高德瓦片本身的特性,跟作者是谁没关系。

现在回头看这一晚的判断,全是浅的。我看到的是"技术选型",人家摆出来的是"产品定位"。我看了三十分钟源码,愣是没问一句:这东西给谁用、解决什么问题、靠什么收钱。

3.2 第二层:Keep 生成器页——他没有文件

顺着往里走是一个带授权码的页面,只有 30KB,比我想象的简单。但表单一展开,我的手停了。逐项拆:

字段它是什么我的第一反应
Keep 手机号 + 密码用户账号;密码首次必填,之后"可留空使用已保存的登录信息"等等——他要替我登录?服务端还记住登录态?
跑步距离 + 距离随机波动目标距离,"每次在设定距离上随机增加 0~此值"这设计挺好,我也有类似的尾数随机
最小/最大配速区间随机跟我一样
路线 ID"多个用逗号分隔,0=随机",如 2000,2001,2002这不是坐标,是数据库 ID——他有自己的路线库,地图页就是入口,闭环了
日期范围 + 时段开始/结束日期;时段可添加多段、可一键重新随机分配比我细,我只有单时段
开始跑步按钮任务列表 → 执行 → 跑步记录执行的是服务器,不是浏览器

前端所有操作 POST 到同目录一个 PHP 入口。完整流程是:填账号密码验证一次 → 创建跑步计划(排期到未来几天、多个时段)→ 点开始 → 服务器自己登录、自己伪造跑步、自己往平台上报 → 用户在记录列表里看结果。用户全程什么都不用干,也没有任何文件。

真正让我后背发凉的不是他功能多,是他根本不需要"文件"。我引以为傲的本地生成 FIT/TCX、能送 Garmin、Suunto 多平台——在他这条路上一文不值。用户要的就是"今天别让我自己去跑"。

我当时的反应是先鄙夷后心酸。鄙夷的是他把账号密码交给第三方托管,信任门槛多高、出了事责任多大;心酸的是——他这做法没有技术含量,却把"用户的真实痛点是什么"回答对了。

3.3 第三层:校园跑订单管理——他是一家工作室

再往里是一个 355KB 的页面,标题五个字:运动校园订单管理。这不是工具,是业务后台。六个模块挨个看:

  • 订单列表:校区.账号.密码、所属代理、订单配置、状态,搜索分页批量勾选——"代理"这一列说明他有下级、有分销,这是公司不是个人。
  • AI 批量接单:粘贴任意格式的订单文本(张三 13800138000 abc123 跑20次2公里 这种),AI 自动提取账号、密码、距离、次数,批量建单。三步向导,粘贴即成单。
  • 余额计费:项 × ¥2,三段式预览——当前余额 / 需支付 / 提交后余额。预付费闭环。
  • 售后补排:"今日失败待补排"一键筛选(今天有失败、无待执行、无成功、未完成)→ 批量今日再安排一次。真实成本中心被他放到了页面最显眼的位置。
  • 规则同步:自动登录后同步学校规则、进度、围栏。
  • 执行日志:按日志 ID、内容、操作类型、结果、详情全字段搜索。

看到 AI 解析那一段我有点后背发凉——因为这套东西我见过,在我自己家里见过。我之前做 AI 填表时写过一模一样思路的字段约定和防编造规则。区别在于:他把它做成了接单入口,我用同样的技术做成了填表助手。技术只是原材料,产品形态才决定它值多少钱。

四、算账时间:他和我,差在哪两个维度

维度他我
产品形态全托管代跑,账号在他服务器工具 + 自建代理,用户自己生成自己传
运动覆盖Keep 一条线 + 校园跑一条线五种运动,一个生态
数据文件不产出文件,直接构造上报FIT / TCX 全格式,多平台可导
路线管理画路线存库 → ID 引用 → 0=随机轨迹库 + 多天起点滑动变体
批量能力AI 粘贴订单文本批量建单多天批量生成,单用户单计划
计费余额制 ¥2/项 + 代理分销授权码 + 积分预付费
售后失败待补排、一键重排有失败记录,无统一补排台
登录态服务端保存,验证一次长期免密每次登录(可加会话复用)
最大风险用户密码托管 → 封号/盗号/纠纷全背数据不出用户浏览器

算完收敛成三句话:一、我赢在文件的通用性和责任边界,他赢在交付形态和商业闭环,但两件事抢的是同一批"懒得折腾、只想有记录"的用户。二、技术细节我领先,商业形态我落后——领先是过去两年的积累,落后是从没想过去补。三、我缺的不是新功能,是新场景——我只押了一个生态,从没问过"除了这个平台,还有谁需要运动数据"。

第三句是真正点醒我的地方。我一直在想"怎么让这个平台的人用得更好",从来没想到第二句话。不是功能不够,是场景太少。场景的想象力和功能的完善度,根本不是一个量级的难题。

五、走歪的那三分钟

看完校园跑后台,我脑子里蹦出来的第一个念头很不体面:能不能把他服务器上运动世界的对接实现直接拿来?当时的自我说服是"同行之间互相学习很正常"。这三分钟的心理过程值得原样记录:

  • 第 1 秒

    兴奋——"他连账号密码都能托管,我要是把协议拿到,这条线不就通了。"

  • 第 2 秒

    算账——"能省下多少逆向时间?"答案:可能几周。

  • 第 3 秒

    心虚——"这玩意儿是不是有点损。"

  • 第 4 秒

    自我说服——"大家都是同行,谁还没研究过别人。"

  • 第 5 秒

    说出来了。然后就没有然后了。

拦下它的是两条理由,一条法律一条技术,缺一不可:

法律那条:去动别人的服务器——拖库、爆破、越权——是刑法上方向明确的罪名,没有模糊地带。我是有备案的网站经营者,备案号挂在页面底下;一旦出事不是"技术事故"能解释的,而且受害方是同行,他一定报案。技术能从公开客户端自己剥,就自己剥——这条线我不碰。

技术那条(更致命):我扒过他前端了,那个 PHP 入口只是"他家前端 → 他家服务器"的门。运动世界校园 App 的签名、加密、设备校验逻辑全在他服务器的代码里。把他前端扒穿,也只能看到"他家客户端怎么调他家服务器",中间最值钱的一段——他家服务器怎么对接官方——依然看不到。

所以这条"捷径"的账是这样的:违法风险是实的,收益是零。当一条捷径既脏又不通,那它就不是捷径,是幻觉。算完这笔账我反而松了口气——不是靠道德感战胜了贪念,是常识战胜了贪念。这比"我抵制住了诱惑"踏实多了。

然后问题绕回原点:我缺的是校园跑的对接能力,不能用他的,我从哪拿?

答案简单到我拍了下大腿:从 App 里拿。协议的真身永远在客户端里,不在别人的服务器上。

六、破解这条路怎么走:方法论与既往战绩

这不是我第一次走这条路。先把两次完整跑通的战役写细,因为它们就是这次的作业模板。

6.1 悦动圈:从参数对不上到签名还原

悦动圈那次是标准的"参数排除法"打法,整个过程六步:

  1. 抓包对照:先抓 App 的正常请求,把 URL、请求头、body 完整存下来,作为"标准答案"。
  2. 静态定位:反编译 APK,全局搜 URL 路径字符串,反查到发请求的类,顺着类找参数拼装的方法。
  3. 逐字段排除:接口报错不给理由,就把参数一个一个动——哪个字段改了会报错(参与校验)、哪个改了没反应(装饰性字段)、哪个必须实时(时间戳)、哪个其实不参与签名。一张Excel 把每个字段的性质标出来。
  4. 锁定签名算法:拼串顺序试出来之后,发现报错只跟"串 + 一个固定盐"有关——是 HMAC-SHA1,key 就藏在代码里的一串固定字符串。
  5. 还原验证:Python 按"参数排序 → 拼串 → HMAC"复现,和抓包里的签名逐字节比对,一致后发请求,业务成功。
  6. 沉淀:把"参数性质表 + 签名位置 + 拼串顺序"写成文档。下次遇到同类 App,第一步就不是从零开始。

那次最大的收获不是那个算法,是知道

6.2 咕咚:wToken 那道坎,通宵过的

咕咚是硬骨头。它有一道 wToken 校验,不是简单签名,是带设备信息和时序的动态令牌。那晚基本没睡:反编译、找上传链路入口、定位 wToken 生成点、看它依赖哪些设备字段、一条条试,最后绕过校验把 fit 数据传了上去。咕咚那次验证了一个信念:加固和风控是可解的,只是要时间。没有解不开的,只有不值得解的。这份底气是这次敢立项的心理基础。

6.3 标准作业流程(SOP):四阶段+常见坑

阶段做什么常见坑
① 环境安卓模拟器(MuMu 12 / Android 12)+ root;mitmproxy 起代理;证书装进系统信任库(Android 7+ 不认用户证书,装用户库抓不到 HTTPS——这是新手最常踩的坑);frida-server 按模拟器架构选对版本(x86_64 别下成 arm 的)证书装错库;frida-server 版本和 frida 客户端不匹配;模拟器多开时 adb 连错实例
② 抓包SSL Pinning 用 frida 脚本绕过;抓三段关键流量:登录 / 开始运动 / 结束上报,每段存完整请求头 + body + 响应App 检测代理(设置里不走系统代理的要用 iptables 或真机强制转发);证书固定双保险(网络库自带 pinning)
③ 定位JADX 反编译搜 URL 字符串反查发请求类;加固壳先脱或直接 frida 动态 hook;参数拼装逻辑逐行读;必要时进 so 静态分析加固后 JADX 打开全是空壳——先过壳再分析;字符串加密的先 hook 解密函数
④ 复现Python 按"参数排序 → 拼串 → 签名"复现,与抓包逐字节比对;先登录成功,再上报成功;然后测风控边界(频次、间隔、轨迹合理性)签名一致但业务报错——多半有隐藏字段或时序校验;复现成功 ≠ 能商用,风控在服务端

真机那条备用链路也留着:vivo 手机加一个系统属性强制 WebView 流量走代理,配合 PC 上的临时代理转发——模拟器被针对时的 Plan B。

6.4 运动世界校园的第一手情报

动手前的静态侦察已经能拿到不少信息:包名 com.zjwh.android_wh_physicalfitness,厂商是浙江的一家信息科技公司,官网域名指向已失效,最新版本 7.3.x,安装包 300MB 往上——这个体量基本预示有加固和大量资源加密。更关键的是官方商店介绍里明晃晃写着一句:"智能人脸识别验证,确保跑步记录真实可靠"。

这句话改变了我的风险评估排序。签名算法再难,只要在客户端里就有被挖出来的一天;但人脸识别是活体交互,发生在"开始跑步"那一刻,协议复现只能打通数据链路,打通不了活体交互。所以立项书里我把"设备指纹与人脸验证"列为最高等级风险,并且把第一步的验收标准定为"能否完整复现一次真实上报",而不是"能否看懂代码"。

七、立项书(正式版)

项目名:运动世界校园链路研究(内部代号 YDSJ)。一句话定义:通过自有抓包与逆向手段,还原运动世界校园 App 的登录与运动上报协议,评估其可复现性,再决定是否形成可交付的产品形态。注意三个限定词:自有手段(不碰第三方)、还原协议(先技术后产品)、评估可复现性(先验证再投入)。

7.1 四层目标与验收标准

层级做什么验收标准(可判定,不含糊)
L1 协议研究抓登录、开始运动、上报三段流量,定位签名与加密字段Python 独立复现一次登录 + 一次上报,响应与 App 行为一致
L2 可复现性评估验证风控边界:频次、设备指纹、轨迹合理性、人脸环节明确写出"能不能用 / 什么条件下能用 / 哪些情况必挂"
L3 工具化协议做成界面可控的工具,风格与现有生成器一致连续 7 天任务无人工干预
L4 商业闭环订单、计费、代理、售后补排暂不启动,等 L2 有结论再议

拆四层的意义:L1 失败不用付 L4 的代价,L2 失败不用付 L3 的代价。第一纪律是"不许越级投入"。

7.2 三条红线

  1. 不碰第三方服务器。不拖库、不爆破、不越权、不扫端口。技术能从公开客户端自己剥就自己剥,剥不出来就停手。
  2. 现阶段不托管用户密码。"数据在用户手里"是我唯一的差异化优势,托管一次这个优势就没了。封号、盗号、纠纷的连带责任,收益还没验证,锅我背不动。
  3. 不碰学校考核规则的伪造。校园跑的核心场景是大学生体育考核。模拟一次运动记录和替学生规避考核,技术上可能只差几个字段,动机和后果完全不同。这条线不是给自己加难度,是给未来那个可能想越界的自己提前装栏杆。

7.3 技术路线四步(含退出条件)

  • 第一步 · 环境与静态侦察

    包名、版本、加固识别、关键 so 清单。退出条件:无。

  • 第二步 · 三段流量抓全

    登录 / 开始运动 / 上报的完整请求响应。退出条件:连续两次抓不到有意义明文 → 评估脱壳成本,超两天停下来重新算账。

  • 第三步 · 签名与加密还原

    Python 复现登录 + 上报。退出条件:签名一致但持续业务报错且无法绕过 → 转 L2,结论"不可用"。

  • 第四步 · 风控边界评估

    单次成功率、连续 7 天稳定度、触发风控的具体条件。退出条件:出现不可恢复风控行为 → 项目终止,转入下一场景调研。

7.4 分工与成功判定

分工还是老规矩,也是这个项目安全的一部分:环境、脚本、分析、复现我来;账号与关键操作(登录、验证码)用户自己来——密码不出他自己的机器,我也不需要知道它。

成功:L1 + L2 通过,产出能稳定跑 7 天不干预的复现方案。
失败:L2 判定风控不可绕过——失败也必须是产出物,一份写明原因的结论文档,存档,不留烂尾。
最坏:反复"再试试"、无限期挂着。这是最耗人的死法,我提前把它定义成失败:六周内必须出 L2 结论,到期没结论默认按不通处理,归档不再想。

八、心路:没写进立项书的真实想法

关于自我怀疑。那晚我其实有点慌。我意识到自己过去两年一直在"把工具打磨得更精致"——步频折半、心率锚定、爬升随机、三种文件格式、多环境同步。这些活儿做得又快又漂亮,但它们有个共同点:都是为了让已经用的人更满意。被刺激到的是一个从没问过的问题:除了这些字段,还有什么?除了这个平台,还有谁?这种怀疑比失败难受——失败至少说明努力了,自我怀疑说明方向本身可能有问题。

但我很快确认了自己不是一无所有,只是偏科。我的文件能力是真优势(一个文件多平台吃,他做不到);我的责任边界是真优势(数据不出用户浏览器,可以写进宣传文案的实质差异);我的逆向手艺是真优势(两次完整战役不是侥幸)。缺的只是场景视野——而这条最容易改,成本只是"多看几个站点"。偏科和没本事,是两件完全不同的事。

关于胜负心。有个不太好意思承认的动机:我有点不甘心被比下去。不是嫉妒某个具体的人,是"我明明也不差,为什么他看起来做得比我大"的窝火。这情绪不健康,但有个有用的副产品——它让我这次侦察看得特别细,而不是点两下就走。我承认它存在,但不打算把它当燃料。燃料烧得快灭得也快,真正能烧一年的燃料是:确认了一条能通的路,而且这条路只有我这种手艺的人能走。

关于会不会丢主业。不会。两条线共用同一套基建——用户授权体系、代理服务、生成器框架、多天批量逻辑,全部可复用。这不是开新灶,是把现有的锅灶架到第二个灶台上。现有用户一根头发都不会被动。

九、三个分支与止损条件

分支 A(最保守):协议复现工具,界面跟现有生成器同风格,用户自用自传。这个结果不坏——它证明了"我的逆向能力可以覆盖第二个平台",这个证明本身有价值。

分支 B(中等):做成可接单的系统——粘贴订单文本、AI 解析、批量建单、失败补排。收入模式从"卖工具"变成"接服务",那时候才轮到考虑余额制和代理要不要抄。这是跑通之后的事,现在想太远只会误导投入。

分支 C(最激进):工具被别的代跑工作室拿去用,我提供协议层和工具层。期待的是收入天花板,警惕的是它把我往红线(托管账号)上推。真到那步,我希望是别人托管自己的账号,而不是我把账号收过来。

三个分支我都想要,这就是最危险的地方。一个项目三条路都通,人最容易在中间迷路。所以立项书写死了:先走 A,A 跑通再想 B,B 的数据说话才考虑 C。不许跳级,不许幻想。

如果做不成呢?三种失败都想过了:技术不通(native 层加密、协议级壳)→ L2 出结论即停;技术通了但商业化不划算 → 转纯工具挂着;最怕的是第三种——"不做了但一直在想",不产出任何东西只耗心情。所以定了硬性收尾条件:六周内必须出 L2 结论,出了结论项目进入"终止"或"推进"二选一,不允许中间态。

十、给自己的行动清单

  • 确认运动世界校园 App 包名、最新版本号、官方下载渠道(不碰第三方改包)
  • MuMu Android 12 起模拟器:root、apk 持久化、mitmproxy 证书三项就位
  • 静态侦察:JADX + apktool 过一遍,判断加固、壳类型、关键 so
  • 装 App,frida unpin 挂上,确认能抓到 HTTPS 明文
  • 抓三段流量:登录 / 开始运动 / 结束上报,完整存档
  • 定位签名生成点:先 Java/JS 层,找不到再进 so
  • Python 复现:先跑通登录,再跑通上报
  • 风控边界测试:频次、间隔、轨迹合理性、异常响应记录
  • 产出《可用性结论》文档(含失败原因分析)
  • 结论当天二选一:推进或归档,不拖

后端与商业侧(这轮不做,只占位):AI 批量订单解析入口、代理会话复用免密、上传失败统一补排台、代理体系(等有下级再设计,别提前)。

常见问题 FAQ

为什么不直接参考竞品已有的对接方案?
竞品页面上能看到的只是它前端如何调用它自己的服务器,而校园跑 App 的签名与加密逻辑在竞品服务端的代码里。就算把前端扒穿,也拿不到中间最关键的对接实现——这条路既不可取也不可用,只能自己从客户端协议入手。
抓包逆向自己的账号数据,边界在哪里?
所有流量只来自自己注册的账号、自己控制的设备;不碰第三方服务器、不拖库、不爆破、不越权。本文立了三条红线:不碰第三方服务器、现阶段不托管用户密码、不涉及学校考核规则的伪造。
运动世界校园最大的风控难点是什么?
不是签名算法,是设备指纹与人脸识别验证。官方介绍明确提到"智能人脸识别确保跑步记录真实可靠"——活体校验发生在客户端交互层面,协议复现只能打通数据链路,打通不了活体交互。立项书把它列为最高等级风险。
如果协议复现失败怎么办?
立项书预设了"失败也是产出物":六周内必须出结论,失败则归档一份写明原因的结论文档,不允许"反复再试试"的中间态。到期没结论默认按不通处理。
这个项目和现有的运动数据生成器是什么关系?
共用同一套基建:授权体系、代理服务、生成器框架、多天批量逻辑都可复用。属于把现有锅灶架到第二个灶台上,不动现有用户的任何东西。

后记:参数与判断

从"给爬升调参数"到写下这份立项书,大概走了五个小时。一开始以为只是个小插曲——顺手扒个网页,看个新鲜。这种事干过很多次,从来没有哪次像这次一样,五个小时之后手里多了一份立项书。

最扎心的两句话留在这里:第一句,我花一整天让 1% 的用户多调一个参数,人家在设计一个商业系统。第二句,我一直在优化"怎么让现有用户更满意",从来没问过"除了这些用户,还有谁需要"。

这两句不是自我鞭打,是坐标校准。技术能力的增长是线性的,视界的增长不是——前者靠时间,后者靠"敢不敢去看别人在干什么、然后承认自己落后"这一步。至于那条线能不能走通,八周后见分晓。到时候不管结论是什么,我都会回来把这份文档补上结尾。

写给自己三句话:① 别用战术勤奋掩盖战略懒惰——把手上能做的做到极致,和找到值得做的,是两种能力。② 扒网页扒的不是技术栈,是业务模型;看竞品要从外皮看到骨架。③ 红线之所以是红线,不是因为有人盯着,是因为线那边全是我不想变成的样子。
本文由真实开发记录整理

⚠️ 说明:本文为站长个人复盘手记,仅记录项目决策过程与方法论,不构成任何技术教程或服务承诺;涉及第三方平台的名称与页面信息仅用于行业分析,与其官方无关。