导论 (Introduction)
第 1 章:什么是 Getting Real
Getting Real 是一种更小、更快、更好的软件构建方式,它关注于构建真实的产品,而非纸上谈兵。
- 它代表更少的东西:更少的体量、软件、功能和文书工作。本质是精简和敏捷。
- 传统的功能规格说明书(Functional Spec)是虚构的,而一个真实的网页才是现实。
- 跳过所有代表“真实”的东西(图表、线框图等),直接构建“真实”的东西。
- 从界面(用户真实体验的屏幕)开始,然后向后构建。
- 拥抱迭代、启动、调整和持续改进,这是Web应用的巨大优势。
起跑线 (The Starting Line)
第 4 章:少做一点 (Build Less)
要做得比你的竞争对手少,以此来击败他们。
- “比对手多一个功能”的冷战心态是昂贵、防御性和偏执的,它让你只能跟随,无法引领。
- 解决简单的问题,把那些棘手、复杂的问题留给别人。
- 少即是:更少的功能、更少的选项/偏好、更少的人员和结构、更少的会议和抽象、更少的承诺。
第 5 章:你的问题是什么? (What's Your Problem?)
为自己构建软件,解决你自己的问题(“挠自己的痒”)。
- 如果你自己有这个问题,那么很可能有成千上万的人和你在一条船上,这就是你的市场。
- 为自己解决问题会带来激情,这是关键。激情意味着你会真正地使用和关心你的产品。
- 将自己作为目标受众,你就能知道什么是重要的,什么不是。
第 6 章:自己投资 (Fund Yourself)
外部资金是 B 计划。约束能激发创造力。
- 拿了投资人的钱,你就得对他们负责,赚钱常常会压倒构建高质量产品。
- 如今启动成本很低(硬件便宜、开源软件免费)。
- 用手头的现金做事,思考用3个人代替10个人能做什么,用3个月代替6个月能做什么。
- 利用约束,它会迫使你更早地面对现实,更快地将想法推向市场。
第 7 章:固定时间和预算,灵活调整范围 (Fix Time and Budget, Flex Scope)
要按时按预算发布,就把时间和预算定死,然后缩减功能范围。
- “按时、按预算、按范围”完成的神话几乎从不发生,且质量往往受损。
- 发布一个范围虽小但很棒的产品,胜过一个功能齐全但平庸且充满漏洞的产品。
- 如果无法在规定时间和预算内完成所有事情,那就缩减范围。以后总有时间添加东西。
- 这会迫使你做出艰难的决定,优先处理真正重要的事情。
第 8 章:树立一个敌人 (Have an Enemy)
明确你的应用“不应该”是什么,这能帮你找到方向。
- 当你决定创建一个与敌人(如 Microsoft Project)完全相反的产品时,你的方向就非常清晰了。
- 冲突能激发人们的兴趣,并帮助他们通过对比来理解你的产品。
- 找到你的敌人(一个产品、一个理念、一种做事方式),然后把自己定位为它的对立面。
- 这会带来一个非常清晰的营销信息。
保持精简 (Stay Lean)
第 10 章:减少体量 (Less Mass)
你越精简,改变方向就越容易。
- 商业世界和物理世界一样,体量越大的物体,改变其方向所需的能量就越多。
- 通过即时思考、小团队、更少的软件、精简的界面和开放文化来减少体量。
- 避免长期合同、多余员工、永久性决策和办公室政治,这些都会增加体量。
第 12 章:三个火枪手 (The Three Musketeers)
用一个三人团队来开发 1.0 版本。
- 团队效率与成员数量的平方成反比。沟通路径随着人数增加而呈指数级增长。
- 三人是神奇数字:一个开发者,一个设计师,一个“清道夫”(能在两者之间游走的人)。
- 人力不足会迫使你更早地做出权衡,明确优先级。
第 13 章:拥抱约束 (Embrace Constraints)
让限制引导你走向创造性的解决方案。
- 约束能驱动创新并强迫你保持专注。它们是伪装的优势。
- 不要试图移除约束,而是利用它们。没有足够的钱、时间、人手?这是好事。
- 忘掉风险投资、长发布周期和快速招聘。用你已有的东西工作。
优先级 (Priorities)
第 15 章:什么是核心思想? (What's the Big Idea?)
为你的应用明确定义一句话的愿景。
- 这个愿景将指导你所有的决策,让你保持在正确的道路上。
- 例如,Basecamp的愿景是:“项目管理就是沟通。”
- 在开始设计或编码之前,想清楚你的产品为什么存在,它与其他产品有何不同。
- 当遇到难题时,问自己:“我们是否忠于这个愿景?”
第 16 章:早期忽略细节 (Ignore Details Early On)
从大处着手,再到小处。不要过早陷入细节。
- 过早关注细节会导致停滞、分歧、会议和延迟,这些会扼杀士气。
- 细节会在你使用产品的过程中自然浮现。
- 第一周不要担心标题字体大小,第二周不要纠结完美的绿色阴影。先把东西放到页面上,让它能用。
- 以后有的是时间做个完美主义者。
第 19 章:稍后扩展 (Scale Later)
你现在还没有扩展性问题。等到问题真的发生了再说。
- 绝大多数Web应用永远不会达到需要大规模扩展的阶段。
- 如果你真的遇到了,恭喜!这是一个好问题。届时你将有真实数据来指导你如何解决。
- 初期,把构建一个坚实的核心产品作为你的首要任务,而不是痴迷于可扩展性和服务器集群。
- Basecamp第一年只用了一台服务器。
功能选择 (Feature Selection)
第 21 章:做一半产品,而不是半成品 (Half, Not Half-Assed)
构建一个出色的一半产品,而不是一个功能齐全但粗制滥造的半成品。
- “厨房水槽里什么都有”的开发方式只会让你得到一个糟糕的产品版本。
- 坚持只做最本质的东西。把你的产品构想砍掉一半,再砍掉一半,直到只剩下最核心的功能。
- 从一个精简、智能的应用开始,让它获得牵引力,然后在这个坚实的基础上添砖加瓦。
第 23 章:从“不”开始 (Start With No)
让每个功能都努力证明自己值得被实现。
- 每次你对一个功能说“是”,你就像领养了一个孩子,需要对它负责到底。
- 对每一个新功能请求的初始反应应该是“暂时不做”。
- 只有当一个功能请求反复出现,你才应该开始认真考虑它。
创新不是对所有事情都说“是”,而是对除了最关键的功能之外的所有事情说“不”。
第 27 章:忘记功能请求 (Forget Feature Requests)
让你的客户来提醒你什么是重要的。
- 真正重要的请求会像气泡一样不断冒出来。它们是唯一你需要记住的。
- 读客户的功能请求,然后把它们扔掉。不要费心去追踪和保存每一个请求。
- 让你的客户成为你的记忆。如果一个东西真的值得记住,他们会一次又一次地提醒你。
流程 (Process)
第 29 章:奔向可运行的软件 (Race to Running Software)
尽快让一些真实的东西跑起来。
- 可运行的软件是建立动力、团结团队和排除行不通想法的最佳方式。
- 故事、线框图,甚至HTML模型都只是近似物。可运行的软件才是真实的。
- 可以少做、跳过细节、走捷径,只要能更快地得到可运行的软件。
第 31 章:从想法到实现 (From Idea to Implementation)
遵循一个从抽象到具体的过程:头脑风暴 -> 纸上草图 -> HTML屏幕 -> 编码。
- 头脑风暴: 关注宏大问题,不是细节。
- 纸上草图: 快速、粗糙、廉价。将概念转化为粗略的界面设计。
- 创建HTML屏幕: 用HTML和CSS构建一个静态模型,让每个人都能看到真实屏幕的样子。先不要写任何程序代码。
- 编码: 当模型看起来不错并展示了必要功能后,再开始编写后端代码。
第 32 章:避免偏好设置 (Avoid Preferences)
替你的客户做决定,不要用偏好设置来逃避艰难的决策。
- 提供无尽的选项对客户来说是头痛,而不是福音。这是把你的责任推给了他们。
- 偏好设置是魔鬼,它们会创造更多的软件、更多的代码和更多的测试工作。
- 做出简单的决定。比如,每页显示25条消息。就是这样,没有选项。
- 如果你的决定错了,人们会抱怨,你随时可以调整。
界面设计 (Interface Design)
第 46 章:界面先行 (Interface First)
在开始编程之前设计界面。
- 编程是构建应用中最“重”的部分,最昂贵也最难改变。
- 界面就是你的产品。人们看到的就是你卖的东西。
- 从界面开始,这样你可以从一开始就看到和感受到应用的样子。
- 先用纸笔画草图,然后用HTML设计。这些都很轻量,易于修改或丢弃。
第 47 章:震中设计 (Epicenter Design)
从页面的核心开始,然后向外构建。
- 传统模式是“先建框架再填内容”,这是一种落后的流程。
- 关注页面真正的本质——震中。例如,博客文章页的震中就是文章本身,而不是导航或页脚。
- 先设计最重要的内容,完成之后再考虑第二重要的元素,以此类推。
第 48-49 章:三态解决方案与空白石板 (Three State & Blank Slate)
为每个屏幕设计三种状态:常规、空白和错误,并特别关注首次运行的“空白”体验。
- 空白状态是你应用的第一印象,却常常被设计师忽略,因为他们总是在填充了数据的模板上工作。
- 常规状态 (Regular): 应用正常工作,数据充足。
- 错误状态 (Error): 出现问题时。
- 空白状态 (Blank): 用户第一次使用,没有任何数据时。利用这个机会提供教程、帮助信息和示例,设定用户的期望。
第 52 章:文案即是界面设计 (Copywriting is Interface Design)
每一个字母都很重要。优秀的界面是写出来的。
- 如果你认为每个像素都重要,那么你也必须相信每个字母都重要。
- 用你用户的语言说话,避免技术术语和内部行话。
- 保持简短、甜美。按钮上的文字是“提交”还是“保存”?这是文案,也是设计。
发布之后 (Post-Launch)
第 82 章:公开你的失误 (Publicize Your Screwups)
如果出了问题,告诉大家。即使他们一开始并不知道。
- 一个知情的客户是你最好的客户。开放、诚实和透明会为你赢得信任。
- 当坏消息来临时,一次性全部公开。当好消息来临时,慢慢地、一点点地放出来。
第 85 章:更好,而不是Beta版 (Better, Not Beta)
不要用“Beta”作为借口。
- 永久的Beta阶段告诉客户,你并未真正致力于推出一个成品。它是在推卸责任。
- 不要等待产品完美。它永远不会完美。为你的发布负责,把它发布出去,称之为一个“发布版”。
第 89 章:警惕臃肿怪物 (Beware the Bloat Monster)
更成熟不意味着更复杂。
- 传统桌面软件为了每年卖新版本,必须不断增加功能,这就是臃肿的开始。
- 基于订阅的Web软件没有这种压力,你只需提供持续的价值。
- 抵制臃肿。有时候,一支铅笔就够了,你不需要一支能在太空倒着写的笔。
- 有时候,你应该让一个产品保持原样。
第 91 章:启动你的引擎 (Start Your Engines)
成功的关键在于卓越的执行和优秀的人才。
- 每个人都可以读书、想出点子。你和别人之间的区别在于你执行得有多好。
- Getting Real 的理念不仅适用于软件,它无处不在:特种部队、The White Stripes乐队、海明威的写作...
- 执行: 寻求平衡。好的文案、干净的界面、可靠的代码和有效的推广,缺一不可。
- 人才: 找到那些对自己的手艺充满激情、关心细节、追求卓越的人。他们是你项目成败的关键。