编译 | 郑丽媛
出品 | CSDN(ID:CSDNnews)

当软件团队要开始一个重大项目的时候,通常流程是以下这样的:

(1)产品经理与工程团队开会,提出下一个主要功能的描述,其中可能包括验收标准,也会有不同保真度的设计。

(2)然后,团队中的一名工程师会负责这项功能,将其分解为更小的任务并进行分工。他们将高级功能描述,转化为完成该功能所需完成的所有工作的完整列表。


(资料图片)

(3)由于复杂性未知或需要进行更多调查,因此其中一些任务是开放式的,但它们也有时间限制。其他任务也会有一些估算时间。

(4)所有问题都会分配并加载到 Sprint 中。

(5)最终,完成功能并按时发布!

以上流程全部做完后,你会发现:所有工作都完成了,除了最后没有按时交付功能。

在开发新功能的过程中,我们总会不可避免地会遇到一些没有预料到的事:也许是数据库中的数据混乱,而我们没有意识到这一点,所以需要增加一项数据清理任务;也许是用户体验中有一部分比预想的要复杂,所以这项任务需要的时间比预估的要长;也许有一部分技术设计并不理想,我们不得不重做……

对于以上这些开发中的意外情况,我的真诚建议是:当你要开始一个重大项目时,让你团队中最好的工程师先写几天代码,然后再把这些代码初稿全部扔掉!

相信我, 从长远来看,这绝对会节省你 的时间:我们可以通过快速、脏乱的代码初稿来省去很多麻烦和工作,或许你也可以理解成原型设计。

为什么要制作原型?

当你准备开发一个重要的新功能、产品或任何东西时,有一个显著特点就是:你不知道自己在做什么,而唯一知道自己在做什么的方法就是以前做过。

这就导致了一个问题:如果你不知道你在做什么,你要怎么知道哪里容易有问题?要怎么知道设计要求是什么?又该做出怎样的技术决定?

当然,其中有些问题可以从过往的经验中找到答案,但许多问题也存在未知数,是你无法预测的。

对于未知因素,没有什么比亲身探索更有说服力了,而这就是制作原型的作用所在。当你开发原型时,你可以掌握更多的信息,这样对你来说,第二次才是真正意义上的功能开发工作。例如,原型设计时你会发现数据库有点乱,或者知道了后端代码的某一部分很难 扩展,这些问题就可以及时解决或纳入第二次的开发工作中。

怎样进行原型设计?

乍看之下,“原型设计”似乎有一种神秘感,但实际上它的制作方法非常简单。为了便于理解,接下来我会只谈一种原型设计方法,当然其他方法也可以使用。

我在工作中喜欢使用的原型设计流程是:对问题进行粗略的、高层次的描述,然后交给 1-2 名技术卓越的工程师去实现,给他们几天时间,看看他们的成果如何。

听起来是不是非常简单?而事实就是如此。一般情况下,我给工程师的指令不是“做出一个完整的功能”,而是“如果可以的话,做些东西来演示,并找出难点”。这也就是为什么我认为原型设计的工作,最好由经验更丰富的工程师来完成:他们行动迅速,能学到很多东西,并且拥有必要的背景知识,知道哪些部分最需要提前调查。

有几种方法可以将其融入团队流程:

▶ 组织黑客日!以我为例,我所在团队就经常举办这样的活动,这也是我们产品中主要功能的创意和原型的来源。当一个功能出现在黑客日上时,就意味着它已经被审核和拥有原型设计了。

▶ 为原型设计分配 Sprint 时间。如果你知道某项功能即将推出,你就可以抢先一步,在进入 Sprint 阶段前给别人时间做原型。我们团队在工作中也是这样做的(我最近就做了一个类似的原型,使我们在这个项目上节省一些时间)。

到目前为止,我们发现有原型的功能,其开发过程会更加顺畅,而没有经过原型设计的功能往往会遇到更多坎坷。其中有些障碍可能是由于功能的性质造成的(有些功能并不适合原型设计),但除此之外,大多数情况下进行原型设计都能有所帮助。有鉴于此,我一 直在推动将原型设计作为我们正式流程的一部分,并得到了非常积极的反响。

真的要扔掉所有代码初稿吗?

是的,记得一定要全部扔掉!

原型开发完成后,不少人为了加快功能开发速度,觉得保留原型代码也不错,但事实上这样并不会加快功能开发速度,反而只会破坏原型开发。

如果你要保留代码,或者知道自己有可能要保留代码,这会彻底改变原型设计的初衷和心理状态,使开发过程变得更糟。具体来说,一旦你想要保留原型代码,你就会以“适当”的方式做事,这意味着要放慢速度——放入所有异常处理程序和日志语句,合理安排代码结构,在重构代码的同时进行适当的模块化——毕竟,这些代码会被重复使用。

而这些工作你只要做了,那么你在原型设计阶段所涉及的内容和学到的东西就会少很多。

另一种情况是,你 保留着这些 代码,然后 快速开发结果弄得一团糟。如果是这样,那我就不想在那个代码库里工作了,注定那里会一片混乱。

因此,为了整体时间安排,请遵守承诺,扔掉全部代码初稿以保持快速高效。这能让你快速行动,通过原型设计学到很多东西,然后在真正开发功能时做出更好的决策,从而节省时间和精力。

原文链接:/blog/throw-away-your-first-draft/

推荐内容