从风险角度看SaaS研发工作

首先我们承认一个基本事实:系统不可能 100%可靠。人无完人,由人创造的系统同样也不可能是完美的系统。因此我们在研发工作中对风险管理的目标从来不是100%可靠,而是在特定环境下,在特定时间段内,控制某种损失发生的可能性。

一个项目或者产品的研发工作不可避免的存在风险。比如公司调整、市场变化、突发政策、人员变动、依赖延期、系统BUG、技术难题等等。作为系统架构师或研发管理者,我们需要对项目的各种风险做到心中有数,设计好应对措施并跟踪风险情况。同时,风险的影响面和发生概率随着项目的阶段和环境的变化都可能会发生变化,需要及时进行重新分析和评估。

研发工作中的风险,从产生来源可以分为技术风险和业务风险,其中技术风险主要是指由技术直接或间接产生的风险,包括可行性风险、系统风险、操作风险等。务风险主要是指项目能否正常进行以及是否能带来预期价值的风险,包括市场风险、成本风险、政策风险、组织风险等。从影响程度和发生概率看,又可以分为高风险、低风险、大概率风险、小概率风险。

当项目或产品处于不同的发展阶段时,对风险的管理也需要有不同的思路。当一个产品处于发展初期,那么他的业务风险通常会远高于技术风险,因为在发展初期,最大的风险通常是业务的生存问题和价值问题,是否能通过立项,是否能为客户提供价值,是否会被组织调整,是否能在市场上站稳脚跟。而此时技术视角下,系统稳定性、功能BUG等风险通常造成的损失可控,影响范围小,因此我们应该更注重研发效率和适应快速的变化。

对于成熟期的产品,通常已经有大量的客户,有一定的市场占有率,业务风险相对已经比较小。这时更多的是技术风险,因为作为成熟期的产品,一定是有存量客户,有对客户非常重要的服务场景,甚至直接是客户关键生产链路中的一环。一旦出现功能BUG、预期不符、系统不可用等情况,都会影响客户,甚至造成巨大资损,直接影响客户留存和品牌声誉。

想要管理风险的前提是要能识别风险,识别风险有很多方法,有人靠经验,有人靠数据,也有人靠直觉,还有燃尽图、FEMA、交通灯等各种方法论,无论哪种方式,前提一定是要有大量的信息输入,这就要求我们在做研发工作时,要掌握尽可能全面的信息。例如在研发工作中有大量的风险都是围绕着变更引起的,如产品需求、技术优化、代码重构、架构调整、机房迁移、人员调整等。因此只要涉及到变更,就一定要想到风险,并基于此去挖掘更多相关的信息。

识别到风险的下一步是根据影响大小,紧急程度等结果采取相应的应对措施,在研发工作中,常用的风险应对措施有回避、减轻、接受、转移等。

  • 回避风险

风险回避策略是指当项目风险潜在威胁发生可能性太大,不利后果也太严重,又无其它风险管理策略可用时,主动放弃项目或改变项目目标与行动方案,从而规避风险的一种风险管理策略。相信大家都有过砍需求的经历,例如当我们评估某个需求变更或技术优化会带来极大风险(可能是进度、成本、稳定性等各种风险),而只有有限的收益时,我们可以选择放弃此次变更,这就是一种回避风险的方式。

  • 减轻风险

减轻风险策略是通过缓和或预知等手段来减轻风险,降低风险发生的可能性或减缓风险带来的不利后果,以达到风险减少的目的。这是一种积极的风险处理手段。也研发流程中是最常用的方式,如测试就是为了减轻系统变更的风险,应急预案演练、全链路压测都是为了减轻系统稳定性风险,技术方案评审是为了减轻技术架构变更和腐烂带来的风险,灰度发布是为了减轻服务发布带来的风险,每日站会通是为了减轻进度风险。

  • 接受风险

接受风险策略是指有意识地选择自己承担风险后果的策略。当采取其它风险规避方法的费用超过风险事件造成的损失时,可采取接受风险的方法。例如当我们的客户有突发大流量时,我们通常会选择限流或降级的措施,而不是日常冗余大量空闲资源。例如当确认有进度风险时,采用赶工的方式来解决。

  • 转移风险

转移风险策略是指将风险转移至其他人或其它组织,其目的是借用合同或协议,在风险事故一旦发生时将损失的一部分转移到有能力承受或控制项目风险的个人或组织。如项目BPO,或采购第三方系统,签订背靠背合约。

风险处置之后,还需要对风险进行跟踪和复盘。对于高风险事件,需要保证所有风险都有相应的措施。对于低风险事件,可以通过系统化流程化的方式进行跟踪。同时在风险的复盘中,我们要积极探究风险产生的结构化因素,如分支模型有问题、发布流程有问题等,并对相应的问题改进优化,降低后续风险发生的可能性。

商业在本质上是一种冒险的尝试。无论在经营还是研发中,我们必须能够识别和平衡风险与回报。比如,研发新功能或者做系统重构,显然都会有风险,但也应该有足够的回报。彼得德鲁克说:“没有尽善尽美的战略决策。人们总要付出代价。对相互矛盾的目标、相互矛盾的观点及相互矛盾的重点,人们总要进行平衡。最佳的战略决策只能是近似合理的,而且总是带有风险的。”。风险是业务的成功的阶梯,对风险的理解和管理是研发工作的重点内容。我相信没有缓解的风险越多,出现重大问题的可能性就越大。将风险视为一种可能性,而非威胁,积极面对风险才能解决风险。