国内IT公司多如牛毛,但研发流程真正作到规范化的少之又少,不少公司看上去很“大”很NB,但却只可远观,细看内部做业却惊叹于庞大的躯壳下只是一个又一个的“小做坊”,毫无团队间协做分享可言。大中型公司如此,小公司创业公司更不用说了。git
在我大天朝不少公司的产品拼的不是技术不是功能而是关系,因此研发流程规范这档子事不是企业必需品,尤为在传统行业游弋的那些国有控股公司。但随着竞争加重、互联网化浪潮的洗礼,“高内耗低产出”的粗犷型做业势必会走向灭亡,“短平快”的精细型研发做业流程势必愈来愈受重视。github
有感而发,扯了些废话L,言归正传,规范化研发流程的做用不言而喻,但对于创业公司来讲现实的问题是要先生存再图发展,前期没有太多的精力在流程管控上,因此一个好的适合于创业公司的规范化研发流程必定要足够的省事简单且效果明显。web
梳理一下咱们的痛点就是“人少事多时间紧,需求变动快人员流动大”,一个好的研发流程要能解决以上的问题,怎么作?安全
免打扰:脚手架的活让工具去作,不要让开发管理人员被流程所累;markdown
小版本快迭代:尽早地让领导/客户发现需求误差,以便及时修正;工具
需求共享及知识库建设:让全部开发人员都了解产品的需求并创建知识库记录学习开发心得,最大限度减小人员流动带来的研发不可持续性;学习
自组织,弱化管理:不要在管理上浪费太多时间,屁大的团队开发人员远比纯粹的管理人员重要。测试
综上实际上不少人发现这些理念与Scrum多么雷同呀,不错,咱们实践下来以为用裁剪后的Scrum作为流程规范是很好的选择,但完整的Scrum对开发人员要求太高,创业团队每每不具有那样的员工,因此必定要裁剪。编码
拿目前我所在的公司“聚路销科技”举例(不一样的公司有其个体差别,仅供参考),下图是咱们研发流程的TOP图:spa
咱们总体上基于Scrum并适度裁剪,如Scrum要求Story时间点要全部开发人员在Sprint计划会议中投票决定,咱们试行几回下来实际须要时间与估算时间会严重不符合,为何一个本来为更准确计算工时的作法却获得拔苗助长的效果?缘由在于创业期招聘的开发人员经验不足,考虑问题不够全面,广泛低估了各个Task的要求,因此在Story用时上咱们每每是技术经理作评估并在Sprint计划会议时和开发人员确认修订。
基础研发流程与Scrum无异,关键步骤以下:
步骤名 |
参与人 |
产出 |
涉及工具 |
1.设计用户故事 |
产品经理 |
Product Backlog |
Redmine 用于记录 Product Backlog |
2.Sprint计划会议肯定Sprint周期、人员及要完成的故事 |
全部人 |
Sprint Backlog |
Redmine 用于记录 Sprint Backlog Raneto 用于简述产品及Sprint信息造成知识文档 |
3.编码开发 |
开发人员 |
Code |
Gitlab 用于版本控制 Jenkins 用于持续继承,自动化测试发布 Sonarqube 用于代码质量检查 Redmine 用于记录 变动 |
4.每日站立会议 |
全部人 |
阻碍列表、Story、Task或Code修正 |
Redmine 用于记录 变动 |
5.Sprint回顾会议 |
全部人 |
Sprint封包代码、版本发布 |
Gitlab 创建版本 Redmine 完成Sprint Raneto 总结经验造成知识文档 |
工具选择的几点见解:
在Scrum管理工具上咱们尝试过白板、Trello、Redmine With Agile Plugin,各有优劣吧,白板直接,你们都看获得,很方便,但不便于任务收集整理,Trello是个好东西,它有个开源实现版本(http://git.libreboard.com/libreboard/libreboard),看板视图,可定制化流程,但统计上比较弱,Redmine With Agile Plugin(http://www.redminecrm.com/projects/agile/pages/1)嘛比较重,但功能强大,用它主要是咱们的绩效考核需要记录每一个开发人员每一个Sprint的工时、每一个Task的技术系数、Task的重要程度等指标。
版本控制上通常公司用SVN,咱们用Git,说两者有多大的区别嘛,对小团队而言还真看不大出来,但咱们鼓励开源,要求员工都要发布本身的开源做品,因此用Git比较接地气 :)
知识库工具这里用Raneto,这是个很简单的Markdown文档web化工具,你只要指定一个有MD文档的目录它就能够把这些文档Web化显示,用的是NodeJS驱动,它还支持"GitHub Flavored Markdown",能够显示表格:
咱们流程是在Gitlab中创建知识库项目,你们都clone这个项目,用本身喜欢的IDE撰写MD文档并push回Gitlib,而后Jenkins会自动clone出变动项到workspace下,咱们又在Linux中建了定时任务把Jenkins workscpase下的文件sync到Raneto的目录,这样就能够显示修改的文档了。
Jenkins 与 Sonarqube没什么可说吧,同一领域应该找到其它更好的工具了。
另外补充一点是创业团队硬件资源也比较有限,而管控工具很多,我的推荐用Docker去虚拟化这样环境,好处是使用方便,不用安装一大堆基础环境(如ROR环境),安全明了,作到资源隔离,不会由于一个工具的问题致使其它工具被Hack。这方面有机会再单独讨论。附咱们目前的Docker容器:
经验有限不足之处欢迎拍砖。