一个功能背后的两种视角
上个月团队上线了一个新功能,用户反馈不错。但只有我们自己知道,开发过程中差点因为一个按钮的位置吵起来。产品经理坚持要把‘立即体验’按钮放在顶部导航栏,而架构师担心这会影响核心页面的加载性能。
这不是技术对抗需求,而是两个角色在各自职责下的自然反应。产品经理盯着用户体验和业务目标,架构师则时刻提防系统复杂度和技术债。这种张力其实很正常,关键是怎么把它变成推动力而不是阻力。
什么时候该坐下来聊?
很多人以为协作就是开个会,其实真正有效的沟通往往发生在早期。比如当产品经理还在画草图时,如果能拉上架构师一起看原型,很多潜在问题就能提前暴露。
有次我们做后台权限重构,产品同学列了十几种角色类型。架构师看了一眼就说:‘按这个设计,权限判断逻辑会散在二十多个服务里,后期改不动。’ 后来我们一起调整了模型,把部分动态配置提到统一网关层,代码量少了近四成。
用共同语言说话
别一上来就谈Kafka吞吐量或者用户转化率。好的协作需要翻译——把业务诉求转成技术约束,把技术限制变成产品决策依据。
比如产品经理说‘要快’,可以具体化为‘列表页首屏加载不超过1.5秒’;架构师说‘不能这么搞’,最好配上数据:‘当前日志量每天2TB,加这个实时统计会让存储成本翻倍。’
共享决策权,不争对错
我们有个习惯,在PRD初稿出来后,组织一次轻量级评审。不是走形式,而是让双方把假设摆出来。产品经理讲为什么这个功能能拉动留存,架构师讲现有架构哪些地方撑得住、哪些会崩。
有一次要做消息推送,产品想支持富文本模板。架构师提出用Markdown替代自定义标签,既能满足展示需求,又避免客户端解析兼容问题。最后方案折中了一下,前端预置了几种样式块,既控制了复杂度,也没牺牲体验。
代码里的共识
协作最终要落在代码上。我们在接口设计时会特别注意命名和结构,让它同时反映业务意图和技术实现。
<!-- 用户行为上报接口 -->
<request>
<event_type>button_click</event_type>
<page_id>home_v2</page_id>
<element_name>start_trial</element_name>
<timestamp>1712345678</timestamp>
</request>这样的设计,产品经理能看懂字段含义,架构师也知道怎么做归档和索引。
项目上线后,我们还会一起看数据。不只是UV/PV,也包括接口延迟、错误率这些技术指标。当双方都关心同一个结果时,合作就不再是扯皮,而是真正的一起打怪升级。