铜剑技校

仝键的个人技术博客

0%

需求的视角

楔子

在我培养学生的时候,我发现一个很有趣的现象,有些人可以非常好的理解需求,并且能发现需求当中的逻辑矛盾,给出非常好的反馈。更多的人,只是听了需求,然后没有任何反应,去做的时候呢,才发现有问题。最可怕的是,明明需求有问题,做的时候他也没发现问题,最后做出来的功能是有bug的。

想起我吐槽一个学生,让你扫马路,你就把土扫到路两边,只管中间干净。跟你说两边也要干净你就把两边的扫到中间,说两边和中间都得干净就在两边和中间的间隔处推上细细的一条垃圾线。

吐槽虽然可以让人很爽,但不能解决问题,只是享受了优越感。作为以能力建设为己任的培养者,这种优越感反而是一种打脸,毕竟学员能做到才是我的成功,他做不到我能做到有啥好优越的呢,让他做到才是我应该追求的优越感。所以我就陷入了深深的思索,到底怎么能让学员把需求理解清楚呢?看着他们,我开始反观内视我自己,我是如何做到的呢?

首先我想到,这个是个场景思考的问题,虽说思考用户场景,很多公司是PO、BA或产品经理的工作,但所谓好的程序员要能顶上半个产品经理,既然我们说是数字人才,每个人都要能理解软件的使用场景才行。我自己就是会拿到需求后,在脑子里重新构建场景。然而道理说起来简单,做起来并不简单,不管我强调多少次,要关注场景,结果也不会好,会的立刻恍然大悟(那种恍然大悟是一种原来我这种做法还有名字的感觉……),大部分不会的人还是那样……

跳出盒子外

进过长期的观察,我发现他们是在盒子内思考,而跳不出盒子外。

跳到盒子的外面,才能发现场景

什么是盒子内思考呢?比如一支白板笔。

如果我在白板笔的盒子内看的话。我就会看到笔帽,笔芯和笔管。我可能会关注,笔芯是海绵的,笔帽和笔管是塑料的,不是金属的。这样思考就有一个问题等我考虑到颜料的时候,我就不知道应该采用什么样的原料。就必须要问一个问题,这个白板笔是用来干嘛用?因为如果我在盒子里看白板这个东西,对我是没有任何含义的。

那盒子外就很好理解了,同样是描述一支白板笔,我要考虑他,写出来的东西好不好擦。写出来的字迹是否清晰可见?粗细是否适中?能用多长时间?成本是多少是,买一个新的还是加墨水儿更合适?一旦跳到盒子外,我还要考虑多角色比如制造商,分销商,销售终端,买家不同角色看他的视角。小小一支笔,也不是那么简单的。

回归软件开发的上下文,盒子内就是功能视角,比如:学习平台要有写成长日志的功能。盒子外则是业务视角,比如:学员参加了学习后,每天要写成长日志,总结当日所学,练习总结能力,助教要给他们进行检查和反馈。比起前者,后者很容易想到,既然是练习总结能力,是不是应该有模板和范文?

我常试好多的方法,试图让初学者可以跳出盒子外,大部分都没啥效果,不要说初学者不会,很多工作过多年的人也有这类问题,也学不会。也曾一度让我怀疑,这是一种天赋,好在不想对天赋低头的心,最终还是找到了一种实操性很好的方法。

故事线

我会要求学生画一种图。我们管它叫故事线,是一种场景思维的辅助工具。

故事线

这个工具是这样的用的,每当你要做一个功能,就画一条故事线,在故事线里面,首先你要定义故事起点。这个故事的起点是一个业务动机。比如说一个系统可以创建用户,那么这个创建用户的业务动机是什么呢?我问出去的时候,学生们就会开始思考,想到了说创建用户的业务动机是有一个新人入职了。

有了业务动机,别人才会使用你的系统,否则你的系统只是你的自嗨而已。不要说学生了,很多工作多年的人在设计系统的时候,依然不思考这个问题。有了动机,你也可以去对比各种不同的解决方案,去想有没有更好的解决方案?比如在我们这个例子里,动机就是有人入职了要创建用户,但那么有人入职了之后,谁会来这个系统里面创建用户呢?这就涉及到方案的不同。可能我们定义的角色是hr。也可能我们这是一家小公司,反正就是那么几个人,最后就跟一个系统管理员说一声,他登上来录进去就好了,对于一家小公司来说,这也可以接受,所以你就会发现,这两个都是可行的方案。

我们在实践中发现,有了业务动机这个概念之后,大家就会对场景有更多的思考,也能协作着来对比方案而不是瞎吵架了。

故事线的后面就比较好画了。我们就画他在这个系统里面为了满足他的业务动机,他需要一步一步怎么做的。注意只画成功路径,过程中遇到的异常,先不要考虑。这对很多人来说,也是一个很难做到的事情。

在故事线的最后,需要画出来说,这个故事结束了之后,那么最终,业务的下一个起点是什么?

还是以创建用户为例,当我们为用户创建完了之后,我们的下一步是什么呢?下一步可以试试,发个邮件给用户,也可以是,把用户名密码拷给,我们的新员工本人或者他的经理。

学生做的一个案例

小节

如前所述,很多人是没有场景思维的,他想问题只能想到这个盒子内,而跳不到盒子外去关注使用它的场景。对于这种情况,我们就算明确的指出,他没有场景化思维,大部分情况下是不会有任何的作用的,大部分人依然没有场景化思维。他就像我《数字人才的刻“意”练习——开篇》里讲到的画画需要关注线条一样,我们需要告诉大家,应该关注在什么地方才会具有场景化思维。那么在这种情况下,我们只需要给他一个非常好的辅助工具,他就真的可以做到跳到盒子外。故事线就是这样一个工具。实践中发现,哪怕是毕业生,几次练习之后也可以快速掌握这种思维方式,更不要说有多年工作经验的程序员。

虽然在我们项目中是有所谓的业务分析师的,但是优秀的程序员一定会在脑子里重建这些场景。如果程序员不能以这样的方式画出来的话,那么程序员做开发的时候也会出现一些问题,比如没有想全,做出来的程序有问题的情况。所以教给程序员自己这么思考问题是非常重要的,在理解完业务分析师传达的需求之后,可以在脑子里把这条线画出来,非常有价值。