如何实现 - 假设驱动开发

如何实施假设驱动开发

还记得我们在高中上科学课的时候吗。我们的老师有一个帮助我们学习的框架——一种基于现有最佳证据的实验性方法。我们被要求对我们周围的世界进行观察,然后试图形成一个解释或假设来解释我们所观察到的东西。然后,我们通过预测一个基于我们的理论的结果来验证这个假设,这个结果将在一个对照实验中实现——如果这个结果实现了,我们就证明了我们的理论是正确的。


然后,我们可以通过构建更复杂的实验,调整、进化或放弃任何假设,并根据我们所获得的结果进一步观察,将这种学习应用于通知和测试其他假设。


实验是科学方法的基础,科学方法是探索我们周围世界的系统手段。尽管有些实验是在实验室进行的,但在任何地方、任何时间都可以进行实验,甚至在软件开发中也是如此。


练习假说驱动的开发是把新想法、新产品、新服务——甚至是组织变革——的发展作为一系列实验,以确定是否能达到预期的结果。这个过程反复进行,直到得到一个理想的结果,或者确定这个想法是不可行的。


我们需要改变思维方式,将我们对问题陈述提出的解决方案视为一种假设,特别是在新产品或服务开发中——我们的目标市场,商业模式如何运作,代码如何执行,甚至客户如何使用它。


我们不再做项目了,只做实验。客户发现和精益创业策略旨在测试对客户的假设。质量保证是根据定义的规范测试系统行为。实验原则也适用于测试驱动开发——我们首先编写测试,然后使用测试来验证我们的代码是正确的,如果代码通过了测试就成功了。最终,产品或服务开发是一个过程,用于测试系统在环境或市场中的行为假设。

实验方法的关键结果是可测量的证据和学习。

学习是我们通过进行实验获得的信息。做了我们预期的事情实际上发生了吗?如果没有,那么这是什么,这是如何通知我们接下来应该做的事情?


为了学习,我们需要用科学的方法来研究现象,获取新知识,纠正和整合以前的知识回到我们的思维中。


随着软件开发行业的不断成熟,我们现在有机会利用改进的能力,例如连续设计和交付,以最大限度地提高我们快速学习的潜力和不效果的潜力。通过对信息发现的实验方法,我们可以更快地测试我们在我们试图构建的产品或服务中所确定的问题的解决方案。通过最优化解决正确问题的效力,通过持续构建解决方案来实现正确问题的效力。


科学方法的步骤是:

  • 遵守观察
  • 制定一个假设
  • 设计一个实验来验证这个假设
  • 说明评价实验是否成功的指标
  • 进行实验
  • 评估实验的结果
  • 接受或拒绝假设
  • 如果有必要,提出并验证一个新的假设


在软件开发中使用实验方法


我们需要挑战对产品或服务有固定需求的概念。当团队执行一个已知或理解的计划阶段时,需求是有价值的,并且可以利用理解良好的实践来实现结果。然而,当你处于探索、复杂和不确定的阶段时,你需要假设。

将一组业务需求交给团队,强化了有缺陷的订单接收方法和思维方式。

商业会思考,“知道”什么是正确的。开发团队的目的是实现他们被告知的内容。但是,当在一个不确定和复杂的领域中操作时,应该鼓励开发团队的所有成员对问题和潜在的解决方案进行思考和分享。一个简单地听从企业主命令的团队并不能充分利用一个跨职能、多学科的团队所提供的全部潜力、经验和能力。


框架的假设


传统的用户故事框架关注于获取我们想要构建什么以及为谁构建的需求,从而使用户能够从系统中获得特定的好处。


作为一个…< >角色

我想要…> <目标/欲望

所以…<接受利益>


行为驱动开发(BDD)和特性注入旨在通过支持软件项目中开发人员、测试人员和非技术人员之间的交流和协作来改进原有的框架。


为了... <获得利益>

作为一个…> <作用

我想要…> <目标/欲望


在作为实验中的工作时,传统的故事框架是不够的。与我们的高中科学实验一样,我们需要定义我们将采取的步骤来实现所需的结果。然后,我们需要说明我们预期的特定指标(或信号),以观察到我们的假设有效的证据。在进行测试之前需要说明,以减少结果的偏见解释。


如果我们观察表明我们的假设的信号是正确的,我们可以更有信心我们在正确的道路上,可以改变用户故事框架来反映这一点。


因此,用户故事结构支持假设驱动的发展;

我们相信<此功能>


我们将开发什么功能来验证我们的假设?通过定义我们试图构建的产品或服务的“测试”能力,我们确定了我们想要测试的功能和假设。


将导致<这一结果>


我们实验的预期结果是什么?我们期望通过建立“测试”能力来实现的具体结果是什么?


当……时,我们就知道我们成功了。我们看到一个可测量的信号>


什么信号将表明我们构建的能力是有效的?我们将衡量我们的实验成功的证据表明我们的实验取得了哪些关键的指标(定性或定量),并给予我们足够的信心转向下一阶段。


您用于统计意义的阈值将取决于您对业务和您所处环境的理解。并不是每家公司都有亚马逊或谷歌那样的用户样本规模,在短时间内进行统计意义重大的实验。您的组织需要定义限制和控制,以确定可接受的证据阈值,以允许团队推进到下一个步骤。


例如,如果您正在构建火箭船,您可能希望您的实验具有高阈值以进行统计显着性。如果您正在决定旨在帮助增加用户注册的两个不同流量,您可能很乐意容忍较低的意义阈值。


最后一步是清晰而明显地陈述关于我们的假设的任何假设,为团队创造一个反馈循环,以提供进一步的输入、讨论和理解我们执行测试的环境。从技术和业务的角度来看,它们是否有效和有意义?

与MVP对齐时的假设可以为您的产品或服务愿景提供测试机制。他们可以测试产品或服务的最不确定的区域,以获取信息并提高信心。


假设驱动开发用户故事的例子如下;


商业的故事


我们相信增加酒店在预订页面上的形象

将导致客户参与和转换提高

当我们看到审查酒店图片的客户增加5%时,我们将知道我们成功了5%,那么在48小时内前往预订的酒店图片。


在使用实验方法进行软件开发时,为了测量我们的工作的影响并为团队提供一个反馈循环,必须有有效的监控和评估工具。否则,我们基本上就看不到我们努力的结果。


在敏捷软件开发中,我们将工作软件定义为进度的主要度量标准。

通过结合持续交付和假设驱动开发,我们现在可以定义工作软件和验证学习作为进度的主要度量。

理想情况下,我们不应该说我们完成,直到我们衡量了正在交付的内容的价值 - 换句话说,收集数据以验证我们的假设。


如何收集数据的示例正在执行A / B测试以测试假设和测量以改变客户行为。替代测试选项可以是客户调查,纸质原型,用户和/或游击测试。


我们合作过的使用假设驱动开发的公司的一个例子是lastminute.com。该团队制定了一个假设,即客户只愿意根据他们预订的一天时间为一家酒店支付最高价。汤姆克莱因,首席执行官和军刀控股总统分享这个故事他们如何在一周内将转化率提高了400%


结论


将假设驱动开发和持续交付等实践结合起来,可以加速实验并扩大有效的学习。这使我们有机会加快创新速度,同时无情地降低成本,将我们的竞争对手甩在身后。在理想情况下,我们可以实现一段流程的理想:原子变更使我们能够识别我们对产品和服务所做的变更之间的因果关系,以及它们对关键指标的影响。


正如肯特·贝克所说,“测试驱动的发展是在您考虑解决方案之前思考问题的一个很好的借口”。假设驱动的开发是测试您认为问题的一个很好的机会,在您在解决方案之前。


怎样才能实现更快的增长?

Baidu