现在国内大部分管理软件公司有几类,有的靠关系拉单子,有一单作一单,技术对它们来说不重要,而关系永远是第一。有的专注于用户需求,摸透用户业务,这类公司对业务的关注度很高,也就是横向领域上,业务排在第一。还有一类就是已经在行业很有知名度,要做行业内的专家,公司这时已经认识到了业务和技术的共同重要性,平台概念也主要在这类公司提出。软件工厂主要针对的也是在第三类软件公司下的应用。
在《软件工厂方法》一文中,我介绍了领域工程的基本介绍,领域工程由横向领域和纵向领域组成。平台概念很早就有,我认为对管理软件来说,平台就是能够在纵向领域上研究透业务的基础上使用横向领域的成果来一起来搭建一个满足用户需求的应用。
1. 纵向领域(vertical domain):根据系统类别而组织的领域。如预算软件、材料管理、合同管理、企业报表系统等。
2. 横向领域(horizontal domain):根据软件部件的类别而组织的领域。比如元模型引擎、报表引擎、工作流引擎等。
3. 领域之间有3中类型的关系:
a) 包含:比如成本管理软件包含了材料管理系统
b) 使用:比如管理软件都使用报表引擎,OA系统都使用工作流引擎
c) 类似:领域之间侧重点不同,但有很多的相似性,通过深入研究一个领域,可以取得对另一个领域的更好理解。比如报表引擎中对于表达式解析和索引部分可能与数据关系计算引擎类似。
大部分书籍也是像以上那样简单介绍一下基本定义,以下我从它们在产品线开发中的关系来发表一下看法。
经常有人讨论业务和技术的关系,希望争论出到底哪个更重要。如果从商业角度来说,最终的目标都是通过满足客户的需求实现双赢,而业务和技术都是实现这个大目标的方法和工具而已,业务的深入是让我们能够做正确的事情,技术是让我们能够使用适合的解决方案来正确的做事情,两者必须协调一致才能实现最终的目标。
在认识了这两个领域都很重要的前提下,公司观点不一样,投入可能会出现三种情况,先业务后技术,先技术后业务,技术和业务同时进行。
- 先业务后技术
认为业务是技术应用的前提,所以必须完全弄清孵化了业务后才开展技术工作。当业务随着投入有所进展后,开发技术也越来越多不只是简单的增删改了,很多技术其实本应该是由纵向领域去解决的事情了,一年半载就这样过去了,本想着这样对付过去了,等业务清楚了再技术重做,但是随着业务深入,用户的使用越来越多,销售和用户已经没有时间和机会让你重新进行纵向领域应用的设计开发了。先业务后技术的方向,会出来产品,但在不是很好管理下即有可能变成了只有业务了,随着时间推移,会在技术上逐渐走不动了。
- 先技术后业务
认为软件公司没有技术是不行的,所以技术优先。在技术上投入,Vista来了研究Vista,新的语言出现了研究新的语言,派专人进行研究,这种方向下会出现两种结果。如果研究人员本身目标明确,技术可能会成功研究并应用回报公司,也有可能遇到一个本身目标就不明确的研究人员,不知道研究的东西有什么用处,越研究反而越茫然,结果导致公司误认为这个对公司没有什么价值,最后就不了了之。所以先技术后业务的方向,运气好的话会皆大欢喜,运气不好的话会没有成效,反而可能会由于研究人员的失误把有用的技术当成没有的东西而否决了。
- 技术和业务并行
认为技术和业务是互相关联,缺一不可的,所以会在技术和业务上分别投入人力,并随着回顾两边的情况,不断协调进展。架构框架设计在了解部分需求下就可以进行了,技术的实现对业务也会有影响。在并进过程中,会出现先分后合的情况,因为开发产品时,业界已经有很多模式可以应用。比如你做企业管理软件,做OA,则工作流引擎,报表引擎等纵向领域必须有,公司可以在这方面先期投入而不用等到用户马上要了再来开发。
以上三种方向,我们该采取哪一种呢,我想这个需要视企业情况来看,如果企业发展初期,那么先业务和技术,先把业务吃透了,提高企业在行业内的知名度比吃透技术要紧,对于已经发展不错的企业,则应该采用技术和业务并进,不断的在业务和技术两方面协调发展。而如果企业已经衣食无忧,那么可以先技术后也业务,因为在业务不是很明确的情况下,技术也可以带动业务的发展。
技术和业务并进在第三类公司可能占多数,所以我们在投入时也需要认清他们的关系,哪些该并行进行,哪些该先后串行,不同领域由哪些人用什么方法完成,进行过程中如何不断回顾提炼方法。做开发和其他事情一样,开始之前没有具体的目标是绝对不行的,没有目标,推进研究向前是毫无意义、没有必要的,但是一旦有了目标就不同了,有了具体目标后就算研究进行不下去了,也有那个具体的目标作为前进路线上的方向,指示着要走向哪里。有时候目标也会变化,或者更高,或者有所降低,如果目标更高了,当然相应最终结果也会更好。
软件产品线范围很广,有技术、管理、人员各方面的内容,包括纵向领域和横向领域,每个领域里面又包含很多领域。我们在开始之前又该如何确定我们的目标呢?一般制定大目标时,都会通过将目标拆解为多个小目标来细化,然后由不同的人各自实现小目标,在实现过程中并不断的回顾小目标对大目标的影响。
在《软件工厂方法》中讲过产品线的四个核心:范围、通用性、可变性和扩展点。纵向领域提炼出721,横向领域为纵向领域提供支持,比如基础设施的支持(各个需要的引擎)最好先期投入,这样当业务进展到一定阶段时,技术的支持就会很顺利了。
如果我们知道了作企业化信息管理软件,工作流、报表必需要存在,那么我们可以先期投入人力解决这一块。但是我们又如何保证这些小目标的投入可以给公司带来真正的回报呢。我想每个小目标都需要先从以下几点明晰自己的目标:
- 愿景和任务:是否能够使用一句话简单的说明自己的愿景和任务?
- 涉众:谁是你的客户
- 问题:关注哪个领域或者问题
- 业务价值: 提供什么价值?产品的价值是在大蛋糕中的哪一块?
- 如何度量成功: 用什么来表示成功?
- 产品线: 给产品线提供了什么?
以下两篇为我以前关于技术和业务的简单观点,相对于上面的浅显一些:)
再谈技术和业务的关系
业务、技术和语言的关系
欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ]