也谈服务化

我们知道,软件是一种解决方案,但不是唯一的方案,

在大多数情况下,传统的非软件的解决方案古已有之,

软件只是改变了这个方案的形态。


在现实生活中,我们经常谈论帮助别人,

可能仅仅是为了出于道德责任感,

并不会给自己带来多大效益。


然而,我发现将帮助别人的方法论用于软件开发中,是非常有益的,

在进行软件开发的时候,我们能多大程度上帮助别人进行同样的开发任务,

就能在多大程度上帮助自己提高效率。


软件服务

有人说,工程师出售的不是软件,而是软件服务,我非常赞同。

我们可以将软件服务理解为,以软件的形态提供的解决方案。

它总是寻找那些可以被自动化的部分,用软件方法解决它,

使得其他不能被自动化的部分,工作成本最小,门槛最低。


而单独谈论软件则不然,更强调提供服务给那些不开发软件的人。

可是,我认为帮助别人的最好方式,不是替他完成任务,而是让他有能力自己完成。

因此,软件服务比软件更有价值。


简化主流程

我们在写业务代码的时候,

经常以简化主流程为动机,将尽可能多的代码提取出去,

这并不是以代码洁癖和消除重复为出发点的,

而是为了降低主流程的开发和维护成本。


这样考虑的话,其实我们是在帮助自己,

也同时让别人有能力完成我们现在做的事情,即业务流程的开发工作,

我们提取出去的功能集,让编写主流程的工作会变得简单了。


在这种意义上来看,我们提取功能集的做法,就是在为别人提供服务,

我们帮助了别人,同时也帮助了自己。


让自己可被替代

同理,我们当前做的业务项目,可以反思,

有哪些基础设施可以提取出去,

使得其他人可以以更低的成本从事我们现在做的事情。


这样的话,我们就可以将这些基础设施提供给他们,让他们轻易的完成我们的工作。

这并不是短期内可以做到的,

但是以这样帮助别人的心态做准备,会大幅度提高当前的工作效率。


我们成功抓住了哪些是自动化的部分,应该提供软件服务,

而哪些是不得不需要人工成本解决的,

我们应该把精力聚焦在那些可以被自动化的部分,用软件解决它。


结语

提供一个软件给别人用,并不是最大限度的提供软件服务,

我们还可以提供软件服务给其他的开发者,

让他们有能力完成开发工作。


这个使用软件服务的人,一开始是我们自己,

随后就可能是其他的开发者了,

我们想要帮助别人的越多,剩下的需要人工工作的部分就越少。


让别人具有和我们一样的使用软件解决问题的能力,

才是提供软件服务的更好方式。