|
业务决定管理
对于外包出去的项目应该如何管理, 个人觉得具体管理的方式跟外包出去的什么业务会有比较大的关系, 什么样的业务决定了如何去管理.
"外包"可以帮助国内很多中小企业成长, 国内企业通过与国外技术人员的沟通和交流, 学习国外现今的开发/测试/理论/实践, 达到一定的经验积累后, 融入自己的研发/测试体系之中, 转变成自己的"资源储备", 更好的应对现在和将来的竞争对手, 是一种经验传承链条. 然而, 企业能够在众多的外包竞争者中脱颖而出, 个人觉得(可能不一定正确, 如果有任何不妥或不正确的地方, 欢迎大家指正.), 应该建立"共生"的关系. 接包方和发包方通过"共生"关系, 互惠互利, 发包方可以将项目过程中的某些环节转移到接包方, 从而降低成本, 接包方可以从接受链条中较低层次的工作开始, 积累经验, 逐渐的承接更多链条中更高层次的工作(如设计, 架构等), 通过更高质量的外包服务帮助发包方获取更多的订单或项目, 让其发展壮大, 而这样的结果就会促进发包量递增, 促使接包方通过变革或升级, 提升自己的管理水平和开发水平, 继续将"共生"关系维持在一个"双赢", 让二者都不断的持续发展.
"外包"这种商业模式, 大致存在着三个角色, 最终客户, 发包方, 接包方, 这三者在项目的实施过程中的责任应该是明确的. 可能基于发包方外包的环节有所不同. 下面以发包方外包部分编码和设计环节为例讲述一下, 发包方和接包方的管理模式.
编码几乎是所有外包首先接到的业务, 这个过程发包方会以明文的方式告知接包方团队, 代码的编写必须遵循指定的规范(变量命名, 缩进等规约), 同时还包括如何提交代码到源码服务器, 如何从源码服务器更新本地工作空间, 如何解决冲突, 何时提交代码, 何时不能提交代码, 提交代码的标准是什么等等, 这些约定都会在接包的时候收到明确的规定(如果没有, 那么存在两种可能, 1) 发包方非常信任接包方, 2) 发包方重点关注的不是编码部分), 接包方按照这些约定, 根据发包方的设计完成代码的编写, 同时满足发包方在编码前预先编写好的测试用例(单元测试级别或功能测试级别的用例, XUnit, 测试驱动开发在外包中的一种实施方式). 发包方会通过autobuild来执行预编写的TestCase验证功能的实现情况, 然后根据设计对每天提交的代码进行code review(通常由发包方中由经验的高级项目经理完成), 如果发现小部分代码不符合设计的话, 会马上修改后提交, 如果发现大部分代码不符合设计的话, 会通知接包方的开发人员rewrite, 代码的验证基本上就是通过这种方式.(可能会根据发包方和接包方的紧密程度会有不同的实践和沟通方式). 这大致就是外包编码业务的沟通和管理过程.
基于良好的编码质量的基础上, 发包方很有可能会将部分的设计业务外包出来, 这时候"共生"关系算是向前推进一步了. 首先, 可能会让接包方做的设计工作是评审设计和提出设计方案这类型的, 是一个让发包方了解接包方承接设计业务的能力和工作质量的过程, 会根据接包方的能力, 分配不能级别的设计工作, 方法级别->类级别->包级别->功能级别->架构级别. 这个过程中需要发包方和接包方有一个沟通的变革, 在只承接编码业务的时候, 发包方对接包方的开发人员很可能是处于"细粒度管理"(发包方的项目经理直接管理接包方的开发人员), 到了这个阶段, 会逐步过渡到"粗粒度管理"(双方的关系中会演变成三种角色, On-shore Manager | Off-shore Manager | Developer), Off-shore Manager直接对Developer管理(代码的first review和功能盐城), 负责与On-shore Manager进行沟通(同步开发状态和进度等信息), 这里要求接包方要进行一定程度的管理变革, 具有一定的项目管理/风险管理/项目监控的能力. 大致的业务过程是这样的, 两个子过程, 提出设计和评审设计, 如果发包方直接提供设计方案的话, 接包方直接参与设计评审并提出设计的改进建议(可通过参与积累如何实施评审的经验, 如何有效的组织和进行评审, 评审的关键等等), 如果没提供, 那么通常会要求接包方按照要求提出设计方案, 然后进入双方评审, 经过沟通-评审等几次迭代后, 基线化设计方案, 进入编码环节.
当双方的信任程度达到一定层次的时候, 那么部分需求环节也有可能会交由接包方进行管理, 双方的高级工程师从项目的开始就会有相当紧密的沟通(对需求对架构对设计对后期的扩展性等), 发包方在过程中充当接包方和最终客户的需求沟通桥梁(这里用"桥梁"可能不恰当, 因为不单单是"连通"的作用). 这个环节可接触到发包方的需求管理和需求变更的流程, 为接包方的管理提高了一定的借鉴经验.
上述的三个环节不一定有明确的界限, 会有很多交叉的地方, 同时会根据发包和接包两者的紧密程度以及沟通管理方式会有不同的具体实践.
对于测试这个业务, 可能会有三种实施的方式, 1)部分测试业务由接包方的测试组或测试部完成, 测试组完成first check(功能或性能级别), 发包方进行second check(验收级别), 2)所有测试业务不外包, 由发包方自己完成, 3)外包到其他的独立测试机构. 一般情况下, 测试业务会和编码业务缠在一起. 融入了测试之后, 双方的关系又会发生部分变化, 分工和管理更细了, 演变成5个角色, On-shore Develop Manager | On-shore QC Manager | Off-shore Develop Manager | Off-shore QC Manager, 整个过程分裂成两个独立的体系: 开发体系和测试体系, 独立管理+独立职能+多向沟通, 可能会出现下面的沟通图:
On-shore Develop Manager <----> On-shore QC Manager
/| |\ /| |\
| | | |
| | | |
| | | |
\| |/ \| |/
Off-shore Develop Manager <----> Off-shore QC Manager
对于上述的过程, 会存在很多需要优化的地方, 比如如何才能让发包方更高效的清楚接包方的开发/测试状态, 如何才能更好的在"拉"的业务模式中提供更高质量的测试外包服务, 如何才能长久的维持双赢的"共生"关系, 如何才能高效的利用"共生"关系提高接包方自身的能力和文化积累以获得更大的生存空间等等, 这些都是非常值得思考的问题.
谢谢大家忍耐了上面那么冗长的文字, thanks for your reading, if anything wrong, please correct me.
Thanks again. |
|