如何实施假设驱动的开发

如何实施假设驱动的开发

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


然后,我们可以通过构建更复杂的实验,调整、发展或放弃任何假设,并根据我们获得的结果进行进一步观察,从而运用这种学习来告知和检验其他假设。


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


练习假设驱动开发正在考虑开发新的想法、产品和服务——甚至组织变革——作为一系列实验,以确定是否能实现预期结果。该过程将反复进行,直到获得理想的结果或确定该想法不可行为止。


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


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

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

学习是我们从实验中获得的信息。我们期望发生的事情真的发生了吗?如果没有,我们做了什么,以及如何告知我们下一步应该做什么?


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


随着软件开发行业的不断成熟,我们现在有机会利用改进的功能,如持续的设计和交付,以最大限度地发挥我们的潜力,快速了解哪些有效,哪些无效。通过采用实验性的信息发现方法,我们可以针对我们在试图构建的产品或服务中发现的问题更快地测试我们的解决方案。我们的目标是优化我们解决正确问题的效率,而不仅仅是通过不断构建解决方案而成为一个功能工厂。


科学方法的步骤是:

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


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


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

为团队提供一组业务需求,强化了有缺陷的订单处理方法和心态。

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


框架的假设


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


作为一个…< >角色

我想要……<目标/愿望>

以便……<获得利益>


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


为了……<获得利益>

作为一个…> <作用

我想要……<目标/愿望>


当将作品视为实验时,传统的故事框架是不够的。正如在我们的高中科学实验中一样,我们需要确定我们将采取哪些步骤来实现预期的结果。然后,我们需要陈述我们期望观察到的具体指标(或信号),这些指标(或信号)为我们的假设提供了有效的证据。在进行测试之前需要说明这些,以减少对结果的偏见解释。


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


因此,支持假设驱动开发的用户故事结构将是:;

我们相信<这种能力>


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


将导致<这一结果>


我们实验的预期结果是什么?通过构建“测试”能力,我们期望达到什么样的具体结果?


当我们成功的时候,我们就会知道我们已经成功了<我们看到一个可测量的信号>


什么信号将表明我们建立的能力是有效的?我们将衡量哪些关键指标(定性或定量),以提供我们的实验成功的证据,并给我们足够的信心进入下一阶段。


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


例如,如果你正在建造一艘火箭飞船,你可能希望你的实验有一个统计意义的高阈值。如果您决定在两个不同的流之间进行选择,以帮助增加用户注册,那么您可能很乐意接受较低的重要性阈值。


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

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


假设驱动的开发用户故事的例子有:;


商业故事


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

将提高客户参与度和转化率

当我们看到查看酒店图片并在48小时内预订的客户增加5%时,我们就知道我们成功了。


在使用实验性的软件开发方法时,必须有有效的监控和评估工具,以便衡量我们工作的影响,并向团队提供反馈回路。否则,我们基本上对我们努力的结果视而不见。


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

通过结合持续交付和假设驱动的开发,我们现在可以将工作软件和有效学习定义为进步的主要衡量标准。

理想情况下,我们不应该说我们已经完成了,直到我们衡量了所交付的东西的价值——换句话说,收集数据来验证我们的假设。


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


我们合作过的一家使用假设驱动开发的公司的一个例子是最后一分钟. 该团队提出了一个假设,即顾客只愿意根据他们预订的时间为酒店支付最高价格。Sabre Holdings首席执行官兼总裁Tom Klein分享这个故事他们如何在一周内将转化率提高400%。


结论


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


正如KentBeck所说,“测试驱动开发是在考虑解决方案之前考虑问题的一个很好的借口”。假设驱动的开发是一个很好的机会,在您着手解决问题之前,可以测试您认为问题是什么。


如何实现更快的增长?

Baidu