程序员如何有效沟通,避免误解和冲突?
摘要:一、程序员不善言词 在大家的印象中,程序员好像是一群不善言词的理工男。为什么大家会有这种刻板的印象呢? 因为程序员的工作,只需要一台电脑,一根网线,就可以开始工作了。好像不需要与人打交道。一段进入到工作状态,编码的时候还不希望被别人打扰,其
一、程序员不善言词
在大家的印象中,程序员好像是一群不善言词的理工男。为什么大家会有这种刻板的印象呢?
因为程序员的工作,只需要一台电脑,一根网线,就可以开始工作了。好像不需要与人打交道。一段进入到工作状态,编码的时候还不希望被别人打扰,其实是编码思路不愿意被打断。
这时候,他们就可以两耳不闻窗外事,一心只编俺的代码。此时编写程序,是不需要与其它相关人员沟通,只需要和电脑打交道。
但是,实际的情况是不是都不需要与人沟通了呢?当然不是。上面说的情况只是开发一款软件产品或产品功能过程中的一个步骤。
一款软件产品的开发或产品的一项功能开发,到最后上线运营,中间要经历很多步骤。
如下图,一款产品开发的简单步骤:
上图中,编码开发还包括美工、UI、前端、测试、后端等。在最后面还有一个步骤 - 产品运营。所以开发一款产品,涉及到的利益相关人员很多,需要沟通的人也很多。
在这里,程序员最需要沟通的人员就是产品经理。
二、与产品经理的沟通
程序员与产品经理是 2 种不同的职业,主要职能和思维方式都不相同,专注的点也不同。
产品经理vs程序员职能对比
产品经理专注于用户需求,竞品分析,产品设计,产品运营指标等等。程序员一般专注于接口设计,程序设计,技术架构,解决方案设计,编码实现,产品落地等等。
产品经理vs程序员思维方式对比
产品经理与程序员的思维方式也不相同。
产品经理主要想的是用户需求,也就是用户需要什么,在什么场景下需要。用户内心需要什么。竞品有哪些,产品体验怎么做才更好,就像 iphone 的使用体验。怎么让用户不需要思考很顺畅的使用产品,用户怎么增长。产品怎么挣钱,商业模式是什么等。比较关注上层和大的方面。
程序员想的是功能怎么实现才好,下次需求变动少改代码。技术选型,哪些技术比较适合现在的项目。技术怎么设计和架构,才能应对未来的变化。有哪些好的解决方案。有什么新技术。关注技术细节。功能怎么实现落地。比较关注技术细节。
鸡同鸭讲的问题
鸡同鸭讲最主要的问题,就是沟通双方没有共同的语言。
产品经理和程序员,从上面 2 组图片里的内容就可以看出来,它们各自的职能和思维方式都有很大的不同。在工作上,大家各自职责内的专业术语都没有多少相同。这就有可能在沟通时,导致鸡同鸭讲的问题。产品经理说的内容,程序员不能很好的理解。
怎么办?
第一:产品经理能学一些技术相关的内容,不需要学得太深,能顺利沟通就好。毕竟产品经理也不需要编码实现产品功能。这也是为什么有很多技术转产品的一个原因,就是有技术基础,沟通起来会比较有共同语言。
第二:技术人员学一点产品知识,利于彼此沟通。
这个大家可以相互开讲座,培训彼此所需要的知识。还可以增加彼此之间的了解。
只有彼此了解,才会理解,沟通才能更加顺利。
不合理的需求
先看一个流传很广的需求故事,就是产品经理给程序员提了一个需求:
要求app的主题颜色可以随着用户手机壳颜色改变而变化。
然后,程序员和产品经理就干了起来。
这种看起来,就目前阶段的技术来说,就是一个让人很无语的需求。属于无理需求的范围了。
在需求开发时,如果程序员认为是一个不合理的需求,一定要及时与产品经理沟通,询问这个做这个需求的目的,对产品有哪些好处,能带来什么收益?最好能有一些具体的指标,比如用户可能增加多少?用户停留页面时间增加多少?等等。而且上线之后,要和产品经理一起复盘数据,是否达到了当初预期效果。登记起来,既可以做考核指标,提出需求的有效比例,也是对产品经理的警醒。
当然其它需求也要做同样的操作,但是你认为不合理的需求更要重点关注,以此警醒产品经理提需求时要更加深入思考,提出合理的需求。
需求理解不一致
最能理解这个主题的意思,莫过于一幅树秋千的漫画:
(图片来自于网络,最原始图来自于:www.projectcartoon.com)
客户自己真正需要的和客户描述的往往不一致,在经过相关人员的层层描述,离客户真正需要的越来越远。用户表达出来的需求和自身真正需要的相差甚远。
同理,产品经理获得的用户需求可能和用户需要的相差甚远,即使差的不远,到了开发人员(程序员)这里,开发实现也可能与产品经理描述的需求差的很远,最终导致产品没能满足用户需求。
怎么办?
这就需要开发人员(程序员)与产品经理不断的进行沟通,持续修复错误的认知,慢慢才能接近本质。
同样,开发人员(程序员)有时不可能一开始就有直达本质的解决方案,需要在开发过程中,渐渐弄明白本质的解决方案。
最重要的 3 点:
一是从不同的角度来理解用户的需求,尽量对需求有深入的理解。
二是不断的沟通,修复错误的认知,加快正确的认知过程。
三是程序设计的灵活性,出现问题时能尽快调整程序。
