程序员也要学会说不:如何与产品经理相处

聪明狐
2025-06-22 17:59
阅读 575

从沉默到发声:一个程序员与产品经理的真实相处之道

在互联网公司工作多年,我发现一个有意思的现象:我们写代码时追求极致的清晰和可控,但在面对需求沟通、产品设计这些“软性”问题时,却常常不知所措。尤其是和产品经理(PM)打交道的过程中,不少同行都曾经历过“被压迫式开发”的痛苦。

我也曾经是一个只会点头说“好的”、“没问题”的程序员。直到有一次,我差点因为盲目答应一个看似“小改动”的需求,而把整个系统拖入泥潭。那是我在一家中型互联网公司负责后端服务的一段经历,也让我真正开始反思:程序员也要学会说不。


那个让我崩溃的小需求

开发流程示意-1

那个让我崩溃的小需求

故事发生在一年前。我们的核心业务是为平台上的商家提供订单管理工具,系统每天承载数百万级订单的处理和分析任务。当时我们团队正在对后台的数据查询模块进行性能优化,目标是提升报表的加载速度,降低数据库的压力。

就在这关键时刻,PM来找我:

“有个客户反馈报表里缺了个字段,能不能加一下?很小的一个改动。”

我当时想都没想就说:“可以啊,很快就能上线。”于是排进下周迭代计划。

可事实远没有那么简单。那个所谓的“小字段”,需要从另一个微服务拉取数据。但对方服务并没有开放这个接口,而且调用频繁的话还会增加性能负担。为了满足这个需求,我不得不临时写了一个异步补偿任务去获取数据,结果导致了数据延迟的问题,报表上出现不一致的情况。

更糟的是,用户以为系统出现了Bug,直接投诉到了客服部门。老板一怒之下召开了紧急会议,最后发现只是一个小功能引发的蝴蝶效应。

那次事件后,我整整两天没怎么说话,一直在复盘自己哪里出了问题。答案其实很简单:我本不应该轻易接受这个需求。


学会说不:一次真实的拒绝尝试

学会说不:一次真实的拒绝尝试

之后我下定决心要改变自己的沟通方式。真正让我转变的是下面这个项目。

那是一次新功能规划:PM希望我们给商家新增一个实时数据分析的功能,能实时看到当日下单趋势,以及库存变化情况。看起来很合理,对吧?

可当我仔细看需求文档时发现问题来了。他们希望这个功能“实时”更新,每5秒刷新一次,同时还要支持高并发访问。

这意味着我们要引入WebSocket或者Server-Sent Events(SSE),甚至可能要考虑长连接机制。而我们的现有架构是基于HTTP+Redis缓存的,根本没有准备应对这样的场景。更重要的是,这种高频更新会对数据库造成巨大压力,甚至有可能导致雪崩。

我跟PM沟通了一下技术实现的难点,他说:“这个需求是客户重点提的,我们一定要做。”

那一刻我知道,光是说明困难远远不够。我决定换一种方式来表达我的立场。

第二天我带着一份对比表格去找他:

方案 实现方式 性能影响 可行性 推荐指数
WebSocket 建立双向连接,推送实时数据 数据库负载大幅提升 不推荐
SSE + 长轮询兜底 保持单向连接,轻量推送 负载可控,兼容较好 推荐 ⭐⭐⭐⭐
客户端定时轮询 简单方案 对服务器有轻微负载 可行 ⭐⭐⭐

技术应用场景-2

然后我又补充了一句:“如果我们不做技术限制,这个功能上线后的稳定性和体验反而会大打折扣。”

没想到这次沟通效果出奇的好。PM听完后思考了一下,回我说:“那你能不能先做一个最小可行性版本,看看用户反馈?”

我立刻同意了,并且建议采用“1分钟客户端轮询+缓存聚合”的方式来验证用户是否真的需要这么高的实时性。

后来的结果也证明,这个妥协方案完全能满足用户需求,甚至比原计划还节省了大量资源成本。


技术方案之外的思考:我们到底该如何沟通?

技术方案之外的思考:我们到底该如何沟通?

通过这两次的经历,我总结出几个关键点:

1. 理解PM的出发点,而不是一味抵触

大多数时候,PM并不是故意“乱提需求”,他们只是站在用户角度思考问题。作为开发者,我们可以试着理解他们的逻辑,再从技术角度提供替代方案。

2. 用数据说话,而不是情绪发泄

当你要说“不”的时候,最好能拿出具体的证据。比如预估QPS、估算开发时间、模拟负载测试等,这些都是你强有力的支撑。

3. 提前介入需求讨论,不要等到开发阶段才反对

如果你能在需求评审阶段就提出合理的顾虑,往往会得到更多支持。一旦进入开发流程,修改的成本和阻力都会大很多。

4. 给出替代方案,而不是只说“不能做”

“不能做”三个字太伤人了。哪怕你不同意某个方案,也可以尝试给出一个折中的技术路径。比如:“虽然无法做到全量实时,但我们可以通过聚合数据+局部刷新的方式接近预期效果。”


当你说“不”时,其实在说什么

当你说“不”时,其实在说什么

我开始意识到,程序员说“不”,不是对抗,而是一种专业的态度。

我们在守护系统的稳定性,避免因过度承诺而导致的技术债;我们在平衡用户体验和技术成本之间的界限;我们也在推动产品朝着更合理、可持续的方向发展。

有时候,“不”是为了更好的“是”。

我记得有一次在站会上,我跟团队分享了这段经历。一个刚入职的新人问我:“万一领导非要你做怎么办?”我回答得很简单:“那就把你的担忧写清楚、讲明白、记录下来。责任不是一个人扛的,而是大家一起承担的。”

那天会后,那个新人主动跟我聊了很久,说我让他第一次感受到,原来“技术人员”也可以很有影响力。


给开发者的几点建议

如果你也在纠结要不要说“不”,不妨试试下面几点:

  1. 保持同理心,但也别忽视底线
    • 尽量站在产品角度思考,但不代表你可以牺牲质量来换取进度。
  2. 建立信任,而不是制造对立
    • 把每次分歧都当作协作的机会。用专业赢得尊重。
  3. 掌握沟通技巧,别让技术成为障碍
    • 学会用非技术语言解释复杂问题,PM听得懂你的话,才能更好地配合你。
  4. 学会记录,保护自己也是保护系统
    • 所有的沟通和决策都要留下痕迹。不是防备谁,而是为了共同的责任。
  5. 持续学习,不断提升话语权
    • 技术能力越强,你说话的分量就越重。学好架构设计、工程实践,才是真正的底气。

结语:我们不只是写代码的人

在这个快速变化的行业里,我们不只是执行者。我们也是决策的一部分,是系统健康运行的守护者。很多时候,一句“不行”,是对所有用户的负责,是对产品的敬意,也是对自己的尊重。

当你下次面对不合理的需求,不妨深吸一口气,勇敢地说:“这件事如果硬要这样做,可能会带来哪些风险,不过我有一个替代方案……”

那一刻,你会发现自己不仅是在沟通,而是在塑造一个更理性、更高效的开发环境。

愿我们都成为有温度的程序员——既能写出优雅的代码,也能说出坚定的态度。

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝