另一条道路
另一条道路
2001年9月
(本文解释了为什么下一代软件的大部分可能是基于服务器的,这对程序员意味着什么,以及这种新型软件为什么是创业公司的绝佳机会。本文源自在BBN实验室的一次演讲。)
1995年夏天,我的朋友Robert Morris和我决定创办一家创业公司。当时,围绕Netscape IPO的公关活动正如火如荼地进行,媒体上有很多关于电子商务的讨论。那时网络上可能只有三十家实际的商店,都是手工制作的。如果将来会有很多在线商店,就需要制作它们的软件,所以我们决定写一些这样的软件。
在最初的一周左右,我们打算将其制作成一个普通的桌面应用程序。然后有一天我们想到让软件在我们的Web服务器上运行,使用浏览器作为界面。我们尝试重写软件使其在Web上工作,很明显这是正确的方法。如果我们编写的软件在服务器上运行,对用户和我们自己都会容易得多。
结果证明这是一个好计划。现在,作为Yahoo Store,这个软件是最受欢迎的在线商店构建器,拥有约14,000个用户。
当我们开始Viaweb时,几乎没有人理解我们说软件在服务器上运行是什么意思。直到一年后Hotmail推出,人们才开始理解。现在每个人都知道这是一个有效的方法。我们现在所做的事情有了一个名字:应用服务提供商,或ASP。
我认为下一代软件的大部分都将按照这个模型编写。即使是损失最大的微软,似乎也看到将一些东西移出桌面是不可避免的。如果软件从桌面移到服务器上,对开发者来说将意味着一个完全不同的世界。本文描述了我们作为这个新世界的首批访客所看到的令人惊讶的事情。就软件确实转移到服务器上的程度而言,我在这里描述的就是未来。
下一件大事?
当我们回顾桌面软件时代时,我想我们会惊叹于人们忍受的不便,就像我们现在惊叹于早期车主忍受的不便一样。在最初的二三十年里,你必须是一个汽车专家才能拥有汽车。但汽车是一个如此巨大的进步,以至于很多不是汽车专家的人也想拥有它们。
计算机现在正处于这个阶段。当你拥有桌面计算机时,你最终会学到比你想要知道的更多关于其内部情况的知识。但超过一半的美国家庭都拥有一台。我母亲有一台计算机,她用它来收发邮件和记账。大约一年前,她收到Apple的一封信,为她提供新操作系统的折扣,这让她感到担忧。当一个65岁的女性只想用计算机来收发邮件和记账时,却不得不考虑安装新的操作系统,这就有问题了。普通用户甚至不应该知道”操作系统”这个词,更不用说”设备驱动程序”或”补丁”了。
现在有另一种交付软件的方式可以拯救用户免于成为系统管理员。基于Web的应用程序是在Web服务器上运行并使用Web页面作为用户界面的程序。对于普通用户来说,这种新型软件将比桌面软件更容易、更便宜、更便携、更可靠,而且通常更强大。
有了基于Web的软件,大多数用户除了他们使用的应用程序外,不必考虑任何其他事情。所有混乱、变化的东西都将位于某处的服务器上,由擅长这种事情的人维护。因此,你通常不需要特定的计算机来使用软件。你只需要一个带有键盘、屏幕和Web浏览器的东西。也许它会有无线互联网接入。也许它也会是你的手机。无论它是什么,都将是消费电子产品:价格约200美元,人们主要根据外观选择的东西。你将在互联网服务上花费比硬件更多的钱,就像你现在对电话所做的那样。[1]
点击到达服务器并返回需要大约十分之一秒,所以重度交互软件的用户,如Photoshop,仍然希望计算在桌面上进行。但如果你看大多数人使用计算机做的那种事情,十分之一秒的延迟不会成为问题。我母亲真的不需要桌面计算机,有很多像她这样的人。
用户的胜利
我家附近有一辆车,保险杠上贴着”死也不愿不便”。大多数人,在大多数时候,会选择需要最少工作的选择。如果基于Web的软件获胜,那将是因为它更方便。对于用户和开发者来说,它似乎都会更方便。
使用纯基于Web的应用程序,你只需要一个连接到互联网的浏览器。所以你可以在任何地方使用基于Web的应用程序。当你在桌面计算机上安装软件时,你只能在该计算机上使用它。更糟糕的是,你的文件被困在那台计算机上。随着人们习惯网络,这种模式的不便越来越明显。
这里的开端是基于Web的电子邮件。现在数百万人意识到,无论你在哪里,都应该能够访问电子邮件。如果你能看到你的邮件,为什么不能看到你的日历?如果你能和同事讨论文档,为什么不能编辑它?为什么你的任何数据都应该被困在某个远处桌子的计算机上?
“你的计算机”的整个概念正在消失,被”你的数据”所取代。你应该能够从任何计算机访问你的数据。或者更确切地说,任何客户端,而客户端不一定是计算机。
客户端不应该存储数据;它们应该像电话一样。事实上,它们可能会变成电话,或者反之亦然。随着客户端变小,你有另一个理由不在它们上保存数据:随身携带的东西可能会丢失或被盗。把PDA留在出租车里就像磁盘崩溃,只是你的数据交给了别人而不是被蒸发掉了。
使用纯基于Web的软件,你的数据和应用程序都不会保存在客户端上。所以你不需要安装任何东西来使用它。当没有安装时,你不必担心安装出错。应用程序和你的操作系统之间不可能存在不兼容性,因为软件不在你的操作系统上运行。
因为它不需要安装,所以在你”购买”之前尝试基于Web的软件将是容易且常见的。你应该期望能够免费试用任何基于Web的应用程序,只需访问提供它的网站即可。在Viaweb,我们的整个网站就像一个大箭头,指向用户试驾。
试驾后,注册服务只需要填写一个简短的表格(越简短越好)。这应该是用户必须做的最后工作。有了基于Web的软件,你应该无需额外付费、做任何工作,甚至可能无需知道就能获得新版本。
升级不会像现在那样令人震惊。随着时间的推移,应用程序将悄然变得更强大。这需要开发者付出一些努力。他们必须设计软件,使其能够在不使用户困惑的情况下更新。这是一个新问题,但有解决方法。
有了基于Web的应用程序,每个人都使用相同的版本,错误一旦发现就可以修复。所以基于Web的软件应该比桌面软件的错误少得多。在Viaweb,我怀疑我们任何时候有过十个已知的错误。这比桌面软件好几个数量级。
基于Web的应用程序可以同时被多个人使用。这对于协作应用程序来说显然是一个优势,但我敢打赌,一旦用户意识到这是可能的,他们会开始在大多数应用程序中想要这个功能。例如,让两个人编辑同一个文档通常是有用的。Viaweb允许多个用户同时编辑一个站点,更多是因为这是编写软件的正确方式,而不是因为我们期望用户想要这样做,但结果证明很多人确实这样做了。
当你使用基于Web的应用程序时,你的数据会更安全。磁盘崩溃不会成为过去的事情,但用户不会再听到它们。它们将发生在服务器集群中。提供基于Web应用程序的公司实际上会进行备份——不仅因为他们会有真正的系统管理员担心这些事情,而且因为丢失用户数据的ASP将陷入巨大的麻烦。当人们在自己的磁盘崩溃中丢失数据时,他们不会太生气,因为他们只能生自己的气。当公司为他们丢失数据时,他们会更生气。
最后,基于Web的软件应该对病毒不那么脆弱。如果客户端除了浏览器外不运行任何东西,运行病毒的机会就更少,本地也没有数据可以损坏。攻击服务器本身的程序会发现它们防御得很好。[2]
对于用户来说,基于Web的软件压力会更小。我认为如果你查看普通Windows用户的内心,你会发现对符合这种描述的软件有着巨大且基本未被利用的渴望。释放出来,它可能是一股强大的力量。
代码之城
对于开发者来说,基于Web和桌面软件之间最显著的区别是,基于Web的应用程序不是单一的代码片段。它将是不同类型程序的集合,而不是单一的大二进制文件。因此设计基于Web的软件更像设计城市而不是建筑:除了建筑物,你还需要道路、路标、公用设施、警察和消防部门,以及增长和各种灾难的计划。
在Viaweb,软件包括相当大的应用程序,用户直接与之对话;这些程序使用的程序;在后台持续运行寻找问题的程序;如果出现问题尝试重新启动事物的程序;偶尔运行以编译统计信息或构建搜索索引的程序;我们明确运行以垃圾收集资源或移动或恢复数据的程序;假装是用户的程序(以测量性能或暴露错误);诊断网络问题的程序;进行备份的程序;外部服务的接口;驱动令人印象深刻的表盘集合显示实时服务器统计的软件(对访客来说很受欢迎,但对我们来说也是不可或缺的);对开源软件的修改(包括错误修复);以及大量的配置文件和设置。在我们被Yahoo收购后,Trevor Blackwell编写了一个精彩的程序,可以在不关闭商店的情况下将商店迁移到全国的新服务器。程序通过传呼机呼叫我们,向用户发送传真和电子邮件,与信用卡处理商进行交易,并通过套接字、管道、http请求、ssh、udp数据包、共享内存和文件相互交谈。Viaweb的一部分甚至由程序的缺失组成,因为Unix安全的关键之一是不运行人们可能用来闯入服务器的不必要实用程序。
这并不以软件结束。我们花了很多时间思考服务器配置。我们自己从组件构建服务器——部分是为了省钱,部分是为了得到我们想要的东西。我们必须考虑我们的上游ISP是否与所有骨干网有足够快的连接。我们与RAID供应商连续约会。
但硬件不仅仅是要担心的事情。当你控制它时,你可以为用户做更多。对于桌面应用程序,你可以指定某些最低硬件要求,但你不能添加更多。如果你管理服务器,你可以一步让所有用户能够传呼别人,或发送传真,或通过电话发送命令,或处理信用卡等,只需安装相关硬件即可。我们总是寻找用硬件添加功能的新方法,不仅因为它让用户高兴,而且作为将自己与竞争对手区分开来的方式——竞争对手要么因为他们销售桌面软件,要么通过ISP转售基于Web的应用程序,不能直接控制硬件。
因为基于Web应用程序中的软件将是程序的集合而不是单一的二进制文件,它可以用多种不同的语言编写。当你编写桌面软件时,你实际上被迫用与底层操作系统相同的语言编写应用程序——即C和C++。因此,这些语言(尤其是在非技术人员如经理和风险投资家中)被认为是”严肃”软件开发的语言。但这只是桌面软件必须交付方式的人工产物。对于基于服务器的软件,你可以使用任何你想要的语言。[3] 今天,许多顶级黑客使用远离C和C++的语言:Perl、Python,甚至Lisp。
有了基于服务器的软件,没有人能告诉你使用什么语言,因为你控制整个系统,一直到硬件。不同的语言适合不同的任务。你可以为每个任务使用最适合的语言。当你有竞争对手时,“你可以”意味着”你必须”(我们稍后会回到这一点),因为如果你不利用这种可能性,你的竞争对手会。
我们的大多数竞争对手使用C和C++,这使得他们的软件明显 inferior,因为(除其他外),他们无法解决CGI脚本的无状态性问题。如果你要改变什么,所有的改变都必须在一个页面上发生,底部有一个更新按钮。正如我在其他地方写过的,通过使用许多人仍然认为是研究语言的Lisp,我们能够让Viaweb编辑器的行为更像桌面软件。
发布
在这个新世界中最重要的变化之一是你进行发布的方式。在桌面软件业务中,进行发布是一个巨大的创伤,整个公司都在努力推出一个单一的、巨大的代码片段。明显的比较会让人联想到这个过程和最终产品。
有了基于服务器的软件,你可以像为自己编写的程序那样几乎实时地进行更改。你以一系列增量更改而不是偶尔的大爆炸形式发布软件。一个典型的桌面软件公司可能一年进行一两次发布。在Viaweb,我们通常一天进行三到五次发布。
当你切换到这个新模式时,你会意识到软件开发受到发布方式的影响有多大。你在桌面软件业务中看到的一些最令人讨厌的问题是由于发布的灾难性性质造成的。
当你每年只发布一个新版本时,你倾向于批量处理错误。在发布日期之前的某个时间,你组装一个新版本,其中一半的代码被撕掉并替换,引入了无数错误。然后一队QA人员介入并开始计算它们,程序员们处理这个列表,修复它们。他们通常不会到达列表的末尾,事实上,没有人确定末尾在哪里。这就像从池塘里捞碎石。你永远不知道软件内部发生了什么。充其量你最终得到一种统计上的正确性。
有了基于服务器的软件,大多数更改都是小而增量的。这本身就不太可能引入错误。这也意味着当你准备发布软件时,你知道最需要仔细测试什么:你最后改变的东西。你对代码的控制要牢固得多。作为一个一般规则,你确实知道它内部发生了什么。当然你没有记住源代码,但当你阅读源代码时,你这样做就像飞行员扫描仪表盘,而不是像侦探试图解开一些谜团。
桌面软件培养了对错误的某种宿命论。你知道你正在发布充满错误的东西,你甚至建立了补偿机制(例如补丁发布)。那么为什么还要担心几个更多的错误呢?很快你就会发布你知道有问题的整个功能。苹果今年早些时候就这样做了。他们感到压力要发布他们的新操作系统,其发布日期已经四次推迟,但一些软件(对CD和DVD的支持)还没有准备好。解决方案?他们在没有完成部分的情况下发布了操作系统,用户将不得不稍后安装它们。
有了基于Web的软件,你永远不必在软件能够工作之前发布它,你可以一旦它能够工作就发布它。
行业资深人士可能会想,说你在软件能够工作之前永远不必发布软件听起来是个好主意,但当你承诺在某个日期之前交付软件的新版本时会发生什么?有了基于Web的软件,你不会做出这样的承诺,因为没有版本。你的软件逐渐而持续地变化。一些变化可能比其他变化更大,但版本的概念自然不适合基于Web的软件。
如果有人记得Viaweb,这可能听起来很奇怪,因为我们总是在宣布新版本。这完全是为了公关目的。我们了解到,行业媒体是以版本号思考的。他们会为主要版本提供主要报道,意思是版本号的新第一位数字,而对于点版本,通常最多只有一个段落,意思是小数点后的新数字。
我们的一些竞争对手提供桌面软件,实际上有版本号。对于这些发布,仅仅这个事实在我们看来就是他们落后的证据,他们会获得各种宣传。我们不想错过,所以我们也开始给我们的软件版本号。当我们想要一些宣传时,我们会列出自上次”发布”以来我们添加的所有功能,在软件上贴上一个新版本号,并发布新闻稿说新版本立即可用。令人惊讶的是,从来没有人指责我们这样做。
到我们被收购时,我们已经这样做了三次,所以我们处于版本4。如果我没记错的话,是版本4.1。在Viaweb成为Yahoo Store后,不再如此迫切需要宣传,所以尽管软件继续发展,版本号的整个概念被悄然放弃了。
错误
基于Web软件的另一个主要技术优势是你可以重现大多数错误。用户的数据就在你的磁盘上。如果有人破坏了你的软件,你不必像桌面软件那样猜测发生了什么:你应该能够在他们在电话上与你交谈时重现错误。如果你在应用程序中内置了注意错误的代码,你甚至可能已经知道它。
基于Web的软件全天候使用,所以你所做的一切都会立即受到考验。错误很快就会出现。
软件公司有时被指控让用户调试他们的软件。而这正是我所倡导的。对于基于Web的软件,这实际上是一个好计划,因为错误更少且短暂。当你逐渐发布软件时,一开始你得到的错误会少得多。当你能够重现错误并立即发布更改时,你可以在大多数错误出现时找到并修复它们。我们任何时候都没有足够的错误需要正式的错误跟踪系统。
当然,你应该在发布之前测试更改,所以不应该发布主要错误。那些不可避免地漏掉的少数错误将涉及边界情况,并且只会在有人打电话抱怨之前影响少数遇到它们的用户。只要你立即修复错误,对于普通用户来说,净效果是错误少得多。我怀疑普通Viaweb用户曾经看到过错误。
修复新错误比修复旧错误更容易。在你刚刚编写的代码中找到错误通常相当快。当它出现时,你往往在查看源代码之前就知道哪里错了,因为你已经在潜意识中担心它了。修复六个月前编写的代码中的错误(如果你一年发布一次,这是平均情况)要多花很多工作。而且由于你对代码的理解不够,你更有可能以丑陋的方式修复它,甚至引入更多错误。[4]
当你及早发现错误时,你也会得到更少的复合错误。复合错误是两个相互作用的独立错误:你下楼时绊倒,当你伸手抓住栏杆时,它从你手中脱落。在软件中,这种错误是最难发现的,而且往往具有最严重的后果。[5] 传统的”打破一切然后过滤错误”方法本质上会产生很多复合错误。而以一系列小更改发布的软件本质上不会这样。地板不断被清扫干净,任何可能后来卡在什么东西里的松散物体。
如果你使用一种称为函数式编程的技术,这会有所帮助。函数式编程意味着避免副作用。你更可能在研究论文中看到它,而不是商业软件,但对于基于Web的应用程序,它结果非常有用。将整个程序写成纯函数式代码很难,但你可以用这种方式编写实质性的部分。它使你软件的这些部分更容易测试,因为它们没有状态,在你不断制作和测试小修改的情况下,这非常方便。我用这种风格编写了Viaweb编辑器的大部分,我们使我们的脚本语言RTML成为一种纯函数式语言。
来自桌面软件业务的人会发现这难以置信,但在Viaweb,错误几乎成了一种游戏。由于大多数发布的错误都涉及边界情况,遇到它们的用户可能是高级用户,他们在测试极限。高级用户对错误更宽容,特别是因为你可能是在添加他们要求的功能时引入了它们的。事实上,因为错误很少,你必须做复杂的事情才能看到它们,高级用户常常为抓住一个而感到自豪。他们会怀着更多是胜利而不是愤怒的精神致电支持,好像他们从我们这里得分了。
支持
当你能够重现错误时,它改变了你处理客户支持的方法。在大多数软件公司,支持作为让客户感觉更好的方式提供。他们要么是关于一个已知错误打电话给你,要么是他们做错了什么,你必须弄清楚是什么。在任何一种情况下,你都从他们那里学不到太多东西。所以你倾向于将支持电话视为一个令人讨厌的事情,你希望尽可能将其与开发者隔离。
在Viaweb,情况并非如此。在Viaweb,支持是免费的,因为我们想听取客户的意见。如果有人有问题,我们想立即知道,这样我们就可以重现错误并发布修复。
所以在Viaweb,开发者与支持始终保持密切联系。客户支持人员距离程序员约30英尺,他们知道他们可以用真正的错误报告打断任何事情。我们会离开董事会会议来修复严重的错误。
我们的支持方法让每个人都更快乐。客户很高兴。想象一下,拨打支持热线并被当作带来重要消息的人对待是什么感觉。客户支持人员喜欢它,因为这意味着他们可以帮助用户,而不是向他们阅读脚本。程序员喜欢它,因为他们可以重现错误,而不仅仅是听到关于它们的模糊二手报告。
我们即时修复错误的政策改变了客户支持人员和黑客之间的关系。在大多数软件公司,支持人员是报酬过低的人体盾牌,黑客是天父的小型副本,世界的创造者。无论报告错误的程序是什么,都可能是单向的:听到错误的支持人员填写某种表格,最终传递给程序员(可能通过QA),程序员将其放在他们的待办事项列表上。在Viaweb情况完全不同。在从客户那里听到错误的一分钟内,支持人员可能站在程序员旁边,听到他说”该死,你说得对,这是一个错误。“听到黑客说”你说得对”让支持人员很高兴。他们过去常常带着期待的表情给我们带来错误,就像猫给你带来它刚刚杀死的老鼠一样。这也使他们在判断错误的严重性时更加谨慎,因为现在他们的荣誉处于危险之中。
在我们被Yahoo收购后,客户支持人员被移到了远离程序员的地方。直到那时我们才意识到他们实际上是QA,在某种程度上也是营销。除了捕捉错误,他们还是模糊的、类似错误的事情的守护者,比如让用户困惑的功能。[6] 他们也是一种代理焦点小组;我们可以问他们两个新功能中用户更想要哪个,他们总是对的。
士气
能够立即发布软件是一个巨大的动力。 often as I was walking to work I would think of some change I wanted to make to the software, and do it that day. This worked for bigger features as well. Even if something was going to take two weeks to write (few projects took longer), I knew I could see the effect in the software as soon as it was done.
如果我必须等待下一年的发布,我会搁置这些想法中的大部分,至少一段时间。但是关于想法的事情是,它们会导致更多的想法。你有没有注意到,当你坐下来写东西时,最终进入它的一半想法是你在写作过程中想到的?软件也是如此。实施一个想法的工作会给你更多的想法。所以搁置一个想法不仅让你延迟实施它,还损失了实施它会带来的所有想法。事实上,搁置一个想法甚至可能抑制新想法:当你开始想到一些新功能时,你看到搁板并想”但我已经有很多新事情想为下一版做了。”
大公司不做的是实施功能,而是规划它们。在Viaweb,我们在这方面经常遇到麻烦。投资者和分析师会问我们对未来有什么计划。诚实的回答会是,我们没有任何计划。我们对想要改进的事情有一些总体想法,但如果我们知道怎么做,我们已经做了。我们未来六个月要做什么?任何看起来是最大胜利的事情。我不知道我是否敢于给出这个答案,但这是事实。计划只是搁板上想法的另一个词。当我们想到好主意时,我们就实施它们。
在Viaweb,就像在许多软件公司一样,大多数代码都有一个明确的所有者。但当你拥有某样东西时,你真正拥有它:除了软件的所有者外,没有人必须批准(甚至知道)发布。除了害怕在同僚面前看起来像白痴外,没有防止破坏的保护,这已经足够了。我可能给人的印象是我们只是轻率地向前冲编写代码。我们确实走得很快,但我们在将软件发布到那些服务器之前非常仔细地思考。而且注意力比缓慢移动更重要。因为密切注意,海军飞行员可以在夜间以每小时140英里的速度在摇晃的航母甲板上着陆40,000磅的飞机,比普通青少年切百吉饼更安全。
这种编写软件的方式当然是一把双刃剑。对于一个由优秀、可信赖的程序员组成的小团队来说,它要比由平庸程序员组成的大公司效果好得多,在大公司中,坏想法由委员会抓住,而不是由有这些想法的人抓住。
反向布鲁克斯
幸运的是,基于Web的软件确实需要更少的程序员。我曾经为一家中型桌面软件公司工作,整个工程部门有100多人。其中只有13人从事产品开发。其余的人都在处理发布、移植等等。有了基于Web的软件,你需要的(最多)就是这13个人,因为没有发布、移植等等。
Viaweb只由三个人编写。[7] 我总是受到压力雇佣更多人,因为我们想被收购,我们知道买方很难为只有三个程序员的公司支付高价。(解决方案:我们雇佣了更多人,但为他们创建了新项目。)
当你能够用更少的程序员编写软件时,它为你节省的不仅仅是金钱。正如Fred Brooks在《人月神话》中指出的,向项目添加人手往往会减慢项目速度。开发者之间可能连接的数量随着群体的大小呈指数增长。群体越大,他们将花更多时间在会议上协商他们的软件如何一起工作,他们从未预见的交互带来的错误就越多。幸运的是,这个过程也反向工作:随着群体变小,软件开发呈指数级变得更有效率。我不记得Viaweb的程序员曾经有过真正的会议。我们在任何时候都没有什么比我们去吃午饭时能说的更多的话要说。
如果这里有 downside,那就是所有程序员都必须在某种程度上也是系统管理员。当你托管软件时,必须有人监视服务器,实际上唯一能正确做到这一点的人是编写软件的人。在Viaweb,我们的系统有如此多的组件,变化如此频繁,以至于软件和基础设施之间没有明确的边界。任意宣布这样一个边界会限制我们的设计选择。所以尽管我们不断希望有一天(“几个月后”)一切都会足够稳定,我们可以雇佣一个只担心服务器的人,但这从未发生。
我认为不可能有其他方式,只要你仍在积极开发产品。基于Web的软件永远不会是你编写、签入然后回家的东西。它是一个活的东西,现在就在你的服务器上运行。一个严重的错误可能不仅仅崩溃一个用户的进程;它可能崩溃它们所有。如果你的代码中的错误损坏了磁盘上的一些数据,你必须修复它。等等。我们发现你不必每分钟都监视服务器(在第一年左右后),但你肯定想密切关注你最近改变的东西。你不会在深夜发布代码然后回家。
观察用户
有了基于服务器的软件,你与代码的联系更紧密。你也可以与用户的联系更紧密。Intuit以在零售店向客户介绍自己并要求跟随他们回家而闻名。如果你曾经看过有人第一次使用你的软件,你就知道什么样的惊喜在等待着他们。
软件应该做用户认为它会做的事情。但相信我,在你观察他们之前,你不知道用户会想什么。而基于服务器的软件给了你关于他们行为的前所未有的信息。你不限于小的、人为的焦点小组。你可以看到每个用户的每次点击。你必须仔细考虑你要看什么,因为你不想侵犯用户的隐私,但即使是最一般的统计采样也可能非常有用。
当用户在你的服务器上时,你不必依赖基准测试,例如。基准测试是模拟用户。有了基于服务器的软件,你可以观察实际用户。要决定优化什么,只需登录服务器,看看什么消耗了所有的CPU。而且你也知道何时停止优化:我们最终让Viaweb编辑器达到了内存限制而不是CPU限制的程度,由于我们无法减小用户数据的大小(嗯,没有简单的方法),我们知道我们最好停在那里。
效率对基于服务器的软件很重要,因为你要为硬件付费。每个服务器可以支持的用户数量是你的资本成本的除数,所以如果你能让你的软件非常高效,你可以以低于竞争对手的价格销售并仍然获利。在Viaweb,我们将每个用户的资本成本降至约5美元。现在可能更少,可能低于向他们发送第一个月账单的成本。如果你的软件相当高效,硬件现在是免费的。
观察用户可以在设计和优化方面指导你。Viaweb有一种称为RTML的脚本语言,让高级用户定义自己的页面样式。我们发现RTML成了一个建议箱,因为用户只在预定义的页面样式无法做他们想要的事情时才使用它。例如,最初编辑器在页面上放置按钮栏,但在许多用户使用RTML将按钮放在左侧后,我们在预定义的页面样式使其成为一个选项(实际上是默认)。
最后,通过观察用户,你通常可以告诉他们什么时候遇到麻烦。而且由于客户总是对的,这是你需要修复的事情的迹象。在Viaweb,获得用户的关键是在线试驾。它不仅仅是由营销人员构建的一系列幻灯片。在我们的试驾中,用户实际使用软件。花了大约五分钟,在结束时他们构建了一个真实的、工作的商店。试驾是我们获得几乎所有新用户的方式。我认为对于大多数基于Web的应用程序来说也是如此。如果用户能够成功完成试驾,他们会喜欢这个产品。如果他们感到困惑或无聊,他们不会。所以任何我们能做的让更多人完成试驾的事情都会增加我们的增长率。
我研究了参加试驾的人的点击轨迹,发现在某个步骤他们会感到困惑并点击浏览器的后退按钮。(如果你尝试编写基于Web的应用程序,你会发现后退按钮成为你最有趣的哲学问题之一。)所以我在那个点添加了一条消息,告诉用户他们几乎完成了,提醒他们不要点击后退按钮。基于Web软件的另一个好处是你从更改中得到即时反馈:完成试驾的人数立即从60%上升到90%。而且由于新用户的数量是完成试驾数量的函数,我们的收入增长率增长了50%,仅仅来自那个改变。
金钱
1990年代初,我读了一篇文章,有人说软件是订阅业务。起初这似乎是一个非常愤世嫉俗的说法。但后来我意识到它反映了现实:软件开发是一个持续的过程。我认为如果你公开收取订阅费,而不是强迫人们不断购买和安装新版本以便他们继续付钱给你,会更清晰。幸运的是,订阅是为基于Web的应用程序收费的自然方式。
托管应用程序是公司不太可能由免费软件填补的一个领域。托管应用程序有很多压力,并有真实的费用。没有人会想免费做这件事。
对于公司来说,基于Web的应用程序是理想的收入来源。你不是每个季度从一张白纸开始,而是有经常性的收入流。因为你的软件逐渐发展,你不必担心新模型会失败;永远不需要新的模型,如果你对软件做了用户讨厌的事情,你会立即知道。你没有无法收回的账单的麻烦;如果有人不愿意付款,你可以关闭服务。而且没有盗版的可能性。
最后一个”优势”可能成为一个问题。一定程度的盗版对软件公司是有利的。如果某个用户真的不会以任何价格购买你的软件,如果他使用盗版副本,你没有损失任何东西。事实上你获益了,因为他是又一个帮助使你的软件成为标准的用户——或者当他高中毕业时可能会购买副本。
当可能时,公司喜欢做一种称为价格歧视的事情,这意味着向每个客户收取他们能负担的尽可能多的费用。[8] 软件特别适合价格歧视,因为边际成本接近于零。这就是为什么某些软件在Suns上运行比在Intel盒子上运行成本更高的原因:使用Suns的公司对省钱不感兴趣,可以安全地收取更多费用。盗版实际上是价格歧视的最低层次。我认为软件公司理解这一点,并故意对某些类型的盗版视而不见。[9] 有了基于服务器的软件,他们将不得不想出其他解决方案。
基于Web的软件销售得很好,与桌面软件相比,因为它容易购买。你可能认为人们决定购买某物,然后购买它,作为两个独立的步骤。这是我在Viaweb之前的想法,至少在我考虑这个问题时是这样。事实上,第二步可以传播回第一步:如果某物难以购买,人们会改变他们是否想要它的想法。反之亦然:当某物容易购买时,你会销售更多。因为亚马逊的存在,我买了更多的书。基于Web的软件是世界上最容易购买的东西之一,特别是如果你刚刚完成了在线演示。用户不应该只需要输入信用卡号码。(让他们做更多会有风险。)
有时基于Web的软件通过作为转售商的ISP提供。这是一个坏主意。你必须管理服务器,因为你需要不断改进硬件和软件。如果你放弃对服务器的直接控制,你就放弃了开发基于Web应用程序的大部分优势。
我们的几个竞争对手这样自寻死路——通常,我认为,是因为他们被西装们淹没了,他们对这个巨大的潜在渠道感到兴奋,没有意识到这会破坏他们希望通过它销售的产品。通过ISP销售基于Web的软件就像通过自动售货机销售寿司。
客户
客户会是谁?在Viaweb,他们最初是个人和小公司,我认为这将是基于Web应用程序的规则。这些用户准备尝试新事物,部分是因为他们更灵活,部分是因为他们想要新技术的低成本。
基于Web的应用程序通常对大公司也是最好的(尽管他们会缓慢意识到)。最好的内联网就是互联网。如果公司使用真正的基于Web的应用程序,软件会工作得更好,服务器会管理得更好,员工可以从任何地方访问系统。
反对这种方法的论点通常围绕安全性:如果员工更容易访问,坏人也会更容易。一些较大的商家不愿意使用Viaweb,因为他们认为客户的信用卡信息在他们自己的服务器上会更安全。很难外交地提出这一点,但事实上数据在我们手中几乎肯定比在他们手中更安全。谁可以雇佣更好的人来管理安全,一个整个业务是运行服务器的技术创业公司,还是一个服装零售商?我们不仅有更好的人担心安全,我们更担心它。如果有人闯入服装零售商的服务器,最多影响一个商人,可能可以掩盖,在最坏的情况下可能会让一个人被解雇。如果有人闯入我们的服务器,可能影响数千个商人,可能最终成为CNet的新闻,并可能让我们倒闭。
如果你想保持你的钱安全,你是把它放在家里的床垫下,还是存入银行?这个论点适用于服务器管理的每个方面:不仅是安全,还有正常运行时间、带宽、负载管理、备份等等。我们的存在取决于正确做这些事情。服务器问题对我们来说是最大的禁忌,就像危险的玩具对玩具制造商,或者沙门氏菌爆发对食品加工商一样。
使用基于Web应用程序的大公司在某种程度上是在外包IT。听起来很激进,我认为这通常是一个好主意。公司可能通过这种方式获得比内部系统管理员更好的服务。系统管理员可能变得暴躁和不响应,因为他们没有直接暴露在竞争压力下:销售人员必须处理客户,开发者必须处理竞争对手的软件,但系统管理员,就像老单身汉,很少有外部力量让他保持一致。[10] 在Viaweb,我们有足够的外部力量让我们保持一致。打电话给我们的是客户,而不仅仅是同事。如果服务器被卡住,我们跳起来;仅仅想到它,多年后仍然让我肾上腺素激增。
所以基于Web的应用程序通常也是大公司的正确答案。然而,他们将是最后意识到这一点的,就像他们在桌面计算机上一样。部分原因是相同的:说服大公司他们需要更昂贵的东西将值很多钱。
富有的客户总是倾向于购买昂贵的解决方案,即使便宜的解决方案更好,因为提供昂贵解决方案的人可以花更多的钱销售它们。在Viaweb,我们一直对抗这个。我们失去了几个高端商户给Web咨询公司,他们说服他们,如果他们在自己的服务器上支付五十万美元购买定制的在线商店会更好。作为一个规则,他们并没有更好,当圣诞节购物季节到来,服务器负载增加时,不止一个发现了这一点。Viaweb比这些商户得到的大部分软件复杂得多,但我们负担不起告诉他们。在每月300美元的价格,我们负担不起派遣一群衣着光鲜、听起来权威的人向客户做演示。
大公司额外支付的大部分钱是向他们销售昂贵东西的成本。(如果国防部为马桶座圈支付一千美元,部分原因是销售一千美元马桶座圈的成本很高。)这也是内联网软件将继续繁荣的一个原因,即使这可能是一个坏主意。它只是更昂贵。对于这个难题你无能为力,所以最好的计划是先争取较小的客户。其余的会及时到来。
服务器之子
在服务器上运行软件并不是什么新鲜事。事实上这是旧模型:大型机应用程序都是基于服务器的。如果基于服务器的软件是一个好主意,为什么上次它失败了?为什么桌面计算机取代了大型机?
起初桌面计算机看起来不太像威胁。第一批用户都是黑客——或者像当时被称为的爱好者。他们喜欢微型计算机,因为它们便宜。第一次,你可以拥有自己的计算机。“个人计算机”这个词现在是语言的一部分,但当它第一次使用时,它有一种故意大胆的声音,就像今天”个人卫星”这个词组。
为什么桌面计算机占据主导地位?我认为是因为它们有更好的软件。我认为微型计算机软件更好的原因是它可以由小公司编写。
我认为很多人没有意识到创业公司在最早阶段是多么脆弱和不确定。许多创业公司几乎偶然开始——作为几个人,有工作或在学校,编写可能(如果看起来有希望)变成公司的某物原型。在这个幼虫阶段,任何重大障碍都会阻止创业公司死在 tracks上。编写大型机软件需要太多的前期承诺。开发机器很昂贵,而且由于客户将是公司,你需要一个令人印象深刻的销售团队向他们销售。创办一家编写大型机软件的创业公司将是一个比在晚上你的Apple II上拼凑东西严重得多的任务。所以你没有很多创业公司编写大型机应用程序。
桌面计算机的到来激发了很多新软件,因为为它们编写应用程序对幼虫创业公司来说似乎是一个可实现的目标。开发便宜,客户将是个人,你可以通过计算机商店甚至邮购接触他们。
将桌面计算机推向主流的应用程序是VisiCalc,第一个电子表格。它是由在阁楼工作的两个人编写的,却做了任何大型机软件都不能做的事情。[11] VisiCalc在当时是一个巨大的进步,人们购买Apple II只是为了运行它。这是一个趋势的开始:桌面计算机获胜是因为创业公司为它们编写软件。
基于服务器的软件这次看起来会很好,因为创业公司将编写它。计算机现在如此便宜,你可以像我们一样,使用桌面计算机作为服务器开始。便宜的处理器已经吃掉了工作站市场(你现在很少听到这个词了),并且在服务器市场上大部分路程;Yahoo的服务器,处理像互联网上任何地方一样高的负载,都有与你桌面机器相同的廉价Intel处理器。一旦你编写了软件,你销售它所需要的只是一个Web站点。几乎所有的用户都是通过口碑和媒体中的推荐直接访问我们的网站。[12]
Viaweb是一个典型的幼虫创业公司。我们害怕创办公司,在最初的几个月里,我们安慰自己,把整个事情当作一个实验,我们可能随时取消。幸运的是,除了技术障碍外几乎没有障碍。当我们编写软件时,我们的Web服务器是我们用于开发的同一台桌面机器,通过拨号线连接到外部世界。在那个阶段我们唯一的开支是食物和租金。
现在创业公司有更多理由编写基于Web的软件,因为编写桌面软件变得不那么有趣了。如果你想现在编写桌面软件,你必须在微软的条款下做,调用他们的API,并在他们有缺陷的操作系统周围工作。如果你成功编写了起飞的东西,你可能发现你只是在为微软做市场研究。
如果一个公司想要制作一个创业公司将建立的平台,他们必须制作黑客自己会想使用的东西。这意味着它必须便宜且设计良好。Mac在刚推出时受到黑客的欢迎,其中许多人编写了它的软件。[13] 你在Windows上较少看到这一点,因为黑客不使用它。擅长编写软件的人现在倾向于运行Linux或FreeBSD。
我认为我们不会创办一家编写桌面软件的创业公司,因为桌面软件必须在Windows上运行,在我们能够为Windows编写软件之前,我们必须使用它。Web让我们绕过Windows,通过浏览器直接向用户交付运行在Unix上的软件。这是一个令人 liberating 的前景,很像25年前PC的到来。
微软
回到桌面计算机到来的时候,IBM是每个人都害怕的巨人。现在很难想象,但我清楚地记得这种感觉。现在可怕的巨人是微软,我认为他们不像IBM那样对面临的威胁视而不见。毕竟,微软是故意在IBM的盲点上建立他们的业务的。
我前面提到我母亲并不真的需要桌面计算机。大多数用户可能也不需要。这对微软来说是个问题,他们知道。如果应用程序在远程服务器上运行,没有人需要Windows。微软会做什么?他们是否能够利用他们对桌面的控制来防止或约束这一代新软件?
我猜微软将开发某种服务器/桌面混合,操作系统与他们控制的服务器协同工作。至少,对于想要这样的用户,文件将集中可用。我不期望微软会完全走向在服务器上进行计算的极端,如果他们可以避免的话,客户端只有一个浏览器。如果你只需要一个浏览器作为客户端,客户端上就不需要微软,如果微软不控制客户端,他们就不能推动用户使用他们的基于服务器的应用程序。
我认为微软将很难把精灵关在瓶子里。将会有太多不同类型的客户端让他们全部控制。如果微软的应用程序只与某些客户端一起工作,竞争对手将能够通过提供在任何客户端上工作的应用程序来胜过他们。[14]
在基于Web应用程序的世界里,微软没有自动的位置。他们可能成功地为自己创造一个位置,但我不认为他们会像在桌面应用程序世界那样统治这个新世界。
不是竞争对手会绊倒他们,而是他们会自己绊倒自己。随着基于Web软件的兴起,他们将面临不仅是技术问题,还有他们自己的愿望思维。他们需要做的是蚕食他们现有的业务,我看不出他们能够面对这一点。把他们带到现在的同样专注现在将对他们不利。IBM处于完全相同的情况,他们无法掌握它。IBM迟来且半心半意地进入微型计算机业务,因为他们对威胁他们的现金牛——大型机计算感到矛盾。微软同样将因为想要拯救桌面而受阻。现金牛可能是你背上该死的沉重猴子。
我不是说没有人会主导基于服务器的应用程序。有人可能最终会。但我认为将有一个相当长的欢乐混乱时期,就像微型计算机的早期一样。那是创业公司的好时机。许多小公司蓬勃发展,通过制造很酷的东西做到这一点。
创业公司但更是如此
经典的创业公司快速而非正式,人少钱少。这少数人工作非常努力,技术放大了他们做出的决定的影响。如果他们获胜,他们赢得很大。
在编写基于Web应用程序的创业公司中,你与创业公司相关的一切都被推向极端。你可以用更少的人和更少的钱编写和启动产品。你必须更快,你可以更不正式。你真的可以作为一个三个人坐在公寓客厅里,服务器位于ISP的产品启动产品。我们就是这样。
随着时间的推移,团队变得更小、更快、更不正式。1960年,软件开发意味着一屋子的人戴着牛角框眼镜,穿着窄窄的黑领带,勤奋地在IBM编码表格上每天写十行代码。1980年,这是一个八到十个人穿牛仔裤上班,输入vt100的团队。现在是一两个人坐在客厅里用笔记本电脑。(牛仔裤原来不是非正式的最后词。)
创业公司有压力,不幸的是,基于Web的应用程序也将这推向极端。许多软件公司,特别是在开始时,有开发者睡在桌子下面的时期等等。基于Web软件的可怕之处在于没有什么可以防止这成为默认情况。睡在桌子下的故事通常结束:最后我们发布了它,我们都回家睡了一周。基于Web的软件永远不会发布。只要你想要,你可以工作16小时天。因为你能够,而且你的竞争对手能够,你往往被迫这样做。你能,所以你必须。这是反向运行的帕金森定律。
最糟糕的不是工作时间,而是责任。程序员和系统管理员传统上各有自己独立的担忧。程序员必须担心错误,系统管理员必须担心基础设施。程序员可能整天在源代码中辛勤工作,但在某个时候他们可以回家忘记它。系统管理员永远不会真正离开工作,但当他们确实在凌晨4:00被传呼时,他们通常不必做任何非常复杂的事情。有了基于Web的应用程序,这两种压力结合在一起。程序员成为系统管理员,但没有使工作可忍受的明确限制。
在Viaweb,我们前六个月只是编写软件。我们工作了早期创业公司的通常长时间。在桌面软件公司,这将是我们努力工作的部分,但与下一阶段相比感觉像是假期,那时我们让用户进入我们的服务器。出售Viaweb给Yahoo的第二大好处(除了钱)是能够把整个事情的最终责任推给大公司。
桌面软件迫使用户成为系统管理员。基于Web的软件迫使程序员成为。总压力较少,但对程序员来说更多。这不一定是坏消息。如果你是一个与大公司竞争的创业公司,这是好消息。[15] 基于Web的应用程序提供了一种直接的方式胜过你的竞争对手。没有创业公司要求更多。
足够好
可能阻止你编写基于Web应用程序的一件事是Web页面作为UI的蹩脚。这是一个问题,我承认。有一些我们真的很想添加到HTML和HTTP的东西。然而,重要的是Web页面只是足够好。
这里与第一批微型计算机有相似之处。那些机器中的处理器实际上并不打算成为计算机的CPU。它们被设计用于像交通灯这样的东西。但是像Ed Roberts这样的人,他设计了Altair,意识到它们只是足够好。你可以将其中一个芯片与一些内存(第一个Altair中256字节)和前面板开关结合起来,你就会有一个工作的计算机。能够拥有自己的计算机是如此令人兴奋,以至于有很多人想购买它们,无论多么有限。
Web页面不是为了成为应用程序的UI而设计的,但它们只是足够好。对于相当数量的用户来说,你可以从任何浏览器使用的软件本身就是一个足够大的胜利,足以超过UI中的任何笨拙。也许你不能使用HTML写出最好看的电子表格,但你可以写一个电子表格,几个人可以从不同位置同时使用而无需特殊的客户端软件,或者可以合并实时数据馈送,或者可以在某些条件触发时传呼你。更重要的是,你可以编写甚至还没有名称的新型应用程序。毕竟,VisiCalc不仅仅是大型机应用程序的微型计算机版本——它是一种新型应用程序。
当然,基于服务器的应用程序不必是基于Web的。你可以有其他类型的客户端。但我很确定这是一个坏主意。如果你能假设每个人都会安装你的客户端会很方便——如此方便,以至于你可以轻易说服自己他们都会——但如果他们不这样做,你就完蛋了。因为基于Web的软件对客户端不做任何假设,它将在Web工作的任何地方工作。这已经是一个很大的优势,随着新的Web设备激增,这个优势会增长。用户会喜欢你,因为你的软件就是工作,你的生活会更容易,因为你不必为每个新客户端调整它。[16]
我觉得我像任何人一样密切观察Web的演变,但我无法预测客户端会发生什么。融合可能会到来,但在哪里?我无法选择赢家。我可以预测的一件事是AOL和微软之间的冲突。无论微软的.NET最终是什么,它可能涉及将桌面连接到服务器。除非AOL反击,否则他们要么被推到一边,要么变成微软客户端和服务器软件之间的管道。如果微软和AOL陷入客户端战争,唯一确定在两者上都工作的将是浏览Web,这意味着基于Web的应用程序将是唯一在任何地方都工作的类型。
这一切将如何发展?我不知道。如果你赌基于Web的应用程序,你不必知道。没有人可以在不破坏浏览的情况下破坏它。Web可能不是交付软件的唯一方式,但它是现在有效并将继续工作很长时间的方式。基于Web的应用程序开发成本低,即使是最小的创业公司也容易交付。它们是很多工作,而且是特别有压力的那种,但这只会使创业公司的几率更好。
为什么不?
E.B. White惊讶地从一位农民朋友那里得知,许多通电的栅栏没有任何电流通过它们。奶牛显然学会了远离它们,之后你就不需要电流了。“起来,奶牛们!“他写道,“在暴君打鼾时夺取你们的自由!”
如果你是一个黑客,想过有一天创办创业公司,可能有两件事阻止你这样做。一个是你对商业一无所知。另一个是你害怕竞争。这两个栅栏都没有电流。
关于商业你只需要知道两件事:构建用户热爱的东西,花的比赚的少。如果你把这两点做对,你就会领先大多数创业公司。其余的你可以边走边学。
你一开始可能花的比赚的多,但只要差距足够快地缩小,你就会没事。如果你开始资金不足,至少会鼓励节俭的习惯。你花的越少,花的比赚的越容易。幸运的是,启动基于Web的应用程序可能非常便宜。我们在不到1万美元的情况下启动,现在会更便宜。我们不得不在服务器上花费数千美元,再花费数千美元获得SSL。(当时唯一销售SSL软件的公司是Netscape。)现在你可以租用一台强大得多的服务器,包含SSL,价格低于我们仅带宽的费用。你现在可以用比一张华丽办公椅还少的钱启动基于Web的应用程序。
至于构建用户热爱的东西,这里有一些一般性建议。首先制作一些你自己想用的干净简单的东西。快速推出1.0版本,然后继续改进软件,密切倾听用户的意见。客户总是对的,但不同的客户在不同的事情上是对的;最不成熟的用户告诉你需要简化和澄清什么,最成熟的用户告诉你需要添加什么功能。软件能做到的最好的事情是容易,但做到这一点的方法是把默认设置做对,而不是限制用户的选择。如果竞争对手的软件蹩脚,不要自满;比较你软件的标准是它可能是什么,而不是你当前竞争对手碰巧拥有的。你自己一直使用你的软件。Viaweb应该是一个在线商店构建器,但我们也用它来制作我们自己的站点。不要只因为他们的工作头衔就听营销人员、设计师或产品经理的话。如果他们有好主意,使用它们,但由你决定;软件必须由理解设计的黑客设计,而不是懂一点软件的设计师。如果你不能像实施软件一样设计软件,不要创办创业公司。
现在让我们谈谈竞争。你害怕的恐怕不是像你这样的黑客群体,而是真正的公司,有办公室、商业计划、销售人员等等,对吧?嗯,他们比你更害怕你,他们是对的。几个黑客弄清楚如何租赁办公空间或雇佣销售人员比任何规模的公司获得软件编写容易得多。我在两方面都做过,我知道。当Viaweb被Yahoo收购时,我突然发现自己为一家大公司工作,这就像试图在齐腰深的水中奔跑。
我不是想贬低Yahoo。他们有一些优秀的黑客,最高管理层是真正的踢屁股者。对于一家大公司来说,他们是杰出的。但他们仍然只有小型创业公司十分之一的效率。没有大公司能做得比这好得多。微软可怕的是,这么大的公司竟然能够开发软件。他们就像一座会走路的山。
不要被吓倒。微软不能做的你能做的和他们能做的你不能做的同样多。没有人能阻止你。你不需要任何人的许可来开发基于Web的应用程序。你不需要做许可交易,或在零售商店获得货架空间,或恳求将你的应用程序与操作系统捆绑。你可以直接将软件交付到浏览器,没有人能够阻止你和潜在用户之间,除非阻止他们浏览Web。
你可能不相信,但我向你保证,微软害怕你。自满的中层经理可能不害怕,但比尔害怕,因为他曾经是你,在1975年,上一次新的软件交付方式出现的时候。
注释
[1] 意识到大部分钱在服务中,构建轻量级客户端的公司通常试图将硬件与在线服务结合起来。这种方法效果不佳,部分原因是你需要两种不同类型的公司来构建消费电子产品和运行在线服务,部分原因是因为用户讨厌这个想法。送出剃须刀并在刀片上赚钱可能对吉列有效,但剃须刀比Web终端的承诺小得多。手机手机制造商满足于销售硬件而不试图捕获服务收入。这也应该是互联网客户端的模型。如果有人只卖一个外观好看的小盒子,带有一个Web浏览器,你可以用它通过任何ISP连接,该国的每个技术恐惧者都会买一个。
[2] 安全总是更多地依赖于不搞砸,而不是任何设计决策,但基于服务器软件的性质将使开发者更加注意不搞砸。破坏服务器可能造成如此大的损害,以至于ASP(想要留在业务中)可能会对安全小心。
[3] 1995年,当我们开始Viaweb时,Java applets应该是每个人都用来开发基于服务器应用程序的技术。Applets在我们看来是一个过时的想法。下载程序在客户端运行?简单地把程序全部放在服务器上运行更容易。我们在applets上浪费了很少时间,但无数其他创业公司一定被诱入这个焦油坑。很少有能够活着逃脱的,否则微软不能在最新版本的Explorer中放弃Java。
[4] 这一点归功于Trevor Blackwell,他补充说”编写软件的成本比其规模增长得更快。这主要是由于修复旧错误,如果所有错误都很快发现,成本可以更线性。”
[5] 最难找到的错误类型可能是复合错误的一种变体,其中一个错误恰好补偿了另一个。当你修复一个错误时,另一个变得可见。但这似乎修复是错误的,因为那是你最后改变的事情。
[6] 在Viaweb内部,我们曾经举办过一个比赛,描述我们软件最糟糕的事情。两个客户支持人员并列第一, entries 我现在回想起来仍然不寒而栗。我们立即修复了这两个问题。
[7] Robert Morris编写了订购系统,购物者用来下订单。Trevor Blackwell编写了图像生成器和管理器,商家用来检索订单、查看统计信息和配置域名等。我编写了编辑器,商家用来构建他们的站点。订购系统和图像生成器是用C和C++编写的,管理器主要是用Perl,编辑器是用Lisp。
[8] 价格歧视是如此普遍(你多久听到零售商声称他们的购买力意味着为你提供更低价格?)我惊讶地发现它被1936年的Robinson-Patman法案在美国取缔。这项法律似乎没有得到严格执行。
[9] 在《No Logo》中,Naomi Klein说,受到”城市青年”喜爱的服装品牌不会太努力防止入店行窃,因为在他们的目标市场中,入店行窃者也是时尚领导者。
[10] 公司经常想知道什么外包什么,什么不外包。一个可能的答案:外包任何没有直接暴露在竞争压力下的工作,因为外包它从而将其暴露在竞争压力下。
[11] 这两个人是Dan Bricklin和Bob Frankston。Dan用Basic在几天内编写了一个原型,然后在接下来的一年里,他们一起(主要在晚上)制作了一个用6502机器语言编写的更强大版本。Dan当时在哈佛商学院,Bob名义上有一份编写软件的日常工作。“创业没有很大的风险,“Bob写道,“如果失败就失败了。没什么大不了的。”
[12] 这并不像我听起来那么容易。口碑传播需要痛苦地长时间才能开始,直到我们雇佣了一家公关公司(无疑是业内最好的)每月16,000美元,我们才开始获得大量媒体报道。然而,唯一重要的渠道确实是我们自己的Web站点。
[13] 如果Mac如此伟大,为什么它输了?又是成本。微软专注于软件业务,并向Apple硬件释放了一大群廉价组件供应商。在关键时期西装接管了也没有帮助。
[14] 一件有助于基于Web应用程序的事情,并帮助防止下一代软件被微软掩盖,将是一个好的开源浏览器。Mozilla是开源的,但似乎因为长期作为公司软件而受到影响。一个小的、快速的、积极维护的浏览器本身就是一个伟大的东西,而且可能也会鼓励公司构建小型Web设备。
除此之外,一个合适的开源浏览器将导致HTTP和HTML继续发展(如Perl那样)。能够区分选择链接和跟随链接将对基于Web的应用程序有很大帮助;你需要的只是HTTP的一个简单增强,允许在请求中多个url。级联菜单也会很好。
如果你想改变世界,编写一个新的Mosaic。认为太晚了?1998年很多人认为推出一个新的搜索引擎太晚了,但Google证明他们错了。如果当前选择足够糟糕,总是有新事物的空间。确保它首先在所有免费的操作系统上工作——新事物从他们的用户开始。
[15] Trevor Blackwell,可能比任何人都从个人经验中更多地了解这一点,写道:
“我会更进一步说,因为基于服务器的软件对程序员如此困难,它导致了远离大公司的根本经济转变。它需要程序员只有在自己的公司时才愿意提供的强度和奉献精神。软件公司可以雇佣熟练的人在不太 demanding 的环境中工作,可以雇佣不熟练的人忍受困难,但他们不能雇佣高技能的人来拼命。由于资本不再需要,大公司没有什么可以带来的。”
[16] 在本文的原始版本中,我建议避免使用Javascript。这在2001年是个好计划,但Javascript现在可以工作了。
感谢Sarah Harlin、Trevor Blackwell、Robert Morris、Eric Raymond、Ken Anderson和Dan Giffin阅读本文草稿;感谢Dan Bricklin和Bob Frankston提供关于VisiCalc的信息;再次感谢Ken Anderson邀请我在BBN演讲。
你会在《Hackers & Painters》中找到本文和其他14篇文章。
一些技术细节
日文翻译
微软最终同意了
盖茨电子邮件
The Other Road Ahead
September 2001
(This article explains why much of the next generation of software may be server-based, what that will mean for programmers, and why this new kind of software is a great opportunity for startups. It’s derived from a talk at BBN Labs.)
In the summer of 1995, my friend Robert Morris and I decided to start a startup. The PR campaign leading up to Netscape’s IPO was running full blast then, and there was a lot of talk in the press about online commerce. At the time there might have been thirty actual stores on the Web, all made by hand. If there were going to be a lot of online stores, there would need to be software for making them, so we decided to write some.
For the first week or so we intended to make this an ordinary desktop application. Then one day we had the idea of making the software run on our Web server, using the browser as an interface. We tried rewriting the software to work over the Web, and it was clear that this was the way to go. If we wrote our software to run on the server, it would be a lot easier for the users and for us as well.
This turned out to be a good plan. Now, as Yahoo Store, this software is the most popular online store builder, with about 14,000 users.
When we started Viaweb, hardly anyone understood what we meant when we said that the software ran on the server. It was not until Hotmail was launched a year later that people started to get it. Now everyone knows that this is a valid approach. There is a name now for what we were: an Application Service Provider, or ASP.
I think that a lot of the next generation of software will be written on this model. Even Microsoft, who have the most to lose, seem to see the inevitability of moving some things off the desktop. If software moves off the desktop and onto servers, it will mean a very different world for developers. This article describes the surprising things we saw, as some of the first visitors to this new world. To the extent software does move onto servers, what I’m describing here is the future.
The Next Thing?
When we look back on the desktop software era, I think we’ll marvel at the inconveniences people put up with, just as we marvel now at what early car owners put up with. For the first twenty or thirty years, you had to be a car expert to own a car. But cars were such a big win that lots of people who weren’t car experts wanted to have them as well.
Computers are in this phase now. When you own a desktop computer, you end up learning a lot more than you wanted to know about what’s happening inside it. But more than half the households in the US own one. My mother has a computer that she uses for email and for keeping accounts. About a year ago she was alarmed to receive a letter from Apple, offering her a discount on a new version of the operating system. There’s something wrong when a sixty-five year old woman who wants to use a computer for email and accounts has to think about installing new operating systems. Ordinary users shouldn’t even know the words “operating system,” much less “device driver” or “patch.”
There is now another way to deliver software that will save users from becoming system administrators. Web-based applications are programs that run on Web servers and use Web pages as the user interface. For the average user this new kind of software will be easier, cheaper, more mobile, more reliable, and often more powerful than desktop software.
With Web-based software, most users won’t have to think about anything except the applications they use. All the messy, changing stuff will be sitting on a server somewhere, maintained by the kind of people who are good at that kind of thing. And so you won’t ordinarily need a computer, per se, to use software. All you’ll need will be something with a keyboard, a screen, and a Web browser. Maybe it will have wireless Internet access. Maybe it will also be your cell phone. Whatever it is, it will be consumer electronics: something that costs about $200, and that people choose mostly based on how the case looks. You’ll pay more for Internet services than you do for the hardware, just as you do now with telephones. [1]
It will take about a tenth of a second for a click to get to the server and back, so users of heavily interactive software, like Photoshop, will still want to have the computations happening on the desktop. But if you look at the kind of things most people use computers for, a tenth of a second latency would not be a problem. My mother doesn’t really need a desktop computer, and there are a lot of people like her.
The Win for Users
Near my house there is a car with a bumper sticker that reads “death before inconvenience.” Most people, most of the time, will take whatever choice requires least work. If Web-based software wins, it will be because it’s more convenient. And it looks as if it will be, for users and developers both.
To use a purely Web-based application, all you need is a browser connected to the Internet. So you can use a Web-based application anywhere. When you install software on your desktop computer, you can only use it on that computer. Worse still, your files are trapped on that computer. The inconvenience of this model becomes more and more evident as people get used to networks.
The thin end of the wedge here was Web-based email. Millions of people now realize that you should have access to email messages no matter where you are. And if you can see your email, why not your calendar? If you can discuss a document with your colleagues, why can’t you edit it? Why should any of your data be trapped on some computer sitting on a faraway desk?
The whole idea of “your computer” is going away, and being replaced with “your data.” You should be able to get at your data from any computer. Or rather, any client, and a client doesn’t have to be a computer.
Clients shouldn’t store data; they should be like telephones. In fact they may become telephones, or vice versa. And as clients get smaller, you have another reason not to keep your data on them: something you carry around with you can be lost or stolen. Leaving your PDA in a taxi is like a disk crash, except that your data is handed to someone else instead of being vaporized.
With purely Web-based software, neither your data nor the applications are kept on the client. So you don’t have to install anything to use it. And when there’s no installation, you don’t have to worry about installation going wrong. There can’t be incompatibilities between the application and your operating system, because the software doesn’t run on your operating system.
Because it needs no installation, it will be easy, and common, to try Web-based software before you “buy” it. You should expect to be able to test-drive any Web-based application for free, just by going to the site where it’s offered. At Viaweb our whole site was like a big arrow pointing users to the test drive.
After trying the demo, signing up for the service should require nothing more than filling out a brief form (the briefer the better). And that should be the last work the user has to do. With Web-based software, you should get new releases without paying extra, or doing any work, or possibly even knowing about it.
Upgrades won’t be the big shocks they are now. Over time applications will quietly grow more powerful. This will take some effort on the part of the developers. They will have to design software so that it can be updated without confusing the users. That’s a new problem, but there are ways to solve it.
With Web-based applications, everyone uses the same version, and bugs can be fixed as soon as they’re discovered. So Web-based software should have far fewer bugs than desktop software. At Viaweb, I doubt we ever had ten known bugs at any one time. That’s orders of magnitude better than desktop software.
Web-based applications can be used by several people at the same time. This is an obvious win for collaborative applications, but I bet users will start to want this in most applications once they realize it’s possible. It will often be useful to let two people edit the same document, for example. Viaweb let multiple users edit a site simultaneously, more because that was the right way to write the software than because we expected users to want to, but it turned out that many did.
When you use a Web-based application, your data will be safer. Disk crashes won’t be a thing of the past, but users won’t hear about them anymore. They’ll happen within server farms. And companies offering Web-based applications will actually do backups— not only because they’ll have real system administrators worrying about such things, but because an ASP that does lose people’s data will be in big, big trouble. When people lose their own data in a disk crash, they can’t get that mad, because they only have themselves to be mad at. When a company loses their data for them, they’ll get a lot madder.
Finally, Web-based software should be less vulnerable to viruses. If the client doesn’t run anything except a browser, there’s less chance of running viruses, and no data locally to damage. And a program that attacked the servers themselves should find them very well defended. [2]
For users, Web-based software will be less stressful. I think if you looked inside the average Windows user you’d find a huge and pretty much untapped desire for software meeting that description. Unleashed, it could be a powerful force.
City of Code
To developers, the most conspicuous difference between Web-based and desktop software is that a Web-based application is not a single piece of code. It will be a collection of programs of different types rather than a single big binary. And so designing Web-based software is like desiging a city rather than a building: as well as buildings you need roads, street signs, utilities, police and fire departments, and plans for both growth and various kinds of disasters.
At Viaweb, software included fairly big applications that users talked to directly, programs that those programs used, programs that ran constantly in the background looking for problems, programs that tried to restart things if they broke, programs that ran occasionally to compile statistics or build indexes for searches, programs we ran explicitly to garbage-collect resources or to move or restore data, programs that pretended to be users (to measure performance or expose bugs), programs for diagnosing network troubles, programs for doing backups, interfaces to outside services, software that drove an impressive collection of dials displaying real-time server statistics (a hit with visitors, but indispensable for us too), modifications (including bug fixes) to open-source software, and a great many configuration files and settings. Trevor Blackwell wrote a spectacular program for moving stores to new servers across the country, without shutting them down, after we were bought by Yahoo. Programs paged us, sent faxes and email to users, conducted transactions with credit card processors, and talked to one another through sockets, pipes, http requests, ssh, udp packets, shared memory, and files. Some of Viaweb even consisted of the absence of programs, since one of the keys to Unix security is not to run unnecessary utilities that people might use to break into your servers.
It did not end with software. We spent a lot of time thinking about server configurations. We built the servers ourselves, from components— partly to save money, and partly to get exactly what we wanted. We had to think about whether our upstream ISP had fast enough connections to all the backbones. We serially dated RAID suppliers.
But hardware is not just something to worry about. When you control it you can do more for users. With a desktop application, you can specify certain minimum hardware, but you can’t add more. If you administer the servers, you can in one step enable all your users to page people, or send faxes, or send commands by phone, or process credit cards, etc, just by installing the relevant hardware. We always looked for new ways to add features with hardware, not just because it pleased users, but also as a way to distinguish ourselves from competitors who (either because they sold desktop software, or resold Web-based applications through ISPs) didn’t have direct control over the hardware.
Because the software in a Web-based application will be a collection of programs rather than a single binary, it can be written in any number of different languages. When you’re writing desktop software, you’re practically forced to write the application in the same language as the underlying operating system— meaning C and C++. And so these languages (especially among nontechnical people like managers and VCs) got to be considered as the languages for “serious” software development. But that was just an artifact of the way desktop software had to be delivered. For server-based software you can use any language you want. [3] Today a lot of the top hackers are using languages far removed from C and C++: Perl, Python, and even Lisp.
With server-based software, no one can tell you what language to use, because you control the whole system, right down to the hardware. Different languages are good for different tasks. You can use whichever is best for each. And when you have competitors, “you can” means “you must” (we’ll return to this later), because if you don’t take advantage of this possibility, your competitors will.
Most of our competitors used C and C++, and this made their software visibly inferior because (among other things), they had no way around the statelessness of CGI scripts. If you were going to change something, all the changes had to happen on one page, with an Update button at the bottom. As I’ve written elsewhere, by using Lisp, which many people still consider a research language, we could make the Viaweb editor behave more like desktop software.
Releases
One of the most important changes in this new world is the way you do releases. In the desktop software business, doing a release is a huge trauma, in which the whole company sweats and strains to push out a single, giant piece of code. Obvious comparisons suggest themselves, both to the process and the resulting product.
With server-based software, you can make changes almost as you would in a program you were writing for yourself. You release software as a series of incremental changes instead of an occasional big explosion. A typical desktop software company might do one or two releases a year. At Viaweb we often did three to five releases a day.
When you switch to this new model, you realize how much software development is affected by the way it is released. Many of the nastiest problems you see in the desktop software business are due to catastrophic nature of releases.
When you release only one new version a year, you tend to deal with bugs wholesale. Some time before the release date you assemble a new version in which half the code has been torn out and replaced, introducing countless bugs. Then a squad of QA people step in and start counting them, and the programmers work down the list, fixing them. They do not generally get to the end of the list, and indeed, no one is sure where the end is. It’s like fishing rubble out of a pond. You never really know what’s happening inside the software. At best you end up with a statistical sort of correctness.
With server-based software, most of the change is small and incremental. That in itself is less likely to introduce bugs. It also means you know what to test most carefully when you’re about to release software: the last thing you changed. You end up with a much firmer grip on the code. As a general rule, you do know what’s happening inside it. You don’t have the source code memorized, of course, but when you read the source you do it like a pilot scanning the instrument panel, not like a detective trying to unravel some mystery.
Desktop software breeds a certain fatalism about bugs. You know that you’re shipping something loaded with bugs, and you’ve even set up mechanisms to compensate for it (e.g. patch releases). So why worry about a few more? Soon you’re releasing whole features you know are broken. Apple did this earlier this year. They felt under pressure to release their new OS, whose release date had already slipped four times, but some of the software (support for CDs and DVDs) wasn’t ready. The solution? They released the OS without the unfinished parts, and users will have to install them later.
With Web-based software, you never have to release software before it works, and you can release it as soon as it does work.
The industry veteran may be thinking, it’s a fine-sounding idea to say that you never have to release software before it works, but what happens when you’ve promised to deliver a new version of your software by a certain date? With Web-based software, you wouldn’t make such a promise, because there are no versions. Your software changes gradually and continuously. Some changes might be bigger than others, but the idea of versions just doesn’t naturally fit onto Web-based software.
If anyone remembers Viaweb this might sound odd, because we were always announcing new versions. This was done entirely for PR purposes. The trade press, we learned, thinks in version numbers. They will give you major coverage for a major release, meaning a new first digit on the version number, and generally a paragraph at most for a point release, meaning a new digit after the decimal point.
Some of our competitors were offering desktop software and actually had version numbers. And for these releases, the mere fact of which seemed to us evidence of their backwardness, they would get all kinds of publicity. We didn’t want to miss out, so we started giving version numbers to our software too. When we wanted some publicity, we’d make a list of all the features we’d added since the last “release,” stick a new version number on the software, and issue a press release saying that the new version was available immediately. Amazingly, no one ever called us on it.
By the time we were bought, we had done this three times, so we were on Version 4. Version 4.1 if I remember correctly. After Viaweb became Yahoo Store, there was no longer such a desperate need for publicity, so although the software continued to evolve, the whole idea of version numbers was quietly dropped.
Bugs
The other major technical advantage of Web-based software is that you can reproduce most bugs. You have the users’ data right there on your disk. If someone breaks your software, you don’t have to try to guess what’s going on, as you would with desktop software: you should be able to reproduce the error while they’re on the phone with you. You might even know about it already, if you have code for noticing errors built into your application.
Web-based software gets used round the clock, so everything you do is immediately put through the wringer. Bugs turn up quickly.
Software companies are sometimes accused of letting the users debug their software. And that is just what I’m advocating. For Web-based software it’s actually a good plan, because the bugs are fewer and transient. When you release software gradually you get far fewer bugs to start with. And when you can reproduce errors and release changes instantly, you can find and fix most bugs as soon as they appear. We never had enough bugs at any one time to bother with a formal bug-tracking system.
You should test changes before you release them, of course, so no major bugs should get released. Those few that inevitably slip through will involve borderline cases and will only affect the few users that encounter them before someone calls in to complain. As long as you fix bugs right away, the net effect, for the average user, is far fewer bugs. I doubt the average Viaweb user ever saw a bug.
Fixing fresh bugs is easier than fixing old ones. It’s usually fairly quick to find a bug in code you just wrote. When it turns up you often know what’s wrong before you even look at the source, because you were already worrying about it subconsciously. Fixing a bug in something you wrote six months ago (the average case if you release once a year) is a lot more work. And since you don’t understand the code as well, you’re more likely to fix it in an ugly way, or even introduce more bugs. [4]
When you catch bugs early, you also get fewer compound bugs. Compound bugs are two separate bugs that interact: you trip going downstairs, and when you reach for the handrail it comes off in your hand. In software this kind of bug is the hardest to find, and also tends to have the worst consequences. [5] The traditional “break everything and then filter out the bugs” approach inherently yields a lot of compound bugs. And software that’s released in a series of small changes inherently tends not to. The floors are constantly being swept clean of any loose objects that might later get stuck in something.
It helps if you use a technique called functional programming. Functional programming means avoiding side-effects. It’s something you’re more likely to see in research papers than commercial software, but for Web-based applications it turns out to be really useful. It’s hard to write entire programs as purely functional code, but you can write substantial chunks this way. It makes those parts of your software easier to test, because they have no state, and that is very convenient in a situation where you are constantly making and testing small modifications. I wrote much of Viaweb’s editor in this style, and we made our scripting language, RTML, a purely functional language.
People from the desktop software business will find this hard to credit, but at Viaweb bugs became almost a game. Since most released bugs involved borderline cases, the users who encountered them were likely to be advanced users, pushing the envelope. Advanced users are more forgiving about bugs, especially since you probably introduced them in the course of adding some feature they were asking for. In fact, because bugs were rare and you had to be doing sophisticated things to see them, advanced users were often proud to catch one. They would call support in a spirit more of triumph than anger, as if they had scored points off us.
Support
When you can reproduce errors, it changes your approach to customer support. At most software companies, support is offered as a way to make customers feel better. They’re either calling you about a known bug, or they’re just doing something wrong and you have to figure out what. In either case there’s not much you can learn from them. And so you tend to view support calls as a pain in the ass that you want to isolate from your developers as much as possible.
This was not how things worked at Viaweb. At Viaweb, support was free, because we wanted to hear from customers. If someone had a problem, we wanted to know about it right away so that we could reproduce the error and release a fix.
So at Viaweb the developers were always in close contact with support. The customer support people were about thirty feet away from the programmers, and knew that they could always interrupt anything with a report of a genuine bug. We would leave a board meeting to fix a serious bug.
Our approach to support made everyone happier. The customers were delighted. Just imagine how it would feel to call a support line and be treated as someone bringing important news. The customer support people liked it because it meant they could help the users, instead of reading scripts to them. And the programmers liked it because they could reproduce bugs instead of just hearing vague second-hand reports about them.
Our policy of fixing bugs on the fly changed the relationship between customer support people and hackers. At most software companies, support people are underpaid human shields, and hackers are little copies of God the Father, creators of the world. Whatever the procedure for reporting bugs, it is likely to be one-directional: support people who hear about bugs fill out some form that eventually gets passed on (possibly via QA) to programmers, who put it on their list of things to do. It was very different at Viaweb. Within a minute of hearing about a bug from a customer, the support people could be standing next to a programmer hearing him say “Shit, you’re right, it’s a bug.” It delighted the support people to hear that “you’re right” from the hackers. They used to bring us bugs with the same expectant air as a cat bringing you a mouse it has just killed. It also made them more careful in judging the seriousness of a bug, because now their honor was on the line.
After we were bought by Yahoo, the customer support people were moved far away from the programmers. It was only then that we realized that they were effectively QA and to some extent marketing as well. In addition to catching bugs, they were the keepers of the knowledge of vaguer, buglike things, like features that confused users. [6] They were also a kind of proxy focus group; we could ask them which of two new features users wanted more, and they were always right.
Morale
Being able to release software immediately is a big motivator. Often as I was walking to work I would think of some change I wanted to make to the software, and do it that day. This worked for bigger features as well. Even if something was going to take two weeks to write (few projects took longer), I knew I could see the effect in the software as soon as it was done.
If I’d had to wait a year for the next release, I would have shelved most of these ideas, for a while at least. The thing about ideas, though, is that they lead to more ideas. Have you ever noticed that when you sit down to write something, half the ideas that end up in it are ones you thought of while writing it? The same thing happens with software. Working to implement one idea gives you more ideas. So shelving an idea costs you not only that delay in implementing it, but also all the ideas that implementing it would have led to. In fact, shelving an idea probably even inhibits new ideas: as you start to think of some new feature, you catch sight of the shelf and think “but I already have a lot of new things I want to do for the next release.”
What big companies do instead of implementing features is plan them. At Viaweb we sometimes ran into trouble on this account. Investors and analysts would ask us what we had planned for the future. The truthful answer would have been, we didn’t have any plans. We had general ideas about things we wanted to improve, but if we knew how we would have done it already. What were we going to do in the next six months? Whatever looked like the biggest win. I don’t know if I ever dared give this answer, but that was the truth. Plans are just another word for ideas on the shelf. When we thought of good ideas, we implemented them.
At Viaweb, as at many software companies, most code had one definite owner. But when you owned something you really owned it: no one except the owner of a piece of software had to approve (or even know about) a release. There was no protection against breakage except the fear of looking like an idiot to one’s peers, and that was more than enough. I may have given the impression that we just blithely plowed forward writing code. We did go fast, but we thought very carefully before we released software onto those servers. And paying attention is more important to reliability than moving slowly. Because he pays close attention, a Navy pilot can land a 40,000 lb. aircraft at 140 miles per hour on a pitching carrier deck, at night, more safely than the average teenager can cut a bagel.
This way of writing software is a double-edged sword of course. It works a lot better for a small team of good, trusted programmers than it would for a big company of mediocre ones, where bad ideas are caught by committees instead of the people that had them.
Brooks in Reverse
Fortunately, Web-based software does require fewer programmers. I once worked for a medium-sized desktop software company that had over 100 people working in engineering as a whole. Only 13 of these were in product development. All the rest were working on releases, ports, and so on. With Web-based software, all you need (at most) are the 13 people, because there are no releases, ports, and so on.
Viaweb was written by just three people. [7] I was always under pressure to hire more, because we wanted to get bought, and we knew that buyers would have a hard time paying a high price for a company with only three programmers. (Solution: we hired more, but created new projects for them.)
When you can write software with fewer programmers, it saves you more than money. As Fred Brooks pointed out in The Mythical Man-Month, adding people to a project tends to slow it down. The number of possible connections between developers grows exponentially with the size of the group. The larger the group, the more time they’ll spend in meetings negotiating how their software will work together, and the more bugs they’ll get from unforeseen interactions. Fortunately, this process also works in reverse: as groups get smaller, software development gets exponentially more efficient. I can’t remember the programmers at Viaweb ever having an actual meeting. We never had more to say at any one time than we could say as we were walking to lunch.
If there is a downside here, it is that all the programmers have to be to some degree system administrators as well. When you’re hosting software, someone has to be watching the servers, and in practice the only people who can do this properly are the ones who wrote the software. At Viaweb our system had so many components and changed so frequently that there was no definite border between software and infrastructure. Arbitrarily declaring such a border would have constrained our design choices. And so although we were constantly hoping that one day (“in a couple months”) everything would be stable enough that we could hire someone whose job was just to worry about the servers, it never happened.
I don’t think it could be any other way, as long as you’re still actively developing the product. Web-based software is never going to be something you write, check in, and go home. It’s a live thing, running on your servers right now. A bad bug might not just crash one user’s process; it could crash them all. If a bug in your code corrupts some data on disk, you have to fix it. And so on. We found that you don’t have to watch the servers every minute (after the first year or so), but you definitely want to keep an eye on things you’ve changed recently. You don’t release code late at night and then go home.
Watching Users
With server-based software, you’re in closer touch with your code. You can also be in closer touch with your users. Intuit is famous for introducing themselves to customers at retail stores and asking to follow them home. If you’ve ever watched someone use your software for the first time, you know what surprises must have awaited them.
Software should do what users think it will. But you can’t have any idea what users will be thinking, believe me, until you watch them. And server-based software gives you unprecedented information about their behavior. You’re not limited to small, artificial focus groups. You can see every click made by every user. You have to consider carefully what you’re going to look at, because you don’t want to violate users’ privacy, but even the most general statistical sampling can be very useful.
When you have the users on your server, you don’t have to rely on benchmarks, for example. Benchmarks are simulated users. With server-based software, you can watch actual users. To decide what to optimize, just log into a server and see what’s consuming all the CPU. And you know when to stop optimizing too: we eventually got the Viaweb editor to the point where it was memory-bound rather than CPU-bound, and since there was nothing we could do to decrease the size of users’ data (well, nothing easy), we knew we might as well stop there.
Efficiency matters for server-based software, because you’re paying for the hardware. The number of users you can support per server is the divisor of your capital cost, so if you can make your software very efficient you can undersell competitors and still make a profit. At Viaweb we got the capital cost per user down to about $5. It would be less now, probably less than the cost of sending them the first month’s bill. Hardware is free now, if your software is reasonably efficient.
Watching users can guide you in design as well as optimization. Viaweb had a scripting language called RTML that let advanced users define their own page styles. We found that RTML became a kind of suggestion box, because users only used it when the predefined page styles couldn’t do what they wanted. Originally the editor put button bars across the page, for example, but after a number of users used RTML to put buttons down the left side, we made that an option (in fact the default) in the predefined page styles.
Finally, by watching users you can often tell when they’re in trouble. And since the customer is always right, that’s a sign of something you need to fix. At Viaweb the key to getting users was the online test drive. It was not just a series of slides built by marketing people. In our test drive, users actually used the software. It took about five minutes, and at the end of it they had built a real, working store. The test drive was the way we got nearly all our new users. I think it will be the same for most Web-based applications. If users can get through a test drive successfully, they’ll like the product. If they get confused or bored, they won’t. So anything we could do to get more people through the test drive would increase our growth rate.
I studied click trails of people taking the test drive and found that at a certain step they would get confused and click on the browser’s Back button. (If you try writing Web-based applications, you’ll find that the Back button becomes one of your most interesting philosophical problems.) So I added a message at that point, telling users that they were nearly finished, and reminding them not to click on the Back button. Another great thing about Web-based software is that you get instant feedback from changes: the number of people completing the test drive rose immediately from 60% to 90%. And since the number of new users was a function of the number of completed test drives, our revenue growth increased by 50%, just from that change.
Money
In the early 1990s I read an article in which someone said that software was a subscription business. At first this seemed a very cynical statement. But later I realized that it reflects reality: software development is an ongoing process. I think it’s cleaner if you openly charge subscription fees, instead of forcing people to keep buying and installing new versions so that they’ll keep paying you. And fortunately, subscriptions are the natural way to bill for Web-based applications.
Hosting applications is an area where companies will play a role that is not likely to be filled by freeware. Hosting applications is a lot of stress, and has real expenses. No one is going to want to do it for free.
For companies, Web-based applications are an ideal source of revenue. Instead of starting each quarter with a blank slate, you have a recurring revenue stream. Because your software evolves gradually, you don’t have to worry that a new model will flop; there never need be a new model, per se, and if you do something to the software that users hate, you’ll know right away. You have no trouble with uncollectable bills; if someone won’t pay you can just turn off the service. And there is no possibility of piracy.
That last “advantage” may turn out to be a problem. Some amount of piracy is to the advantage of software companies. If some user really would not have bought your software at any price, you haven’t lost anything if he uses a pirated copy. In fact you gain, because he is one more user helping to make your software the standard— or who might buy a copy later, when he graduates from high school.
When they can, companies like to do something called price discrimination, which means charging each customer as much as they can afford. [8] Software is particularly suitable for price discrimination, because the marginal cost is close to zero. This is why some software costs more to run on Suns than on Intel boxes: a company that uses Suns is not interested in saving money and can safely be charged more. Piracy is effectively the lowest tier of price discrimination. I think that software companies understand this and deliberately turn a blind eye to some kinds of piracy. [9] With server-based software they are going to have to come up with some other solution.
Web-based software sells well, especially in comparison to desktop software, because it’s easy to buy. You might think that people decide to buy something, and then buy it, as two separate steps. That’s what I thought before Viaweb, to the extent I thought about the question at all. In fact the second step can propagate back into the first: if something is hard to buy, people will change their mind about whether they wanted it. And vice versa: you’ll sell more of something when it’s easy to buy. I buy more books because Amazon exists. Web-based software is just about the easiest thing in the world to buy, especially if you have just done an online demo. Users should not have to do much more than enter a credit card number. (Make them do more at your peril.)
Sometimes Web-based software is offered through ISPs acting as resellers. This is a bad idea. You have to be administering the servers, because you need to be constantly improving both hardware and software. If you give up direct control of the servers, you give up most of the advantages of developing Web-based applications.
Several of our competitors shot themselves in the foot this way— usually, I think, because they were overrun by suits who were excited about this huge potential channel, and didn’t realize that it would ruin the product they hoped to sell through it. Selling Web-based software through ISPs is like selling sushi through vending machines.
Customers
Who will the customers be? At Viaweb they were initially individuals and smaller companies, and I think this will be the rule with Web-based applications. These are the users who are ready to try new things, partly because they’re more flexible, and partly because they want the lower costs of new technology.
Web-based applications will often be the best thing for big companies too (though they’ll be slow to realize it). The best intranet is the Internet. If a company uses true Web-based applications, the software will work better, the servers will be better administered, and employees will have access to the system from anywhere.
The argument against this approach usually hinges on security: if access is easier for employees, it will be for bad guys too. Some larger merchants were reluctant to use Viaweb because they thought customers’ credit card information would be safer on their own servers. It was not easy to make this point diplomatically, but in fact the data was almost certainly safer in our hands than theirs. Who can hire better people to manage security, a technology startup whose whole business is running servers, or a clothing retailer? Not only did we have better people worrying about security, we worried more about it. If someone broke into the clothing retailer’s servers, it would affect at most one merchant, could probably be hushed up, and in the worst case might get one person fired. If someone broke into ours, it could affect thousands of merchants, would probably end up as news on CNet, and could put us out of business.
If you want to keep your money safe, do you keep it under your mattress at home, or put it in a bank? This argument applies to every aspect of server administration: not just security, but uptime, bandwidth, load management, backups, etc. Our existence depended on doing these things right. Server problems were the big no-no for us, like a dangerous toy would be for a toy maker, or a salmonella outbreak for a food processor.
A big company that uses Web-based applications is to that extent outsourcing IT. Drastic as it sounds, I think this is generally a good idea. Companies are likely to get better service this way than they would from in-house system administrators. System administrators can become cranky and unresponsive because they’re not directly exposed to competitive pressure: a salesman has to deal with customers, and a developer has to deal with competitors’ software, but a system administrator, like an old bachelor, has few external forces to keep him in line. [10] At Viaweb we had external forces in plenty to keep us in line. The people calling us were customers, not just co-workers. If a server got wedged, we jumped; just thinking about it gives me a jolt of adrenaline, years later.
So Web-based applications will ordinarily be the right answer for big companies too. They will be the last to realize it, however, just as they were with desktop computers. And partly for the same reason: it will be worth a lot of money to convince big companies that they need something more expensive.
There is always a tendency for rich customers to buy expensive solutions, even when cheap solutions are better, because the people offering expensive solutions can spend more to sell them. At Viaweb we were always up against this. We lost several high-end merchants to Web consulting firms who convinced them they’d be better off if they paid half a million dollars for a custom-made online store on their own server. They were, as a rule, not better off, as more than one discovered when Christmas shopping season came around and loads rose on their server. Viaweb was a lot more sophisticated than what most of these merchants got, but we couldn’t afford to tell them. At $300 a month, we couldn’t afford to send a team of well-dressed and authoritative-sounding people to make presentations to customers.
A large part of what big companies pay extra for is the cost of selling expensive things to them. (If the Defense Department pays a thousand dollars for toilet seats, it’s partly because it costs a lot to sell toilet seats for a thousand dollars.) And this is one reason intranet software will continue to thrive, even though it is probably a bad idea. It’s simply more expensive. There is nothing you can do about this conundrum, so the best plan is to go for the smaller customers first. The rest will come in time.
Son of Server
Running software on the server is nothing new. In fact it’s the old model: mainframe applications are all server-based. If server-based software is such a good idea, why did it lose last time? Why did desktop computers eclipse mainframes?
At first desktop computers didn’t look like much of a threat. The first users were all hackers— or hobbyists, as they were called then. They liked microcomputers because they were cheap. For the first time, you could have your own computer. The phrase “personal computer” is part of the language now, but when it was first used it had a deliberately audacious sound, like the phrase “personal satellite” would today.
Why did desktop computers take over? I think it was because they had better software. And I think the reason microcomputer software was better was that it could be written by small companies.
I don’t think many people realize how fragile and tentative startups are in the earliest stage. Many startups begin almost by accident— as a couple guys, either with day jobs or in school, writing a prototype of something that might, if it looks promising, turn into a company. At this larval stage, any significant obstacle will stop the startup dead in its tracks. Writing mainframe software required too much commitment up front. Development machines were expensive, and because the customers would be big companies, you’d need an impressive-looking sales force to sell it to them. Starting a startup to write mainframe software would be a much more serious undertaking than just hacking something together on your Apple II in the evenings. And so you didn’t get a lot of startups writing mainframe applications.
The arrival of desktop computers inspired a lot of new software, because writing applications for them seemed an attainable goal to larval startups. Development was cheap, and the customers would be individual people that you could reach through computer stores or even by mail-order.
The application that pushed desktop computers out into the mainstream was VisiCalc, the first spreadsheet. It was written by two guys working in an attic, and yet did things no mainframe software could do. [11] VisiCalc was such an advance, in its time, that people bought Apple IIs just to run it. And this was the beginning of a trend: desktop computers won because startups wrote software for them.
It looks as if server-based software will be good this time around, because startups will write it. Computers are so cheap now that you can get started, as we did, using a desktop computer as a server. Inexpensive processors have eaten the workstation market (you rarely even hear the word now) and are most of the way through the server market; Yahoo’s servers, which deal with loads as high as any on the Internet, all have the same inexpensive Intel processors that you have in your desktop machine. And once you’ve written the software, all you need to sell it is a Web site. Nearly all our users came direct to our site through word of mouth and references in the press. [12]
Viaweb was a typical larval startup. We were terrified of starting a company, and for the first few months comforted ourselves by treating the whole thing as an experiment that we might call off at any moment. Fortunately, there were few obstacles except technical ones. While we were writing the software, our Web server was the same desktop machine we used for development, connected to the outside world by a dialup line. Our only expenses in that phase were food and rent.
There is all the more reason for startups to write Web-based software now, because writing desktop software has become a lot less fun. If you want to write desktop software now you do it on Microsoft’s terms, calling their APIs and working around their buggy OS. And if you manage to write something that takes off, you may find that you were merely doing market research for Microsoft.
If a company wants to make a platform that startups will build on, they have to make it something that hackers themselves will want to use. That means it has to be inexpensive and well-designed. The Mac was popular with hackers when it first came out, and a lot of them wrote software for it. [13] You see this less with Windows, because hackers don’t use it. The kind of people who are good at writing software tend to be running Linux or FreeBSD now.
I don’t think we would have started a startup to write desktop software, because desktop software has to run on Windows, and before we could write software for Windows we’d have to use it. The Web let us do an end-run around Windows, and deliver software running on Unix direct to users through the browser. That is a liberating prospect, a lot like the arrival of PCs twenty-five years ago.
Microsoft
Back when desktop computers arrived, IBM was the giant that everyone was afraid of. It’s hard to imagine now, but I remember the feeling very well. Now the frightening giant is Microsoft, and I don’t think they are as blind to the threat facing them as IBM was. After all, Microsoft deliberately built their business in IBM’s blind spot.
I mentioned earlier that my mother doesn’t really need a desktop computer. Most users probably don’t. That’s a problem for Microsoft, and they know it. If applications run on remote servers, no one needs Windows. What will Microsoft do? Will they be able to use their control of the desktop to prevent, or constrain, this new generation of software?
My guess is that Microsoft will develop some kind of server/desktop hybrid, where the operating system works together with servers they control. At a minimum, files will be centrally available for users who want that. I don’t expect Microsoft to go all the way to the extreme of doing the computations on the server, with only a browser for a client, if they can avoid it. If you only need a browser for a client, you don’t need Microsoft on the client, and if Microsoft doesn’t control the client, they can’t push users towards their server-based applications.
I think Microsoft will have a hard time keeping the genie in the bottle. There will be too many different types of clients for them to control them all. And if Microsoft’s applications only work with some clients, competitors will be able to trump them by offering applications that work from any client. [14]
In a world of Web-based applications, there is no automatic place for Microsoft. They may succeed in making themselves a place, but I don’t think they’ll dominate this new world as they did the world of desktop applications.
It’s not so much that a competitor will trip them up as that they will trip over themselves. With the rise of Web-based software, they will be facing not just technical problems but their own wishful thinking. What they need to do is cannibalize their existing business, and I can’t see them facing that. The same single-mindedness that has brought them this far will now be working against them. IBM was in exactly the same situation, and they could not master it. IBM made a late and half-hearted entry into the microcomputer business because they were ambivalent about threatening their cash cow, mainframe computing. Microsoft will likewise be hampered by wanting to save the desktop. A cash cow can be a damned heavy monkey on your back.
I’m not saying that no one will dominate server-based applications. Someone probably will eventually. But I think that there will be a good long period of cheerful chaos, just as there was in the early days of microcomputers. That was a good time for startups. Lots of small companies flourished, and did it by making cool things.
Startups but More So
The classic startup is fast and informal, with few people and little money. Those few people work very hard, and technology magnifies the effect of the decisions they make. If they win, they win big.
In a startup writing Web-based applications, everything you associate with startups is taken to an extreme. You can write and launch a product with even fewer people and even less money. You have to be even faster, and you can get away with being more informal. You can literally launch your product as three guys sitting in the living room of an apartment, and a server collocated at an ISP. We did.
Over time the teams have gotten smaller, faster, and more informal. In 1960, software development meant a roomful of men with horn rimmed glasses and narrow black neckties, industriously writing ten lines of code a day on IBM coding forms. In 1980, it was a team of eight to ten people wearing jeans to the office and typing into vt100s. Now it’s a couple of guys sitting in a living room with laptops. (And jeans turn out not to be the last word in informality.)
Startups are stressful, and this, unfortunately, is also taken to an extreme with Web-based applications. Many software companies, especially at the beginning, have periods where the developers slept under their desks and so on. The alarming thing about Web-based software is that there is nothing to prevent this becoming the default. The stories about sleeping under desks usually end: then at last we shipped it and we all went home and slept for a week. Web-based software never ships. You can work 16-hour days for as long as you want to. And because you can, and your competitors can, you tend to be forced to. You can, so you must. It’s Parkinson’s Law running in reverse.
The worst thing is not the hours but the responsibility. Programmers and system administrators traditionally each have their own separate worries. Programmers have to worry about bugs, and system administrators have to worry about infrastructure. Programmers may spend a long day up to their elbows in source code, but at some point they get to go home and forget about it. System administrators never quite leave the job behind, but when they do get paged at 4:00 AM, they don’t usually have to do anything very complicated. With Web-based applications, these two kinds of stress get combined. The programmers become system administrators, but without the sharply defined limits that ordinarily make the job bearable.
At Viaweb we spent the first six months just writing software. We worked the usual long hours of an early startup. In a desktop software company, this would have been the part where we were working hard, but it felt like a vacation compared to the next phase, when we took users onto our server. The second biggest benefit of selling Viaweb to Yahoo (after the money) was to be able to dump ultimate responsibility for the whole thing onto the shoulders of a big company.
Desktop software forces users to become system administrators. Web-based software forces programmers to. There is less stress in total, but more for the programmers. That’s not necessarily bad news. If you’re a startup competing with a big company, it’s good news. [15] Web-based applications offer a straightforward way to outwork your competitors. No startup asks for more.
Just Good Enough
One thing that might deter you from writing Web-based applications is the lameness of Web pages as a UI. That is a problem, I admit. There were a few things we would have really liked to add to HTML and HTTP. What matters, though, is that Web pages are just good enough.
There is a parallel here with the first microcomputers. The processors in those machines weren’t actually intended to be the CPUs of computers. They were designed to be used in things like traffic lights. But guys like Ed Roberts, who designed the Altair, realized that they were just good enough. You could combine one of these chips with some memory (256 bytes in the first Altair), and front panel switches, and you’d have a working computer. Being able to have your own computer was so exciting that there were plenty of people who wanted to buy them, however limited.
Web pages weren’t designed to be a UI for applications, but they’re just good enough. And for a significant number of users, software that you can use from any browser will be enough of a win in itself to outweigh any awkwardness in the UI. Maybe you can’t write the best-looking spreadsheet using HTML, but you can write a spreadsheet that several people can use simultaneously from different locations without special client software, or that can incorporate live data feeds, or that can page you when certain conditions are triggered. More importantly, you can write new kinds of applications that don’t even have names yet. VisiCalc was not merely a microcomputer version of a mainframe application, after all— it was a new type of application.
Of course, server-based applications don’t have to be Web-based. You could have some other kind of client. But I’m pretty sure that’s a bad idea. It would be very convenient if you could assume that everyone would install your client— so convenient that you could easily convince yourself that they all would— but if they don’t, you’re hosed. Because Web-based software assumes nothing about the client, it will work anywhere the Web works. That’s a big advantage already, and the advantage will grow as new Web devices proliferate. Users will like you because your software just works, and your life will be easier because you won’t have to tweak it for every new client. [16]
I feel like I’ve watched the evolution of the Web as closely as anyone, and I can’t predict what’s going to happen with clients. Convergence is probably coming, but where? I can’t pick a winner. One thing I can predict is conflict between AOL and Microsoft. Whatever Microsoft’s .NET turns out to be, it will probably involve connecting the desktop to servers. Unless AOL fights back, they will either be pushed aside or turned into a pipe between Microsoft client and server software. If Microsoft and AOL get into a client war, the only thing sure to work on both will be browsing the Web, meaning Web-based applications will be the only kind that work everywhere.
How will it all play out? I don’t know. And you don’t have to know if you bet on Web-based applications. No one can break that without breaking browsing. The Web may not be the only way to deliver software, but it’s one that works now and will continue to work for a long time. Web-based applications are cheap to develop, and easy for even the smallest startup to deliver. They’re a lot of work, and of a particularly stressful kind, but that only makes the odds better for startups.
Why Not?
E. B. White was amused to learn from a farmer friend that many electrified fences don’t have any current running through them. The cows apparently learn to stay away from them, and after that you don’t need the current. “Rise up, cows!” he wrote, “Take your liberty while despots snore!”
If you’re a hacker who has thought of one day starting a startup, there are probably two things keeping you from doing it. One is that you don’t know anything about business. The other is that you’re afraid of competition. Neither of these fences have any current in them.
There are only two things you have to know about business: build something users love, and make more than you spend. If you get these two right, you’ll be ahead of most startups. You can figure out the rest as you go.
You may not at first make more than you spend, but as long as the gap is closing fast enough you’ll be ok. If you start out underfunded, it will at least encourage a habit of frugality. The less you spend, the easier it is to make more than you spend. Fortunately, it can be very cheap to launch a Web-based application. We launched on under $10,000, and it would be even cheaper today. We had to spend thousands on a server, and thousands more to get SSL. (The only company selling SSL software at the time was Netscape.) Now you can rent a much more powerful server, with SSL included, for less than we paid for bandwidth alone. You could launch a Web-based application now for less than the cost of a fancy office chair.
As for building something users love, here are some general tips. Start by making something clean and simple that you would want to use yourself. Get a version 1.0 out fast, then continue to improve the software, listening closely to the users as you do. The customer is always right, but different customers are right about different things; the least sophisticated users show you what you need to simplify and clarify, and the most sophisticated tell you what features you need to add. The best thing software can be is easy, but the way to do this is to get the defaults right, not to limit users’ choices. Don’t get complacent if your competitors’ software is lame; the standard to compare your software to is what it could be, not what your current competitors happen to have. Use your software yourself, all the time. Viaweb was supposed to be an online store builder, but we used it to make our own site too. Don’t listen to marketing people or designers or product managers just because of their job titles. If they have good ideas, use them, but it’s up to you to decide; software has to be designed by hackers who understand design, not designers who know a little about software. If you can’t design software as well as implement it, don’t start a startup.
Now let’s talk about competition. What you’re afraid of is not presumably groups of hackers like you, but actual companies, with offices and business plans and salesmen and so on, right? Well, they are more afraid of you than you are of them, and they’re right. It’s a lot easier for a couple of hackers to figure out how to rent office space or hire sales people than it is for a company of any size to get software written. I’ve been on both sides, and I know. When Viaweb was bought by Yahoo, I suddenly found myself working for a big company, and it was like trying to run through waist-deep water.
I don’t mean to disparage Yahoo. They had some good hackers, and the top management were real butt-kickers. For a big company, they were exceptional. But they were still only about a tenth as productive as a small startup. No big company can do much better than that. What’s scary about Microsoft is that a company so big can develop software at all. They’re like a mountain that can walk.
Don’t be intimidated. You can do as much that Microsoft can’t as they can do that you can’t. And no one can stop you. You don’t have to ask anyone’s permission to develop Web-based applications. You don’t have to do licensing deals, or get shelf space in retail stores, or grovel to have your application bundled with the OS. You can deliver software right to the browser, and no one can get between you and potential users without preventing them from browsing the Web.
You may not believe it, but I promise you, Microsoft is scared of you. The complacent middle managers may not be, but Bill is, because he was you once, back in 1975, the last time a new way of delivering software appeared.
Notes
[1] Realizing that much of the money is in the services, companies building lightweight clients have usually tried to combine the hardware with an online service. This approach has not worked well, partly because you need two different kinds of companies to build consumer electronics and to run an online service, and partly because users hate the idea. Giving away the razor and making money on the blades may work for Gillette, but a razor is much smaller commitment than a Web terminal. Cell phone handset makers are satisfied to sell hardware without trying to capture the service revenue as well. That should probably be the model for Internet clients too. If someone just sold a nice-looking little box with a Web browser that you could use to connect through any ISP, every technophobe in the country would buy one.
[2] Security always depends more on not screwing up than any design decision, but the nature of server-based software will make developers pay more attention to not screwing up. Compromising a server could cause such damage that ASPs (that want to stay in business) are likely to be careful about security.
[3] In 1995, when we started Viaweb, Java applets were supposed to be the technology everyone was going to use to develop server-based applications. Applets seemed to us an old-fashioned idea. Download programs to run on the client? Simpler just to go all the way and run the programs on the server. We wasted little time on applets, but countless other startups must have been lured into this tar pit. Few can have escaped alive, or Microsoft could not have gotten away with dropping Java in the most recent version of Explorer.
[4] This point is due to Trevor Blackwell, who adds “the cost of writing software goes up more than linearly with its size. Perhaps this is mainly due to fixing old bugs, and the cost can be more linear if all bugs are found quickly.”
[5] The hardest kind of bug to find may be a variant of compound bug where one bug happens to compensate for another. When you fix one bug, the other becomes visible. But it will seem as if the fix is at fault, since that was the last thing you changed.
[6] Within Viaweb we once had a contest to describe the worst thing about our software. Two customer support people tied for first prize with entries I still shiver to recall. We fixed both problems immediately.
[7] Robert Morris wrote the ordering system, which shoppers used to place orders. Trevor Blackwell wrote the image generator and the manager, which merchants used to retrieve orders, view statistics, and configure domain names etc. I wrote the editor, which merchants used to build their sites. The ordering system and image generator were written in C and C++, the manager mostly in Perl, and the editor in Lisp.
[8] Price discrimination is so pervasive (how often have you heard a retailer claim that their buying power meant lower prices for you?) that I was surprised to find it was outlawed in the U.S. by the Robinson-Patman Act of 1936. This law does not appear to be vigorously enforced.
[9] In No Logo, Naomi Klein says that clothing brands favored by “urban youth” do not try too hard to prevent shoplifting because in their target market the shoplifters are also the fashion leaders.
[10] Companies often wonder what to outsource and what not to. One possible answer: outsource any job that’s not directly exposed to competitive pressure, because outsourcing it will thereby expose it to competitive pressure.
[11] The two guys were Dan Bricklin and Bob Frankston. Dan wrote a prototype in Basic in a couple days, then over the course of the next year they worked together (mostly at night) to make a more powerful version written in 6502 machine language. Dan was at Harvard Business School at the time and Bob nominally had a day job writing software. “There was no great risk in doing a business,” Bob wrote, “If it failed it failed. No big deal.”
[12] It’s not quite as easy as I make it sound. It took a painfully long time for word of mouth to get going, and we did not start to get a lot of press coverage until we hired a PR firm (admittedly the best in the business) for $16,000 per month. However, it was true that the only significant channel was our own Web site.
[13] If the Mac was so great, why did it lose? Cost, again. Microsoft concentrated on the software business, and unleashed a swarm of cheap component suppliers on Apple hardware. It did not help, either, that suits took over during a critical period.
[14] One thing that would help Web-based applications, and help keep the next generation of software from being overshadowed by Microsoft, would be a good open-source browser. Mozilla is open-source but seems to have suffered from having been corporate software for so long. A small, fast browser that was actively maintained would be a great thing in itself, and would probably also encourage companies to build little Web appliances.
Among other things, a proper open-source browser would cause HTTP and HTML to continue to evolve (as e.g. Perl has). It would help Web-based applications greatly to be able to distinguish between selecting a link and following it; all you’d need to do this would be a trivial enhancement of HTTP, to allow multiple urls in a request. Cascading menus would also be good.
If you want to change the world, write a new Mosaic. Think it’s too late? In 1998 a lot of people thought it was too late to launch a new search engine, but Google proved them wrong. There is always room for something new if the current options suck enough. Make sure it works on all the free OSes first— new things start with their users.
[15] Trevor Blackwell, who probably knows more about this from personal experience than anyone, writes:
“I would go farther in saying that because server-based software is so hard on the programmers, it causes a fundamental economic shift away from large companies. It requires the kind of intensity and dedication from programmers that they will only be willing to provide when it’s their own company. Software companies can hire skilled people to work in a not-too-demanding environment, and can hire unskilled people to endure hardships, but they can’t hire highly skilled people to bust their asses. Since capital is no longer needed, big companies have little to bring to the table.”
[16] In the original version of this essay, I advised avoiding Javascript. That was a good plan in 2001, but Javascript now works.
Thanks to Sarah Harlin, Trevor Blackwell, Robert Morris, Eric Raymond, Ken Anderson, and Dan Giffin for reading drafts of this paper; to Dan Bricklin and Bob Frankston for information about VisiCalc; and again to Ken Anderson for inviting me to speak at BBN.
You’ll find this essay and 14 others in Hackers & Painters.
Some Technical Details
Japanese Translation
Microsoft finally agrees
Gates Email