成长
大学期间,我热爱观看央视“赢在中国”节目。学到了很多做事的方法和做人的方式,虽然对于什么是创业,在创业中会遇到什么问题等等一些都未知,但那份年轻人的冲动和对于创业的兴奋已经被激发到极点。毕业找工作,我毅然选择了一家从事旅游行业的创业型互联网小公司。
面试阶段,一个相互选择的阶段。在大学期间,我运用J2EE技术给某朋友成功建立一家从事游戏虚拟物品交易平台,无形中已经培养了一定的需求沟通,需求挖掘,设计,项目管理等能力。加上我是一张“白纸”(价值观等都未受到任何公司的影响)和对于创业的那份冲劲。老板理所当然的选择了我,由我来负责一个项目的全部工作。公司给我提供我认为过得去的工资,也是我所喜好的创业型小公司,我认为很有前途(年少无知,不知后路的艰辛)。我也选择了公司。这就是我第一家的公司。
工作阶段,充当孙悟空的阶段。最简单的开发模式,最简单的项目管理方式,最简单的上线过程,最简单的线上故障处理。一切都是那么简单。简单的让我换第二份工作的时候让人觉得这几年的工作都毫无进步可言。
简单的开发模式,老板一个概念的产生,没有产品,直接抛到开发,开发要么模仿别人的网站要么自己捉摸该怎么实现,然后进入编码,没有代码review,没有单元测试,没有回归测试,不关注代码风格,不注重代码质量。功能实现了就算完了。后来改进,有产品分析设计产生prd,开发人员按照prd进行开发,有时进行部分重构,代码质量也没有太多的提升。
简单的项目管理方式,概念出来,开发人员大致揣测出老板的意图之后,开始分模块,估算时间,分配人员功能模块。老板看到项目时间需要3个月,老板对我们说,不可能需要这么长时间吧,给你们一个月半的时间给我完成吧,最后经过讨价还价,老板说再加半个月,你们不能再说了,最后我们被老板“强奸”了。项目也有版本控制,但是没有分支,只有主干,多个不同时间点的需求上线都在同一个主干上开发,导致有时候因为后面时间点的需求影响了前面时间点需求的上线。
最简单的上线过程,开发人员自学linux系统管理,自己通过ftp把主干代码上传部署,而且都是老板访问不了网站我们才知道出故障了,接着开发人员在主干上改bug,改完bug重新部署,发现之前的bug没了,出现了新的4个bug。继续修改bug,部署…无限循环。
最简单的线上故障处理,数据库负载过高、web服务器负载过高、服务器硬件坏了、网络线路,机房断电等等问题出现之后,唯一的办法就是停止网站服务进行修复。
每周五下午例会,讨论的问题都没有积累下来,没有被分享给其他团队成员,更不可能分享给新员工。
上面的流程基本上都是由开发人员负责,开发人员此时就是多角色,类似孙悟空,需要不断转换角色。更重要的是,上述所有流程和项目管理都只是关注项目自身。没有关注团队知识的积累,人员的培训。本质上就是不关注“成长”。我作为项目经理,我承认自己之前的不足,但值得庆幸的是我在离开之前做了一些比较有意义的事情,我让部门开发人员每个星期轮流做分享,让整个部门的人能够学到更多的知识。
后来来到淘宝,在这里能学到很多东西,因为这里有完善的培训体系,注重员工的个人成长。一个小插曲,我在新员工手册里看到sprint这个单词,我想在业内算比较牛的公司竟然还会把spring写成sprint,后来接触到了scrum敏捷开发,我才知道原来sprint是scrum的一个迭代周期。那个羞啊。哈哈。
来到淘宝,猛然有一种柳暗花明又一村的感觉,以前我做的事情都有涉及到,但在脑海中没有一个成形的框架,零零散散。
下面来讲讲跟我之前不一样的地方。
开发模式:
l 周五的双周pk,产品排好需求优先级,项目经理根据团队的人力资源pk需求,哪些可以完成,哪些人力不够。这里要着重强调工时,每个人每天都是按照4小时来算,其他4小时主要学习,更好的完成工作。4个小时是根据团队平时工作效率来计算的,也有可能是5或6个小时。不同时期不同项目每个人都有不同的变化曲线。
l Pk下来的需求,技术团队在周一进行任务拆分,然后大家领取各自的任务。
l 每个团队有自己的任务墙(故事墙),主要就是让大家在每天的15分钟晨会上列出各自的每天要完成的任务。
l 每天早上15分钟的晨会,一个是让大家都能在某个时间点之前赶到公司开会,另一个就是让大家清楚自己今天要做什么。晨会主要描述:1 我昨天做了什么 2 我遇到了哪些问题,自己解决了可以简单分享给同事,解决了不了可以让团队来帮忙一起解决。 3 今天我要做什么
l 每双周要做回顾,看看出现了什么问题,哪些地方可以再改进。
l 最后就是分享,有技术分享,业务分享。
这个开发模式对比以前有以下几个优点:
l 团队资源的合理利用,不会出现老板说几个月完成然后底下的人拼命的加班,让大家对技术的兴趣越来越高,工作的越来越快乐。成长也越来越快。
l 让大家明确知道自己今天要做什么。
l 分享,不但自己是分享的参与者也会是分享的发起人。不管是哪种角色,你都能学到很多很多。通过分享,团队的进步会非常快。
开发流程:
l 编码、单元测试
l Findbugs
l Mvn test
l Code review(重构,然后从头开始)
l 提交代码到svn
这个开发流程主要关注的是代码的提升,保证代码的质量,通过代码审查让尽早发现不合理的地方。
上线流程:
l 提前一个星期申请上线
l 单元测试
l 提测给测试团队
l 打包
l 发上线计划,预发冒烟,发布生产环境
这个流程我不是很熟悉,所以不作评论了。
有了这些比较优秀的模式和流程,也需要工具的配合。
代码版本控制:svn,并发开发的需求需要用到分支,主干代码尽量保证随时可以上线。
项目的管理:maven,开发模式,测试模式,生产模式配置的切换,也可以和hudson进行持续集成。
让我最有感触的就是淘宝非常注重知识的积累和员工的成长。在这里我感觉我真的成长了,有踏实的感觉,少了浮躁。这篇文章并不是说小公司不好,也是因为在之前那家公司接触的面广,所以来淘宝知道自己哪些对于自己更重要,但也并不鼓励你毕业就去小公司,因为对你的成长不好。每个人的路都是唯一的,大家喜欢怎么走就看大家自己的了,每个选择都是独一无二的,这样才能活出独一无二的生活,绚烂的生活。