2.2 小步快跑
软件定义侧,定义软件应该长成什么样子。大体上,从CEO到产品经理、PO(Product Owner,产品负责人)、BA(Business Analyst,业务分析师)等角色都在做相关的工作:制定正确的战略方向,抓住市场机会,最后落实到做好具体的软件产品设计上,也就是确定软件需求。
软件实现侧,把软件需求落地实现交给用户,其包括架构设计、编程实现、软件交付过程,也包括运维等工作。
我们先来看看软件定义侧要追求的目标:当然是正确地定义软件应该长成什么样子。目标要定得准,如果方向错了,费半天劲开发出来的东西没人用,那可真是浪费。
如何才能做到正确地定义软件应该长成什么样子呢?这可是一个大学问,这里没法全面展开。我们只提与软件实现侧相关的一件事情:根据软件行业多年来发展的经验,应该以比较小的代价多尝试、多探索,然后根据市场反馈采取进一步的行动——是放弃这个方向,还是调整这个方向,抑或是进一步投入、建设、完善。
为什么要这样做呢?是因为需求的不确定性。你也不知道,打算做的这个功能,是不是真的合广大使用者的胃口,将来有多少人用。所以先做一个MVP(Minimum Viable Product,最小可行性产品)试试看。在不同方向多试试,多打几枪,说不定就打着了。
软件定义侧期待软件实现侧赶紧把这个试验品做出来,交给用户试用,越快越好。为什么呢?因为在单位时间内,能尝试的事情越多,总体来看,先找到正确方向的可能性就越大。假如有两个相互竞争的初创公司,它们在软件定义侧的水平都差不多,但是在软件实现侧的能力有差异,其中一个公司能在半年内尝试三种业务打法,另一个公司只能尝试一种业务打法,那么前者抢先摸到门道的可能性就大得多,先做出来的那个公司,会吃掉大部分市场份额。试错的成本越低,效率越高,成功的概率就越大。
必须得小步快跑:软件定义侧只定义一小步,然后期待软件实现侧快跑。
以上是说,用户的心思拿不准,因此需要做一个MVP尽快试试,所以得小步快跑。我们再从另一个角度看一下小步快跑:市场环境可能瞬息万变,昨天觉得还不需要做的,今天可能就着急上线了。比如,竞争对手推出了一个新的市场推广活动,还挺受欢迎,那咱们也赶快“仿”一个,为此需要开发团队赶快配合一下,最好今晚就发布上线。快!赶快!
我们再从第3个角度看一下小步快跑。假定需求都调查清楚了,这个需求就是用户想要的,它包括10个子功能,每个子功能的上线都能给用户带来一定的好处。用户眼巴巴地等着,不,是软件定义侧眼巴巴地等着软件实现侧赶紧把它们做出来。但都做出来要10个星期,因为每个星期可以做出来一个子功能。那问题来了,是把这10个子功能都做出来以后,一起发布给用户,还是把每个子功能做出来后就先把它发布给用户呢?当然要尽量选择后者。因为前面已经说了,每个子功能的上线都能给用户带来一定的好处。那让用户早点儿享受多好,哪怕当时还不能享受所有的好处(见图2-1)。
图2-1 早发布,多受益
所以,从定义侧和实现侧协作的角度来看,定义侧应该不断地定义小的需求,交给实现侧,然后实现侧尽快实现和交付这些小的需求。这就是小步快跑。