教你如何做需求调研:忽略极端情况

标签: 需求 极端情况 边界情况 技术技巧 | 发表时间:2013-07-22 00:30 | 作者:Aqee
出处:http://www.aqee.net
需求调研

accidental entities系列文章之初,我们跟着一个顾问公司为一个汽车租赁公司开发一套软件。当时他们已经完成了新车注册部分的功能。计划中的下一步是让顾客能在系统中预订。

我们争取到了租赁公司的CEO抽出一小时时间给我们介绍预订系统流程。

CEO: 我想这个会议用不了一个小时。预订流程非常简单。你们对预订流程有什么看法?”

Us: “是这样,就我们的理解——也不是很复杂——客户下了订单,我们为车分配租赁期,用邮件通知客户,这就完成了。”

CEO: “等一下,可不是这么简单。我们收到订单后,首先要确认客户的信用卡。”

Us: “我们如何确认?”

CEO: “不是让你们确认。我们有一个第三方的电子认证系统,由它来做这些;这个系统会检查信用卡是否有效,是否有能力支付。”

Us: “如果信用卡被系统拒绝,会发生什么?”

CEO: “这简单,我们取消订单,通知客户。”

Us: “如果信用卡通过审核,会怎样?”

CEO: “那就预订成功。”

Us: “这里有个问题。在客户下订单时我们要立即分配车辆吗?”

CEO: “当然不是!信用卡的验证需要时间;如果最终信用卡被系统拒绝,我们会因此造成业务损失。”

Us: “哦,如果这期间另外一个人也预订了这辆车,怎么办?”

CEO: “这是一个很好的问题。在过去,这种问题很少发生,但确实有过;我们也许要注意这种极端情况。”

Us: “那发生这种重复预订情况后如何处理?我估计你们肯定不希望取消第二个订单,放弃这个客户,对吧?”

CEO: “当然不想,我喜欢你的思考方式!有几种做法;如果他们预订使用车的期间只重叠30分钟左右,我们什么都不做。当客户来取车时,我会向他抱歉,解释有一点点延迟,我们会用一些措施安抚他。如果重叠期再大,而且有更大更好的车在空闲,我们会给他提供免费升级。当我们没有更好的车可用时,我们会让最出色的销售员打电话给他,说服他。有时我们会给他打折,他们通常会很高兴再等几个小时,而不是去找另外的车。我们尽量避免订单被取消,我们希望树立一个有求必应的好口碑。”

Us: “哦,有趣。如果让我自己琢磨估计会浪费不少时间才明白这个过程。你说这事情很少发生。看起来要想能正确的处理这种重复预订的事情并不是很容易,是否可以目前不处理这种极端情况,让人工处理这种事情?我们可以把这辆车标识为重复预订,让系统给出提醒,请求人工处理。Backoffice有这种工具,他们对处理这种重复预订的事很有经验。把这个问题放一放,可以使系统提前几个星期上线。”

CEO: “我很欣赏你的这个想法,让我们的第一个版本尽量精简。真的没有必要立即让系统能够自动处理这种事情。这并不是说系统功能不够强大。系统还是要记录每个重复预订的情况,这是有用的信息。我们能做的这些吧?”

Us: “是的,这并不困难。”

跟CEO交谈之后,我们开发一个代码模型。

在我们的第一次迭代中,一个订单有多个显示效果,每种效果表示一种订单状态。这样做的好处是,可以手工的在各种状态间切换,当信用卡被拒绝时,你不能接受预订….反之就是正常模式,或一些其他操作,这些不是我们这篇文章的重点。

var booking = new Booking(
    bookingId, carId,
    new Customer(new CreditCard("343705171682875"), new CustomerName("Jef", "Claes")), 
    new Period(DateTime.Now.AddDays(1), DateTime.Now.AddDays(4)));

var bookingWithVerifiedCreditCard = booking.CreditcardVerified();
var doubleBooking = bookingWithVerifiedCreditCard.Double();

每次状态的改变都会触发一个事件。如果我们输出事件,运行下面的代码将会看到下面的信息。

(EVENT) BookingCreditCardVerificiationPending
(EVENT) BookingCreditCardVerified
(EVENT) DoubleBooked

BookingCreditCardVerified 事件触发我检查重复预订。

public class BookingCreditCardVerifiedHandler : IHandle<BookingCreditCardVerified> 
{    
    private readonly IBus _bus;

    public BookingCreditCardVerifiedHandler(IBus bus)
    {
        _bus = bus;
    }

    public void Handle(BookingCreditCardVerified @event)
    {
        _bus.Send(new DetectDoubleBooking(@event.BookingId));
    }
}

如果发现重复预订,我让系统显示提醒,通知我们。可以通过邮件,或Backoffice里的一个提醒,或其他的。

public class DoubleBookedHandler : IHandle<DoubleBooked>
{
    public void Handle(DoubleBooked @event)
    {
        NotifyHumans();
    }

    private void NotifyHumans() { }
}

尽管技术上的实现并不是很特别,我想它已经向我们展示了事件系统如何起作用,如何将责任分发到相应的负责单位。

通常人们有个误解,认为我们有计算机,它们应该解决我们的 所有问题,甚至一些极端情况。极端情况——根据定义——只会发生在极端条件下,缺少一定的投入,用常规的方式很难处理。通过手工处理极端情况,用户可以进行人工干预,决定什么才是应付这种问题的做好做法。这样做我们可以快速的让系统上线,减少了代码编写,最终能让客户更满意。通过统计这种极端情况的发生频率,我们能够按照实际情况来决定是否值得去投资处理这些极端情况。

:)


本文由 外刊IT评论网( www.aqee.net)原创发表,文章地址: 教你如何做需求调研:忽略极端情况,[英文原文: Not handling edge cases, making them explicit instead ]







相关 [需求] 推荐:

再谈需求

- - 人月神话的BLOG
谈需求工程方面的文章前面写过很多,本文仅做最近思考的一些点滴记录. 首先我们谈下业务建模层面,对于从用户提出最初的业务需求到交付一个完整的系统,在建模层面涉及到两个层面的抽象,其一就是业务建模解决现实世界本身的抽象描述,其二就是软件架构设计,解决从业务模型到IT架构模型的第二次转换. 在早些时候我们看到这两个层面的建模内容都由系统分析员承担或完成,在岗位不断细分后我们看到反而会出现忽视了业务建模的问题.

需求变化与IoC

- - 酷壳 - CoolShell.cn
【感谢 Todd投递本文 – 微博帐号:@ weidagang 】. 程序员XX遭遇车祸成植物人,医生说活下来的希望只有万分之一,唤醒更为渺茫. 可他的Lead和亲人没有放弃,他们根据XX工作如命的作风,每天都在他身边念:“XX,需求又改了,该干活了,你快来呀. ”,奇迹终于发生了,XX醒来了,第一句话:“需求又改了.

进化而来的需求

- - 极客公园-GeekPark
[核心提示]需求是可以创造,可以进化的. 在需求的“博尔赫斯库”中,我们要做的,仅仅是模拟规则,让需求,优胜劣汰. 如果本文的标题和导语引起了坐在电脑前的你的兴趣,同时又产生了些许的疑惑,那么恭喜我自己,我的目的达到了 (真是恶趣味……). 那么,在对它们进行解释之前,还容我卖个关子,先从几个有趣的见闻讲起.

谈需求和设计

- - 人月神话的BLOG
在这里再谈下需求和设计的边界问题,我们最终的业务系统实现出现的偏差,究竟是需求的问题还是设计的问题. 如果边界不清楚则很难明确的区分. 对于需求本身有原始需求,用户需求,产品需求和系统需求的各种阶段;而对于需求的过程也本身存在原始需求的收集,需求分析,需求挖掘,和需求相关的业务建模. 而对于设计同样存在总体的企业架构设计,到单个应用的总体设计和架构设计,概要设计和详细设计.

解决方案与需求

- - 扯氮集--上海魏武挥的博客 - 扯氮集--上海魏武挥的博客
曾经有一个很有名的段子,大致意思就是说在汽车尚未出现的马车时代,你去做消费者调研,只会得到这样的答案:我需要一匹更快的马,而不会得到:我需要汽车. 因为对于消费者来说,他从来没有看到过汽车,怎么可能回答你需要汽车呢. 这个段子,似乎充分说明了,创新,尤其是颠覆式创新、破坏性创新是不可能通过需求调研出来的.

如何做需求分析

- - 人人都是产品经理
这段时间我做了两个大项目,其中一个项目算是商业模式上和使用规范上的调整,另一个项目是之前功能的重做,为什么重做我下面会说到. 关于需求分析,我认为把需求抽象成产品功能花费的时间占到了软件开发周期的40%,产品设计到评审完的时间大概是20%,也就是说实际开发之前产品团队介入的工作占据项目的60%,在需求分析阶段我有一些个人观点.

产品方法论:需求变更

- 盛开 - 所有文章 - UCD大社区
IT行业中失败项目的比例可以说明“项目管理”是很难做好的事情,项目失败的原因千千万,我认为需求管理、需求变更管理是个很重要的因素. 恰恰PM的工作缺不了项目管理,更缺不了对于需求的管理,偶然的原因,和团队分享了我对于项目进行中“需求变更”的理解和管理方法. 忽然发现之前写过很多产品思考和细节思考的东西,但从没有整理出方法论,后续应该多整理下方法论.

需求分析中的产品定位

- Jessica - 所有文章 - UCD大社区
看过《定位》最大的感受就是产品在诞生之前就决定了他是否能存活或成功. 就像走在商场中,面对玲琅满目的产品,你似乎很难找到一两款绝对同质化的大品牌:. 各式的服装,NIKE的衣服是运动的,但也不会和做户外运动的哥伦比亚冲突. 都是做化妆品,Fancl打出“无添加”没有防腐剂也收获了一群喜爱天然的用户…...

iPad 和 Kindle 的市场需求情况

- Frank - 爱范儿 · Beats of Bits
Kindle 是 E-reader 界的好同志. 不过 Changewave 最新的调查数据再次显示,在美国本土,iPad 正逐渐的影响到 Kindle 的市场份额. 这期的调查是关于消费者对于电子阅读器的拥有情况. 从数据统计来看,8 到 11 月间,iPad 保有量翻了一倍,从 16% 来到 32%.

跑步者的产品需求

- fyits0 - 《商业价值》杂志
国家标准滞后了,行业标准落伍了,客户需求才是真正的标准. 跑步在欧美等运动发达地区已有几十年的发展历史. 20世纪70年代的时候,大多是那些看上去黑黑瘦瘦,一周训练很久,追求成绩的运动员在跑. 其后随着社会发展,越来越多的普通人开始跑步. 《阿甘正传》热映,跑步公益组织相继诞生,“如果奥普拉可以跑完全程马拉松,你也可以.