1. Getting Real by 37signals Page 1 of 69
Getting Real Overview
Buy the book
Buy Getting Real in PDF or paperback.
Job Board
New York Institute of Technology is looking for a Web Developer. See more on the Job Board.
Gig Board
Looking for design, copywriting, or programming help with your project? Check the Gig Board.
Getting Real
l 第一章 引言
l 第二章 起跑线
l 第三章 保持精益
l 第四章 首要任务
l 第五章 挑选功能
l 第六章 操作
l 第七章 组织
l 第八章 人员配备
l 第九章 界面设计
l chapter 10 Code
l chapter 11 文字
l 第12章 定价和注册
l chapter 13 Promotion
l chapter 14 Support
l chapter 15 Post-Launch
l chapter 16 Conclusion
引言 第一章
什么是 Getting Real?
想构建一个成功的Web应用么? 那么正是时候Getting Real. Getting Real 是一种更小规模,更快
速,更高质量的软件构建方法。
l Getting Real是关于省略所有表达现实(图表,曲线,矩形,箭头,统计图),而构建现
实。
l Getting real 是追求精炼。更少的代码量,更少的软件,更少的功能,更少的文档工作,
更少无所谓的东西(而且大部分你认为必要的,其实不是)。
l Getting Real 是保持精益,变得敏捷。
l Getting Real从界面开始,也就是用户使用的屏幕。它从实际的用户体验开始,并且构建
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
2. Getting Real by 37signals Page 2 of 69
似曾相识的体验。这让你在软件误入歧途之前得到正确的用户界面。
l Getting Real 是关于迭代和降低变化成本的方法。Getting Real基本上是关于上线,调整,
持续改进,其目标的开发Web软件的最佳途径。
l Getting Real只交付客户所需的,摒弃任何客户不需要的。
Getting Real的优点
Getting Real能够交付更好的结果,是因为它强迫你处理真正要解决的问题,而不是关于那些
问题的空想。它迫使你面对当下。
Getting Real更注重实际的用户界面,而不是功能规格说明书和其他昙花一现的文档。只有当
一个真实的网页呈现出来,相关的功能规格才是可信的,被证明是可接受的。那才是是我们
的客户将要看到和使用的。那才是需要关心的。Getting Real帮助你更快达到这个目的。并且
那意味着你正在基于真实需求,而不是异想天开来构建软件。
最后,Getting Real是适合于Web软件的理想途径。那种把软件包装在盒子里,再等一年到两
年才发布一个更新的学院派方法已经过时了。不像需要安装的软件,Web应用能够以天为单位
持续改进。Getting Real利用了这种优势来提升Web应用的价值。
如何编写健壮的软件 How To Write Vigorous Software
健壮的著作是简明的。句子无废词,段落无废句子。同样的原因,画应无多余的线条,机器
应无多余的零件。这不是要作者刻意缩句来逃避细节,从而提纲挈领,而是要作者字字珠
玑。
—来自 "The Elements of Style" by William Strunk Jr.
不再发胖
旧方式:冗长,官僚主义的,“我们正在这么做来控制这些蠢驴” 的流程。典型后果是:臃
肿,过目即忘,平庸得掉渣的软件。Blech。
Getting Real 除掉...
l 花费数月,甚至数年的进度表
l 不切实际的功能规格文档
l 可伸缩性的争论
l 又臭又长的员工大会
l 大量招人的需求
l 毫无意义的版本号
l 憧憬完美未来的幼稚“路线图”
l 无穷尽的偏好设置选项
l 外包支持
l 不切实际的用户测试
l 写无用文档
l 自顶向下的管理结构
你不需要成吨的钞票或者庞大的团队或者漫长的开发周期来构建伟大的软件。那些正是缓
慢,晦涩,变化成本高昂的应用程序的帮凶。Getting real反其道而行之。
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
3. Getting Real by 37signals Page 3 of 69
这本书将带给你...
l 信仰之重要
l 为什么小是好事情
l 怎样构建更少
l 怎样从现实世界中快速找到创意
l 怎样培养团队
l 为何要由内到外的设计
l 为什么写作至关重要
l 为什么要比对手少做
l 如何升级你的应用和散播文字
l 成功维护的秘诀
l 发布后能够持续保持后劲的秘诀。
l 其他...
本书关注于理论高度。我们不会使你陷入代码片段细节,或者是CSS窍门。我们会坚守在驱动
Getting Real过程的主要思想和价值观上。
本书适合你么?
你是管理者,设计师,程序员,或者市场人员。
你意识到旧规则不再管用了。每年通过光盘分发你的软件?2002这个版本号怎么样?
或者你对敏捷开发和企业组织结构略懂皮毛,但是热切的想多了解一些。
如果听起来你是其中之一,那么这本书就是为你准备的。
注意:虽然这本书着重在构建Web应用上,很多理念也可以应用到非软件活动。关于小型团
队,快速原型,期望迭代,和许多提到的其他经验能够为你引路。无论你正在开始一项业
务,写一本书,设计一个网站,记录签名册,还是其他各种各样的活动。一旦你在你生活中的
某一领域开始Getting Real,你就或发现这些概念能适用的非常广泛。
关于 37signals
我们做什么
37signals是一个创造简单的,专一的软件的小团队。我们的产品帮助你协同工作,组织团队。
超过35000个人和企业使用我们的Web应用来搞定他们的业务。来自华尔街杂志的Jeremy
Wagstaff写到 “37signals 的产品是超简单,精致,直接了当的工具,这些工具让微软的Outlook
软件使用起来像受刑 。”我们的软件不会把你推到这种境地。
我们的习惯做法
我们相信软件太复杂了。太多的功能,太多的按钮,需要学习太多东西。 我们的产品比对手
做的少 — 故意地. 我们构建的产品运行灵巧,感觉舒适,允许你以自己的方式做事,并且容
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
4. Getting Real by 37signals Page 4 of 69
易使用。
我们的产品
当这本书出版之即,我们有5个商业产品和一个开源框架。
Basecamp 把项目管理作为首要问题。Basecamp提供了消息板,待办事宜,简单调度,协同写
作,文件共享。 而不是甘特图,炫丽的曲线图,和繁重的电子表格。目前,成千上万的人同
意这是一种更好的方式。来自Salon.com的Farhad Manjoo说:“Basecamp代表了Web软件的未
来。”
Campfire 提供了业务模式下的简单群聊方式。实时持久的群聊对于业务来说非常重要。传统
的实时聊天对于快速的一对一模式很有效。但是对于3个或者更多的人同时聊天来说异常痛
苦。Campfire解决了此问题和其他相关问题。
Backpack 是一种替代那些玄乎,复杂,“通过25个步骤管理人生”之类的个人信息管理系统的
产品。Backpack在页面,笔记,待办事宜,电话和电子邮件通知上的简单尝试,在受“statis-
quo-itie”折磨的一类产品中,是一个独具匠心的创意。Wall Street Journal的Thomas Weber说它
是同类产品中最出众的。 New York Times 的 David Pogue说它是一个“非常酷”的组织工具。
Writeboard 使你能够撰写,分享,修订,和比较自己或者他人的文章。臃肿的文本处理工具,
对于你95%的文字是功能过剩的,而Writeboard是一个全新的替代品。Web-guru Jeffrey
Zeldman说:“37signals 的天才思想王者归来。”
Ta-da List 维护聚合你的所有待办清单,并且以在线方式组织。为你自己维护待办清单,或者
通过和其他人分享来协作。没有更好的方式来搞定这些了。迄今为止,其创建了超过100,
000个清单和1,000,000项行动。
Ruby on Rails, 对于开发者来说,是一个用Ruby编写的全栈式的开源Web框架。其使得开发真
是应用快速而简单。你可以关注在你的思想上面,而由Rails操心杂事。O’Reilly的Nathan
Torkington说:“Ruby on Rails太令人震撼了。使用它像是观赏一个功夫片,片中一堆流氓框架
准备痛扁这个小新人,没想到却被各种充满想象力的方式揪住了屁股。”Gotta喜欢这段话。
你可以从www.37signals.com找到更多关于我们产品和我们的公司的信息.
告诫,免责,和其他丑话说在前头
为了扫清障碍,下面是我们对于一些不时听到的抱怨的答复。:
"这些技术不适合我"
Getting real 是一套对我们来说效果非凡的系统。但是本书的思想并不是放之四海皆准。如果
你正在构建一套武器系统,一个导弹控制设备,一个为数以百万用户服务的银行系统,或者
其他对生命、财产至关重要的系统,你将会回避一些我们的放纵主义态度。请继续前行并且
采取一些其他的防范措施。
而且不必全部采纳或者全盘否定我们的主张。即使你没能力完全Getting Real,一定有少许观
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
12. Getting Real by 37signals Page 12 of 69
更小的质量
你越做到精益,改变越容易
一个物体的质量越大,改变方向需要的能量越多。物理世界的这个真理同样适用于商业世
界。
当真理应用到Web技术的时候,改变必须是简易和低廉的。如果你不能如飞一样的改变,你就
会败给能够做到的竞争者。这就是你需要追求更小质量的原因。
质量会由于以下因素增加
l 长期合同
l 多余的职员
l 固执的决策
l 关于会议的会议
l 厚重的流程
l 存货(物理的或者头脑的)
l 硬件,软件和技术的锁定
l 专有数据格式
l 未来被过去支配
l 长期的路线图
l 办公室政治
质量会由于以下因素减少
l 必要而及时的思考
l 多面手的团队成员
l 拥抱限制,而不是试着移除他们
l 更少的软件,更少的代码
l 更少的特征
l 小规模团队
l 简单
l 被拆分为正交的接口
l 开源产品
l 开放的文件格式
l 开放的文化,使承认错误更容易
更小的质量使你快速的改变方向。你可以随机应变和演进。你可以集中于好的主意,摈弃坏
的。你可以倾听并尊重你的客户。你可以集成新技术现在而不是以后。你驾驶的是蒸汽船而
不是飞机货舱。为这个事实骄傲吧。
举例来说,想象一个精益,小质量的公司,用更少的软件,更少的特征制造了一个产品。另
一方面是一个更大质量的公司拥有一个带有明显更多软件和特征的产品。那么试想一下,随
着新技术,比如Ajax,或者新概念,比如标签的出现,谁会更快的调整他的产品?拥有更多
软件更多特征还带着12个月路线图的团队,还是另一个团队,拥有更少软件更少特征和一个
更有机的流程——“让我们集中于我们当下应该集中精力的地方吧”。
很明显,更小质量的公司在适应市场真实需要的方面处于更有利的位置。当小质量公司已经
完成转换很久以后,更大质量的公司有可能仍然在争论变化或者将他们推入官僚主义的流程
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
22. Getting Real by 37signals Page 22 of 69
不轻易实现功能
构建部分而不是残缺不全的秘诀是说不
每一次你对一个功能说yes时,你正在收养一个小孩。你必须带着你的孩子通过一连串事件
(例如设计,实现,测试等)。一旦这个功能出现了,你就被拖住了后腿。尽量为客户少发
布一个功能,再看客户是否愤怒地离开。
不要成为 yes-man
不轻易实现每个功能。让每个功能证明自己,并且表明自己是生还者。这就像"Fight Club."。
如果那些功能就像为了进来在走廊苦候了三天,你只考虑他们。
这就是为什么你从说不开始。每一个向我们提出的 — 或者我们自己提出的 — 新功能需求都
遇到一个 NO 。我们倾听但是不采取行动。最初的回应是“不是现在”,如果一个需求或者功
能不停的过来,我们知道才是时候对它进一步观察。那么,只是那么,我们才开始考虑实现
这个功能。
当你不采纳他们的功能建议时,你如何回复他们的抱怨呢?首当其冲的是,你要提醒他们为
什么他们喜欢这个应用。“你喜欢它因为我们说NO。你喜欢它因为它没有做其他100件无关紧
要的事情。你喜欢它因为它不试图始终讨好任何人。”
“我们不想要一千个功能”
关于iTunes音乐商店,Steve Jobs 私下为独立唱片制作人做了一个小型的演讲。我喜欢的瞬间
是,当观众不停地举手说:“可以做[x]么?”,“你计划添加[y]么?”。最终Jobs回答:“ 等
等 — 放下你们的手。听着:我知道关于iTunes应该具有很酷的特性你有一千个主意。我们也
是。但是我们不想要一千个功能。那样做很恶心。创新不是关于对每件事说yes。而是对每一
件事说NO,除了至关重要的特性。”
—-Derek Sivers, president and programmer, CD Baby and HostBaby
(from Say NO by default)
隐藏的成本
看清功能的成本
即使一个新功能通过了对其说不的阶段,你还需要去发现它隐藏的成本。
比如,我们应该注意到功能循环(带来更多功能的功能)这种现象。我们曾经有一个需求是
在Basecamp里加上一个“会议标签”。如果不仔细权衡这看上去好像很简单。但是想想“会议标
签”需要的不同元素:地点、时间、房间号、人员、邮件邀请、日历的整合、支持文档等等。
这还不包括修改推广活动中的截图、用户预览页、常见问题及帮助页、服务条款以及更多。
在你还没搞清楚它是怎么回事之前,一个简单的想法就象滚雪球一样弄得你大伤脑筋。
对于每一个新功能你需要……
l 1. 对它说不
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
23. Getting Real by 37signals Page 23 of 69
l 2. 强迫它证明自己的价值
l 3. 如果得到否定的答案,就此打住。如果是yes,继续往下……
l 4. 为界面绘制草图
l 5. 设计界面
l 6. 编写代码
l 7-15. 测试,改进,测试,改进,测试,改进,测试,改进……
l 16. 检查帮助文字是否需要修改
l 17. 更新产品预览流程(如果有必要的话)
l 18. 更新用于销售的拷贝(如果有必要的话)
l 19. 更新服务条款(如果有必要的话)
l 20. 检查是否违背之前的任何许诺
l 21. 检查价格体系是否受影响
l 22. 上线
l 23. 深吸一口气
你能把握住它么?
构建你有把握的
如果你发布一个会员程序,你的系统能够处理帐户和支付问题么?可能你应该只让用户根据
会员身份通过信用卡支付,而不是让他每个月撰写,签名,并且邮寄一张支票。
你能承受得起1G的免费空间么?还是仅仅因为Google这么作了?可能你应该从100M开始,或
者只给付费用户提供空间。
底线:构建你能够掌握的产品和服务。许诺容易遵守难。确保你所作所为是在承担范围内 —
从组织,战略和财政上
人本主义
为一般概念构建软件,并且鼓励人们创建自己的解决方案。
不要约束人的习惯。而是令软件宽容的接纳每个人自己的解决方案。给人们足以通过自己的
方式解决他们自己的问题的能力。然后解决之。
当我们构建 Ta-da List的时候我们故意忽略掉了一堆东西。不能分配某人一个to-do,不能标记
时间范围,条目不能分类,等等。.
We kept the tool clean and uncluttered by letting people get creative. People figured out how to solve
issues on their own. If they wanted to add a date to a to-do item they could just add (due: April 7,
2006) to the front of the item. If they wanted to add a category, they could just add [Books] to the
front of the item. Ideal? No. Infinitely flexible? Yes.
If we tried to build software to specifically handle these scenarios, we'd be making it less useful for
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
24. Getting Real by 37signals Page 24 of 69
all the cases when those concerns don't apply.
Do the best job you can with the root of the problem then step aside. People will find their own
solutions and conventions within your general framework.
Forget Feature Requests
Let your customers remind you what's important
Customers want everything under the sun. They'll avalanche you with feature requests. Just check out
our product forums; The feature request category always trumps the others by a wide margin.
We'll hear about "this little extra feature" or "this can't be hard" or "wouldn't it be easy to add this" or
"it should take just a few seconds to put it in" or "if you added this I'd pay twice as much" and so on.
Of course we don't fault people for making requests. We encourage it and we want to hear what they
have to say. Most everything we add to our products starts out as a customer request. But, as we
mentioned before, your first response should be a no. So what do you do with all these requests that
pour in? Where do you store them? How do you manage them? You don't. Just read them and
then throw them away.
Yup, read them, throw them away, and forget them. It sounds blasphemous but the ones that are
important will keep bubbling up anyway. Those are the only ones you need to remember. Those are
the truly essential ones. Don't worry about tracking and saving each request that comes in. Let your
customers be your memory. If it's really worth remembering, they'll remind you until you can't forget.
How did we come to this conclusion? When we first launched Basecamp we tracked every major
feature request on a Basecamp to-do list. When a request was repeated by someone else we'd update
the list with an extra hash mark (II or III or IIII, etc). We figured that one day we'd review this list and
start working from the most requested features on down.
But the truth is we never looked at it again. We already knew what needed to be done next because
our customers constantly reminded us by making the same requests over and over again. There was
no need for a list or lots of analysis because it was all happening in real time. You can't forget what's
important when you are reminded of it every day.
And one more thing: Just because x number of people request something, doesn't mean you have to
include it. Sometimes it's better to just say no and maintain your vision for the product.
Hold the Mayo
Ask people what they don't want
Most software surveys and research questions are centered around what people want in a product.
"What feature do you think is missing?" "If you could add just one thing, what would it be?" "What
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
25. Getting Real by 37signals Page 25 of 69
would make this product more useful for you?"
What about the other side of the coin? Why not ask people what they don't want? "If you could
remove one feature, what would it be?" "What don't you use?" "What gets in your way the most?"
More isn't the answer. Sometimes the biggest favor you can do for customers is to leave something
out.
Innovation Comes From Saying No
[Innovation] comes from saying no to 1,000 things to make sure we don't get on the wrong track or
try to do too much. We're always thinking about new markets we could enter, but it's only by saying
no that you can concentrate on the things that are really important.
—Steve Jobs, CEO, Apple (from The Seed of Apple's Innovation)
操作 第六章
一场把软件运作起来的比赛
尽快地推出一个真实的产品
一个可运作的软件是积蓄动力,整合团队,去除行不通的点子的最佳方式。你必须从第一天
开始就将它摆在首要位置。
做少一些功能,跳过一些细节,如果一些捷径能加快软件进度就大胆用,这些都是OK的。当
你做下去的时候,你会对下一步的方向有更准确的把握。太多的故事,建模,甚至HTML演示
都是比较虚的构想。一个运作着的软件是真实的。
只有一个真实的,可操作的软件才能拉近每个人对现实的理解和认同。避免了为一些草图和
段落争得面红耳赤,最终发现这些都是无谓的。同时,你也会发现有些你想像中无关痛痒的
事情事实上是很重要的。
真实的产品导致真实的行动。这才是你走向真理之路。
办实事能导致共识
当一群不一样的人开始尝试寻找和谐共鸣的时候...如果他们是一建立一个全方位的真实的产品
那么他们的意见总会趋于一致。当然,如果他们只是打打草稿或是生出一些点子的话是很难
达成共识的。因此,当你真正开始做一个实在的产品时,共识就比较容易达成。
—Christopher Alexander, Professor of Architecture
(摘自 Contrasting Concepts of Harmony in Architecture(对比和谐建筑中的概念))
尽快地运作起来
我不认为我有参加过任何软件项目,不管大的或小的,是从一段漫长的规划讨论起步,不求
同步发展,而又能在进度,成本或功能上成功的。把宝贵的时间浪费在发明一些不必要的或
难以实施的性能上是容易的,有趣的,仅此而已,别无益处。
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
33. Getting Real by 37signals Page 33 of 69
成功的独处时间意味着赶走交流痴迷。在独处时间中,放弃即时通讯,电话呼叫和会议。不
要打开随时更新的email程序。只需闭上嘴去干活。(Just shut up and get to work.)
进入最佳状态
我们都知道知识工作者在稳定状态工作最出色,这种状态也被称作“渐入佳境”,他们全神贯注
于工作,开足马力,忘了周围的环境。他们忘了时间的流逝,在绝对的集中精力下产生了巨
大的成果...那番在于这种情境太容易被破坏。噪声,电话呼叫,吃午餐,需要开车5分钟去星
巴克喝咖啡还有合作者的打扰 — 特别是合作者的打扰 — 都破坏了这个情境。 如果你需要
花一份钟处理合作者问问题的干扰,这足以破坏你的集中经历,那么你需要花费一个小时重
新达到有效率,你的总生产力变得很糟糕。
—Joel Spolsky, 软件开发者, Fog Creek Software
(摘自 这些人从哪里得到他们(非原创的) 思想?)
会议有毒
不要会议
你真的需要会议吗?会议经常出现在概念不够清楚的时候。不要求助于会议,试着简化概
念,于是你可以快速的讨论它,通过电子邮件,即时通讯或者Campfire。目标就是避免会议。
你避免花费在会议上的每一分钟是你真正做事情的每一分钟。
对于生产力的毒性没有比会议更厉害的了。以下是几点原因:
l 他们将工作日分解成小的,不连续的片段从而打乱了你的日常工作流程
l 他们经常是关于词语或者抽象概念,并非真实的事物(比如代码片段或者一些接口设
计)
l 他们经常每分钟传达非常小的信息量
l 他们通常包含至少一个笨蛋,轮到他时不可避免的通过无意义的话浪费大家的时间
l 他们偏离主题比大雪中的芝加哥出租车还容易
l 他们的议程经常非常模糊以致于没有人真正的明确他们的目的T
l 他们经常需要精心的准备但是人们无论怎样罕能做到
在你确实地必须 开会(这必须是一个少见的事情)的时候 , 坚持这些简单的原则:
l 设定一个30分钟的计时器。当它响的时候,会议结束。句号。
l 邀请尽可能少的人。
l 没有明确议程的时候不要开会。
少开会
有太多的会议了。放弃那些没有意义的和没有效果的会议。只有当需要讨论重要的商务议题
的时候或者你需要建议,赞同或者一致意见的时候才召开会议。即便如此,不要不加选择的
邀请人 — 不要不必要的浪费人们的时间。
—Lisa Haneberg, 作者 (摘自 不要让会议统治你!)
分解它
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
34. Getting Real by 37signals Page 34 of 69
当子昂目增长的时候,增加人员带来了减少的回报。最有趣的原因之一就是增加的交流通道
的数量。两个人只需要相互沟通;只有一条简单的交流途径。三个人有三条交流途径;4个人
有6条。事实上,交流途径的增长是指数级的……很快,备忘录和会议汇占据整个工作时间。
解决方法是明显的:把团队分解成小的,自治的和独立的小单位以减少这些交流途径。
详细的,把程序也分解成更小的单位。既然问题的一大部分起源于相互的依赖(全局变量,
函数间传送的数据,共享的硬件等等),找一个方法分割程序以消灭— 或者减少— 个体间的
相互依赖。
—The Ganssle Group (from Keep It Small)
寻找和庆祝小的胜利
每天发行点什么
The most important thing in software development is motivation. Motivation is local — if you aren't
motivated by what you are working on right now, then chances are it won't be as good as it should be.
In fact, it's probably going to suck.
Long, drawn out release cycles are motivation killers. They insert too much time between
celebrations. On the other hand, quick wins that you can celebrate are great motivators. If you let
lengthy release cycles quash quick wins, you kill the motivation. And that can kill your product.
So, if you're in the middle of a months-long release cycle, dedicate a day a week (or every two weeks)
for some small victories. Ask yourself "What can we do and release in 4 hours?" And then do it. It
could be...
l A new simple feature
l A small enhancement to an existing feature
l Rewriting some help text to reduce the support burden
l Removing some form fields that you really don't need
When you find those 4-hour quick wins, you'll find celebration. That builds morale, increases
motivation, and reaffirms that the team is headed in the right direction.
人员配备 第八章
不需过早招聘太多员工
慢慢加人迅速发展
初期后期都并不一定要壮大队伍。即使你接触过100个顶级人才,一口气把他们全招来也并不
是什么好主意。没有办法能让这么多人迅速的融入到统一的企业文化中去。你将遭遇令人头
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
35. Getting Real by 37signals Page 35 of 69
痛的人员培训、性格不和、沟通不畅、发展方向不同等诸多麻烦。
所以不要随便招人。真的。不要招人,另想办法。让你陷入烦恼的这件事是真正必要的吗?
你不做又会如何呢?能不能用某种软件或者改变做事方法来解决呢?
ge前执行总裁Jack Welch每次裁掉一个人之后并不会马上招人来顶替他的位置。他想看看在那
个职位和人员空缺的情况下能支撑多久。我们当然不主张用裁人来验证这个理论,但是我们
的确认为Jack的做法有一定道理:你并不需要你考虑中的那么多人手。
如果没别的办法再考虑招人。但是你应该清楚知道你需要什么样的人,怎么向他介绍工作任
务,以及具体要他负责解决什么样的棘手问题。
Brooks的原则
给延期的软件开发项目添加人手只会更加拖延进度。
—Fred Brooks
编程与莫扎特的安魂曲
一个优秀的程序员在完成单个工作任务时不存在因沟通和分工而产生的额外开销。而五个程
序员坐到一起完成同一个任务的时候必须分工合作,那将花费很多时间……用很多一般的程
序员而不是几个足够好的程序员将产生的真正问题在于:无论让他们干上多久,也绝对没有
优秀程序员干得出色。五个Antonio Salieris也永远写不出莫扎特的安魂曲,哪怕给他们100年
的时间。
—Joel Spolsky, Fog Creek Software的软件开发人员 (摘自Hitting the High Notes)
摸底
先和候选员工在测试项目中协作
看作品、简历、例程、工作经历是一码事,和他在一起工作是另外一码事。只要有条件,应
该和准团队成员一起去“试试车”。
在聘用人之前,我们会给他们一个小项目琢磨琢磨。我们能从中看出他们怎么管理这个项
目,他们怎样进行沟通,他们具体怎么做等等。和他们一起设计或者编写几屏代码能看出很
多东西。你能迅速摸清和他们是否心有灵犀。
这种事规划起来比较难,但即使只能拿出20或者40小时来做也比没有强。适合不适合都能看
得很清楚。如果不适合,先摸清情况能给双方避免很多麻烦和风险。
小处着手
从分派一个小的测试任务开始。不要一股脑把你的工作任务都拿出来。给你的新虚拟助理一
两个测试项目来做,看看化学作用如何发生。开始的时候,大家很容易在和和气气的氛围中
忽略掉潜在的问题。记住这只是在试车。
—Suzanne Falter-Barns, 作家和创意专家
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
36. Getting Real by 37signals Page 36 of 69
(摘自How To Find And Keep The Perfect VA)
行胜于言
根据对开源社区的贡献选择潜在的技术人才
典型的通过学历、简历等方式来招聘技术人员在很多方面都是很愚蠢的。应聘者毕业于什么
学校、学习成绩如何真的那么重要吗?一份简历或介绍信真能信得过吗?
开源社区是为那些需要招聘技术人员的人准备的礼物。通过开源社区,你可以在很长的时间
跨度里跟踪某人的成果和贡献,无论好坏。
这意味着你能以他做过什么而不是说过什么来判断他是否合适。你可以通过考察真正重要的
方面来做决定:
l 工作质量
很多程序员说的时候口若悬河,实际去做的时候却错漏百出。通过开源社区,你可以直
观的了解这个人的编程技巧和素养。
l 文化视角
编程就是做判断。很多很多的判断。判断力遵循于这个人的文化水平、价值观和观念。
考察候选人在编码、测试和社区讨论(争吵)中作出的具体决定,看看他在文化上是否
和你有共同点。如果没有共同点,每个决定都将引发一场争论。
l 热情程度
根据定义,参与到开源项目至少是需要一些热情的。不然为什么他要在屏幕前浪费业余
时间?对开源项目的投入程度就能看出候选人对编程的热衷程度。
l 执行力
如果完不成任务,再聪明的头脑、再合适的文化倾向和再高的热情也带不来有价值的软
件。不幸的是,很多程序员都做不到这点。应该去找那些热忱工作的人。要做比买卖的
时候,需要有这样的人——这个人要把货带出门,而且他也愿意去做。
l 社会经验
和人一起共事很长时间,一起经历过紧张和悠闲,一起经历过起起落落,才能看出他们
的真实性格。如果他缺乏教养,没有社交技巧,把他排除掉。
说到程序员,我们只聘用通过开源社区认识的人。我们认为其他任何方式都是不负责任的。
我们聘用Jamis是因为我们关注过他在Ruby社区的参与程度和发布成果。他在前文所述的各个
方面都做得很好。不需要次要原因,我们只评判真正重要的——他的工作质量。
不用担心团队成员“课外活动”的活跃度带走他们的注意力和工作热情。有句老话是这么讲的:
如果你想做好一件事,去找你所认识的最忙的人。Jamis和David两个都是对Rails 社区有重大
贡献的人,同时,他俩还驾驭着37signals的技术部门。热爱编程并且能干活的人就是你真正需
要的团队成员。
对开源社区的热情
你最希望从新员工身上看到的就是他对自己工作任务的热情,而最能看出这点的办法就是在
开源项目中去追溯他的提交记录。
—Jarkko Laine, 软件开发人员
(from Reduce the risk, hire from open source)
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
40. Getting Real by 37signals Page 40 of 69
l 常规
一切运行正常的话,人们看到的是一个充满内容的界面。
l 初始
人们第一次使用这个应用,在加入内容前的界面。
l 错误
有错误发生时,人们看到的界面。
常规的情况众人皆知,它将花去你最多的时间。但别忘了也要为初始和错误两种情况花些时
间(接下来的文章作更详细地说明)。
初始界面
期待一个周到的初次运行体验
忽略初始界面的阶段是你会犯的最大错误之一。初始界面是应用留给人们的第一印象,永远
不会有第二次这样的机会……这个么,你应该知道。
问题是,设计界面时,通常是事先用数据填充起来。设计者总是用临时数据填满页面模板,
每一个列表、文章、输入框、边边角角里都填上内容。这时候界面看上去很棒。
然而,产品在初始状态下是没有内容的。当新人注册,他们将从初始界面开始。就像是一个
博客,用户需要自己去充实它。而在用户输入文章内容、链接、评论、日期、边栏的信息或
其它数据前,整体外观无法成形。
不幸的是,用户会在初始界面时决定产品是否值得一用——在这个内容和信息最少的阶段来
判断产品的适用性。如果你设计的初始界面有缺陷,人们就不知道缺少些什么,因为他们感
觉什么都没有。
然而大多数设计者和开发人员仍然认为这种状况理所当然。他们没有很多时间为初始界面做
设计,因为当他们开发和使用产品的时候,里面填满了他们用来测试的数据。他们甚至没遭
遇过初始界面。当然,他们可能也以新用户的身份登录过几次,不过他们主要的时间是沉浸
在一个充满数据的产品里。
一个有用的初始界面应该包含些什么?
l 利用它作为添加新手指南和热门推荐的机会。
l 给出一个填满内容的页面截图,这样能让人们有所期待。
l 讲解如何上手,页面最终会像什么样子等。
l 回答第一次来的访客会问到的关键问题:这是什么页面?我在干什么?页面有内容的时
候是什么样子?
l 做好预期准备,帮助减少挫折感、恐惧感和大的迷惑。
第一印象太关键了。如果没有设计出周到的初始界面,会为你的产品或服务留下反面的(错
误的)印象。
没有第二次机会……
我觉得苹果OS x操作系统的界面中另一个深受Steven Jobs影响的是安装和初次运行的体验。我
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
41. Getting Real by 37signals Page 41 of 69
想Jobs一定深深理解到第一印象的重要性……也许Jobs在考虑初次运行的体验时会想,它可能
是一个用户对电脑上千次用户体验中的一次,但是它将是最重要的千分之一,因为它是一千
次中的第一次,人们对它寄予了期望并形成初步印象。
—John Gruber, 撰稿人和开发人员 (摘自 Interview with John Gruber)
做好防御
出错时的设计
我们得承认:在线上的程序总有出错的情况。无论应用设计得多么用心,无论做了多少测
试,用户仍然会遇到问题。那么如何处理这些不可避免的故障呢?做好保护性设计。
保护性设计就像是在小心驾驶。和司机在行车时必须留意道路是否打滑、鲁莽的司机以及其
它危险情况一样,网站建设者们必须不断寻找会造成访问者困惑和不满的故障点。好的保护
性设计能决定用户体验的好坏。
关于保护性设计的内容我们可以单独写成一本书。实际上,我们已经写了。这本叫《网站的
保护性设计》的书对于想学习如何改进出错界面和其他故障点的人来说是非常好的资源。
记住:你的应用可能90%的时间都运行良好。但是如果在用户需要帮助时置之不理,他们是
不会忘记这一点的。
Context Over Consistency
What makes sense here may not make sense there
Should actions be buttons or links? It depends on the action. Should a calendar view be in list-form or
grid-form? It depends where it's being shown and how long the time period is. Does every global
navigation link need to be on every page? Do you need a global search bar everywhere? Do you need
the same exact footer on each page? The answer: "It depends."
That's why context is more important than consistency. It's ok to be inconsistent if your design makes
more sense that way. Give people just what matters. Give them what they need when they need it and
get rid of what they don't. It's better to be right than to be consistent.
Intelligent Inconsistency
Consistency is not necessary. For years, students of ui and ux have been taught that consistency in the
interface is one of the cardinal rules of interface design. Perhaps that holds in software, but on the
Web, it's just not true. What matters on the Web is whether, on each individual page, the user can
quickly and easily advance the next step in the process.
At Creative Good, we call it "intelligent inconsistency": making sure that each page in the process
gives users exactly what they need at that point in the process. Adding superfluous nav elements, just
because they're consistent with the rest of the site, is just silly.
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
42. Getting Real by 37signals Page 42 of 69
—Mark Hurst, founder of Creative Good and creator of Goovite.com
(from The Page Paradigm)
Copywriting is Interface Design
Every letter matters
Copywriting is interface design. Great interfaces are written. If you think every pixel, every icon,
every typeface matters, then you also need to believe every letter matters. When you're writing your
interface, always put yourself in the shoes of the person who's reading your interface. What do they
need to know? How you can explain it succinctly and clearly?
Do you label a button Submit or Save or Update or New or Create? That's copywriting. Do you write
three sentences or five? Do you explain with general examples or with details? Do you label content
New or Updated or Recently Updated or Modified? Is it There are new messages: 5 or There are 5
new messages or is it 5 or five or messages or posts? All of this matters.
You need to speak the same language as your audience too. Just because you're writing a web app
doesn't mean you can get away with technical jargon. Think about your customers and think about
what those buttons and words mean to them. Don't use acronyms or words that most people don't
understand. Don't use internal lingo. Don't sound like an engineer talking to another engineer. Keep it
short and sweet. Say what you need to and no more.
Good writing is good design. It's a rare exception where words don't accompany design. Icons with
names, form fields with examples, buttons with labels, step by step instructions in a process, a clear
explanation of your refund policy. These are all interface design.
One Interface
Incorporate admin functions into the public interface
Admin screens — the screens used to manage preferences, people, etc. — have a tendency to look
like crap. That's because the majority of development time is spent on the public-facing interface
instead.
To avoid crappy-admin-screen syndrome, don't build separate screens to deal with admin functions.
Instead, build these functions (i.e. edit, add, delete) into the regular application interface.
If you have to maintain two separate interfaces (i.e. one for regular folks and one for admins), both
will suffer. In effect, you wind up paying the same tax twice. You're forced to repeat yourself and that
means you increase the odds of getting sloppy. The fewer screens you have to worry about, the better
they'll turn out.
No Separate Interface
The application is everything. Anything that can be changed, added, or adjusted can be done directly
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
43. Getting Real by 37signals Page 43 of 69
through the management area of the application. This allows us to see exactly what our customers see
to help them through any problems or questions that they have. And our customers don't have to
worry about logging into a separate interface to do different tasks. One minute they might be dealing
with appointments for their clients and the next minute they might have to add a new employee. They
can't be bothered with jumping between different applications and maintaining a consistent interface
they're able to adapt to the application even quicker.
—Edward Knittel, Director of Sales and Marketing, KennelSource
Code chapter 10
Less Software
Keep your code as simple as possible
You'd think that twice as much code would make your software only twice as complex. But actually,
each time you increase the amount of code, your software grows exponentially more
complicated. Each minor addition, each change, each interdependency, and each preference has a
cascading effect. Keep adding code recklessly and, before you know it, you'll have created the
dreaded Big Ball of Mud.
The way you fight this complexity is with less software. Less software means less features, less code,
less waste.
The key is to restate any hard problem that requires a lot of software into a simple problem that
requires much less. You may not be solving exactly the same problem but that's alright. Solving 80%
of the original problem for 20% of the effort is a major win. The original problem is almost never so
bad that it's worth five times the effort to solve it.
Less software means you put away the crystal ball. Instead of trying to predict future problems, you
deal only with the problems of today. Why? Fears you have about tomorrow often never come to
fruition. Don't bog yourself down trying to solve these phantom issues.
From the beginning, we've designed our products around the concept of less software. Whenever
possible, we chop up hard problems into easy ones. We've found solutions to easy problems are not
only easier to implement and support, they're easier to understand and easier to use. It's all part of
how we differentiate ourselves from competitors; Instead of trying to build products that do more, we
build products that do less.
l Less software is easier to manage.
l Less software reduces your codebase and that means
l less maintenance busywork (and a happier staff).
l Less software lowers your cost of change so you can adapt quickly. You can change your mind
without having to change boatloads of code.
l Less software results in fewer bugs.
l Less software means less support.
Which features you choose to include or omit have a lot to do with less software too. Don't be afraid
to say no to feature requests that are hard to do. Unless they're absolutely essential, save
time/effort/confusion by leaving them out.
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
44. Getting Real by 37signals Page 44 of 69
Slow down too. Don't take action on an idea for a week and see if it still seems like a great idea after
the initial buzz wears off. The extra marinading time will often help your brain come up with an
easier solution.
Encourage programmers to make counteroffers.
You want to hear: "The way you suggested will take 12 hours. But there's a way I can do it that will
only take one hour. It won't do x but it will do y." Let the software push back. Tell programmers to
fight for what they think is the best way.
Also, search for detours around writing more software. Can you change the copy on the screen so that
it suggests an alternate route to customers that doesn't require a change in the software model? For
example, can you suggest that people upload images of a specific size instead of doing the image
manipulation on the server side?
For every feature that makes it into your app, ask yourself: Is there a way this can be added that won't
require as much software? Write just the code you need and no more. Your app will be leaner and
healthier as a result.
There is No CODE That is More Flexible Than NO Code!
The "secret" to good software design wasn't in knowing what to put into the code; it was in knowing
what to leave OUT! It was in recognizing where the hard-spots and soft-spots were, and knowing
where to leave space/room rather than trying to cram in more design.
—Brad Appleton, software engineer
(from There is No CODE that is more flexible than NO Code!)
Complexity Does Not Scale Linearly With Size
The most important ruleof software engineering is also the least known: Complexity does not scale
linearly with size...A 2000 line program requires more than twice as much development time as one
half the size.
—The Ganssle Group (from Keep It Small)
Optimize for Happiness
Choose tools that keep your team excited and motivated
A happy programmer is a productive programmer. That's why we optimize for happiness and you
should too. Don't just pick tools and practices based on industry standards or performance metrics.
Look at the intangibles: Is there passion, pride, and craftmanship here? Would you truly be happy
working in this environment eight hours a day?
This is especially important for choosing a programming language. Despite public perception to the
contrary, they are not created equal. While just about any language can create just about any
application, the right one makes the effort not merely possible or bearable, but pleasant and
invigorating. It's all about making the little details of daily work enjoyable.
Happiness has a cascading effect. Happy programmers do the right thing. They write simple, readable
code. They take clean, expressive, readable, elegant approaches. They have fun.
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
45. Getting Real by 37signals Page 45 of 69
We found programming bliss in the language Ruby and passed it on to other developers with our
framework Rails. Both share a mission statement to optimize for humans and their happiness. We
encourage you to give that combination a spin.
In summary, your team needs to work with tools they love. We've talked here in terms of
programming languages, but the concept holds true for applications, platforms, and anything else.
Choose the fuse that gets people excited. You'll generate excitement and motivation and a better
product as a result.
The kinds of engineers you want
The number one reason I wanted to build our app using Ruby on Rails is that it is so elegant,
productive, and beautifully designed. It tends to attract the kind of engineers who care about just
those sort of things...those are exactly the kinds of engineers you want on your team because they
create the kind of beautiful, elegant and productive software you need to win the market.
—Charles Jolley, Managing Director at Nisus Software (from Signal vs. Noise)
Code Speaks
Listen when your code pushes back
Listen to your code. It will offer suggestions. It will push back. It will tell you where the pitfalls
reside. It will suggest new ways to do things. It will help you stick to a model of less software.
Is a new feature requiring weeks of time and thousands of lines of code? That's your code telling you
there's probably a better way. Is there a simple way to code something in one hour instead of a
complicated way that will take ten hours? Again, that's your code guiding you. Listen.
Your code can guide you to fixes that are cheap and light. Pay attention when an easy path emerges.
Sure, the feature that's easy to make might not be exactly the same as the feature you originally had in
mind but so what? If it works well enough and gives you more time to work on something else, it's a
keeper.
Listen up
Don't worry about design, if you listen to your code a good design will appear...Listen to the technical
people. If they are complaining about the difficulty of making changes, then take such complaints
seriously and give them time to fix things.
—Martin Fowler, Chief Scientist, ThoughtWorks (from Is Design Dead?)
If Programmers Got Paid To Remove Code...
If programmers got paid to remove code from sofware instead of writing new code, software would
be a whole lot better.
—Nicholas Negroponte, Professor of Media Technology at MIT
(from And, the rest of the (AIGA Conference) story)
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
46. Getting Real by 37signals Page 46 of 69
Manage Debt
Pay off your code and design "bills"
We usually think of debt in terms of money but it comes in other forms too. You can easily build up
code and design debt.
Hack together some bad code that's functional but still a bit hairy and you're building up debt. Throw
together a design that's good enough but not really good and you've done it again.
It's ok to do this from time to time. In fact, it's often a needed technique that helps you do the whole
Get-Real-asap thing. But you still need to recognize it as debt and pay it off at some point by cleaning
up the hairy code or redesigning that so-so page.
The same way you should regularly put aside some of your income for taxes, regularly put aside some
time to pay off your code and design debt. If you don't, you'll just be paying inter est (fixing hacks)
instead of paying down the principal (and moving forward).
Open Doors
Get data out into the world via RSS, APIs, etc.
Don't try to lock-in your customers. Let them get their information when they want it and how they
want it. To do that, you've got to give up the idea of sealing in data. Instead, let it run wild. Give
people access to their information via rss feeds. Offer apis that let third-party developers build on to
your tool. When you do, you make life more convenient for customers and expand the possibilities of
what your app can do.
People used to think of rss feeds as merely a good way to keep track of blogs or news sites. Feeds
have more power than that though. They also provide a great way for customers to stay up to date on
the changing content of an app without having to log in repeatedly. With Basecamp feeds, customers
can pop the url into a newsreader and keep an eye on project messages, todo lists, and milestones
without having to constantly check in at the site.
APIs let developers build add-on products for your app that can turn out to be invaluable. For
example, Backpack supplies an api which Chipt Productions used to build a Mac os x Dashboard
widget. The widget lets people add and edit reminders, list items, and more from the desktop.
Customers have raved to us about this widget and some have even said it was the key factor in getting
them to use Backpack.
Other good examples of companies letting data run free in order to get a boomerang effect:
l The Google Maps API has spawned interesting mash ups that let people cull information from
another source (e.g. apartment listings) and plot that data on a map.
l Linkrolls offer a way for people to get their latest del.icio.us bookmarks displayed on their own
sites.
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
47. Getting Real by 37signals Page 47 of 69
l Flickr allows other businesses access to commercial apis so customers can buy photo books,
posters, dvd backups, and stamps. "The goal is to open it up completely and give you the
biggest variety of choices when it comes to doing things with your photos," says Stewart
Butterfield of Flickr.
A Widget Makes the Difference
When 37signals released Backpack a while back, my first impression was...eh.
So it was around the time that Chipt Productions released a Backpack widget for Tiger — which was
too cool not to download and try — that I gave Backpack a second look. The result? Quite a
difference.
Now whenever an idea hits, I pop up the widget, type, and submit — done. Email arrives with
something I want to check out? Pop up the widget, type, and submit — done. The widget is an
immediate brain dump readily available on each Mac I use. And because everything is web based,
there isn't any version control or syncing — just the fluid input of content without having to be
concerned about where it's going or how I'll access it later.
—Todd Dominey, founder, Dominey Design
(from Trying on Backpack)
文字 第11章
功能定义一点用都没有
不要写功能定义文档
这些蓝图文档通常和成品几乎毫无关系。理由如下:
功能定义文档是虚幻的
功能定义文档不反映真实情况。一个应用只有在被构造时、被设计时,和被使用时才是真实
的。功能定义文档只是纸上谈兵
功能定义文档是无关痛痒的
功能定义文档可以用来让人感受到参与的乐趣,措辞温和但是并不是那么有用。它们不关心
艰难的抉择,不关心成本——而这些正是建立一个成功的应用所必须考虑的。
功能定义文档只能达成虚幻的共识
看文字并不能让人们达成共识。大家可以读到同样的文字内容,但每个人的想法却可能不
同。以后将不可避免地发生这种情况:“等下,我不是那样想的。”“啊?我们可不是这么说
的。”“是的,就是这样的,我们大家都同意了——你还签过字呢。”我相信,你知道该怎么
做。
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
48. Getting Real by 37signals Page 48 of 69
功能定义文档逼迫你在拥有最少资讯时作出最重要的决定
当你刚开始构建时,你知道的是最少的。而做得越多,用得越多,你才能了解得越多。这才
是你应该做出决定的时候——即当你有足够多信息,而非信息少的时候。
功能定义导致功能泛滥
There's no pushback during spec phase. 写点东西加个标注,看上去并不需要什么代价。你可以
加上他们欣赏的功能,让那些令人头疼的人高兴。然后你按照那些写下来的文字标注设计,
而不是为人设计。最终你得到的将是一个拥有30个栏目的臃肿站点
功能定义让你无法变通、变化和重新评估
一个功能一旦得到认同,即使在开发阶段你就意识到它是个坏主意,你也不得不照做。一旦
你开始做某事,一切都在变化,而定义却不会去处理这些实际情况。
So what should you do in place of a spec? Go with a briefer alternative that moves you toward
something real. Write a one page story about what the app needs to do. Use plain language and make
it quick. If it takes more than a page to explain it, then it's too complex. This process shouldn't take
more than one day.
Then begin building the interface — the interface will be the alternative to the functional spec. Draw
some quick and simple paper sketches. Then start coding it into html. Unlike paragraphs of text that
are open to alternate interpretations, interface designs are common ground that everyone can agree on.
Confusion disappears when everyone starts using the same screens. Build an interface everyone can
start looking at, using, clicking through, and "feeling" before you start worrying about back-end code.
Get yourself in front of the customer experience as much as possible.
Forget about locked-in specs. They force you to make big, key decisions too early in the process.
Bypass the spec phase and you'll keep change cheap and stay flexible.
Useless Specs
A "spec" is close to useless. I have never seen a spec that was both big enough to be useful and
accurate.
And I have seen lots of total crap work that was based on specs. It's the single worst way to write
software, because it by definition means that the software was written to match theory, not reality.
—Linus Torvalds, creator of Linux (from: Linux: Linus On Specifications)
Fight the blockers
I found the people insisting on extensive requirements documents before starting any design were
really 'blockers' just trying to slow the process down (and usually people with nothing to contribute
on design or innovative thinking).
All our best work was done with a few concepts in our heads about improving a site, doing a quick
prototype (static), changing the design a bit and then building a live prototype with real data. After
kicking the tires on this prototype, we usually had a real project in motion and good result.
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
49. Getting Real by 37signals Page 49 of 69
—Mark Gallagher, corporate intranet developer (from Signal vs. Noise)
Don't Do Dead Documents
Eliminate unnecessary paperwork
Avoiding functional specs is a good start but don't stop there; Prevent excess paperwork everywhere.
Unless a document is actually going to morph into something real, don't produce it.
Build, don't write. If you need to explain something, try mocking it up and prototyping it rather than
writing a longwinded document. An actual interface or prototype is on its way to becoming a real
product. A piece of paper, on the other hand, is only on its way to the garbage can.
Here's an example: If a wireframe document is destined to stop and never directly become the actual
design, don't bother doing it. If the wireframe starts as a wireframe and then morphs into the actual
design, go for it.
Documents that live separately from your application are worthless. They don't get you anywhere.
Everything you do should evolve into the real thing. If a document stops before it turns real, it's dead.
No One's Going to Read It
I can't even count how many multi-page product specifications or business requirement documents
that have languished, unread, gathering dust nearby my dev team while we coded away, discussing
problems, asking questions and user testing as we went. I've even worked with developers who've
spent hours writing long, descriptive emails or coding standards documents that also went unread.
Webapps don't move forward with copious documentation. Software development is a constantly
shifting, iterative process that involves interaction, snap decisions, and impossible-to-predict issues
that crop up along the way. None of this can or should be captured on paper.
Don't waste your time typing up that long visionary tome; no one's going to read it. Take consolation
in the fact that if you give your product enough room to grow itself, in the end it won't resemble
anything you wrote about anyway.
—Gina Trapani, web developer and editor of Lifehacker, the productivity and software guide
Tell Me a Quick Story
Write stories, not details
If you do find yourself requiring words to explain a new feature or concept, write a brief story about
it. Don't get into the technical or design details, just tell a quick story. Do it in a human way, like you
would in normal conversation.
It doesn't need to be an essay. Just give the flow of what happens. And if you can include the brief
story in context with screens you are developing, all the better.
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
50. Getting Real by 37signals Page 50 of 69
Stick to the experience instead of getting hung up on the details. Think strategy, not tactics. The
tactics will fall into place once you begin building that part of your app. Right now you just want to
get a story going that will initiate conversation and get you on the right track.
Use Real Words
Insert actual text instead of lorem ipsum
Lorem ipsum dolor is a trusted friend of designers. Dummy text helps people get what the design will
look like once it's fleshed out. But dummy text can be dangerous too.
Lorem ipsum changes the way copy is viewed. It reduces text-based content to a visual design
element — a shape of text — instead of what it should be: valuable information someone is going to
have to enter and/or read. Dummy text means you won't see the inevitable variations that show up
once real information is entered. It means you won't know what it's like to fill out forms on your site.
Dummy text is a veil between you and reality.
You need real copy to know how long certain fields should be. You need real copy to see how tables
will expand or contract. You need real copy to know what your app truly looks like.
As soon as you can, use real and relevant words. If your site or application requires data input, enter
the real deal. And actually type in the text — don't just paste it in from another source. If it's a name,
type a real name. If it's a city, type a real city. If it's a password, and it's repeated twice, type it twice.
Sure, it's easier to just run down the forms and fill the fields with garbage ("asdsadklja"
"123usadfjasld" "snaxn2q9e7") in order to plow through them quickly. But that's not real. That's not
what your customers are going to do. Is it really smart to take a shortcut when customers are forced to
take the long road? When you just enter fake copy in rapid-fire fashion, you don't know what it really
feels like to fill out that form.
Do as your customers do and you'll understand them better. When you understand them better, and
feel what they feel, you'll build a better interface.
Lorem Ipsum Garbage
By not having the imagination to imagine what the content "might" be, a design consideration is lost.
Meaning becomes obfuscated because "it's just text", understandability gets compromised because
nobody realized that this text stuff was actually meant to be read. Opportunities get lost because the
lorem ipsum garbage that you used instead of real content didn't suggest opportunities. The text then
gets made really small, because, it's not meant to be used, we might as well create loads of that lovely
white space.
—Tom Smith, designer and developer (from I hate Lorem Ipsum and Lorem Ipsum Users)
Personify Your Product
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
51. Getting Real by 37signals Page 51 of 69
What is your product's personality type?
Think of your product as a person. What type of person do you want it to be? Polite? Stern?
Forgiving? Strict? Funny? Deadpan? Serious? Loose? Do you want to come off as paranoid or
trusting? As a know-it-all? Or modest and likable?
Once you decide, always keep those personality traits in mind as the product is built. Use them to
guide the copywriting, the interface, and the feature set. Whenever you make a change, ask yourself if
that change fits your app's personality.
Your product has a voice — and it's talking to your customers 24 hours a day.
定价和注册 第12章
免费样品
免费赠送
外面的世界很嘈杂。为了让人们在喧嚣中注意到你,免费赠送一些东西吧。
聪明的公司都知道免费发赠品是吸引顾客的一个好方法。看看苹果公司,他们提供免费的
iTunes 软件,是为了建立客户对iPod 和 iTunes 音乐存储的需求。在网下的世界里,零售商们
也这么做。星巴克公司认为,每送出5个饮料赠品,就刺激了一种新商品的购买。不要太小
气。
对于我们来说,Writeboard 和 Ta-da list 是完全免费的应用,用来吸引人们逐渐使用我们的其
他产品。同时,对于我们所有的应用,我们总是提供一些免费的版本。
我们希望人们来体验我们已经完成的产品、界面和有用的东西。一旦他们着迷了,就更有可
能升级到一个付费产品(付费产品提供更多的项目或页面,让人们获得更多的功能,比如:
文件上传和ssl数据加密)。
Bite-size chunks
Make bite-size chunks: Devise specialized, smaller offerings to get customers to bite. Resolve to sub-
divide at least one product or service into bite-size chunks that are inexpensive, easy or fun.
—Ben McConnell and Jackie Huba, authors of Church of the Customer Blog
(from What is customer evangelism?)
Give Away Your Hit Single
Consider giving one of your songs (per-album) as a free promotional download to the world — to be
like the movie trailer — like the hit single sent to radio — the song that makes people want to go buy
your music.
Don't worry about piracy for this song. Let people play it, copy it, share it, give it away. Have the
confidence that if the world heard it, they will pay for more.
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
52. Getting Real by 37signals Page 52 of 69
—Derek Sivers, president and programmer, CD Baby and HostBaby (from Free Promo Track)
来去自如
让注册和注销的过程毫不费力
在你的程序里注册和注销应该尽可能简单。
如果我是一个客户,想用你的产品,这应该是一个毫不费力、轻松容易的事。在销售站点的
每一页都放上一个大大的、清楚的注册按钮。告诉大家这是多么容易的事:“从注册到登录仅
仅只需要1分钟!”
应该总是有个自由选项,让客户不用输入信用卡信息就能进行产品演示。有些公司需要用户
确认、预约或者特殊密码才能体验他们的产品,根本就没有必要这么做。任何人随时都可以
自由地体验我们的产品而无须提供任何信息。
注册表单要尽可能短。不要问一些并不需要的问题,不要抛出一个长得吓人的表来为难大
家。
这些原则同样适用于注销过程。永远不要指望把人们“困在”你的产品里。当有人决定注销他们
的Basecamp 帐户时,尽管我们感到遗憾,但是我们不会让注销过程繁琐或是含混不清。个人
帐户页就有一个“注销我的帐户”的链接,并不需要发邮件、填写特殊表格或者是回答问题。
同时,如果他们决定离开,要确保能导出他们的数据。我们确保客户随时可以轻易地导出xml
格式的所有信息和评论。那是他们自己的数据,他们理应能按自己的意愿来处理。
这一点很重要。因为给予人们掌握他们自己信息的能力可以塑造对我们的信任。这给了他们
一座通向自己的数据岛的桥梁。如果他们找到了一个能提供更优服务的地方,让他们自由离
开。这么做是对的,而且可以建立良好的声誉。
轻松离开
不要勉强留住用户。如果他们要离开,就让他们带上在你网站创造出来的全部内容,然后自
由离去。必须敞开粮仓,集中精力留住客户,所以他们愿意回来,而不是因为被门卡住了才
不得不回来。
—Charlie O'Donnell, 分析师, Union Square Ventures
(摘自 10 Steps to a Hugely Successful Web 2.0 Company)
Silly Rabbit, Tricks are for Kids
规避长期合同和注册费用等
谁都不会喜欢长期条款,提前终止费或是一次性的安装费,所以要避免这么做。我们的产品
付费方式为月付,不用签订条款,你可以随时取消,而且从不会有什么安装费。
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
53. Getting Real by 37signals Page 53 of 69
别企图去找什么“高明”的方式以赚得更多的钱。Earn it.
塑料子弹
用提前通知和保留条款来缓和坏消息给用户带来的打击
要发布类似提价这样的坏消息啦?应该多次提前通知,尽量把坏消息带给用户的痛苦降到最
低。同时,应考虑在保留条款中规定,现有客户在一定时间内仍可以原价使用产品。用户就
是你的奶油和面包,你要让他们感受到被重视,而不是被欺骗。
Promotion chapter 13
Hollywood Launch
Go from teaser to preview to launch
If an app launches in a forest and there's no one there to use it, does it make a noise? The point here is
that if you launch your app without any pre-hype, people aren't going to know about it.
To build up buzz and anticipation, go with a Hollywood-style launch: 1) Teaser, 2) Preview, and 3)
Launch.
Teaser
A few months ahead of time, start dropping hints. Let people know what you're working on. Post a
logo. Post to your blog about the development. Stay vague but plant the seed. Also, get a site up
where you can collect emails from folks who are interested.
At this stage, you should also start seducing mavens and insiders. These are the folks on the cutting
edge. They're the tastemakers. Appeal to their vanity and status as ahead-of-the-curvers. Tell them
they're getting an exclusive sneak preview. If a site like Boing Boing, Slashdot, or Digg links up your
app, you'll get loads of traffic and followers. Plus, your page rank at Google will go up too.
Preview
A few weeks ahead of launch, start previewing features. Give people behind-the-scenes access.
Describe the theme of the product. For Basecamp, we posted screenshots and highlighted reminders,
milestones, and other features.
Also, tell people about the ideas and principles behind the app. For Backpack, we posted our
manifesto before launch. This got people thinking and talking about the app.
You can also offer some special "golden tickets" to a few people so they can start using the app early.
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
54. Getting Real by 37signals Page 54 of 69
You'll get the benefit of having some beta testers while they'll feel that special glow that people get
from being early adopters.
And again, encourage people to sign up so you've got a foundation of emails to blitz once you launch.
By the time we launch our apps, we have thousands of emails to ping which is a big help in gaining
traction.
Launch
It's release time. Now people can actually go to the "theater" and see your app. Get emails out to those
who signed up. Launch your full marketing site. Spread the gospel as much as possible. Get blogs to
link to you. Post about your progress: How many people have signed up? What updates/tweaks have
you made? Show momentum and keep at it.
The Road to Launch Day
As soon as we knew Blinksale was really going to happen, we began floating some teasers to our
mailing list. These are people who have asked to receive information from us about our projects.
These are our fans, if you will. If you already have permission to talk to a group of people, they are
the best place to start.
The second thing we did is get permission to talk to more people about our product. About six weeks
before the Blinksale launch we put up a teaser page at our website that proclaimed the coming of an
easier way to send invoices online. The page gave just enough information to build excitement and
suspense, without giving away sensitive details that needed to remain confidential. Prominently
displayed on the page was a newsletter subscription form, requiring nothing but an email (keep it
simple) so that those interested could be notified when the product launched.
We spread the word to a dozen or so friends and colleagues that we felt would be interested in the
product as well, and they began to spread the word about the teaser page through their blogs and
websites. Within a few days, we had thousands on our mailing list. These were extremely important
people — people who are asking to learn more about our product and who wanted to know when we
launched.
Finally, about two weeks before we launched, we invited a handful of friends, colleagues, and
industry mavens to help us beta test Blinksale. This allowed us to get the product in front of people
we felt could benefit from its use and who could help us spread the word about the product when we
launched. It's important to note that we didn't force anyone to use or write about the product. We
simply wanted it to be seen and wanted people to talk about it when it launched. In the end, if you're
going to build buzz this way, you better be sure your product can deliver. Otherwise, it's like clouds
without rain.
When launch day arrived, we sent an email to our mailing list, notified our blogging friends, and
encouraged our beta testers to speak their minds. And to our great delight, the effort paid big
dividends. Shortly after launch tens of thousands had visited our site and thousands of those had
signed up to use the product.
—Josh Williams, founder, Blinksale
A Powerful Promo Site
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
55. Getting Real by 37signals Page 55 of 69
Go from teaser to preview to launch
The best promotional tool is a great product. Word will get out if you've got an app that people find
really useful.
Still, you need an ace promotional site too. What should you include on this site? Some ideas:
l Overview: Explain your app and its benefits.
l Tour: Guide people through various features.
l Screen captures and videos: Show people what the app actually looks like and how to use it.
l Manifesto: Explain the philosophy and ideas behind it.
l Case Studies: Provide real life examples that show what's possible.
l Buzz: Testimonial quotes from customers, reviews, press, etc.
l Forum: Offer a place for members of the community to help one another.
l Pricing & Sign-up: Get people into your app as quickly as possible.
l Weblog: Blogs keep your site fresh with news, tips, etc.
Ride the Blog Wave
Blogging can be more effective than advertising (and it's a hell
of a lot cheaper)
Advertising is expensive. And evaluating the effectiveness of various types of advertising can wind
up being even more expensive than the advertising itself. When you don't have the time or money to
go the traditional advertising route, consider the promote-via-blog route instead.
Start off by creating a blog that not only touts your product but offers helpful advice, tips, tricks,
links, etc. Our Signal vs. Noise blog gets thousands of unique readers a week thanks to the helpful,
informative, and interesting bits and anecdotes we post on a daily basis.
So when it came time to promote our first product, Basecamp, we started there. We got the word out
on SvN and it started to spread. Folks like Jason Kottke, the BoingBoingers, Jim Coudal, and a
variety of other people with popular blogs helped raise the visibility and things took off.
Ta-da Lists is another great example of the power of blog-based marketing. We launched Ta-da with
a single post on Signal vs. Noise, and a few weeks later it had been mentioned on over 200 blogs and
over 12,000 people had signed up for their own Ta-da account. Word about Backpack spread even
faster. Within 24 hours of launch, more than than 10,000 signed up.
Solicit Early
Get advance buzz and signups going ASAP
We've already touched on it but it bears repeating: Get some sort of site up and start collecting emails
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
56. Getting Real by 37signals Page 56 of 69
as soon as possible. Pick your domain name and put up a logo and maybe a sentence or two that
describes, or at least hints at, what your app will do. Then let people give you their email address.
Now you're on your way to having a foundation of folks ready and waiting to be notified of your
launch.
Promote Through Education
Share your knowledge with the world
When a teacher appears as a contestant on Jeopardy, Alex Trebek often comments that it's a "noble
profession." He's right. There's definitely something wonderful and rewarding about sharing your
knowledge with others. And when the subject you're teaching is your app, it serves a dual
purpose: You can give something back to the community that supports you and score some nice
promotional exposure at the same time.
As a promotional technique, education is a soft way to get your name — and your product's name —
in front of more people. And instead of a hard sell "buy this product" approach, you're getting
attention by providing a valuable service. That creates positive buzz that traditional marketing tactics
can't match. People who you educate will become your evangelists.
Education can come in many forms. Post tips and tricks at your site that people will want to share
with others. Speak at con- ferences and stay afterwards to meet and greet with attendees. Conduct
workshops so curious fans can learn more and talk to you in the flesh. Give interviews to
publications. Write articles that share helpful information. And write books. ;)
An example from our own history is the Yellow Fade Technique, a method we invented to subtly
spotlight a recently changed area on a page. We wrote a post about it on Signal vs. Noise. That post
made the rounds and got thousands and thousands of page views (to this day it's doing huge traffic).
The post worked on both an educational and a promotional level. A lesson was learned and a lot of
people who never would have known about our products were exposed to them. Another example:
During our development of Ruby on Rails, we decided to make the infrastructure open source. It
turned out to be a wise move. We gave something back to the com- munity, built up goodwill,
garnered recognition for our team, received useful feedback, and began receiving patches and con-
tributions from programmers all over the world.
Teaching is all about good karma. You're paying it forward. You're helping others. You get some
healthy promotion. And you can even bask in a bit of nobility. So what do you know that the world
wants to hear about?
Pay It Forward
The articles and tips section of our blog is one of the most popular sections of our site. Passing on our
knowledge about email marketing ensures our customers get the most out of our software. If they can
provide a better service to their customers, then they're likely to get more business, which in turn
creates more business for us — everyone wins.
Freely sharing our knowledge has also helped position us as experts in the industry and strengthened
our relationship with existing customers. They know we care about the quality of their work. Finally,
we get loads of targeted inbound traffic from search engines and bloggers who share our articles with
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
57. Getting Real by 37signals Page 57 of 69
their readers. These are people that would never have heard of our software had we not written that
article.
—David Greiner, founder, Campaign Monitor
Feature Food
They're hungry for it so serve it up
New or interesting features are a great way to generate buzz for your application. Special interest
groups love to chew up "feature food" and spit it back out to the community. Alright, that's kind of an
unpleasant analogy but you get the point.
For example, by using Ruby on Rails, a new development platform, we generated a ton of attention
for Basecamp within the developer community.
The Ajax elements we used in our applications got lots of buzz and even led to Business 2.0 magazine
naming 37signals a "key player in Ajax" alongside big names like Google, Yahoo, Microsoft, and
Amazon.
Another example: Bloggers took notice of Basecamp's RSS support since it was one of the first
business examples of RSS.
iCal integration, a seemingly minor feature, got us press on a ton of Mac-related sites which probably
never would have mentioned the app otherwise.
Small teams have a leg up on integrating new ideas into software. While bigger companies have to
deal with bureaucratic bottlenecks, you can rapidly implement new ideas and get attention for using
them.
Riding the hype coattails of the technology du jour is an effective and cheap way to build your buzz.
That said, don't go adding the latest obscure technology just to gain some notice. But if you are using
something new or noteworthy, go ahead and spotlight it for special interest groups.
Track Your Logs
Study your logs to track buzz
You need to know who's talking about you. Check your logs and find out where the buzz is coming
from. Who's linking to you? Who's bitching about you? Which blogs listed at Technorati, Blogdex,
Feedster, Del.icio.us, and Daypop are hot on your trail?
Find out and then make your presence felt. Leave comments at those blogs. Thank people for posting
links. Ask them if they want to be included on your special advance list so they'll be among the first
to know about future releases, updates, etc. Collect positive praise and create a "buzz" page at your
site. Testimonials are a great way to promote your app since third-party praise is more trustworthy to
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
58. Getting Real by 37signals Page 58 of 69
most people.
If the comments are negative, still pay attention. Show you're listening. Respond to critiques
thoughtfully. Something like: "We appreciate the feedback but we did it this way because..." Or "You
raise a good point and we're working on it." You'll soften up your critics and put a human face on
your product. It's amazing how much a thoughtful comment on a blog can diffuse naysayers and even
turn complainers into evangelists.
Inline Upsell
Promote upgrade opportunities inside the app
Everyone knows to pitch at the marketing site. But the sell shouldn't stop there. If you have a tiered
pricing plan (or a free version of your app), don't forget to call out upgrade opportuni ties from within
the product.
Tell folks that you'll remove barriers if they upgrade. For example, in Basecamp you can't upload files
if you have a free account. When someone tries to upload a file, we don't just turn them away. We
explain why file uploading isn't available and encourage them to upgrade to the paid version and
explain why that's a good idea. The same approach is used to encourage ex isting customers to
upgrade to a higher level account when they max out their current plan.
Existing customers are your best bet for sales. Don't be shy about trying to get repeat business from
people who already know and use your product.
Name Hook
Give your app a name that's easy to remember
A big mistake a lot of people make is thinking their app's name needs to be ultradescriptive. Don't
worry about picking a name that vividly describes your tool's purpose; That usually just leads to a
generic, forgettable name. Basecamp is a better name than something like Project Management
Center or ProjectExpress. Writeboard is better than CollaborEdit.
Also, don't focus group or committee-ize the naming process too much. Pick a name that's short,
catchy, and memorable and then run with it.
And don't sweat it if you can't get the exact domain name you want. You can always be creative and
get close with a couple of extra letters (e.g. backpackit.com or campfirenow.com).
Easy Does It
Doesn't the tech industry realize that thinking up catchy, self-explanatory names would ultimately
benefit it in the same way? They'd sell more of whatever it was, because they wouldn't scare off
consumers who think they're being kept out of the high-tech club by a bunch of arrogant engineers.
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
59. Getting Real by 37signals Page 59 of 69
The technology would catch on quicker, too. The new product would be easier to describe, easier to
use and easier to buy — which, for the companies, means easier to sell.
—David Pogue, columnist, New York Times (from What's in a Product Name?)
Support chapter 14
Feel The Pain
Tear down the walls between support and development
In the restaurant business, there's a world of difference between those working in the kitchen and
those out front who deal with customers. It's important for both sides to understand and empathize
with the other. That's why cooking schools and restaurants will often have chefs work out front as
waiters so the kitchen staff can interact with customers and see what it's actually like on the front
lines.
A lot of software developers have a similar split. Designers and programmers work in the "kitchen"
while support handles the customers. Unfortunately, that means the software chefs never get to hear
what customers are actually saying. That's problematic because listening to customers is the best way
to get in tune with your product's strengths and weaknesses.
The solution? Avoid building walls between your customers and the development/design team. Don't
outsource customer support to a call center or third party. Do it yourself. You, and your whole
team, should know what your customers are saying. When your customers are annoyed, you need to
know about it. You need to hear their complaints. You need to get annoyed too.
At 37signals, all of our support emails are answered personally by the people who actually build the
product. Why? First off, it provides better support for customers. They're getting a response straight
from the brain of someone who built the app. Also, it keeps us in touch with the people who use our
products and the problems they're encountering. When they're frustrated, we're frustrated. We can
say, "I feel your pain" and actually mean it.
It can be tempting to rely on statistical analysis to reveal your trouble spots. But stats aren't the same
as voices. You need to eliminate as many buffers as possible between you and the real voices of your
customers.
The front lines are where the action is. Get up there. Have your chefs work as waiters. Read customer
emails, hear their frustrations, listen to their suggestions and learn from them.
Cut Out the Middle Man
Almost all Campaign Monitor development, support and marketing are performed by two people.
Even if we're forced to expand the team, we'll never separate support from development. By
personally responding to every request, we force ourselves to sit in our customers shoes and see
things from their perspective.
It's important to understand why your customer needs something, not just what it is they need. That
context often has a direct impact on how we design something. Cut out the middle man. It's much
easier to give your customers what they want when your ears are that close to the ground.
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
60. Getting Real by 37signals Page 60 of 69
I've discussed this setup with loads of people and the first response is often "shouldn't you just hire a
junior to handle your support?" Put yourself in your customer's shoes. If you want your steak cooked
just how you like it, would you rather talk to the bus boy or the chef that's actually cooking it?
—David Greiner, founder, Campaign Monitor
Zero Training
Use inline help and FAQs so your product doesn't require a
manual or training
You don't need a manual to use Yahoo or Google or Amazon. So why can't you build a product that
doesn't require a manual? Strive to build a tool that requires zero training.
How do you do this? Well, as we've mentioned before, you start by keeping everything simple. The
less complex your app is, the less you'll need to help people out of the weeds. After that, a great way
to preempt support is by using inline help and faqs at potential points of confusion.
For example, we offer preemptive support on the screen that allows people to upload their logo to
Basecamp. Some people experienced a problem where they would keep seeing an old logo due to a
browser-caching issue. So next to the "submit your logo" area, we added a link to an faq that
instructed customers to force-reload their browsers in order to see the new logo. Before we did this,
we would get 5 emails a day about this problem. Now we get none.
Answer Quick
Quick turnaround time on support queries should be a top
priority
Customers light up when you answer their questions quickly. They're so used to canned responses
that show up days later (if at all) that you can really differentiate yourself from competitors by
offering a thoughtful response right away. During business hours, we answer 90% of all email support
requests within 90 minutes — and often within a half-hour. And people love it.
Even if you don't have a perfect answer, say something. You can buy goodwill with a response that is
delivered quickly in an open, honest way. If someone is complaining about an issue that can't be fixed
immediately, tell them something like, "We hear what you're saying and we'll be working on it in the
future." It's a great way to diffuse a potentially negative situation.
Customers appreciate directness and will often shift from angry to polite if you respond quickly and
in a straight-shooting manner.
An Army of Many
How can a small team of just three developers create an innovative product and successfully compete
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
61. Getting Real by 37signals Page 61 of 69
with the big guys? The answer is to enlist an army of many.
Remember from your first day that your customers are your most important asset and that they are
absolutely vital to your long-term success so treat your community of users like royalty. The way to
compete with the big guys is by starting small and paying attention to every one of your customers.
It is your customers that will be the first to alert you of bugs, that will be the first to alert you of needs
that have not been met and it is your first customers that will carry the flag and spread your message.
This does not mean that your product has to be perfect when you launch. Quite to the contrary,
release early and often. However, when your customers encounter bugs, make sure to send a reply to
them quickly thanking them for their input.
Customers don't expect your product to be perfect and they don't expect that all of their features will
be implemented. However, customers do expect that you are listening and acknowledging that you
care, so show that you care. This is one area where most large companies show a huge deficit so
develop a sense of community early.
At Blinklist, every single customer email is answered, usually within the first hour (unless we happen
to be asleep). We also have an online forum and we make sure that every single post and comment
gets acknowledged.
Equally important, all of our developers receive our customer feedback and they are active
participants in the online discussion forums. This way, we are slowly but surely building an active
and loyal BlinkList community.
—Michael Reining, co-founder, MindValley & Blinklist
Tough Love
Be willing to say no to your customers
When it comes to feature requests, the customer is not always right. If we added every single thing
our customers requested, no one would want our products.
If we obeyed every whim of our customers, Basecamp would have: comprehensive time tracking,
comprehensive billing, comprehensive meeting scheduling, comprehensive calendaring,
comprehensive dependency task systems, comprehensive instant message chatting, comprehensive
wiki functionality, and comprehensive whatever-else-you-can-imagine.
Yet, the #1 request we get on customer surveys is to keep Basecamp simple.
Here's another example: Despite some complaints, we decided not to support ie5 with our products.
That was 7% of the market we were writing off. But we decided it was more important to worry about
the other 93%. Fixing bugs and testing for ie5 just isn't worth the time. We'd rather make a better
product for everyone else.
As a software development company, you have to act as a filter. Not everything everyone suggests is
the right answer. We consider all requests but the customer is not always right. There will be times
when you just have to piss some people off. C'est la vie.
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
62. Getting Real by 37signals Page 62 of 69
Related to this, it's critical that you as a development company love your product. And you won't love
your product if it's filled with a bunch of stuff you don't agree with. That's yet another justification for
vetoing customer requests that you don't believe are necessary.
In Fine Forum
Use forums or chat to let customers help each other
Forums and web-based group chat are a great way to let customers ask questions and help one another
out. By eliminating the middleman — that's you — you provide an open stream of communication
and save yourself time in the process.
At our product forums, customers post tips and tricks, feature requests, stories, and more. We pop in
from time to time to offer some assistance but the forums are mainly a place for the community to
help each other and share their experiences with the product.
You'll be surprised how much people want to help one another.
Publicize Your Screwups
Get bad news out there and out of the way
If something goes wrong, tell people. Even if they never saw it in the first place.
For example, Basecamp was down once for a few hours in the middle of the night. 99% of our
customers never knew, but we still posted an "unexpected downtime" notice to our Everything
Basecamp blog. We thought our customers deserved to know.
Here's a sample of what we post when something goes wrong: "We apologize for the downtime this
morning — we had some database issues which caused major slowdowns and downtimes for some
people. We've fixed the problem and are taking steps to make sure this doesn't happen again...Thanks
for your patience and, once again, we're sorry for the downtime."
Be as open, honest, and transparent as possible. Don't keep secrets or hide behind spin. An informed
customer is your best customer. Plus, you'll realize that most of your screwups aren't even that bad in
the minds of your customers. Customers are usually happy to give you a little bit of breathing room as
long as they know you're being honest with them.
A side note about delivering news, bad and good: When bad news comes, get it all out in the open at
once. Good news, on the other hand, should be trickled out slowly. If you can prolong the good vibes,
do it.
Be Swift, Direct, and Honest
It may sound strange, but the best-case scenario is when the company itself reports the bad news. This
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
63. Getting Real by 37signals Page 63 of 69
is proactive and prevents your company from being put in a weakened, defensive position.
—Greg Sherwin, Vice President of Application Technology, CNET, and Emily Avila, Principal,
Calypso Communications (from A Primer for Crisis PR)
Post-Launch chapter 15
One Month Tuneup
Issue a major update 30 days after launch
A quick update shows momentum. It shows you're listening. It shows you've got more tricks up your
sleeve. It gives you a second wave of buzz. It reaffirms initial good feelings. It gives you something
to talk about and others to blog about.
Knowing a quick upgrade is coming also lets you put the focus on the most crucial components
before launch. Instead of trying to squeeze in a few more things, you can start by perfecting just the
core feature set. Then you can "air out" the product in the real world. Once it's out there you can start
getting customer feedback and you'll know which areas require attention next.
This baby-step approach worked well for Backpack. We launched the base product first and then, a
few weeks later, added features like Backpack Mobile for handhelds and tagging since those things
are what our customers told us they wanted most.
Keep the Posts Coming
Show your product is alive by keeping an ongoing product
development blog post-launch
Don't stop blogging once you launch. Show your product is a living creature by keeping a dedicated
blog that you update frequently (at least once a week, more often if you can).
Things to include:
l Faq
l How-tos
l Tips & tricks
l New features, updates, & fixes
l Buzz/press
A blog not only shows your app is alive, it makes your company seem more human. Again, don't be
afraid to keep the tone friendly and personal. Small teams sometimes feel like they need to sound big
and ultra-professional all the time. It's almost like a business version of the Napoleon Complex. Don't
sweat sounding small. Revel in the fact that you can talk to customers like a friend.
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
64. Getting Real by 37signals Page 64 of 69
It's Alive
A frequently-updated product blog is the best indicator that a webapp is in active development, that
it's loved and that there's a light on at home. An abandoned product blog is a sign of an abandoned
product, and says the people in charge are asleep at the wheel.
Keep the conversation going with your users on your product blog, and be transparent and generous
with the information you share. Let your company's philosophies shine through. Openly link and
discuss competitors. Hint at upcoming features and keep comments open for feedback.
A living product is one that's talking and listening to its users. A frequently-updated product blog
promotes transparency, a sense of community and loyalty to your brand. Extra, free publicity is a
bonus.
As editor at Lifehacker, I scan the product blogs of webapps I love continuously — like Google,
Flickr, Yahoo, del.icio.us, and 37signals product blogs. I'm much more likely to mention them than
webapps that send out one-sided press releases out of the blue and don't maintain an open
conversation with their users and fans.
—Gina Trapani, web developer and editor of Lifehacker, the productivity and software guide
Better, Not Beta
Don't use "beta" as a scapegoat
These days it feels like everything is in beta stage forever. That's a cop out. An interminable beta
stage tells customers you're not really committed to rolling out a finished product. It says, "Use this,
but if it's not perfect, it's not our fault."
Beta passes the buck to your customers. If you're not confident enough about your release then how
can you expect the public to be? Private betas are fine, public betas are bullshit. If it's not good
enough for public consumption don't give it to the public to consume.
Don't wait for your product to reach perfection. It's not gonna happen. Take responsibility for what
you're releasing. Put it out and call it a release. Otherwise, you're just making excuses.
Beta is Meaningless
Blame Google, et al, for causing problems like this. For now, users have been trained by the
aggregate of developers to think "beta" doesn't really mean anything.
—Mary Hodder, information architect and interaction designer (from The Definition of Beta)
All the Time
Is it just me, or are we all in beta, all the time?
—Jim Coudal, founder, Coudal Partners
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
65. Getting Real by 37signals Page 65 of 69
All Bugs Are Not Created Equal
Prioritize your bugs (and even ignore some of them)
Just because you discover a bug in your product, doesn't mean it's time to panic. All software has
bugs — it's just a fact of life.
You don't have to fix each bug instantly. Most bugs are annoying, not destroying. Annoyances can be
tabled for a bit. Bugs that result in "it doesn't look right" errors or other misdemeanor miscues can
safely be set aside for a while. If a bug destroys your database, though, you obviously need to fix it
immediately.
Prioritize your bugs. How many people are affected? How bad is the problem? Does this bug deserve
immediate attention or can it wait? What can you do right now that will have the greatest impact for
the greatest number of people? Often times adding a new feature may even be more important to your
app than fixing an existing bug.
Also, don't create a culture of fear surrounding bugs. Bugs happen. Don't constantly seek someone to
blame. The last thing you want is an environment where bugs are shoved under the rug instead of
openly discussed.
And remember what we said earlier about the importance of honesty. If customers complain about a
bug, be straight up with them. Tell them you've noted the issue and are dealing with it. If it won't be
addressed right away, tell why and explain that you're focusing on areas of the product that affect a
greater number of people. Honesty is the best policy.
Ride Out the Storm
Wait until knee-jerk reactions to changes die down before
taking action
When you rock the boat, there will be waves. After you introduce a new feature, change a policy, or
remove something, knee-jerk reactions, often negative, will pour in.
Resist the urge to panic or rapidly change things in response. Passions flare in the beginning. But if
you ride out this initial 24-48 hour period, things will usually settle down. Most people respond
before they've really dug in and used whatever you've added (or gotten along with what you've
removed). So sit back, take it all in, and don't make a move until some time has passed. Then you'll be
able to offer a more reasoned response.
Also, remember that negative reactions are almost always louder and more passionate than positive
ones. In fact, you may only hear negative voices even when the majority of your base is happy about
a change. Make sure you don't foolishly backpedal on a necessary, but controversial, decision.
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
66. Getting Real by 37signals Page 66 of 69
Keep Up With the Joneses
Subscribe to news feeds about your competitors
Subscribe to news feeds about both your product and your competitors (it's always wise to know the
ways of one's enemy). Use services like PubSub, Technorati, Feedster, and others to stay up to date
(for keywords, use company names and product names). With rss, this constantly changing info will
be delivered right to you so you're always up to speed.
Beware the Bloat Monster
More mature doesn't have to mean more complicated
As things progress, don't be afraid to resist bloat. The temptation will be to scale up. But it doesn't
have to be that way. Just because something gets older and more mature, doesn't mean it needs to get
more complicated.
You don't have to become an outer space pen that writes upside down. Sometimes it's ok to just be a
pencil. You don't need to be a swiss-army knife. You can just be a screwdriver. You don't need to
build a diving watch that's safe at 5,000 meters if your customers are land-lovers who just want to
know what the time is.
Don't inflate just for the sake of inflating. That's how apps get bloated.
New doesn't always mean improved. Sometimes there's a point where you should just let a product
be.
This is one of the key benefits to building web-based software instead of traditional desktop based
software. Desktop software makers such as Adobe, Intuit, and Microsoft need to sell you new
versions every year. And since they can't just sell you the same version, they have to justify the
expense by adding new features. That's where the bloat begins.
With web-based software based on the subscription model, people pay a monthly fee to use the
service. You don't need to keep upselling them by adding more and more and more, you just need to
provide an ongoing valuable service.
跟著潮流走
對於新的方向保持開放的態度
網路應用程式的美麗之處在於它的流體性。你沒有必要把它包裝在一個盒子裡,寄送出去,
然後枯等幾年後的下一個版本;你可以一邊進行一邊調整。寶持開放的態度,尤其是您原始
的點子可能不是最好的點子這事實。
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
67. Getting Real by 37signals Page 67 of 69
看看 Flickr。一開始它是個叫做 The Game Neverending(無結尾遊戲)的線上遊戲,但它的
創始人很快的發現遊戲內分享照片的功能比起遊戲本身,反而是個比較可能的產品(遊戲最
後是擱在架上塵封了)。要願意承認錯誤並且修改方向。
當個衝浪者。仔細看海。想出大浪什麼時候來並且依照它來調整。
結論 chapter 16
結論
達成了!
您達成了!希望您已經躍躍欲試,等不及在您的軟體上開始 Getting Real。世上真的沒有一個
以最少資源寫優秀軟體的更好時機。找要有對的點子、熱情、時間和技能,只有天邊才是你
的極限。
一些收尾的想法:
執行力
每個人都能讀書,每個人都能想到好點子,每個人都可以是網頁設計師,每個人都會寫網
誌,每個人都能雇用程式設計師寫程式。
您和其他人的差別將會在於您如何執行。成功僅在於優秀的執行力。
以軟體來說,那代表很多事情要做對。您不能只有好的寫作能力卻無法實現文章中的承諾;
乾淨的介面設計仍然不能挽救雜亂無章的程式碼;一個優秀的軟體要是沒有好的宣傳,沒有
人知道,仍然是不值分文的。如果要得陣達分,你必須綜合前述的所有元素。
重點是平衡。如果你向某一方向傾斜,你正走向失敗。不斷的試著找出你並且專注於您最弱
的一環,直到他們達到標準。
人
寫一個成功的網路應用程式最重要——也值得我們再次強調——的原料:有關的人。如果你
沒有正確的人來執行,印度教箴言、地震中心設計、較少的軟體,和其他精采的概念將沒辦
法發揮。
你需要對他們工作有熱忱的人。這些人在乎他們的工藝——他們真的認為這是種工藝。這些
人對他們的作品感到驕傲,無論財務上的酬勞有多少。這些人會在細節上揮汗努力,即使
95% 其他的人不知道差別在哪裡。這些人想要建立優秀的軟體但不願以次等貨和解。這些人
需要其他人。 ok, not really that last one but we couldn't resist throwing a little Streisand into the
mix. 總而言之,當你找到上面所述的這些人,留住他們。再怎麼說,產品的成敗——也是公
司的成敗——是操之在小組的成員。
不只是軟體
http://gettingreal.37signals.com/GR_chn.php 2009-8-23
68. Getting Real by 37signals Page 68 of 69
在這裡提醒您,Getting Real 的概念不只是適用於建立網路應用程式。當您開始了解裡面蘊含
的點子,到處都可以發現他們的蹤跡。舉些例子:
l 特別作戰部隊,例如綠色貝雷帽或海豹小組,使用小隊以及快速部署來達到其他單位太
大或太慢而沒辦法完成的工作。
l The White Stripes embrace restraints by sticking to a simple formula: two people, streamlined
songs, childlike drumming, keeping studio time to a minimum, etc.
l 蘋果電腦的 iPod 選擇不提供例如內建收音機或是錄音機的附加功能,反而在競爭者中
脫穎而出
l Hurry up offenses in football pick up big chunks of yards by eliminating the "bureaucracy" of
huddles and play-calling.
l Rachael Ray 和她成功的食譜與電視節目建立於 30 分鐘就可以準備好的餐飲
l 海明威和卡佛用簡單、明瞭的語言,但仍能在他們的文學著作中達到最大的影響力。
l 莎士比亞陶醉於十四行詩(商籟詩)的限制內:十四行、抑揚格、五音步的詩詞
l 還有很多……
當然,Getting Real 是關於寫出優秀的軟體,但沒有畫地自限的必要。將這些概念套用在生活
上別的領域,您或許會碰上好的結果。
保持聯繫
讓我們知道 Getting Real 如何幫您得到好結果,請寫信到gettingreal [at] 37signals [dot] com.
另外,參觀我們的網誌 Signal vs. Noise ,了解 37signals 最新的產品、Getting Real、可用性、
設計和一些其他的東西
感謝您的閱讀,祝您好運!
37signals Resources
l 37signals site
l Signal vs. Noise weblog
l Basecamp — Web-based project collaboration
l Campfire — Web-based group chat for business
l Backpack — Web-based information organizer
l Writeboard — Web-based collaborative writing
l Ta-da List — Web-based dead-simple to-do lists
l Ruby on Rails — Open-source web application framework
Translation
Thanks to the following translators: "Bin Dong":http://dongbin.javaeye.com
(dongbin.cn@gmail.com); "Jeff Chang" (x12345678@gmail.com); "Tom Liu":http://tarkus.2gang.net
(tarkus.nnkh@gmail.com); "Glory Yu":mailto:glory.nnkh@gmail.com
http://gettingreal.37signals.com/GR_chn.php 2009-8-23