在上面的引言部分,我们提到,JAD是个跨部]的流程。在存在功能障碍的组织中,实施JAD1会很有难度,但对治疗这种功能障碍来说,JAD却是绝对必要的。工程师和运营人员相互不信任的情况,在大多数公司都存在。团队之间互不信任,甚至互相憎恨,这种情形虽然可悲,却很常见。在我们找出解决这种功能障碍问题的办法,开始通过团队合作构建可扩展的应用之前,我们需要理解,为什么会存在这种问题。
在上面的引言部分,我们提到,JAD是个跨部]的流程。在存在功能障碍的组织中,实施JAD1会很有难度,但对治疗这种功能障碍来说,JAD却是绝对必要的。工程师和运营人员相互不信任的情况,在大多数公司都存在。团队之间互不信任,甚至互相憎恨,这种情形虽然可悲,却很常见。在我们找出解决这种功能障碍问题的办法,开始通过团队合作构建可扩展的应用之前,我们需要理解,为什么会存在这种问题。在大多数软件开发组织中,不难找到一个工程师,他会觉得架构师、运营人员、数据库管理员、系统管理员和网络工程师要么就是不懂编码,要么就是没有完全理解软件开发流程。另外方的不信任也很常见,即运营人员或架构师觉得软件开发工程师只懂得编码,不懂高端的设计或整体系统的概念。更糟的是,他们互相觉得对方的工作与他们自己的目标是直接对立的。你常常会听到运营人员小声抱怨,“如果软件开发人员停止在服务器上发布代码,他们就会保持服务器一直是运行的”,而软件开发人员则会小声地反击,“如果不是运营人员让他们遵守那些愚蠢的规章制度,他们就能开发和调试得更快”。这些想法和疑虑对应用和组织的可扩展性来说,打击都是毁灭性的。它们也表明,不仅存在于业务部和技术团队之间,也很容易出现在技术团队内部。
对于经验的鸿沟,我们曾经指出,两个团队之间教育和经验的差别会给沟通造成破坏性干扰。软件开发人员和系统管理员在大学中接受的正规教育可能非常相似,例如都是计算机科学专业,
也可能有很大不同,例如个是计算机科学 专业而另一个是计算机工程学专业。 真正使两者开始出现较大不同的是在职教育。系统管理员或数据库管理员前几年通常会得到高级管理员的指导,直到他们精通某项技术为止,这样会提高他们在那个领域中的专业性。软件开发工程师的职业路径相似,只是关注的是软件开发语言。至于应用在哪台服务器上运行、应用调用的是哪个数据库,对于软件开发工程师而言都是最不关心的部分,这样他们才能专注于功能的开发。
一旦两个团队在一开始就存在经验的鸿沟,那么当我们增加了不同的目标,有时甚至是相反的目标时,他们就会渐行渐远,以致看不到任何共同点。在大多数组织中,团队之间并没有共同的目标。如果本意是想让团队一起合作,而不是让他们彼此争斗,那么这就是问题所在。运营团队的责任通常是保证站点的正常运行时间或者可用性,任何停机时间都会使他们的奖金减少。而开发团队的目标通常是交付新功能,错过了交付日期就会使他们的奖金减少。在CTO看来,所有的目标都会被分配给各个团队来处理,各司其职,无所疏漏。但现实是,像这样划分目标,事实上会引发团队之间的冲突。
开发团队交付新功能的目标会促使他们想尽快完成编码,如果出现故障了,他们认为自己可以随时修复代码。这是迄今为止实现代码的初次交付最快的方式,而交付时间通常也是唯一的衡量标准。但长期来看,这种方法实际上花费的时间更多,因为发现问题、修复问题以及重新部署代码修复这一-问题的过程会花费很多时间。但正如前面我们提到的,这种交付后的时间,通常不会被计算在内,因此不会出现在交付目标中。
根据运营团队的目标,他们想要的是保持站点正常运行,提高可用性。这就会促使运营团队拒绝生产环境的变更,因为变更是造成问题的主要原因。他们认为向生产环境发布的代码越少或者做的变更越少,团队就越有可能实现目标。不论他们是否意识到,运营团队突然间变得不怎么愿意让代码发布到生产环境了,事实上他们甚至还会开始查找系统变慢的原因。
现在你应该明白了,你有两个或多个团队,虽然他们各自对系统和架构的一般原理有着深刻认识,并对你的系统有具体了解,但他们就是本能地互相讨厌对方,很不愿意协同合作。那么如何解决这个问题呢? JAD流程是个很好的人手点。正如我们将在下一节中讨论的,JAD是个合作流程,它会用一个共同的目标把各个部门的团队成员拉到一起。JAD团队要么一起成功, 要么一-起失败,对此在它的组织和领导团队上就能体现出来。
JAD的基本思路是,一个重要功能不能只分配给软件开发工程师,还要分配给个架构师以及至少一个运营工程师(数据库管理员、系统管理员或网络工程师),可选的还包含产品经理、项目经理和质量保证工程师,这可以根据该功能的需要而定。这个团队的职责是根据组织已有的架构设计原则提出一个设计,这个设计要使系统能够持续地扩展,使这个功能能够满足产品的要求,并且还要能够通过ARB的审查。这个团队中的成员最终要向ARB陈述这个设计,它是由这个团队的同级人员和经理构成的,它将决定这个设计是否满足标准。幸运的是,这种合作不会仅止于设计,由于这些人都已经和这个功能密切关联在一起了,所以在这个功能的整个生命周期中,他们都会积极地关注它,确保它是成功的。这样软件开发工程师要对设计以及它在生产环境中的表现负责,数据库管理员则要负责这个功能的设计不仅是可扩展的,还要能够满足业务需求。如此这般,我们就用一个共同的目标,让软件开发人员、架构师和运营人员一起协同工作了。
可能您还想看