作为程序员,再也不想和PM干架了
上周,又看见有程序和PM(产品经理)吵了起来,大致是因为晚上就要上线了,下午的时候PM来说要改点需求,但程序不愿意。兴许是天气热了,大家都很烦躁,于是一言不合就发飙了,最终还是程序老大介入才解决了问题。
程序和PM的最大矛盾应该就是需求:提需求、改需求。
但程序和PM一定是对立的双方吗?显然不是,大家应该是同一个战壕的战友才对。回想起来,我也曾经和PM因为各种或大或小的原因有过争执(还好,没有打起来过 )。事后想来,其实很蠢,因为争吵根本不解决问题,反而引出新的问题。
那么,程序和PM怎么和谐相处呢,这其实需要大家刻意的去努力。本文记录一下自己在这方便的感想。
本文地址:https://www.cnblogs.com/xybaby/p/10923990.html
和谐团队必备要素
团队不是个人的简单叠加,团队的良好协作需要团队中的所有角色(PM、程序、交互、测试)的共同努力。
一致的目标
大了说,是公司的愿景、使命;小了说,是团队的近期目标。只有大家向着同一个方向努力,才能尽量避免1+1 < 2。作为一个职场人,一个很直观的目标就是尽职尽责把产品(业务)做好。但这个看似很明确的目标,也是有歧义的,也许PM是想尽快上线,抢占先机;而程序是想,把代码架构做得通用、可扩展,以便后续的需求更改。团队负责人应该多和大家沟通项目的长远目标和短期目标,消除歧义,只有当大家达成共识,才能劲往一处使,才会追求共赢。
平等、相互尊重
产品经理带有“经理”二字,似乎有管理的问道,但其实和“程序猿”、“运维狗”一样,都是来干活的,只是分工不同而已。我是程序猿,并不十分了解有没有PM自认为高人一等,但我确实知道一些老程序员会鄙视新人PM。PM和程序,任意一方太多强势,都不一定是好事。
认可其专业性
团队中,最忌讳的就是质疑他人的专业性。比如PM说:“这都做不了”,程序员说:“你啥都不懂,瞎逼逼”。如果出现了类似的话语,都会火大,谁还来解决问题。
如果你不是对方领域的资深人士,那么最好是承认其他角色的专业性,常怀敬畏之心。相信你当前拥有的,都是最好的。当然,也会有真的很不专业的人存在,那么找你的leader或者他的leader去反馈,不要直接人身攻击。
有效沟通
沟通的重要性无需赘言,很多时候矛盾不是因为事件本身,而是沟通的方式不对。冷静、友善;对事不对人;以解决问题为目标,应该是一些最基本的原则。
换位思考、同理心
换位思考,即主动站在对方的角度,用对方的思维方式去思考同样的问题,这样才能相互理解,相互宽容。
有了换位思考,就不难想到下面的每一点。
我所期待的PM
除了上面提到的通用准则,那么从一个程序员的角度出发,我想与之合作的PM还应该有什么特质呢
提需求表达问题而不是解决方案
有的PM会直接过来跟程序说要做什么,但是不耐烦、或者不愿意、或者根本没有意识到要跟程序说说为什么要这样做。也就是说,PM表达的,经常是某种解决方案,而不是需要解决的问题。
诚然,PM在需求方面可能更专业,但开发也许会有更好、更便捷的方案来满足需求。而且抱着一起解决问题的态度,而不是PM命令开发,也能激发开发人员的自主性,更愉快的去完成任务
改需求要有理有据,最好有数据
程序员最烦的就是改需求、反复地改需求、上线之前改需求。改需求不可怕,关键是这些需求是否经过深思熟虑,最起码,PM得先说服自己,而不是拍脑袋。
如果可以,最好用数据,用事实说话,程序员喜欢说“talk is cheap, show me the code”,那么PM应该用数据说话。如果一个程序员知道这个修改可能增加多少点击率、转化率的时候,我相信他是愿意去修改的。
以最小的代价试错
PM的需求来自市场或者说用户,而开发的需求来自PM。相对来说,对PM的需求更模糊,对开发的需求更具体。这就导致,PM更难一次性把事情做对,PM很多时候没法自己验证自己的想法,需要借助开发的力量。但是,一个合格的PM应该认识到,如果自己做错了,那么浪费的不仅是自己的时间,还有别人的时间。因此应该尽最大努力减少试错的次数,保证交给开发的需求已经是经过足够的市场、竞品调研,有了充足的思考与讨论。
跟进需求的进度
PM是项目或者某个功能的第一负责人,那么应该实时了解进度。信息在传递的过程中会失真,大家对同一句描述的理解也会有歧义。那么程序员所理解的、所开发的内容是否符合PM最初的想法呢,这个就需要PM主动去了解、跟进了。最怕的就是,程序员辛辛苦苦干了一个月,结果PM说做出来的东西不是自己想要的。
而且,在没有实物参考之前,PM可能也没彻底想清楚自己想要什么,因此要尽早验证自己的想法。
及时向上汇报
这一点跟上一点有相似之处。
有的时候,一个大项目会有多个产品经理,每人负责一部分功能,比如游戏开发一般都会多个策划。如果一个PM自知专业水平不是足够高,或者说自己也想不清楚,那么最好及早向直系老大负责汇报,在有完善的交互、或者一个可展示的demo时就像老大汇报。避免等程序做完之后,老大不满意,导致推翻重来。
加分项:懂技术的PM
懂点技术的PM,首先不会提出变态的需求,如“APP的主题颜色能根据手机壳自动调整”,或者“五彩斑斓的黑”。另外,程序和你沟通起来也会畅快很多,自然也会对你刮目相看。
做一个合格的程序
之前写过一个篇文章,怎样才算得上合格的程序员。在这里,简单补充一下我觉得怎么样才能与PM和谐相处。
意识到技术服务于业务
对于开发者个人而言,也许专业技术是自己最重要的技能。但对于团队或者给程序员开工资的公司来说,业务才是最重要的,再牛逼的技术如果不能支撑业务那都没有什么鸟用。
业务的发展会倒逼技术、架构的成长,反之则不能。
好的程序员,努力让代码去适应业务,同时让代码更具可读性、更具扩展性、更加优美。但是万一与业务需求冲突,那还是应该先满足需求吧。
建议读读这篇很有意思的文章,PM 叫你去改一个 Bug,后来……
意识到需求迭代是无法避免的
程序员都知道,代码是不大可能一遍就写好的,尤其是敏捷开发、快速迭代的模式,所以才会有代码的重构。我们也常听大牛说,好的架构不是设计出来的,而是演化而来的。
要想一次性把事情做到完美,就是 one take,但可望不可即
度己及人,PM也很难一次就将需求提对,也需要实践、验证、改善,反复循环。而程序应该做的是,参与到需求迭代中,用自己的专业知识缩短迭代的周期以及次数。
尽早交付,及时发现问题
上面提到,需求的迭代无可避免,为了减少浪费的时间,那么程序员应该尽早交互,只要有可体验的版本、甚至只是可见的界面,都应该让PM来看看。虽然前面提到,PM应该主动及时跟进进度,但是程序员也应该主动参与,这也能为自己节省时间。
不要总是拒绝,也不要太快承诺
有的程序员总是习惯生硬地抛出“做不了”这几个字来拒绝PM,也许是真做不了,也许是自己不想做。首先,这样说直接给PM当头一棒,极不礼貌,至少应该先详细解释原因。其次,这样的话说多了,在别人看来就是不负责、能力也不行。
当然,如果没认真思考与评估,急于答应也不行,承诺了就要办到,不要把事情搞砸,才能建立自己的信誉。
总结
说了这么多,其实有些凌乱。
个人觉得,最重要的其实就是换位思考,换个立场,事情也许就会完全不一样。我们常说,旁观者清,当局者迷,但最重要的是我们要有意识从“当局者”切换到“旁观者”视角。
另外,也许你很牛逼,但请用一个普通人的标准要求对方,严于律己,宽以待人。
作为程序员,再也不想和PM干架了的更多相关文章
- 想转行做程序员,目前想学WEB前端,想问该自学还是报培训班
首先我们还是先看一下WEB前端目前的工资情况吧,我在IT招聘网站拉勾网来进行搜索1-3年WEB前端工作经验大专学历的条件来看. 深圳: 可以看出目前深圳的平均的工资都在10K以上,因为大城市给的机会多 ...
- 10款CSS3按钮 - 程序员再也不用为按钮设计而发愁了...
这次主要给大家分享10款风格各异的CSS3按钮,如果你希望你的页面也能有很炫的样式,那么我相信这10款CSS3按钮就非常适合你,而且每一款都整理了源代码供参考,一起来看看吧. 1.绚丽的CSS3发光按 ...
- 后端程序员看前端想死(三)是不是该学点js了
CSS盒子模型 div布局 js 这些都懂一点,但仅仅是懂一点,有时间就学一下咯
- 后端程序员看前端想死(二)进入页面之后js分析
在上一篇中分析了一下以网页的组成.header中引入的乱七八糟的东西,现在进入到js中进行分析了 tuhooo啊,你是要搞前端了么? nonono,好玩,学一下 打开页面之后执行js的几种方法 直接写 ...
- [Mac A]为什么国外程序员爱用 Mac?
from http://www.vpsee.com/2009/06/why-programmers-love-mac/ Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里.普通用户喜 ...
- Java程序员面试题集(151-180)
Java面试题集(151-180) 摘要:这部分包含了Spring.Spring MVC以及Spring和其他框架整合以及测试相关的内容,除此之外还包含了大型网站技术架构相关面试内容. 151. Sp ...
- 苦B程序员的数据验证之路
发生了什么事 在一次苦B程序员和苦C程序员的结对编程中发生的一段对话 代码是这样的: public void deleteAllExtendAclsFromContent(String content ...
- [No000032]程序员的年龄天花板
程序员职业生涯中流行这这样一个定律:35岁定律,那35岁以上的老程序员都干吗去了呢?为了讨论程序员的职业寿命,我们先得给公司或者团队分分类.大概有这么三类: 外包型 项目型 产品型 咱们一一来说一下吧 ...
- 未来WEB程序员
作为一名程序员,如果你想在这个领域内继续向前进步或者在当前的经济形势下保持不被炒鱿鱼,那么你就决不应当自满自足,你需要继续学习.近日,著名IT评论员Justin James在他的博客中列出了未来五年程 ...
随机推荐
- 模拟发送http请求的工具推荐
做网站开发时,经常需要发送请求来测试自己的代码是否OK,这时候模拟发送http请求的工具就起到了很大的作用.特别是需要在请求带header时就更加的有必要使用工具.下面推荐的工具有的是基于系统开发的程 ...
- 通过composer安装阿里大于接口扩展
# 安装laravel阿里大鱼服务 composer require iscms/alisms-for-laravel laravel配置 # 注册服务 # 在config\app.php文件中找到P ...
- REST Framework 处理一个超链接序列化问题
问题简述 翻译: 不正确的配置 无法使用视图名称“snippet-detail”解析超链接关系的URL.您可能没有在API中包含相关的模型,或者在该字段上错误地配置了' lookup field '属 ...
- 1.python中的变量
什么是变量 1.在任何语言中都有变量的概念,在python中变量是用一个变量名表示,变量名必须是用大小写英文字母,数字,下滑写(_)组成.不能用数字开头.(但用中文做变量名也可以,不要这样做) 例: ...
- MongoDB之Replica Sets环境搭建
最近学习MongoDB,这两天在搭建复制集的时候碰到了不少问题,也踩了好多坑,现在在这里记录下来,以供自己和他人参考 (因为本人是初学者,所以遇到的问题也会比较初级,所以本文也比较适合初学者查阅) 背 ...
- ACM-ICPC 2017 Asia Urumqi G. The Mountain
All as we know, a mountain is a large landform that stretches above the surrounding land in a limite ...
- BNU 3692 I18n 模拟
题意: 在一篇文章中,单词可以缩写.例如单词Internationalization可以缩写为I18n,缩写的两端是原单词的首尾字母,中间的数字是被省略的字母的个数. 现在给你一篇缩写的文章,输出展开 ...
- MongoDB学习-->设置通用的自增ID替代ObjectId
插入mongodb数据时,会为其分配一个随机id,想要设置通用的自增id,可以进行以下操作 1.创建自增序列 package com.tangzhe.autoid; import lombok.Dat ...
- NetBeans无法使用编码GBK安全地打开该文件
今天用NetBeans打开包含路径里面的UTF-8编码的文件时,提示:NetBeans无法使用编码GBK安全地打开该文件. 后来在网上搜索找到了解决方案,原文地址:http://qdjinxin.it ...
- Selenium WebDriver-获取与切换浏览器窗口的句柄
通过selenium webdriver去切换浏览器的窗口,需要通过句柄,具体代码如下: #encoding=utf-8 import unittest import time import char ...