敏捷开发:是快餐还是真的有用?

窗外是深圳南山区凌晨三点的雨声,咖啡机已经空转第三次了。我盯着Jira看板上那片刺眼的红色,突然觉得所谓的“敏捷”就像这杯冷掉的拿铁——闻起来香,喝下去只剩酸涩。

团队刚接了个跨境电商的爬虫项目,客户要求两周内上线能抓取五个平台价格变动的系统。我作为当时唯一的技术负责人,拍着胸脯说用敏捷冲刺能搞定。现在想想,32岁的我真是天真得可笑。我们把需求拆成几十张卡片,每天站会,每周评审。可问题出在哪呢?出在那些该死的“用户故事”根本写不清楚。“作为商家,我希望实时监控竞品价格”——这话听起来多美好,可背后是平台反爬策略每六小时变一次,是IP池需要动态扩容,是数据清洗规则得跟着页面结构随时调整。这些技术债,在那些光鲜的故事卡背面,一个字都没提。

第二周冲刺到一半的时候,我已经在服务器上手动切换了十七次代理IP。团队里新来的小伙子在站会上兴奋地说“昨天完成了价格解析模块的开发”,我心里咯噔一下。会后拉他看代码,果然,他用的是正则表达式硬匹配——只要页面div结构微调,整个模块就崩了。我忍着火气问为什么不用XPath或者更健壮的解析方式,他眨眨眼说:“故事卡上只写了‘能解析价格’,没指定方法啊。”那一刻我真想摔键盘。

但更深的焦虑来自商业层面。客户每天追着要“可演示的增量”,可爬虫这玩意儿,在做到80%可靠性之前,根本没法演示。要么完全跑不通,要么跑通了但数据质量一塌糊涂。我们第三冲刺周期演示时,现场抓取成功率只有43%,客户的脸当场就黑了。我拼命解释这是“早期验证”,是敏捷里允许的失败,可人家甩下一句:“我花钱不是买你们验证失败的。”

夜深了,雨还没停。我关掉Jira,打开终端开始重写代理调度模块。什么站会、什么评审、什么故事点估算,在爬虫被封IP的瞬间都是狗屁。真正的“敏捷”应该是什么?是凌晨三点我能立刻改代码而不需要开什么变更会议,是我知道哪个数据库连接池参数需要微调,是当某个平台突然启用动态加载时,我能在半小时内把Selenium脚本插进去。

可话说回来……那些流程真的一无是处吗?上周三,正是因为每日站会听到测试同事嘀咕“亚马逊的验证码出现频率好像变高了”,我们才提前半天启动了验证码识别模块的升级。这算不算敏捷的价值?

咖啡机又响了。我忽然意识到,或许问题不在敏捷本身,而在于我们这些搞技术的人总想把它当成银弹。对于需求明确、逻辑线性的项目,那些看板和站会或许真能提效。但对于爬虫这种和外部环境疯狂博弈的领域,过度流程化反而捆住了手脚。该硬磕的时候,就得一个人对着日志死磕,什么迭代什么回顾,都比不上瞬间的灵光一现。

天快亮了。我把最后一段调度算法commit上去,成功率暂时稳在了78%。今天早上的站会,我大概还是会继续画那张燃尽图——毕竟客户认这个。但心里清楚,真正的冲刺,永远发生在这些无人看见的深夜里。

团队需要流程作为脚手架,但脚手架不能代替建筑本身。这个道理,我花了三个不眠之夜才想明白。

© 版权声明
THE END
喜欢就支持一下吧
点赞109 分享