TL;DR: 产品最终目标是客观的,项目的最终目标是主观的,产品有长期价值,项目没有。
在这几年中,做过产品也做过项目,在做产品的团队做过项目,也在做项目的团队做过产品。做产品和做项目,看起来没有什么区别,毕竟做产品的团队也是按照项目来开发一个个功能,做项目的团队也是做一个产品交付出去,都是开发。但实际上,做产品和做项目的目标是完全不同的,开发者关注的重点也皆然不同,本文就聊一聊我以为的两者的区别。本文中的产品和项目背景都是IT行业,其他行业我不了解,以下依旧简称为产品和项目。
产品
在移动互联网如此发达的今天,每人每天都会接触到无数的产品,涵盖生活和工作的方方面面。这些产品都有一个统一的特征------发布后保持品牌,然后持续迭代。10年前我们用的是微信,今天我们用的还是微信,但是功能已经今非昔比,增长了数倍,但10年前的大多数功能依旧存在。微信已经是中国互联网里最克制的产品之一了,依旧增加了这么多功能,阿里系的APP一直被人诟病臃肿,本质上也是在不停的增加功能。很多2B的产品也是一样,只不过由于对用户有更强的控制力,2B的产品可以更干脆的舍弃一些老旧功能。
可见,在保持现有功能的基础上不停迭代是产品的基本特征。一个产品自诞生之初开始,就开始了这个过程,直到这个产品即将死去,该过程才会停止。对于开发来说,很难有人预料到一个产品完整的生命周期,尤其是成功的产品。那么一个扩展性强、可维护性好、稳定性高的架构就会成为一个产品的核心价值,这样的架构往往需要经验丰富的开发人员才能设计出来。除了对业务的熟悉程度外,这种架构经验也是开发者在做产品时积累的核心价值。经过历练的开发者可以用之前的经验对类似的业务场景进行快速复制,少走很多弯路,所以之前程序员跳槽的涨薪普遍比较可观。
产品通常会经历市场和直接使用者的检验,所以评价的标准也是相对客观的,比如产品的营收、盈利能力,用户反馈,增长率,等等。尽管2B的产品某些人会有明显权重更大的评价,比如老板之于钉钉,但一个产品的好坏还是很难由个别人说了算,这也是互联网公司大多靠数据驱动的原因。
项目
项目就不一样了,尽管项目做出来的也是一个产品,供客户使用,但是和真正的产品相比有很大的区别。常见的项目形态是甲乙方项目,对于广大的非互联网公司来说,这是更常见的开发形态,这个行业也囊括了众多的开发者。下面聊的项目就是这种甲乙方的项目。需要特别说明的是,这种项目并不一定就很low,也可以非常的高大上,甲乙方都是世界500强也多的是。
项目一般有明确的周期,在项目周期结束后,项目会整体交给客户,所有权在客户。这样造成了很少有项目开发团队会对项目中做的产品做持续性维护,这在很大程度上削弱了好架构的意义。大部分项目开始时会对要做的事情有明确的预期,技术架构通常只需要满足这个预期即可。有一些项目客户可能会指定技术栈或者一些高屋建瓴的方案,但很少有客户会关心具体的实现方式。由于有明确的维护周期和相关利益者不重视,在项目中没什么人会关注扩展性、维护性这些东西,经验的价值更多体现在项目开始的技术选型上。这种环境对于想要变的更好的开发者是很不利的。
除了生命周期和持续迭代的差异外,项目和产品另一个最大的区别在于评价体系。由于甲乙方关系的存在,甲方不可能让所有会使用项目产品的人都来评价好坏,这样一定会导致项目的失败,所以甲方就会选出几名利益相关方来负责项目的验收。由于人数有限,再加上负责验收的人可能并不使用项目开发的产品,对于乙方来说,与其做好项目,不如想办法直接搞定负责项目验收的人。毕竟,能不能合格验收实际上是这个几个人的主观评价,项目产品真正的使用者此时还不知道产品的存在。所以在项目中,开发的话语权就变的很小了,所谓的项目经理变成了最重要的人,对于产品来说本应该最重要的业务价值和技术实现,也变成了和甲方几位关键角色的关系。在这种情况下,开发和其他干活的很容易被压榨,因为他们不重要。
另外,不要觉得上面说的这些对技术不屑一顾的事情只发生在不重视技术的中小型公司。之前说了,甲乙方可能都非常的高大上,技术水平也不低,但这些事情全部会照常发生,这是由利益关系决定的。
谈谈外包
最后,谈谈外包。虽然都叫外包,但人员外包和项目外包是完全不同的两种状态。人员外包多见于互联网大厂,这些人虽然关系在外包公司,但做的事情其实和大厂里面的基层员工差异不大,通常做一些难度不高,但重复性强的工作。虽然听起来无趣,但是这些人一般可以看到所在团队的完整代码库的,也可以和大厂员工一样,了解产品的整体设计,跟随产品迭代发展,只要自己愿意,可以很快的积累。前些年人才供不应求时,也有很多外包人员就地转正。虽然理论上这些人可以随时被换掉,但实际上只要不是这个人太差,加上负责的工作难度也不高,大部分团队都希望能有稳定的人员,所以这些人相对稳定,是相对不错的机会。
另一种就是项目外包了,被外包公司派遣到各个项目上,按照人天收取甲方费用。这种外包工作对于开发者来说就很差了。首先,中国的甲方把乙方当人的少,工作环境普遍堪忧,中国的甲方又基本都希望在现场办公,方便监督,通常来说能有个像样的会议室就不错了。其次,由于真正明白的项目管理的项目经理很少,导致大部分项目实际上都是失控状态,到了中后期开始疲于奔命,最终熬夜加班,勉强交付。这对于开发者的心理和压力都不好,长时间在这种环境中的开发者,很难有精力和意愿把事情做好,更多是糊弄了事,然后开启恶性循环。第三,由于上面谈到的项目的特征,开发者很难在项目中得到积累,更缺少和项目一起成长的机会,大部分开发者都是重复最初1至2年的经验,然后不停的重复。即便有学习意愿的开发者,也缺乏学习的机会和环境,不知道方向在哪,最终丧失成长的机会。
所以,除了脏简历这种功利的原因,在项目外包的开发者,最好能明确知道自己所处环境的问题,如果有继续前进的意愿,要知道做什么是对自己有用的,等待机会,改变处境。
总结
本文结合我之前的经历和看到的现象,对做产品和做项目的差异做了一些个人观点的总结。陈述了一些事实,抽象了一些具体的事例,较为深入的分析了产生差异的原因。这些东西很难改变,个人也没有必要去改变,没有好与坏,只是不同的实际情况。对个人来说,人的主观能动性还是很重要的,即便在做产品的团队,很多人也按照做项目的态度在干活,导致了很多产品扩展困难,难以为继。有的人虽然处在恶劣的环境和巨大的项目压力中,但依然可以每天自我成长,最终找到理想的工作机会。如果这篇文章能帮你看清一点自己的处境,那么我的这点经验就有了价值。