为什么你的轮子很难用(三):需要梳理方法和方案选型标准

1,731 阅读9分钟

画外音:

一直都在收拾了别人的烂摊子,总结一下怎么做一个"人见人夸"的功能设计。

这个系列主要写给产品看,最佳实践不敢说,失败案例我有大把可以分享和吐槽的。

研发请随意,有不妥的地方欢迎指正。

前情提要:

# 为什么你的轮子很难用(一):别造,造的话先盘组织和业务

# 为什么你的轮子很难用(二): 从战略到抽象1

# 为什么你的轮子很难用(二):从战略到抽象2

# 为什么你的轮子很难用(二):从战略到抽象3

当你不得不造一个轮子的时候,你需要先储备一些基础常识。内容很多,我们分期讲:

一、组件设计的需要工程

先回忆一下我们整体的设计流程。

微信截图_20220606205402.png

image.png

(一)梳理业务需要和现有数据结构

这里讲的是 需要,不是需求。

需要和需求是不一样的。

比如 经济学开篇第一句:给钱的才叫需求,不给钱的都叫需要。

所以 先搞清楚 需要,再转化成 需求。

这里安利一本书,有兴趣可以买来看看。

《有效需求分析》

image.png

1.需要是什么?

1)业务方描述的需要,是 愿景 / 目标 / 问题 / 方案 哪个级别?

  • 愿景:我们希望 减少 运营的工作量,这堆后台要合并和打通

  • 目标:A后台与B后台能打通,减少运营每日工作耗时1小时

  • 问题:B后台不能拿到A后台的XX数据做筛选和清洗,要线下excel搞vlookup

  • 方案:在B后台增加筛选指标,指标==A后台的XXX

————

2)警惕方案型的需要,要刨根问底 到 目标和问题

我经常跟刚入行的小朋友讲,人家怎么提不等于我就要这么做。

提归提,做归做。最少 需要 先找准 问题和目标。

同上面的案例,如果提了一个 方案过来,似乎很成熟,是不是就要开始做呢?

如果仔细问问,可能情况就大不相同。

这里一般来讲要问 5次 why。

why 1 -> 为什么要这里加筛选指标?-> 我需要从 A和B两边拿数据,筛选出一批白名单。

why 2 -> 为什么要拿这两个数据筛选? -> 我需要拿到交集的白名单,然后导入到C后台,配置推荐位。

why 3 -> 交集规则固定吗?-> 固定,但是筛选参数看运营策略,每周调一遍。

why 4 -> 调参的目的是什么?-> 看线上数据调整一下权重,活动需求也需要插入排序,把CTR拉高。

why 5 -> 调权有成熟方法吗?-> 有根据这批id的dau和pv调,然后把这周的活动强插进去。

why 6-> 活动数据有现成数据吗?-> D后台有现成配置好的数据。

...

这个时候,你大概已经可以重新定义他的问题和目标:

目标:提高X页面的CTR?

问题:每周在A/B/D 三个后台获取数据,按参数调整排序然后导入到C后台。操作成本太高?

再好好对比一下,跟之前提的方案和问题,是同一个吗?

解决操作成本就能提高CTR吗?

是不是应该换种方法提高CTR呢?

这里有一个衡量你是否挖掘要真实需要的标准:

目标或者真实需要,是与功能无关的。

就像 更快到达目的地 和 让马车跑得更快。前者才是需求,后者不是。

2. 整理业务场景用例和现有数据结构

第一件事:能不能不做?

业务部门总有一大堆 为了证明自己很重要而编出来的流程和工作,不然就被裁光HC了。

所以 先问他:能不能不做。不做你的业务会死吗?

很多时候 答案是:少这个流程也不会怎样。

甚至于 人家会吐槽,其实原本就有兜底机制了,根本不用这么卷。

第二件事:这个需要 涉及什么用例?

如果要做,按部门,按职能,先梳理一遍相关方。

比如说 美术,运营,A/B/C/D的应用的研发 等等等。

按照 POP 面向过程 或者 OOP 面向对象,梳理他们在流程中的初步用例。

一般,我建议按 oop 大概列2张表:

表1:干系人关注点:

系统初步用例涉及数据
美术---根据运营的诉求,产生活动切图
运营A系统筛选满足X+Y的ID筛选数据X&Y;ID
B系统筛选M+N的ID筛选数据X&Y;ID
D系统上传创建活动活动id,图片地址,活动名称
研发A系统控制id上下架id状态
....

表2:干系人阻力点:

系统阻力点
美术---太忙了,会不会没空出图,不想出图?
内审---会不会有私下收钱上推荐?
风控---会不会有不符合社会主义价值观的内容上去了?
运营---多个系统的使用,操作会不会太复杂?
....

备注:C端产品和交互设计,喜欢讲体验地图,本质上是一个东西,换个排版而已。

你看梳理一下,就看出来问题了,

上下架状态要同步过去吗?活动开始和结束日期呢?

在其他系统做变更怎么联动C呢?活动和id的数据是怎么合并排序的?

第三个件事:思考新的方案,最好给出3个以上

有一位CFO说过,像财务这种职能部门或者中台部门为什么总是招人恨?

往往就是只SAY NO,不说解决方法,让业务自己头痛去。

所以 定了一条铁律:每次say no, 都要给出3个替代的解决方案。

而在大多数情况下,是不可能走AB实验和数据驱动的。

所以,我们要训练一个能力:暴力枚举+人脑选型。

暴力枚举idea,花不了多少时间的,之后,就要搞一个简化版的swot。

方案优点缺点风险上线工期使用者成本
在B系统做一个筛选导出-------------
写一个接口直接插入C后台-------------
新增一个后台负责所有筛选和导出-------------
在C后台获取其他后台数据进行添加-------------
直接让算法部门改推荐机制-------------

为什么这里列出来一个 上线工期和使用者辅助配合的两列呢?

这就涉及到选型的衡量标准:是 技术和业务的最佳平衡点。

优点,缺点,风险,更多是从技术和业务视角,讨论 实现方案本身的合理性。

上线工期和使用者成本,才是真正的硬约束,也就是甲方觉得什么叫最合理。

某种程度上,算是软件工程欠缺的用户视角或者产品思维。

(二)构思方案和选型方案

1.合理的方案是由质量属性和业务约束双重决定的

1)质量属性:

一般从来讲,技术角度的选型合理需要满足以下14个特性:

设计属性运行属性感知属性
可修改性可用性可管理性
可维护性可靠性可支持性
可复用性性能简单性
可测试性可伸缩性指导性
可构建性安全性--

用大白话来讲:

  • 开发起来简单吗,测起来好测吗?
  • 以后好不好改,好不好维护,能不能拓展出别的?
  • 是不是有什么同类功能是重复的,能不能合并?还是要隔离?
  • 在线上运行可靠吗?什么情况下会出问题?
  • 有日志可以打点吗?监控排查故障简单不?
  • 运行起来成本高吗,快不快?方便回滚不?

当然再往下探索,就涉及到 开闭原则,依赖倒置,里氏替换等等架构原则。 这些后续再讲...

2)业务约束:

一般来讲,包含 认知成本+使用成本+上线工期:

通常来说,

A 涉及的系统/页面/模块 越少,认知成本就越低,对于 后续的交接/培训 都有正向价值。

==> 没有人想动脑子。但这不代表 技术上简单,往往需要花大力气进行 重构整合。

B 使用者操作成本,枚举一遍操作步骤和每个步骤的耗时,这对长期来看,有人持续使用有帮助。

==> 没有人想干活。尤其对运营来讲,不干活就能涨kpi的系统最好,操作超过3分钟肯定有人骂你。

C 上线工期时间。越快能上,及早给业务交付使用,才是开发系统的目的。

==> 没有人想等。尤其对大部分管理者来说,他们眼里只有完成kpi的短期收益。

D 其他约束:

这个比较复杂,比如 组织约束 / 政策约束 / 风控约束 / 财务约束 / 管理约束 / 技术栈约束 等等

某种程度上,这些决定了你的方案选型范围。

2.选型的方法和评估标准

1)如何取舍:

虽然说:约束条件是没有谈判余地的,而质量属性可以取舍。

一般来说,决策顺序应该按照以下优先级:

  • 必须满足其他约束:组织/政策/风控/财务/管理/技术栈
  • 选择认知成本低+使用成本低的方案,先不要在乎实现成本
  • 与业务方商讨上线工期,了解后续拓展场景,试图获取全局最优解
  • 根据上线工期倒推,优先考虑 性能/测试/修改/维护/拓展,适当放弃其他质量属性

只有这样,才不会出现一些看似合理,实则不合理的设计:

比如我前文举的例子: 一个九宫格抽奖,高亮和默认配18张切图。

这种选型,就是典型的 使用成本高,前端性能差。

2) 如何量化:

现代软件开发,是围绕着接口和对象(系统/应用/页面/模块/组件/函数)展开的。

有3组核心指标,是需要注意的:

  • 接口个数
  • 字段个数
  • 对象个数(系统/应用/页面/模块/组件/函数)

这三个决定了复杂度,影响着 实现成本,认知成本,操作成本。

  • 接口改动数
  • 实现改动数
  • 接口改动/实现改动的比值

这三个代表着 抽象的合理性。优雅的抽象,起码要做到接口不动,改实现。

  • 上游依赖数
  • 下游影响数
  • 关联干系人

这三个代表着 功能的重要性。越是重要的功能,越容易出现中心依赖。需要尽量选择有长期价值的方案。

通过这9个指标,定义方案的 重要性,复杂性,合理性。 在满足业务约束的情况下,基本上应该选择什么方案就呼之欲出了。