博客
关于我
《需求设计:构建用户想要和需要的产品》——3.2 逆向设计
阅读量:675 次
发布时间:2019-03-15

本文共 1714 字,大约阅读时间需要 5 分钟。

逆向设计

在需求设计中,笔者提倡一种称为“逆向设计”的方法。这种方法与传统的正向设计相反,主要是从编程到需求验证的过程,而非从需求到实现方案的过程。尽管敏捷开发方法在某些情况下可能有效,但笔者更倾向于强调传统的需求分析方法。以下是一个实际案例的分享,供参考。

有一次,我需要开发一款用于业务评审的应用程序,该程序能够根据用户需求生成报表。其中一些报表较为简单,直接从用户需求中可以确定其具体内容。但对于一些复杂的报表,尤其是涉及业务限制的部分,情况就有所不同。项目利益相关者要求这款应用程序能够分析描述这些限制的文字,找出其中的共同主题。考虑到这一需求,我联想到一位擅长人工智能的朋友,打算利用AI技术来实现。尽管对AI项目的风险有些担忧,但也不排斥其应用。于是,我决定先尝试一些简单的分析方法,比如列出常见词语组合,编写了一些代码并进行了调整。

将代码提交给利益相关者后,我继续进行了优化。尽管最终这款应用并未投入实际使用,但我认为这是一个可行的方案。如果以后有需要,完全可以将其交付给用户测试,若不符合需求再进行更贴近AI的实现。

这种设计方式得名“逆向设计”,因为它的流程顺序与传统设计颠倒了。从个人实践来看,逆向设计在以下场景下表现较好:当需求不够清晰、或者有相关研究项目的支持时。另一个常见场景是,当终端用户希望展示某些信息,但对信息呈现方式不确定的情况下。然而,在大型项目中,逆向设计通常仅占一小部分,绝大部分仍然是正向设计。即便是逆向设计,也必须有严格的边界,确保不会干扰其他代码部分。

对于逆向设计的实现,笔者提出以下几点建议:

  • 从简单功能入手。先完成简单的部分,这样可以让利益相关者看到项目进展,并可能提前发现复杂部分的优化空间。
  • 要常进行代码重构和设计调整。例如,在报表的参数设定画面设计方面,虽然看似简单,但实际上需要反复尝试和调整。关键在于确定哪些内容应该预先设定,哪些可以通过日期范围等字段加以灵活调整。
  • 定期进行代码评审,而非由单一人负责长时间开发。可以每两周进行一次评审,确保开发成果能够被利益相关者接受,避免研发人员孤立开发后难以推动的成果。
  • 将某些可选的设计方案提交给利益相关者评审,避免程序员自作主张。

上述建议的最后一条,主要是针对逆向设计中可能出现的问题——程序员可能忽视利益相关者的意见而自行修改设计。通过定期展示设计方案,可以避免这一问题的发生。

有人可能会问,是否真的有逆向开发的必要?让我们再仔细分析一下刚才的案例。实际上,我们仍然需要明确报表的内容和输出形式,在编写代码前也必须完成用户界面和数据库设计。换句话说,这并不是完全的逆向设计,而是一种可能需要返工的设计方法。这在任何项目的各个模块中都可能出现。因此,在设计初期,我们往往会发现某些内容是可以确定的,而另一些内容则存在不确定性。针对后者,我们可能需要重新审视整个设计,或者为每个设计部分赋予“不确定性得分”(uncertainty score)。这种得分衡量的是需要重新设计的概率。例如,在上述报表应用中,“用户需要一份能够对文本做出分析的报表”得分为0,而笔者设计的报表输出形式得分为7,意味着有70%的概率会需要进一步修改。

这种不确定性得分的方法,不是说利益相关者完全不知道自己想要什么,而是指设计细节不够完善。在这种情况下,我们需要通过示意图或其他方式补充设计内容,并可能进行几轮迭代才能最终确定用户界面设计。然而,在此过程中,理解问题的本质至关重要,这样才能引导解决方案朝着正确的方向发展。

要降低不确定性得分,可以通过直接向利益相关者询问,促使他们深入思考需求。同时,开发过程中可以记录用户对各项特性的实际使用情况,并提供反馈机制。例如,可以请用户对应用程序中的每个界面提出意见。这样不仅能够消除误会,还能帮助我们更好地理解用户需求。

对于不确定性得分较高的内容,可以采取以下措施:将其放到后续版本中开发,避免影响其他重要功能;或者在开发完成前,将其交付给利益相关者测试,并询问他们对设计方向的看法。

总之,在需求设计过程中,不确定性是难以完全避免的,但通过情境设计和细节设计,我们可以更好地管理这一问题。

转载地址:http://giemz.baihongyu.com/

你可能感兴趣的文章
Mysql 拼接多个字段作为查询条件查询方法
查看>>
mysql 排序id_mysql如何按特定id排序
查看>>
Mysql 提示:Communication link failure
查看>>
mysql 插入是否成功_PDO mysql:如何知道插入是否成功
查看>>
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
查看>>
mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>
MySQL 数据库的高可用性分析
查看>>
MySQL 数据库设计总结
查看>>
Mysql 数据库重置ID排序
查看>>
Mysql 数据类型一日期
查看>>
MySQL 数据类型和属性
查看>>
mysql 敲错命令 想取消怎么办?
查看>>
Mysql 整形列的字节与存储范围
查看>>
mysql 断电数据损坏,无法启动
查看>>
MySQL 日期时间类型的选择
查看>>
Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>