作者 Wzy-CC
序言
其实很多人没有意识到,组织和工程是有极大的相似性的。“组织决定系统(产品)的形态”匡威定律说的其实就是这个事情。因此我想有必要把组织和工程使用相同的视角来看,他们在也应该具有相同的最佳实践。至于本书的title应该是《组织工程学》还是《工程组织化》我想其实没有那么重要。
人力是一种资源
对于一个复杂的系统来说,CPU是资源,内存是资源,数据库是资源,硬盘是资源,系统架构的设计必须考虑业务场景的不同来设计不同的系统。比如一个经典的网络服务就必须考虑网络时延,因为需要更快速的响应客户,所以在大型c端系统中不仅仅需要数据库,还可能需要缓存,甚至布隆过滤器。而一个简单的b端系统就没有必要使用这些。所以说不同业务场景下的设计一定是不同的,但是有一点是相同的,就是必须考虑尽可能的节约资源。一个IO型的服务明显不需要高性能的CPU和GPU,所以可以只申请一个单核容器。而一个计算型服务,比如一些渲染任务或者机器学习的任务,就需要考虑计算资源,而对于IO的容忍度可能会更友好。在计算机系统中,需要把资源整合起来服务用户。
同理在一个组织中,人力是一种资源。在一个敏捷开发的团队里面,人成为了一种资源,不同的组织也是一种资源,比如运营,比如工程师团队,比如产品设计团队。甚至组织和计算机系统的设计思想是相通的,比如为了避免请求直接打到数据库上,我们需要缓存在前面挡一层;而在oncall这个场景下,为了避免直接消耗工程师的精力和心智(这是因为工程师的时间成本比较大),我们需要在前面挡一层运营团队来帮助工程师解决一些简单重复的问题,这就是组织中的缓存。在组织中,需要把资源整合起来来搭建高效的团队。很多时候盲目扩张也好,部门整合变动也好,其实都没有遵循组织工程学的最佳实践。在接下来的几章中我会探讨如何进行组织最佳实践。
组织防御与进攻学说
在此之前,先进行发散性的思维。既然组织是一种资源,那么一定有一种耗尽其他人资源的攻击手段。在计算机系统中可能是DOS攻击,而在组织中,我们也可以同样发起类似的攻击。既然oncall是一种资源,两个竞争对手之间可以同样通过疯狂给对方提交工单的方式来击穿对方的缓存,让对方的运营和工程师资源不断的在无意义的oncall中耗尽时间。那么同理,也可以搭建强大的缓存机制来防止这种攻击手段。在计算机系统中我们可以通过IP来识别攻击者的身份,同理在一个足够健壮的工单系统中,我们也可以通过识别身份的方式对其进行防御。对于复杂的系统,有混沌工程经验的工程师会从各个角度发起攻击或者演习来保障系统的健壮性,而在一个复杂的组织中,也同样应该有一个组织混沌工程专家来保障团队的健壮性。他们应当定期发起一些演习,比如定期的发起oncall来统计结算时间,定期的让核心的工程师休假来验证工程进度是否强依赖他们,如果是那么这个组织就是单点的,不可靠的,需要再招聘或者晋升一个有经验的工程师来保证双机热备。
组织混沌工程专家也应当是组织工程学大师,应该定期的对组织的健康程度进行评估与检查,查找出组织的问题并改进。在一个理想的什么指标都可以量化的组织中,我们甚至可以构造监控大盘来查看组织的健康程度。