团队项目中的一些思考

最近在公司参与的一个项目,项目开发过程中遇到很多的问题,也开了无数的会议,包括各种需求会议,总结会议等等,现在算是进入了尾声了,不过本来预计今天上线的依然没能上线,虽然我内心感到非常遗憾,但是我依然向领导吐槽了许多不满。

开篇之前,对于项目开发,我要申明下我的几个观点。我这几个观点的前提条件是,在中小型项目中!

1.不需要产品经理

2.不需要测试

3.不需要专职的运维

4.不许要专职的DBA

————关于产品经理

我数次的在知乎上搜寻关于产品经理这一角色的信息,很想获取一些产品经理相关的知识,结果让我很失望。作为互联网界的一个新人(2.5年的开发经验),我所接触到的产品经理,无非是写个PRD,画个原型图,然后催催进度。仅此而已,至于说什么产品创新,ok,在国内不适合谈这个事。好吧,我承认我从主观上已经贬低了产品经理存在的价值。我依稀记得第一次听说产品经理这个词的时候,是一篇文章中提到的,那边文章是对马化腾的采访,马化腾说自己只是一个产品经理而已。具体年月已经不清晰了。

诚然,随着人类社会的进步,社会分工逐渐细化,产品经理这个角色的出现是有其合理性的(我认为在大型项目中此角色的存在是有必要性的,我心目中什么是大项目?比如我的第一家公司中接的摩托罗拉面向整个欧洲的一个通信项目,这个项目的总参与人数是2000+,参与者遍及北美,欧洲,印度和中国,耗时两年多。当然我没有能参与这个项目)。排除我待过的其中一家公司没有产品经理(我们开发要自己写function specification, development plan.),另外公司我都曾经问过产品经理:你们每天的工作是什么?核心答案基本就这3个:写需求文档,画原型,跟进度。

国内互联网公司的产品开发流程基本也差不多:当产品经理从客户或者运营那里收集到了需求,规模烧大点的话,会有BRD的移交,加上自己的一些“微创新”,好吧,很多需求是从BOSS那里来的。然后产品经理再和开发过需求,递交PRD并评审。这其中如果产品经理和需求方的理解有出入,再加上产品经理和开发的理解有出入,那么这边的沟通导致的问题是很大的。ok,多了产品经理,沟通成本上去了,项目风险增加了!为了减少风险,应该是有一个需求确认会议的,但是这个环节,很多公司都没有的,比如我这次参与的项目。然后到了开发手里,首先开发要根据业务逻辑关系确定数据结构,确定开发方案,并定下开发计划和预估开发时间。来看看我现在接手的那些项目,都是在PRD移交的时候,就尼马问我们开发,要!时!间!啊!有时候PRD是没有的,有时候PRD尼马几十上百页doc啊!原型会有一个,尼马很多链接的交互都没有啊!我艹!好了,冷静,不吐槽!反思下,我们做一个CMS性质的项目,做一个app,服务端连通的项目,做一个网站的改版,3-5人的开发小团队……需要这样的流程么?如果只是由开发负责整个过程,会不会能够更高效的执行呢?由开发和设计收集需求,设计人员自己出设计搞,开发自己定方案,然后去确定数据结构,进行开发。不仅减少了沟通成本,而且,开发能更深入的理解业务。何乐而不为?国内有没有这样的公司?我知道的有百姓网,豌豆荚。就我这次的项目来说,产品经理不参与开发,但是产品经理却定方案,直接导致了我这次参与的项目,需要在提交测试的时候由开发来手动往数据库写数据这种滑天下之大稽的事情的发生!PS:产品经理为什么会存在?知乎答案

————关于测试

不得不说我所在的第一家公司是中国的一支开发界的正规军,只可惜它是一家外包公司。公司有专职的QA(quality assurece)团队,他们负责公司项目的黑盒白盒测试,写大量的代码(test case),涵盖各种语言。任何一个测试转到开发都是分分钟的事情,这是酷壳博主口中的QA,当然,如果现在公司有这样的QA,幸甚!我们回到现实,看看国内大部分的互联网公司的测试是什么样的?懂代码的凤毛麟角,每天测试的工作就是,浏览器兼容性,各个功能点的黑盒测试,ok,稍微好点的有边界测试。我曾经在上家公司遇到过最奇葩的测试是什么情况?清!浏!览!器!缓!存!都!不!会!啊!更不要说清dns缓存,造cookie神码的了!!!连这些都需要沟通,更别提数据层面一些问题的沟通导致的成本和风险增加了!我理想的测试便是前面酷壳博主的文章中的情形了。

————关于运维和DBA

首先,我想问问各位如果在一个500人以内的小公司里面,是否有专职的运维和DBA呢?他们忙吗(一天上线十个需求的除外)?就我目前来看,我们开发完全可以吧运维和dba的工作做掉,管理mysql一些账户权限,优化一些sql,OMG这些需要DBA么?看看阿里的DBA都在做什么吧!其实,或许我们需要的只是一个mysql顾问。运维?管理个几十台服务器?搭个集群?配一些运行环境?配置一些代理?Rsync同步下代码?维护代码版本库?这些按道理都是开发分内的事情啊!运维该干什么?当公司项目上到500台服务器,再提运维这个岗位好么?

In a word,中小型项目中,如果开发团队中都是技能合格,有责任心有执行力的同学,完全能够高效的完成项目!作为一个web开发者,个人认为,基本的前端布局要懂的,js效果要会写的,闭包,原型,要理解的!ajax神码的不用说了,http请求流程要清楚的,后端不提,mysql基本的管理能力要有的,基本的使用和常用的函数要会的;主流的debian,红帽系服务器,搭个环境,定位个log,vim操作编辑个文件,这些都应该情理之中要掌握的。我还想强调一点,作为一个程序员,要有责任心,对自己开发过的功能,项目负责到底!你的负责会减轻很多他人工作!不要做码农,要做professional software develop engineer !

写在最后:我很期望我所在的团队,可以做一个短小精干,能独立跟项目,让PM,让DBA,让OP, 让QA都靠边站的团队。Yes, we can!!!

PS1:年内有个想法,在公司内分享下我对web开发的一个愿景和实现:用git做版本控制,xdebug做debug工具,phpDocument做文档工具,测试驱动开发,phpunit写Unit test,用Phing来做自动构建,jenkins/travis来做持续集成和自动部署。。

PS2:各位可以随意喷,尤其是产品狗,博主还年轻,不足之处,可以很快改正!

PS3:维基百科的软件开发流程

One Reply to “团队项目中的一些思考”

发表评论

电子邮件地址不会被公开。 必填项已用*标注