还记得我们在高中上科学课的时候吗。我们的老师有一个帮助我们学习的框架——一种基于现有最佳证据的实验性方法。我们被要求对我们周围的世界进行观察,然后试图形成一个解释或假设来解释我们所观察到的东西。然后,我们通过预测一个基于我们的理论的结果来验证这个假设,这个结果将在一个对照实验中实现——如果这个结果实现了,我们就证明了我们的理论是正确的。
然后,我们可以通过构建更复杂的实验,并根据我们实现的结果进行了进一步观察,通过构建更复杂的实验,调整,演变或放弃任何假设来申请这一学习来告知和测试其他假设。
实验是科学方法的基础,这是一个系统地探索我们世界的系统。虽然一些实验发生在实验室中,但也可以随时随地进行实验,即使在软件开发中也是如此。
练习假设驱动的发展正在考虑开发新的想法,产品和服务 - 甚至组织变化 - 作为一系列实验,以确定是否会实现预期结果。该方法迭代,直到获得理想的结果或确定不可行的想法。
我们需要改变我们的思维模式,以将建议的解决方案陈述作为一个假设,特别是在新产品或服务开发 - 我们所在的市场,商业模式如何工作,如何执行甚至客户的方式用它。
我们不再做项目了,只做实验。客户发现和精益创业策略旨在测试对客户的假设。质量保证是根据定义的规范测试系统行为。实验原则也适用于测试驱动开发——我们首先编写测试,然后使用测试来验证我们的代码是正确的,如果代码通过了测试就成功了。最终,产品或服务开发是一个过程,用于测试系统在环境或市场中的行为假设。
实验方法的关键结果是可测量的证据和学习。
学习是我们通过进行实验获得的信息。做了我们预期的事情实际上发生了吗?如果没有,那么这是什么,这是如何通知我们接下来应该做的事情?
为了学习,我们需要使用科学方法来调查现象,获取新知识,纠正并将以前的知识纠正并融入我们的思想。
随着软件开发行业的不断成熟,我们现在有机会利用改进的能力,例如连续设计和交付,以最大限度地提高我们快速学习的潜力和不效果的潜力。通过对信息发现的实验方法,我们可以更快地测试我们在我们试图构建的产品或服务中所确定的问题的解决方案。通过最优化解决正确问题的效力,通过持续构建解决方案来实现正确问题的效力。
科学方法的步骤是:
我们需要挑战对产品或服务有固定需求的概念。当团队执行一个已知或理解的计划阶段时,需求是有价值的,并且可以利用理解良好的实践来实现结果。然而,当你处于探索、复杂和不确定的阶段时,你需要假设。
手工团队一系列业务需求加强了一种缺陷的订单方法和心态。
业务思考并“知道”是正确的。开发团队的目的是实施他们被告知的内容。但是,在不确定和复杂地区经营时,应鼓励开发团队的所有成员思考和分享对问题和潜在解决方案的见解。一支团队只需从企业主人那里获取订单并不利用跨职业多学科团队所提供的全部潜在,经验和能力。
传统的用户故事框架关注于获取我们想要构建什么以及为谁构建的需求,从而使用户能够从系统中获得特定的好处。
作为一个…< >角色
我想要... <目标/欲望>
所以... <获得利益>
行为驱动开发(BDD)和特性注入旨在通过支持软件项目中开发人员、测试人员和非技术人员之间的交流和协作来改进原有的框架。
为了... <获得利益>
作为一个…> <作用
我想要... <目标/欲望>
在作为实验中的工作时,传统的故事框架是不够的。与我们的高中科学实验一样,我们需要定义我们将采取的步骤来实现所需的结果。然后,我们需要说明我们预期的特定指标(或信号),以观察到我们的假设有效的证据。在进行测试之前需要说明,以减少结果的偏见解释。
如果我们观察表明我们的假设的信号是正确的,我们可以更有信心我们在正确的道路上,可以改变用户故事框架来反映这一点。
因此,用户故事结构支持假设驱动的发展;
我们将开发哪些功能来测试我们的假设?通过定义我们正在尝试构建的产品或服务的“测试”能力,我们确定了我们想要测试的功能和假设。
我们实验的预期结果是什么?我们期望通过建立“测试”能力来实现的具体结果是什么?
什么信号将表明我们构建的能力是有效的?我们将衡量我们的实验成功的证据表明我们的实验取得了哪些关键的指标(定性或定量),并给予我们足够的信心转向下一阶段。
您用于统计意义的阈值将取决于您对业务和您所处环境的理解。并不是每家公司都有亚马逊或谷歌那样的用户样本规模,在短时间内进行统计意义重大的实验。您的组织需要定义限制和控制,以确定可接受的证据阈值,以允许团队推进到下一个步骤。
例如,如果您正在构建火箭船,您可能希望您的实验具有高阈值以进行统计显着性。如果您正在决定旨在帮助增加用户注册的两个不同流量,您可能很乐意容忍较低的意义阈值。
最后一步是清楚而明显地说明关于我们假设的任何假设,为团队创建反馈循环,以提供进一步的输入,辩论和理解我们正在进行测试的情况。他们是否有效地从技术和商业角度掌握?
与MVP对齐时的假设可以为您的产品或服务愿景提供测试机制。他们可以测试产品或服务的最不确定的区域,以获取信息并提高信心。
假设驱动的开发用户故事的例子是;
我们相信增加酒店在预订页面上的形象
将导致客户参与和转换提高
当我们看到审查酒店图片的客户增加5%时,我们将知道我们成功了5%,那么在48小时内前往预订的酒店图片。
在使用软件开发的实验方法以衡量我们的努力的影响并向团队提供反馈循环时,必须有效的监控和评估工具。否则我们基本上对我们的努力结果视而不见。
在敏捷软件开发中,我们将工作软件定义为主要的进度衡量标准。
通过结合连续交付和假设驱动的发展,我们现在可以定义工作软件并经过验证的学习作为主要的进展措施。
理想情况下,我们不应该说我们完成,直到我们衡量了正在交付的内容的价值 - 换句话说,收集数据以验证我们的假设。
如何收集数据的示例正在执行A / B测试以测试假设和测量以改变客户行为。替代测试选项可以是客户调查,纸质原型,用户和/或游击测试。
我们与之合作的公司的一个例子,它使用假设驱动的发展是lastminute.com.。该团队制定了一个假设,即客户只愿意根据他们预订的一天时间为一家酒店支付最高价。汤姆克莱因,首席执行官和军刀控股总统分享这个故事他们如何在一周内提高400%的转换。
结合实践,如假设驱动的开发和连续交付加速实验和放大认证学习。这使我们有机会加速我们创新的速度,同时无情地降低成本,将竞争对手留在灰尘中。理想情况下,我们可以达到一个单片流的理想:原子变化使我们能够识别我们对我们产品和服务的变化之间的因果关系,以及它们对关键指标的影响。
正如肯特·贝克所说,“测试驱动的发展是在您考虑解决方案之前思考问题的一个很好的借口”。假设驱动的开发是测试您认为问题的一个很好的机会,在您在解决方案之前。