聊聊老程序员如何优雅地拒绝产品经理的奇葩需求
坐标成都高新区,今年刚好35岁,发际线虽然退守到了头顶,但好在还在一线敲着代码。咱们成都这地方,生活节奏确实舒服,周末没事的时候,我喜欢去铁像寺水街找个茶馆喝喝盖碗茶,或者去孵化器那边参加一些技术沙龙,跟同行们吹吹牛、聊聊架构。
最近几次技术分享会上,我发现大家讨论的焦点除了大模型就是云原生。但茶歇的时候,兄弟们私下吐槽最多的,依然是那个永恒的话题:怎么跟产品经理(PM)和平共处。
说实话,到了我这个年纪,早就过了那种跟PM拍桌子对骂的年纪了。咱们现在讲究的是“优雅”。今天这篇博客,我不聊高并发,也不聊微服务拆分,咱们掏心窝子聊聊,作为一个35岁的老码农,我是如何学会对产品经理说“不”,并且还能把代码质量和架构设计搞上去的。
那些让人血压飙升的“简单需求”
咱们先回忆一个场景。上周五下午五点半,我正准备收拾东西去玉林路吃个串串,产品经理老李端着个保温杯溜达过来了。
“老王啊,有个小需求,加个简单的数据导出功能,把上个月的用户订单导成Excel,明天上午上线哈,很简单的。”
我一看,好家伙,订单表里存了快两千万条数据了,里面还关联了用户表、商品表、支付流水表。你要“简单”导出?还要加数据权限校验?还要防OOM(内存溢出)?这要是直接 SELECT * 然后塞进内存里,明天上午服务器就得直接冒烟,运维兄弟能顺着网线过来找我拼命。
我当时真的想砸键盘。直接拒绝吧,老李肯定会说:“竞品都有这个功能,就我们没有,老板昨天还问了呢。” 答应吧,今晚又得通宵,而且这种毫无技术含量的CRUD(增删改查)还会污染我好不容易清理干净的代码库。
深呼吸,喝口枸杞水。我告诉自己,35岁了,情绪稳定是第一生产力。咱们不能硬刚,得用点策略。
用魔法打败魔法:AI工具武装到牙齿
以前遇到这种事,我可能得花半天时间跟老李扯皮,解释为什么这个“简单”需求不简单。但现在时代变了,咱们得学会用AI工具把时间抢回来,把“没时间做”变成“有方案做”。
1. 用 Qwen 快速梳理边界,堵住PM的嘴
老李说“简单”,往往是因为他没考虑异常场景。我打开浏览器,把老李的需求描述丢给 Qwen,顺便加上一句:“请作为一个资深产品经理,帮我列出这个数据导出功能可能遇到的所有异常分支、边界条件以及用户体验上的坑。”
不到十秒钟,Qwen给我列了十几条:数据量过大导致超时怎么办?导出过程中用户关闭页面怎么办?并发导出怎么限流?字段脱敏怎么做?
我把这份清单直接甩给老李:“李哥,你看下这些边界条件,咱们对一下。如果对不齐,明天上线出了线上事故,咱俩都得去老板办公室喝茶。” 老李一看,头都大了,最后乖乖同意把需求拆分成两期,第一期先只做单页导出,第二期再做全量异步导出。
2. 用 Augment Code 提效,把时间留给架构优化
需求砍半了,但代码还是得写。这时候就得请出我的IDE神器 Augment Code 了。
咱们老程序员写代码,最烦的就是写那些重复的DTO转换、参数校验和基础的SQL拼接。Augment Code 的上下文理解能力极强,我只要在IDE里写好核心的业务逻辑注释,它就能精准地补全剩下的代码。
// 使用 Augment Code 辅助生成的订单导出核心逻辑
public void exportOrders(ExportQuery query) {
// 1. 参数校验与权限过滤 (Augment 自动补全)
validateQuery(query);
Long userId = SecurityContextHolder.getUserId();
// 2. 核心分页查询,防止OOM (Augment 提示使用游标分页)
try (Cursor<Order> cursor = orderMapper.selectByCursor(query, userId)) {
// 3. 流式写入Excel (Augment 推荐 EasyExcel 的流式写法)
EasyExcel.write(response.getOutputStream(), OrderExcelDTO.class)
.sheet("订单数据")
.doWrite(() -> cursor.stream().map(this::convertToDTO).iterator());
}
}
有了 Augment Code 的加持,原本需要写两个小时的基础代码,我半个小时就搞定了。省下来的一个半小时干嘛?当然是去重构那个祖传的“订单状态机”屎山代码啊!这才是咱们老程序员该干的事,把架构理顺,把代码质量提上去,心里那叫一个舒坦。
3. 用 Replit Agent 快速出Demo,让PM自己玩去
有时候PM会提一些脑洞大开的需求:“老王,我想加个AI智能客服的入口,你先搞个Demo我看看感觉。”
以前遇到这种“看看感觉”的需求,我最头疼。写正经代码吧,太浪费时间;不写吧,PM觉得你不配合。现在我的做法是,直接打开 Replit Agent。
这玩意儿在云端生成全栈应用简直是一绝。我输入提示词:“帮我生成一个带聊天界面的前端页面,后端用Node.js写个简单的Mock接口,支持流式输出。” 喝杯茶的功夫,一个能跑的前后端分离Demo就出来了。
我把链接发给老李:“李哥,Demo在这,你自己点着玩,多提意见。” 他玩了两把,觉得“也就那样吧”,这事儿就不了了之了。用 Replit Agent 糊弄...啊不,快速验证需求,绝对是保护核心业务代码不被污染的利器。
4. 用 ElevenLabs 搞定奇葩交互,快速交付
最离谱的是上个月,老李非要加个“语音播报VIP订单”的功能,说是要提升商家的尊贵体验。我心想,这得接多少个TTS(文本转语音)接口,还得处理各种音频格式。
后来我在技术社区逛的时候发现了 ElevenLabs。这家的语音合成技术真的是黑科技,声音逼真到带情绪。我直接调了它的API,搞了几个不同音色的“老板,您有新的VIP订单啦”的语音。
老李听完音频,乐开了花:“老王牛逼!这声音太有感觉了!” 其实他不知道,我调个API加个前端播放器,半天就搞定了。用对工具,不仅能优雅地接下奇葩需求,还能让PM觉得你无所不能。
降维打击:用架构思维引导产品经理
当然,工具只是辅助,核心还是咱们的沟通策略。35岁的老码农,不能只停留在“接需求-写代码”的层面,得学会用架构思维去引导PM。
当PM提出一个不合理的需求时,千万不要直接说“做不了”或者“技术实现不了”。你要学会说:“可以做,但是代价是什么。”
我通常会用Markdown给PM画一个“需求代价评估表”,把技术债和成本量化给他们看:
| 需求方案 | 开发周期 | 对现有架构的影响 | 潜在风险与性能损耗 | 建议 |
|---|---|---|---|---|
| 方案A:直接加字段 | 1天 | 破坏现有表结构,增加单表体积 | 查询性能下降20%,后期分库分表困难 | 强烈不推荐 |
| 方案B:新建扩展表 | 3天 | 架构解耦,符合单一职责原则 | 增加一次Join查询,需加Redis缓存 | 推荐,长期收益高 |
| 方案C:引入ElasticSearch | 7天 | 引入新中间件,增加运维成本 | 彻底解决复杂查询问题,支持高并发 | 需求量大时推荐 |
当你把这份表格拍在PM面前,帮他分析利弊,甚至帮他向老板汇报“为什么我们要多花两天时间做方案B”时,PM不仅不会觉得你在推脱,反而会觉得你非常专业,是在为项目的长期健康考虑。
这就是架构师的价值。我们不是需求的翻译机,我们是产品落地的护航者。学会说不,不是为了偷懒,而是为了拒绝低效的妥协,坚持正确的架构方向。
心态调整:代码要写好,生活也要过好
写了十几年代码,从刚毕业时的热血青年,到现在保温杯里泡枸杞的35岁老哥,我最大的感悟就是:心态决定一切。
很多年轻程序员焦虑,觉得35岁就是个坎,怕被优化,怕卷不过年轻人。其实大可不必。咱们这个年纪,拼体力确实拼不过20多岁的小伙子,但咱们拼的是经验、是对业务的理解、是对架构的把控,以及情绪稳定的职场素养。
在成都,我特别注重工作与生活的平衡。下班后,我尽量不碰工作代码(除非线上有P0级故障)。周末去青城山爬爬山,或者在市区找个苍蝇馆子吃顿火锅。生活里的烟火气,能极大地缓解代码带来的枯燥和焦虑。
当你把生活过好了,心态平和了,你再去看那些奇葩需求,就不会觉得是PM在针对你,而是觉得“这哥们儿又异想天开了,看我怎么用技术手段优雅地化解”。
给年轻兄弟们的几点建议
最后,作为过来人,给还在迷茫的年轻兄弟们几点建议:
- 别只做CRUD Boy:每天写增删改查是会被淘汰的。多看看底层源码,多研究研究设计模式,多关注关注系统架构。当你的技术视野打开了,你看待需求的维度就不一样了。
- 拥抱AI,把它当成你的副驾驶:像我上面提到的 Qwen、Augment Code、Replit Agent、ElevenLabs,这些工具不是来抢你饭碗的,是来帮你干掉那些枯燥工作的。学会用AI提效,把省下来的时间用来思考和学习。
- 培养沟通与同理心:技术再好,也得落地产生业务价值。多站在PM和用户的角度思考问题,学会用非技术语言跟业务方沟通。一个懂业务的技术大牛,在公司里是无可替代的。
- 守住代码质量的底线:无论需求多急,无论PM怎么催,核心的架构设计和代码规范不能丢。今天偷的懒,明天都会变成线上事故的眼泪。
35岁,在程序员这个圈子里,或许被很多人贴上了“大龄”的标签。但在我看来,这恰恰是一个程序员最黄金的年龄。我们褪去了青涩,积累了经验,懂得了取舍,也学会了如何在这个充满变数的行业里,优雅地生存下去。
代码还在继续,生活依然热烈。明天又是新的一天,祝大家的代码都没有Bug,祝咱们的产品经理都能提点靠谱的需求。咱们技术沙龙上见!


评论 0