注:这篇文章最初只是作为一个内部邮件发送给开发团队的。经允许,我将其公开发表出来,希望更多人能看到它。这些想法都是我自己的,但是作为一个已经发布过很多没有任何截止期限产品的人,我想就此主题,分享一些我的想法。
截止期限是一把双刃剑。它们可以帮助产品上市,但它们也可能导致最终产品包含很多以“发布”为名义的妥协。
在想要“发布正确的产品”和想要“发布产品”之间,一直存在着一种天然的矛盾。
有时截止期限是必要的:
- 你已经宣布了一个公开上市的日期。
- 你正在为已有产品发布一个重要的安全补丁。
- 你的产品是客户或商业伙伴已公开上市日期产品的一部分(例如,你是其产品供应链的一部分)。
- 你正在和一个缺乏纪律的团队一起工作,截止期限是完成工作的唯一激励因素。
- 你试图发布的产品基于不受你控制的外部日期(如一个需要在苹果新产品发布会上演示的 iWatch 应用程序)。
有时截止期限在其它方面也是很有帮助的:
- 当试图决定功能范围及其演化进程时,截止期限提供了一种强制机制,有助于在新版本发布之前删除(虽然并不总是成功)很多临时抱佛脚式的功能特性。
- 截止期限提供了一个方向标,让整个团队将其作为前进的目标。
- 对于非创造性活动,截止期限能够为训练提供一个范围,比如,备战体育赛事,或者,各类考试复习。
对于创造性或创新类项目,比如一个消费类软件产品,我认为在第一个版本的开发阶段,截止期限引发的伤害远大于带来的好处。
截止期限在这个阶段可以导致:
- 妥协。不是那种“来个折中,让每个人都高兴”式的妥协,而是“建筑物已被地震破坏,马上就会坍塌”式的妥。
- 恐慌。
- 不必要的或人为的紧张气氛。随着截止期限的临近,团队会意识到余下要做工作的实际数量被低估了。这样的情况在软件开发中始终存在。
- 拖延或惰性(“我有3个月的时间去完成这项任务,我可以等一段时间再开始”)。
- 一种人为的但却不令人满意的成就感,即,“哇,我们发布了产品,但这不是我们想要的东西”。
缺少截止期限也有它的缺点:
- 从不发布(这是没有截止期限最明显的问题)。
- 无限制的功能改变与演化。
- 缺乏强制机制导致功能演化陷入困境。
- 无限的拓展空间,随时变更产品方向。
- 导致一个缺乏纪律的团队失去做事的动机。
然而,没有截止期限,同样可以开发出深受人们喜爱的高质量产品。我已经这样做了,其他人也这样做过。这完全可行,你也可以做到这一点。
如何去发布一个没有截止期限的产品:
首先,没有一个截止期限并不意味着“没有期限” - 其意思就是“截止期限就是尽快完成”。
当你给我一个截至期限,我就会试图找出最迟的开始日期,然后我开始拖延。这是个坏习惯。另一方面,如果我有一个项目,我非常喜欢,而且全身心投入其中,我的主要想法是 - “尽快让它面世!” ,然后我会立即开始,一般不会中途停下,直到将其从无到有地做出来(一个例子,Points - 这款游戏从构思、设计、建造、到最终发布到苹果商店,只用了总共9天时间,其中包括晚上和周末)。
发布没有截止期限产品的实际步骤:
注:专门针对开发消费类 Web 应用程序或移动应用程序*
- 从核心理念中提炼出这款产品的精华。这个应用程序的关键点是什么?让这个关键点变成这个产品的支柱或核心。这样做就会有助于以下步骤中的所有决策。
- 罗列一个能够满足产品用户需求的最小功能清单。
- 再一次评估这张清单。从这张清单中删除一些功能或特性。不,我是认真的,你不需要这些功能。请记住,只是因为别人的产品具有类似功能,并不意味着你的产品也需要它们(也许永远不需要!)。竞争对手的功能不是你开发产品的目标。用户对于一个产品想要什么或者想做什么,你尽可能少做点假设。
- 为测试版用户提供反馈留出余地:再一次缩减功能清单。我是认真的。如果你只是为了获知潜在用户的核心需求,你可以推出一个粗糙,甚至缺失看似必要功能的测试版。
- 个人主观意见:我认为功能永远比风格更重要。如果具备相应功能,并且能够正常工作,那就发布它。优雅的设计和让一切达到像素级完美是需要花费大量时间的。再次声明,这是我个人的主观建议,你需要在设计和功能之间达到一定程度的平衡。
- 从最简功能清单入手,尽快实现它们。不要增加功能。不要增加功能。不要增加功能。如果你很想增加一项功能,创建一个列表吧,在“下一个版本需要新增功能”的下面写下它。
- 何时增加功能:如果你能提供靠谱的证据 - 假如没有这个的功能,应用程序将会受到严重影响,或者在最后的迭代阶段(获得用户反馈以后),用户为了得到他们想要的功能,不停地抱怨。
- 分阶段快速打磨用户界面。你无需追求完美。只要可用,你就算完成了。
- 让应用程序运行一段时间。不要接触代码或用户界面设计。你只需作为一个普通用户使用该应用程序,把明显缺陷和问题记录下来,尽快将这些错误和问题修复。
- 发布!
- 用户反馈。用户反馈。用户反馈。尽可能多的得到用户反馈,但千万不要基于用户的直接提示做出相应的修改。列一个清单,根据反馈和错误的重复次数排定优先级。你对用户假设的越少,根据用户反馈做出的更新就越多,他们就会越喜欢这个产品,你也会因为给用户提供了喜爱的东西而感到高兴。
- 在改进和发布产品之间,不断重复这个过程。
如果发布产品对于每一位开发团队成员来说,都是一个主要激励因素,那么截止期限就要写下来。诀窍就是,像激光一样聚焦核心功能,在产品发布之前,坚决杜绝添加功能或扩大范围。
作者:Chad Etzel,软件工程师,曾就职思科、Twitter、Twilio 等公司,现为 Jelly iOS 首席工程师。
原文: How to Ship Without a Deadline
感谢: Jodoo 帮助审阅并完成校对。
P.S. 如果您喜欢这篇文章并且希望学习编程技术的话,请关注一下 复唧唧。