做技术方案决策的一些思考

前言

当我们面对某个问题有多种不同的解决方案时,我们该怎么去选择才能获得最合适的那个解决方案呢?是凭大概的直觉还是合理客观的量化标准?在这个越来越多的东西数字化的时代,大家都应该会有一个明显的判断。

决策的定义

维基百科:在心理学中,决策(英语:Decision-making)是一种认知过程,经过这个过程之后,个人可以在各种选择方案中,根据个人信念或是综合各项因素的推理,决定出行动,或是决定出个人要向外表达的意见。每个决策过程都会以产生最终决定、选取最终选择为目标。

本文只局限于软件技术方案的决策,软件技术方案决策是指在软件领域内,存在很多种解决某个问题的技术方案,我们怎么去选择最合适的技术方案。

用数据驱动来做技术方案决策

“如果你无法衡量它,那你也无法改进它”,这句话换成下面这句话也适用:如果你无法衡量它(技术方案),那你也无法决策它(该技术方案是否合适)。

数据驱动是一种客观理性的思维逻辑,用它来做方案的决策也是比较客观理性的,它可以把问题域内的相关内容进行量化处理,然后根据建立的评价体系来获得一个相对合理的量化结果,我们可以根据得到的结果来用于方案的决策、价值呈现、分析报告输出等场景,最典型的应用就是当今很流行的大数据分析。

技术方案决策是需要讲究理性的,用数据驱动方式来做决策的过程类似于考试,决策的标准就像考卷上的题目,每一个方案都在这个考卷上作答,会有一个客观的得分评判标准,我们最后选择得分最高的方案来作为最终选择方案。

整个过程描述起来其实非常简单,但这里面涉及到几个很重要的东西,我们需要把这些东西弄清楚才能做好决策:

(1)问题是什么。有哪些关键的问题?(考卷有哪些考题?)

(2)怎么去衡量技术方案的合适度?我们选择方案的评价标准有哪些(对每个考题的得分判断标准)?怎么去量化每一个标准(每个考题怎么去设置分数)?

(3)谁来解决以及怎么解决这个问题。有哪些备选方案(考卷有多少答题人)?每个备选方案用什么方式去解决这些问题(各个答题人怎么去请回答这些考题?)?

问题是什么很重要!

任何技术方案针对的都是问题,所以最重要的一步是弄清楚问题到底是什么,这样才能对症下药。但是目前很多的人在做技术方案的时候往往容易犯以下几个错误:

(1)没有弄清楚问题到底是什么就开始给出解决方案,这样对应的解决方案往往没有办法解决实际的问题。就像一个病人本来是病毒性感冒,但是医生误诊为非病毒性感冒,最后给出的治疗方案往往没有办法把病人的病治好。

(2)只弄清楚了部分问题是什么,还有一部分问题没有分析出来。这样对应的解决方案是有缺陷的,只能解决部分问题。

(3)弄清楚了全部问题是什么,但是没有站在系统全局的角度去思考解决方案,该解决方案能解决这个问题域下的所有问题,但是这种解决方式对于整个系统来说却是一种巨大的伤害。

(4)弄清楚了全部问题是什么,并且给出的解决方案对于系统全局的影响也很小,但是该解决方案只能解决这个特定的问题,并不能解决类似的问题。

当然这里说的问题不仅仅是指呈现出来的表象,还需要指出深层次的原因是什么,就像上面举的例子,感冒也是要区分是病毒性还是非病毒性的感冒,不能只说是感冒就可以了,因为这两种原因对应的解决方案是不一样的。

当我们找到所有的问题后,还需要对问题进行抽象归类,如分为内存溢出问题,性能差问题等,某一类问题可能要分别对应不同的解决方案。

制定技术方案的基本原则

技术方案的制定有两个基本的原则:

(1)要解决所有问题,并且不能把该问题当作特例来看待解决,解决方案最好是通用的而不是只针对单例的。

(2)对于整个系统没有伤害或者万不得已伤害要很小。

人工决策 vs 人工+机器决策

决策的方式通常认为是人来做的,其实不全是,像A/B测试其实就不是单纯的人工决策。笔者认为决策应该逐渐由人工决策转向人工+机器决策,原因主要有两个方面。一方面,随着后面系统的复杂程度越来越高,一个技术方案涉及的东西会越来越多,会逐渐超出人脑所能处理的能力,人工决策出现错误的机遇也会越来越大。另一方面,随着数据量的逐渐丰富,计算能力的快速提升以及AI的发展,技术决策的智能化和规模化会越来越强。后续决策应该由人工来制定选取方案的标准,由技术来执行具体方案选型的执行。

你可能感兴趣的:(做技术方案决策的一些思考)