引言:提到软件开发,所有人知道这并不是一项简单任务,的确,软件产业是个竞争激烈、变动快速的产业,经常得因市场变动而修正模块,因此,软件厂商延迟产品上市的消息时有所闻,但这并不代表延迟上市是正常的,它仍需透过各种努力及规范,真正做到「Ship quality product on time」。
软件公司因为业务性质不同,开发产品所需工程也不尽相同,以趋势科技来说,它是生产软件产品的公司,产品开发出来上市后,由顾客决定是否要购买,因此软件开发的风险很大。一些小型的软件公司则是接客户的「软件项目」,只需将项目完成即可,风险自然小。
由此可见,以生产软件产品为主要业务的软件公司来说,规模愈大,开发风险自然相对提高,如何制作出符合市场需求又完美的软件产品是所有软件厂商的心愿,但这其中牵涉到许多大小环节,包括公司政策、作业流程、工程师素质等。
Perfect is empty,Simple is beauty!
在这里不妨先就开发原则做简单的探讨。好比说,假若产品不达百分之百完美,是否就一直更改下去呢?当然不!就拿生宝宝为例,如果人们可以随心所欲地在怀胎时加入特定基因以生产出一个完美宝宝的话,那么肯定这个产期将遥遥无期。
在控制软件开发风险上,有几项观念及做法。
一.“小”-假如产品的size小,复杂度便会降低很多,因此一个好的做法便是将大的项目切成一个个小部份,再交由不同工程师负责。例如,第一代的 ICQ 及浏览器( Browser )都是一个或两个人设计撰写,很快就做出来了。
二.“ Simple is beauty ”-愈大的公司生产力就愈低,因为需增加一些额外成本,包括进度的掌控、工程师的品质等,解决之道就是从制度面(policy)着手,按部就班地做,将风险到最低,趋势科技做法是将比较关键(critical)的部份先做,如此比较能掌握风险,这部份便涉及“作业管理“的范畴。
公司的规模扩大以后,便不只需要写code(程序)的工程师,还需要有设计规格、检查程序、测试程序等人力投入,跟最初情况相比,额外成本是以等比级数增加。总体而言,更需要制度管理,但,另一方面,制度也可能会形成官僚、扼杀创造力,而更多的文件未必会让品质变得比较好,解决之道要从使用者的角度来做。
软件产品的品质其实决定于使用者的需求。
如何才能开发出符合客户需求的产品?这又是一门相当大的学问。
通常软件开发前需进行市调,做好使用者需求分析,撰写MRD(Marketing Requirement Document)并让使用者持续参与。Market sense很重要,但通常它也是造成产品不断变动更改的最大来源,因此做好change control( 控制变项 )是相当重要的。软件和硬件不同的地方在于,软件研发只要多花些时间,几乎没有什么功能是做不出来的,但它的困难在于“如何取舍”。
创意自由度-软件公司存活的关键
不过,市调虽然重要,但从市调能得到有用的资料也是有限的,新力公司的盛田昭夫就曾说过,你到超级市场,可以看到有各种颜色的牙膏,但随身听却不曾出现于市场中,它又如何被发明出来?在它出现之前,民众不敢想拥有这种东西,或是想拥有也担心价格将昂贵地买不起。
由此可知,高科技的创新需要靠对科技有概念的工程师发想,进一步地结合innovation(发明)及market need(市场需求)才可成。
在这里不妨来谈谈,高科技产品的「idea」具备何种特色。可从两方面来看:
.独特的竞争力(技术面)-别人做不到的技术而你做得到,这就是个好点子。
.了解客户背后的需求,换个方式以符合其需求(市场面)-例如客户因为某些因素而不敢要求需求,则可试试换个方式呈现,好比顾客蛮喜欢电浆电视,但电浆电视的价格实在太贵了而不敢有需求,研发人员可试着将把电视的品质研究到跟电浆电视一样地好。
既然高科技产品的客户需求不易得知,开发产品的灵感如何获得?很多工程师就从“自己的问题开始着手”。
在趋势科技,除了大架构的创意发想由CIO(技术长)或高阶研发主管提出,底下的大小idea都是由工程师来想,好的工程师会自己想solution(解决方案),而不好的工程师就成了coding machine(写程序机器)。
有了产品研发创意之后,如同先前提到的,需要有一个人担任桥梁,将研发人员的发明(innovation)与市场需求(marketing need)结合起来,因此软件公司的技术长及最高行销主管扮演着相当重要的角色。
没有软件研发经验的人一定很难想象,软件产品通常需花费80%的沈默成本,亦即产品还未卖出就已花掉80%的成本。举个例来说好了,可能因为考虑市场变动因素,使得一开始是想做冰箱,最后的成品却成了烤箱,当然这是夸张的比喻,可见软件市场的变动如何重大地影响软件研发。
这回先跟读者分享一些简单的观念,下回我们将以实际的项目为例子,让读者体会软件开发过程的惊涛骇浪!