在创业公司负责了几年的技术研发和管理,有自己的一点小心得,会陆续放在博客上来。
前言
在 Infosys 学到的要点: Methodologies, Process, Code Standard/Guideline/Best Practices, “Checklist”。
创业公司研发部较少有纯管理性的职位,一般要身兼核心模块框架开发和团队管理的职责。这就要求负责人有较深的技术背景,上马能写核心模块,下马能指导成员遇到的遇到难题,建立起技术上的威信;管理上刚柔并济,让人心服。
创业公司,最大的不变就是变化。公司到处都不完善,而不完善的地方即是机会。做好这个心理准备,将成长得更快。
先说说贯穿于整个工作中的“团队建设”、“开会”、“任务排期”、“文档协作”和“绩效考核”。
团队建设
公司,尤其是创业公司,最重要的是人,包括市场部人员、研发部人员和后勤人员等。
要保持团队,尤其是核心成员的稳定性,不仅在待遇上处于业界中上水平,还须在团队氛围和技能提升上让成员觉得这是一个好的队伍,值得一起共事。
定位:服务于研发团队,给一线团队创造一个良好的工作环境。在内,创造令人愉快的环境和氛围;公司内,协调好与市场、后勤等其他部门的关系,包括为团队向公司争取应得的利益。
- 团队氛围:开放、互助
- 技术提升:构建内部的技术 wiki 并建立技术分享机制
- 定期的信息共享:让大家知道公司市场、运营情况;知道彼此在做什么,遇到了什么问题。
- 管理能力提升,同时建立起人才梯队
- 团队活动
- 饭后大家一起散步聊天(是真的散步-_-),是很好的方式
- 公司里没健身场地和器材,就在公司附近的健身场订了长期的羽毛球场地,每周三下班后一起去打球
- 一月一次的聚餐
- 提议中的家属日(尚未执行)
开会
每次开会前需要会议 Owner 准备议题,并将相关文档发送给参会者熟悉;开会一定要形成决议,会后要有可执行的 Action 和任务分配到相关人员。
任务排期与跟踪
排期:预估开发周期,制定项目开发进度,分解任务,分配任务。
执行任务过程中,每天/两天应有进度跟踪。如果使用项目管理软件(如 Worktile 或 Kanboard),成员应及时更新状态。
- 方法:WBS
- 工具:看板模式,如 Worktile;
- 开发周期的预估很大程序上取决于负责人以前的经验。
- 分配任务时需分配到具体负责人,要有优先级、检查项、deadline。
- 了解每人性格、技术特点,从而匹配相关任务,并使其逐步提升。
文档协作
创业公司不会按传统的研发流程按步就班地进行,更多强调的是快速开发。不仅非研发人员(老板,市场部等)不关注研发过程中的文档,连研发人员也很多对文档写作有排斥心理,认为写好代码,程序能跑就好了。
的确,传统方式中的文档太多了,而且写了以后也不一定有人去看。
但敏捷开发强调的是快速试错、快速迭代,而非简单粗暴,对比传统开发模型虽然并不强调文档,但并不代表不需要。对于一个项目,从开始就需要需求文档、产品原型文档、项目进度文档等等,而到了研发这一步,在系统实现、写代码之前最好的就是先”想”再做,而”想”的一种比较好的输出形式就是文档。对于一个软件系统,一般来说需要写的文档有以下几种:
- 系统业务流程文档:描述系统业务逻辑的文档,能清晰的说明整个业务的流程。
- 系统架构设计文档:对整个系统的架构的描述,需要包含系统的各个关键组成模块以及相关的各个关键技术点等。
- 系统功能模块概要设计/详细设计文档:对于某一个模块的流程、逻辑的描述。
- 数据DDL/DML文档: 与系统相关的数据库的DDL和DML文档,对于前者,是需要包含所有的操作的,而对于后者,必不可少的是查询语句,用来提供给DBA,来做查询sql的review,以保证索引的正确建立和查询语句的合理等。
- 系统部署文档:描述系统关键部分部署在哪里,需要做哪些配置。
- 系统发布ChangeLog:对系统每次发布的改动进行描述,包括数据库、缓存、数据队列、新增/变动了哪些依赖服务等。此外,对数据库、缓存这种关键服务的量化分析也可以写在这里。
文档选择的基本原则是:既不流于形式,又能保证研发过程的一致性和可维护性,减少不必更多的返工。
使用的工具可以是 WORD, Markdown 或在线协作工具。我推崇的格式是 markdown,比 WORD 文档更适合团队协作和版本追踪。Markdown 工具很多,可用 haroopad, pandao editor 等
文档的范例可参见这里。
绩效考核
- 绩效指标的确定:分职位,分阶段确定不同的指标。
Phases 研发各阶段
梳理各阶段的角色、任务和工具链。
Req 需求调研
需求梳理、分析是产品研发的前期阶段,易被忽略但极为重要的阶段。一个不符合市场需求的产品推倒重来,浪费的是研发人员的时间和公司在市场上的时机和表现。
- 需求调研:产品经理做需求调研,确定产品需求,编写需求文档(一张产品功能脑图或者一份功能列表),完成产品原型(手绘草图即可)
需求的来源可能来自客户、老板和市场部。
创业公司不一定有专职的产品经理,可能由技术负责人/研发人员同时兼任了。 - 原型设计:产品人员根据原型设计出一系列 UI 界面,包括产品业务流程图、交互原型。
- 需求评审:产品经理召集产品、UI、开发、测试等人员召开需求评审会议,确定最终产品的界面和交互。
- 工具:纸笔,墨刀
Design 设计及文档产出
Dev 开发
开发人员根据 UI 界面、需求文档和技术文档开始编写代码,开发模块上的功能。
Code Standard / Checklist 技术规范
统一的技术规范和 checklist 利于团队协作,减少错误发生的可能性,增强可维护性。
- 数据库规范
- 代码规范
- 接口规范
- 可用性检查列表
- 测试规范
- 安全规范
QA 质量保证
- Jenkins 静态分析:Findbugs;CheckStyle;单元测试覆盖率 > 95%
- Code Review 代码评审:每周一次的集体 Review
- 测试
Tools 使用的工具/资源
- 项目管理:phabricator: 可 code review,bug tracking,任务管理和知识整理等。
- svn/git, Intellij Idea/Eclipse
- 前端资源
- 后端工具:Spring Boot CLI, JHipster - Generate your Spring Boot + AngularJS apps!
- DB Schema: SchemaSpy
细节
- 缓存
- 事务控制
- 安全
- 注重监控模块
Deploy 自动化部署
- 开发环境 -> 测试环境 -> mock 环境 -> 线上环境
- CI 工具:Jenkins
Testing 测试
- 功能测试
- 性能测试: ab, JMeter
- 安全性测试
- 集成测试
- 移动端自动化测试工具
Bug 管理
- 工具:redmine. Redmine 官方安装较为繁琐,可使用 bitnami redmine 安装包 简易安装。
Go Live 上线
Release Checklist Document,包括数据库更改、最新运行包,部署时间与方式,注意点,验证检查项等等。
DevOps
- db backup
- docker。团队里没有这方面的技术储备,不敢贸然上 docker。待研究。
其他效率/辅助工具
- 思维导图工具:MindManager, 百度脑图,XMind
- 即时沟通:BearyChat
- 移动办公app:今目标(也是厦门企业),阿里钉钉
- 其他
- Total Commander
Alternatives under linux: Krusader, Gnome Commander - gvim
- HeidiSQL: 数据库管理工具,完全可替代商业的 Navicat
- cmder
- babun: Win 上的微型 Linux 环境
- Ngrok国内免费服务器——糖果科技:内网穿透利器
- Launchy
- MobaXterm
- Atom
- NodeJS
- Total Commander
小结
对未建立或未完善完整技术团队和体系的公司来说:
- 组建核心技术团队。招聘到合适的人是件费时费心的事儿,团队磨合也是一个长期的过程。
- 研发基础设施:统一技术规范、工具链
- 搭建开发/测试/预发布/生产各环境:svn/git repo; maven/gradle repo; redmine;Jenkins
对于创业公司来说,需要建立一些必要的流程和制度。但流程这个东西必然需要经过试行,然后持续改进。
因此在初期就幻想建立一套完善的流程和制度是不切实际的。 资源和人力匮乏的情况下,一切以业务和产品优先。在过程中改进,只建立必要的流程和制度就行了。
所以,这些只是比较理想的流程,创业公司会因为时间、成本的原因,省去了很多流程,另外还有很多例外的情况,如开发倒逼需求,需求倒逼设计,不一而足,这要依实际情况调整了。这也是管理与开发的一大不同:对于机器,确定性、可预测性,而对于人性,则有更大的灵活性。但看着一个初步的 idea 在自己团队和整个公司的努力下,变成一个可触及的产品,还是很有成就感的。