本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请 订阅2016年《程序员》 作者:刘旭东 ,就职于中国移动研究院,信息安全方向硕士。主要从事移动应用架构及研发管理工作,具有多年项目开发及管理经验。目前主要关注大数据及深度学习领域的研究工作。
有人说移动互联网的发展是第四次工业变革,移动互联网技术不但渗入人民生活,也日益影响企业的发展。无论是传统行业还是新兴的互联网公司,都在拥抱互联网,力图在移动互联网时代占有一席之地。
对于传统行业,提升自身研发管理水平,建立有竞争力的研发队伍是完成产业转型的必由之路。笔者就职于中国移动研究院,从事移动企业应用软件方向的研究工作,在日常的工作中作为产品经理管理研发团队,同时兼任整个公司内部的软件研发工具的管理和推广工作。身为研发管理部门的人,近些年一直努力在公司内部推行新型的软件研发管理工作,提升研发管理水平。因笔者公司的性质以研究为主,项目团队参与者较少,而项目种类纷繁复杂,内容复杂多变,因此在日常的工作中,期待改变传统的工作方式,以更灵活的组织结构,更加开放的态度进行研发工作。
作为软件产品经理,要求研发团队快速迭代,及时反馈,以适应快速变化的需求。但作为传统的通信企业,研发团队已习惯了以往的开发模式和组织架构,很难一步到位实现敏捷,只能通过不断实践,摸索一套符合目前团队状况,以及适应市场需求的类敏捷开发方式,而在这种转变的过程中,新的软件开发管理方式以及软件过程管理工具就尤为重要。笔者作为项目的参与者和管理者,以两个角色两种视角,尝试找到适合本公司发展的研发过程,以及构建相关的研发管理工具链,以达到提高研发水平的目的。
笔者所在公司每年新建项目以及既有项目平均保持在五十个左右,而且每个项目可能由多个子项目组成,规模相对较大。而针对每个项目,项目类型和项目人员构成又极其复杂。公司内部的项目类型可分为算法设计、软件研发、硬件设计,国际组织管理等多种类型。组成人员也极其多样,可能有本公司人员,合作公司人员,外省公司客户,国际公司伙伴等。作为研发管理人员,如何有效管理项目,提高工作效率是工作的核心问题。本文针对软件研发以及相关的工作管理进行讨论,因为目前公司多数成果会以软件形式呈现,因此比较具有代表性。
在日常工作中,笔者作为研发工具的管理和推广人员,不断推行敏捷软件开发方式,对于团队规模在几人至几十人的研发团队,敏捷软件研发过程能有效组织日常工作。对于敏捷软件开发过程,上至开发部门,下至开发团队,已对敏捷过程管理有基本认知,项目经理会在日常工作中有意识地推行敏捷方法。但是,传统企业的基因决定了很难突破制度的壁垒,真正实现敏捷开发。其中突出的问题反应在以下几个方面。
首先,开发模式僵化以及团队结构不合理,软件团队还存在过度的前置路径依赖。所谓“前置路径依赖”指的是开发团队的每个工作人员过度依赖前一个环节的产出,并不是协同而是逐级工作,这种组织过程的僵化严重影响了效率。团队过分强调前期需求的调研和整理,一味以需求点作为开发依据,快速变化的需求导致发现问题时已处于开发过程的末端,修改工作量巨大,不能快速发现和修正问题。
其次,团队结构不合理。主要体现在团队的配置不够合理,设计、开发、测试分别是三个不同的部门,以三种不同的视角看待同一个项目,最终产品很难协同,提交给用户的产品与原始需求差异较大。另外,存在大量外包工作,项目团队核心能力掌握不足,核心技术以及项目进度等掌握在外包公司手中,无法实现项目的有效管理和管控。
笔者作为产品经理,管理移动软件开发团队,主要开发公司内部移动办公软件,团队主要由设计师、开发人员、后台开发人员组成,团队规模长期保持在十人左右,其中有很大一部分是合作公司员工,这样一个混合团队给软件研发管理提出了比较高的要求。在日常工作中经常出现思想不统一、工作偷工减料等问题,怎样控制研发进度,尽量避免工作的偏差成为一个棘手问题。针对研发过程中出现的问题,结合项目实践中不断总结的经验,笔者探索出一套简单的实践方案,在此分享出来,希望能对有类似问题的企业和团队提供一点帮助。
我将其称之为“类敏捷研发管理方案”,之所以称之为“方案”,是因为该套方法仅是解决部分问题,而不是一个放之四海而皆准的方法论。类敏捷管理方案主要由项目管理方案和管理工具两部分组成。对于项目管理方案,主要的思维是功能拆解,每个功能模块按照二人日的工作量估算,以达到快速跟踪的目的。软件的研发过程依然按照设计、开发、测试的阶段进行,但在每个阶段使用固定工作量拆分,以便日后进行跟踪。每个小流程依然按照既有开发流程进行,但保证每个小功能从开发到测试在一周内能基本完成。项目不强调每日例会,但需要项目跟踪例会。在项目的具体实施阶段,使用项目管理工具跟踪进度和任务执行,力图通过可视化的报表及时掌握项目的研发进程和发现可能存在的问题。
执行过程中最可能出现的问题就是每个工作点的估计,作为一个经常变动的团队,最开始很难准确估算出每个点的工作量。每当项目开始,我都会在前半个月或一个月采用松散的敏捷开发方式,虽然以功能点作为衡量,但并不完全严格控制,通过两个迭代的适应,团队的每个成员能了解自身的能力,项目经理也能全面了解团队的战斗力时,再严格执行迭代计划。
作为项目管理人员,选择合适的管理工具才能事半功倍。对于项目管理工具的选择,主要考虑几个方面。首先保证工具简单可用,其次能灵活配置,另外有丰富的报表。我在自己负责的项目中,以及工作研发工具的推广方面,使用的是Atlassian公司的Jira和Confluence。Jira作为核心管理工具,基本能实现团队对项目管理的需求,并能自由灵活配置相关内容,极大地解决了整个公司几十个不同团队不同的工作流程,能更自由地将个性化的管理方法通过软件直接实施。其次,Jira的每个问题中有基本的工作量估算和度量功能,整个团队能完全理解工作内容,并且工作量能及时体现,管理人员能通过数据直观地看到整个工作进程,以及潜在可能发生的问题。
通过Jira就基本满足了各种不同的项目组对软件开发过程的要求。另外通过使用Confluence共享过程文档,串接Jira的开发过程,能及时留存有用的资料,也间接提高了团队的知识储备,很好地提升了团队成员的知识水平。另外,Jira丰富的插件能配合团队原有的代码管理和持续集成工具,实现软件开发持续集成,极大提升了工作效率。
通过类敏捷的管理方案配合管理工具,在笔者经手的项目中,一定程度上提升了整个项目的研发稳定性,在项目的交付中也能达到相对稳定的水平。但在执行过程中也遇到很多不确定的问题,通过对已发生的问题梳理和提炼,总结了以下几点教训和建议,供有类似问题的团队参考。
第一,代码评审是提高软件质量的有效途径。在软件开发过程中一定要执行代码评审,即使不能对所有代码进行评审,对核心代码也要有评审过程,并且留下书面报告。目前,国内很多团队并没有真正的代码评审,企图通过测试人员发现问题,但结果是问题不断增多,花大量时间修复问题,严重影响软件质量。通过代码评审,很大程度上能避免该类似问题的发生,真正成熟的团队通过代码评审能提早发现问题,而且不断提升开发人员的技术水平,可谓一举两得。
第二,不能完全依赖工具,线下沟通依然是最有效的方式。通过对团队的走访,很多项目经理期待靠工具自动监控软件开发,更有甚者希望通过查看代码的提交数来制定KPI等规则。在这种错位思维引导下,很可能将整体团队带入造假、虚报工作量的过程中,反而降低了工作效率。解决这个类问题依然需要整个团队定期整改和反思,通过线下沟通实现项目的可持续发展,工具永远只是辅助。
第三,使用Jira不要造成工作流程泛滥。在使用Jira管理项目的过程中,由于其灵活的特点,使得团队任意配置工作流,导致系统中出现大量重复和差别较小的工作流。复杂的工作很有可能交叉和相互影响,最终造成不可逆转的工作流泛滥,直至影响多个项目进行。在笔者管理整个公司Jira系统前,由于没有统一管理,整个Jira系统中存在近200个工作流,相互交织,最终只能放弃原有系统,重新搭建环境,浪费了大量的工作时间和精力。解决这个类问题需要集中管理,通过一个或者多个管理员团队,统一维护整个公司的工作流环境,避免以上问题发生。
第四,适当培训是提升工作质量的有效方法。越是看似简单的工具就越需要统一认识,才能真正发挥工具的力量。简单的工具容易上手,但如果没有统一培训,将会产生成千上万的使用方法。目前我们会定期举办研发工作培训和交流,分享成功经验。经过半年时间,越来越多的团队能合理熟练地使用项目管理工具,提升研发能力。
在践行类敏捷开发流程和使用Jira等敏捷开发管理工具过程中,确实出现很多意想不到的问题,也走过很多弯路,但随着移动互联网的发展,整个软件开发相关的行业正在发生深刻变革,需要我们每个团队适应变化,迎接挑战。也需要我们发现好工具,利用好工具,修炼内功,也希望本文的读者能去粗取精、去伪存真,真正将项目管理上一个新台阶,开发出高质量的软件产品。
订阅2016年程序员(含iOS、Android及印刷版)请访问 http://dingyue.programmer.com.cn
订阅咨询:
• 在线咨询(QQ):2251809102
• 电话咨询:010-64351436
• 更多消息,欢迎关注“程序员编辑部”