创业如何实施敏捷开发《转》

原文连接:http://lanceyan.blog.51cto.com/5843/1228099html

提及敏捷开发,并非由于敏捷而敏捷。这几年的敏捷开发已经被不少敏捷咨询服务商神话了,这个东西并非神器,实施了就能够解决全部软件公司的问题,而是要结合本身公司的特色和问题摸索出适合本身的一套模式。前端

你们都知道,创业公司刚开始须要研发出一款产品而且可以使公司赚钱的产品,不过大部分创业公司没有那么容易一下就能作出来,不少公司尚未成功的产品资金链就断掉了,公司也死掉了。咱们公司是这样一个情况,有一条产品线能够维持公司开支并仅仅刚够盈余,要扩大高速发展还不够,一直维持就没有创业的意义。另外一条线是作技术创新为将来可以开发一款人气爆棚的产品摸索着,可是又不能饿着肚子去开发。咱们是如何结合自身的特色实施敏捷开发的呢?一个难题,很大的难题!java

咱们技术团队人员是这样的配置:1名技术总监、2名资深开发工程师、1名高级开发工程师、2名潜力开发工程师、1名前端开发、1名测试。技术总监须要处理不少团队管理、客户管理的工做,可以参与项目的时间最多天天二分之一。2名资深开发须要负责给其余工程师作导师,参与新项目开发时间大概有80%。高级工程师要预留项目学习时间,参与项目的时间大概有90%。潜力开发工程师须要有一些时间学习技术和项目,可是基本能够作到70%的时间投入项目。前端开发和测试哪里有须要就在哪里革命,属于机动部队。编程

如今总共有六个老项目在维护,两个新项目须要开发。六个项目的维护总共须要每周4人天时间(人天指须要花1我的4天的时间完成一个事情)。其中一个新项目“项目1”大概估计120人天的开发时间,须要1个月以内开发完成。“项目2”大概估计要40人天的开发时间,须要2周开发完成。而如今的人力按照可以投入的时间算一下,总共资源为 (1 * 1/2 + 2 * 8/10+1 * 9/10+2 * 7/10) 30天 = 132 人天,6个老项目每周须要4人天,一个月4周,须要 4 * 4 = 16人天。项目可以投入的资源有 132 – 16 = 116人天,而总共须要120 + 40 = 160天,足足少了44人天,这看起来是一个不可完成的任务。架构

不过到最后,咱们仍是使用敏捷开发完成了这两个项目,也没有影响老项目的维护。咱们是怎么操做的?最开始咱们两个开发,这个时候只要两我的就可以很好的合做把产品开发出来,不须要什么模式。随着人员的扩充,团队间如何协做按时按质按量完成任务就须要好好思考下了。maven

尝试一,传统软件开发模式。整个过程为 需求分析、系统设计、任务分解计划安排、开发设计、编码、测试、交付、验收、维护。这个模式也是你们最常使用的模式,不过套用在咱们公司时咱们是这么操做的。svn

传统开发过程传统开发过程工具

因为公司创业,老板有一个想法,但并不能很好的描述需求,因此需求分析的任务落在技术总监身上。系统设计和任务分解刚开始是技术总监完成,后面资深开发工程师能够承担一部分。开发设计可让各个开发工程师完成,资深工程师进行把关,再到测试人员测试,最后再交付用户验收、技术维护。看起来很好的模式,开发了几个产品最终有的延时有的产品离用户的指望差距甚远,参与项目团队的人信心受挫。学习

为何会失败呢?后来思考了这些问题:测试

一、技术总监不是产品经理,不可以承担产品设计的责任。老板是信任技术总监能作好产品,就交给他作。但这里搞混了一个概念,产品经理和项目经理,技术总监应该起到项目经理和架构师的做用。项目经理管控项目进度和计划、架构师把握总体技术问题。而技术总监接到这个任务又不能不作好,责任所在。说到底,就是机制没有把产品设计和项目经理区分开,不等于技术实现者就是产品设计者。更多的应该让老板或者其余业务人员承担产品设计的工做。

二、需求不稳定,变化后改动代价大。因为创业,需求为了适应市场会常常调整,可是一但调整,不少开发计划就会受到相应的调整。若是部分功能已经正在开发,调整需求后不少工做要从新开始,严重影响了技术同事积极性。业务不调整需求是不可能的,他们是为了知足用户的要求,用户满意了才能给企业带来价值。不过若是调整,代价太大,不少代码要重写,你们就会责怪技术总监或者项目负责人没有把握好需求。

三、团队常常加班,但战斗力不强。 核心团队疲于应对需求、技术开发、老系统维护,没时间指导新同事技术学习,而新同事技能暂时尚未发挥出来干活效率低,任务常常延期,没有成就感。核心团队事情不少,没有时间整理项目文档,新员工没有文档上手慢。你们天天不少事情,须要加班才能完成,比较疲惫。每一个人除了工做还有不少事情须要作,好比回家看看电视、陪陪家人、看看书学习一下等。若是让一个员工一天二十四小时都是工做,他能赞成,他家人也不必定赞成。让你们愉悦的开发,比疲惫的上班效率要高不少。

四、交付软件质量差,离用户指望差距大。创业时你们的想法都是好的,大干一番,作一个全部人都爱使用的产品。现实是残酷的,你们辛辛苦苦作出来的东西,老板不满意、用户不埋单,付出的努力没有人承认。交付的软件没时间自测试,或者自测试不充分,交给测试又是一大堆问题。有些公司尚未测试,直接出去给用户,至关危险。这样交出去的公司不只仅影响了用户的使用,还影响了整个公司的口碑。

不是说传统软件开发模式很差,只是不太适合咱们这种创业公司。开始尝试其余模式,若是没有一个很好的体制就不能把你们的最大生产力发挥出来。

尝试二,敏捷开发模式。敏捷开发是一种以人为核心、迭代、按部就班的开发方法。敏捷方法强调以人为本,专一于交付对客户有价值的软件。在高度协做的开环境中,使用迭代式的方式进行增量开发,常用反馈进行思考、检讨和总结,不停的进行自我调整和完善。

敏捷开发的主旨

一:个体及交互比流程与工具更具价值
二:可用的软件比冗长的文档更有价值
三:与客户的协做比合同谈判更有价值
四:对变化的响应比遵循计划更有价值

而咱们以前的问题,交付软件客户不满意、延期、需求更改代价大貌似均可以解决。这么好的模式赶忙要试试,先看一张敏捷开发的流程图。

创业公司敏捷开发敏捷流程化创业公司敏捷开发敏捷流程化

敏捷开发简单流程

一、产品负责人将整个产品设计成产品backlog。产品backlog就是一个个需求列表。(backlog能够理解为需求或者要作的事情)
二、召开产品backlog计划会议,预估每一个backlog的时间,肯定哪些backlog是须要在第一个sprint中完成的,即sprint的backlog。(sprint能够理解为一个团队一块儿开发的一个任务集合)
三、把sprint的backlog写在纸条上贴在任务墙,让你们认领分配。(任务墙就是把 未完成、正在作、已完成 的工做状态贴到一个墙上,这样你们均可以看获得任务的状态 )
四、举行每日站立会议,让你们在每日会议上总结昨天作的事情、遇到什么困难,今天开展什么任务。(每日站立会议,是在天天早上定时和你们在任务墙前站立讨论,时间控制在15分钟内)
五、绘制燃尽图,保证任务的概况可以清晰看到。(燃尽图把当前的任务总数和日期一块儿绘制,天天记录一下,能够看到天天还剩多少个任务,直到任务数为0 ,这个sprint就完成了)
六、sprint评审会议是在sprint完成时举行,要向客户演示本身完成的软件产品 。
七、最后是sprint总结会议,以轮流发言方式进行,每一个人都要发言,总结上一次sprint中遇到的问题、改进和你们分享讨论。

咱们怎么结合敏捷开发解决现有项目的问题,要记得任何措施都是为了保证按时按质按量把软件交付给用户,不要为了敏捷而教条实施敏捷,公司不能产生商业价值,任何先进的理念或者技术都是无心义的。咱们作了这些措施:

一、推广敏捷开发理念。无论是大公司仍是小公司强制推行一项制度效果通常都不怎么好。要能推行下去的任何东西必定要你们接受的,才能被承认。

  • 首先培养测试小妹学习敏捷开发,后续让她承担部分产品责任人和敏捷指导者的角色,缘由有:
    a、测试要验收功能,必须理解业务需求。
    b、测试也是QA质量体系的一块,学习好了对于软件质量有个更深的认识。
    c、团队大部分是男生,女生推广更有亲和力一些。

  • 召集全部技术团队开会准备推广。开始和测试小妹好好讨论下,怎么给你们说更有效,更容易接受。她要讲解必定要本身很是清楚敏捷开发,而且准备充分知识点。开会时先指出咱们如今问题,让你们看看有什么想法解决问题吗?如今咱们作的产品,客户不承认、老板不满意、本身很累没有成就感,有什么办法解决。在你们讨论后,抛出敏捷开发的优点,通常状况下你们都会承认的。你们可能会问到如何执行、落地,能够尝试找一个项目试点,若是实施成功就可让你们全面推广,不成功也只影响了部分项目。

二、搭建敏捷开发环境。你们要实施敏捷开发,须要比较好的基础条件保证敏捷开发顺利进行。主要几个关键的软件:nexus 搭建仓库依赖中心、maven 管理工程的依赖、jenkins 持续集成和自动编译发布、svn 集中代码管理、jira 记录需求和状态。具体参考《敏捷开发环境搭建》

三、敏捷项目实施。整个公司创建以业务目标为导向的氛围。就以“项目1”来讲,目的是完成这个项目,须要进行这几步:

  • 先根据各自的能力和意向汇集一批完成这个目标的勇士,无论技术和非技术。若是汇集的人不够,技术总监能够根据整体项目的投入机动调整资源以支持,不过条件容许的话仍是根据你们意愿来汇集。最终“项目1”召集了一个技术总监、一个资深开发、两个潜力开发、一个前端、一个测试,除去你们作其余事情的时间,总共能够算做4我的。

  • 充分调动客户(老板和业务同事)参与进项目,他们的参与直接决定了项目成功与否。结合以前的经验,若是他们参与不够,最终作出来的东西就不是他们要的,或者离他们要的差距很大。他们刚开始加入的时候,很迷茫有时会表现的比较抗拒,这个时候必定要耐心坚持让你们把第一个sprint开发成功,使你们尝到甜头。让他们全程参与项目也是表示了咱们拥抱变化,若是有需求变化,就添加任务到任务墙,你们能够对全部任务的时间有个全面了解,若是超过sprint结束时间就须要业务决策哪些功能不在这个sprint周期加入。

  • 技术总监安排和客户沟通,客户这里指老板和业务。测试小妹负责和客户沟通记录,技术总监辅助。屡次沟通后,尝试让测试把需求原型用最简单的工具绘制出来,技术总监审核经过后和客户沟通确认,反复迭代,直到整个需求你们没有异议。不少公司这种需求是有一个专门产品负责人来执行,但按照咱们目前的人力是没办法作到的。这里没有让技术总监作主要是为了不以前出现的问题,过分技术设计产品。

  • 产品设计出来后,召集项目成员分解任务,肯定每一个任务的时间,可使用敏捷扑克牌来估计。任务分解尽可能控制在1-2天的粒度,这样你们1-2天就能够作出一个能测试的原型,尽早能够集成测试发现问题。一个sprint的任务集合尽可能控制在1-2周,不能太长,也不能过短。太长会出现疲劳,过短的sprint会让你们以为工做太多,作完一个又一个。“项目1”估算结果为120人天,总共投入4我的,须要30天4周时间,咱们切成了4个sprint,差很少1个月时间完成,知足业务的时间要求。

  • 分阶段实施sprint,绘制任务墙,划分未开始、已计划、进行中、完成、燃尽图。把要作的sprint任务上墙,贴到未开始的地方。

创业公司敏捷开发任务墙创业公司敏捷开发任务墙

  • 每日站立会议你们认领任务。包括业务任务、开发设计、开发编码、前端设计开发、测试等都是一个个任务,统一管理起来。强调的是一个团体,若是有同事请假,其余同事能够顶上完成任务。站立会议总结昨天的任务是否有问题,对于当前的任务有什么建议,尽可能控制在15分钟内,有效会议。这里不会像之前业务或者项目经理追着你们屁股要结果,而是团队驱动,天天你们作的事情都反映在墙上,谁出现了什么情况,你们都会帮他想办法,保证整个项目可以成功。每个任务完成,由项目执行者把任务从进行中贴到完成区域。再从未分配区域认领新任务贴到进行中的区域。

  • 软件开发过程。认领任务后,怎么保证你们开发有质量的代码?团队有资深点的工程师,不须要太多指导,直接能够参与项目的开发。而学习型工程师,须要指导帮助才能一步步作用例、系统分析。技术总监不建议认领太多开发任务,他负责开发团队的概要设计审核,没有审核经过的设计不能开发,并指导你们分析和设计系统。你们都知道,系统思路有了,剩下就是技术实现的过程,只要技能掌握熟练实现基本难度不大。你们可能会问,敏捷开发不是强调软件开发的产品是软件,而不是文档吗?咱们这里也不是像传统开发软件同样为了文档而文档,只是让你们把本身的设计思路写下来,只有通过本身仔细设计后才能把思路清晰的写下来。你们写的时候也不须要长篇大论,这样的文档是不欢迎的,受欢迎的文档只需写出用例分析,表设计,复杂的逻辑须要画出流程序列图。

  • 结对编程。以前这个编程模式被无数人调侃过,其实也不可能让每个项目全程都是两我的结对编程。这个不现实也浪费资源。咱们的结对是在你们开发一个难点模块时,会给结对的人增长一项任务去配合其余开发一块儿完成这个任务。其实咱们在开发时,不少时候都会结对,好比指导新同事、讨论设计模块,而以前这些都没有算在咱们的开发工做量里。

创业公司敏捷开发结对编程创业公司敏捷开发结对编程

  • 项目演示和总结会议。在项目结束后,让全部参与项目的成员都参加,一块儿演示给客户展现,并解答客户的问题,充分让你们感觉到收获的果实。总结会议主要对于这个sprint中你们遇到的问题和经验分享,并为下一个sprint作准备。

通过敏捷实施后,咱们的生产力提升了不少,员工的积极性提升了,业务的参与使总体需求把控也很好,你们沟通多了,30天的任务提早了5天完成。咱们多出来的时间,让你们每周有一天或者半天研究本身感兴趣的领域,可是这些研究最终必须体现出成果。好比后台开发想研究一个新技术,最后作完须要写个ppt给你们分享下。既能让你们作本身想作的事情,也给你们创造了一个互相学习的氛围。

ps:全部的模式都不该该是教条的模式,先进的模式并非好的模式,适合本身的才是最好的。套用一句俗话:无论黑猫白猫抓得住耗子的才是好猫。

另曝光一下项目1参与成员:

 

项目1敏捷团队项目1敏捷团队

相关文章
相关标签/搜索