分布式开发:异地分布式敏捷软件Software开发探讨分析

  异地分布式软件Software开发(Distributed Software Development)是指由多个位于区别地理位置团队(Team)进行同个软件Software项目开发过程这个词越来越频繁出现在各种技术媒体中

  异地分布式软件Software开发区别于外包它建立在平等关系两个团队(Team)的间通常是个公司区别分公司或办公室间协作他们的间大多不存在博弈合同关系而外包是指个公司将其软件Software系统开发委托给另个公司或组织完成 2者的间是合同甲乙方关系

  但无论是异地分布式软件Software开发或是外包可以接触到实际客户般称为on-site端可相应称为off-site他们可以根据地理位置分为 3类:on-shore(在岸指在同个国家或同个时区内)near-Shore(近岸在接近国家和地区中)和off-Shore(离岸通常在时差8小时以上)如下表:  offsite on shore near shore off shore
Distributed Development 北京办公室 - 西安办公室的间 印度分公司 - 中国分公司 硅谷总公司 - 中国或印度分公司
Outsourcing

  Development 北京某公司 – 广州另公司 东京某公司 - 大连另公司 欧洲某公司 - 中国另公司



  异地分布式开发组织方式

  异地分布开发组织方式有很多种最常见种是公司将完整团队(Team)组织结构分布在两地每个团队(Team)都有本地项目经理(project manager)需求分析师开发者以及测试同时公司设定项目总负责人角色负责两地沟通和协调



  图3

  交流频度和价值图Vincent Massol2004

  每天定时会议将成为很重要个很重要交流方式如果团队(Team)人数较少大家可以按照站立会议方式在电话会议系统中介绍说明自己情况和遇到问题如果人数较多种可替代方式是每个团队(Team)自己进行每日例会并由个项目项目经理(project manager)和需求分析人员进行另外会议以便协调工作

  如果两个团队(Team)时差较大例如中国北京时间和美国东部时间时差12-3小时想要进行直接电话会议交流很困难如果遇到3个处于区别时区团队(Team)更是经常不可能找到个合适时间来进行任何会议在国际化公司中起早贪黑进行几地电话会议很常见但这却不适用于整个开发团队(Team)对这种情况每日开发状态邮件是很有用每日开发结束后由项目经理(project manager)或成员来根据团队(Team)情况来撰写整理总结并发送给远端团队(Team)

  交流障碍经常发生在陌生人的中如果两地开发人员互不熟悉可以考虑将双方人员照片贴在墙上以增加熟悉感可行进行可视会议和当面会谈尽量减少陌生感使交流效果提升

  任何交流方式都比不上面对面交流异地开发时off-site端很容易丢失on-site端和客户交流语义上下文和环境如果情况允许公司应该设立常规出差和轮换制度部分团队(Team)成员到另起工作同事了解下客户需求和感受下区别环境

  敏捷开发过程改进

  般敏捷过程中都会有阶段在这个阶段了解开发需求和制定发布计划要进行这样活动最理想办法是让所有人都出差到on-site起了解需求和建立共识这将会对后面开发有很大帮助如果由于人数或成本不可行至少要派遣所有需求分析师和项目经理(project manager)、协调人以及部分测试人员到场参和对于迭代计划应该由两地项目经理(project manager)和需求分析师提前进行计划会议并做出决定

  日常项目管理(project management)工作中采用卡片墙方式只适用in-house开发在异地开发中为了使得每个团队(Team)都可以了解到团队(Team)任务至少需要在两边开发室都设立卡片墙并保持同步可以采用在线工具帮助进行项目跟踪例如Mingle或Trac都是适用在线工具同时也是在线Wiki或共享知识库

  项目协调人应当制定完善交流计划和交流机制例如前文提到每日例会和每日开发状态邮件每周需求交流计划问题提出和反应机制等等这些应当制定成为团队(Team)守则来遵循并随着实际情况变化修订交流不怕多只怕不充分

  个共享代码版本控制系统是必须例如在公司内网建立个SVN并通过VPN来使用On-site和off-site团队(Team)可建立自己单独持续集成环境但需要保持系统环境两方开发人员都应该保证每日离开办公室前提交通过集成这样可以避免异地团队(Team)开始开发不至于被失败集成所耽搁

  基本敏捷时间必不可缺例如测试尤其是功能测试On-siteQA应当在需求确定时候制定好验收条件个描写良好验收条件会对开发人员有所帮助尤其是在On-site端不能及时解答问题时候会起到很大作用

  每个迭代结束时应尽量安排个两地同步演示会议让所有人都在电话会议上看到这个迭代成果迭代后整理总结和回顾也应当两地起进行如果人数和条件不允许可以分别进行并互相通报回顾结果和改进思路方法

  离岸团队(Team)参和度

  多团队(Team)中处于on-site成员由于可以接触到客户他们话语权可能会被放大使得on-site人倾向于命令式消息传递直接指派需求和开发进度而忽视了对需求背景情况和上下文进行介绍这种情况可能造成off-site端团队(Team)产生抵触心里从而导致项目失败

  解决思路方法是提高off-site团队(Team)参和度如制度性进行人员轮换让两端团队(Team)成员有所接触并互相熟识定期组织两个团队(Team)共同活动如果都处于个时区可以考虑进行每周Learning Lunch大家在互相能看到视频情况下起吃饭和听讲座讲座内容可以是任何话题例如些项目相关技术决策等等

  不要忽视offsite团队(Team)任何意见和建议他们在很多时候能从另个侧面对项目提出见解鼓励offsite团队(Team)决策和发起讨论这样可以提高他们参和度

  实施异地开发最初目是为了降低人力成本和运营成本些跨时区异地开发还可以提高时间利用效率实现全球24小时开发然而异地开发带来了高昂交流和管理成本如果处理不当将直接导致项目或产品失败

  近年来随着国内软件Software公司业务发展异地开发项目将会越来越多全球化进程也会使得外国公司开展更多类似开发异地开发项目将会逐渐发展和普遍可以想像多年以后如果个公司没有异地开发团队(Team)将会是多么令人诧异

Tags:  敏捷开发 分布式开发

延伸阅读

最新评论

发表评论