当我启动Hibernating Rhinos的时候,出于偶然所做的一件事情是搭建了一台CI服务器和一台公用的每日构建服务器,每一个成功的构建都到了客户手中。从各方面看这是一件了不起的事情,它很大程度上消除了“我们必须得有一个新的发布”那样的压力,因为当时我们不断的有新的发布,有时能做到一天几次。

当我们开始RavenDB项目的时候,对我来说还这么做是再自然不过了,因为这种方法的好处是显而易见的。就RavenDB而言,我们需要一个两阶段系统,不变的是每个构建仍然会到客户的手里。

太了不起了,强,太棒了,威武,类似这样的同义词。从交付软件的技术挑战的角度来看,的确如此。问题是,还有一些东西需要注意。经济上的挑战。

Profiler是个好例子,它于2009年1月1日发布Beta版,至今已有920个构建,增加了巨多的新功能,改善了性能,让所有的东西变得更流畅,总体上使得它成了更好的产品。

超过3年没有一个主要的发布,主要是因为无此必要,我们每天都在发布软件。

那时,我们交付的功能包括浏览结果集,检查查询计划(支持所有主要的数据库),将完整的会话导出到HTML以便你可以发送给DBA,CI集成,凡此种种。太棒了。

除了…… 我当时没有意识到的一点。如果你在2009年1月1日买了NH prof,你实际上免费得到了3年的产品更新。除非我们有一个主要的发布,你能够一直免费使用它,包括所有的更新和改善。

这对于早期客户来说太好了,但是对于靠编写profiler谋生的人来说没有那么好。让我们来思考一下这件事情,okay?

为了能赚钱,我们必须:

  • 不断的扩大一次性销售的客户量,这个总会到达极限。
  • 发布一个新的版本,让老客户为更新付款

看起来很简单,是不是?这正是大多数的公司所做的,大多数软件的销售模式。你被授权使用第一个版本,但必须付钱买另一个版本的授权。

到目前为止,一切正常。但让我们考虑一下这里面的含义。为了让老用户购买新的版本,我必须把一些真正好的东西放在下一个版本里,这意味着我必须做很多秘密开发,因为我不能简单的以惯常的持续部署模式发布它。这太糟了。同时,这还意味着已经开发好的功能被暂时关闭,因为我们得把它们推迟到下一个版本。

所以,下一个版本的profilers得有一些有趣的功能,才能使人们购买它。其中一个是生产环境的剖析。实际上这个功能已经存在很长时间了,但我们用#ifdef关闭了它,以便在下一个版本里推出。

我查了一下,结果让我大吃一惊。生产环境剖析的最初工作于2010年1月完成,从那时就可以用了。然后,我就去开发RavenDB了,并且再也没有得到机会去完成2.x余下的功能并把它们都发布出去。

在2010年中的时候,我们开始试验订阅模式。作为对一次性支付模型的替代,我们转向了边使用边付款(pay as you go)。只有在用profiler的时候才会发生支付,而同时可以使用所有新的功能。

我在稍后的时候仔细考虑了这一点,强烈的倾向于下一个版本的profiler(很快发布,有很多新功能)只采用这种订阅模式。

我现在认为应该允许两种付费模式同时存在。按月/年订阅和一次性付费购买18个月的使用权。这将会允许我们不断的扩展软件而不必耽误时间去开发用来促销2.x版本的秘密功能。

感谢反馈。

原文:The economics of continuous deployment

欢迎参加iTran乐译4期