这个项目起初从需求分析到产品设计,最后到测试,发布都是自己完成,后来加了二个新成员,各司其职,分工更明细,进度也更快了。作为一个项目的总结,列出以下的观点与各位分享。第一次从程序员技术转向项目经理,做的不好请各位多指正。
起因
毕业后一直在做.NET方面的开发工作,这个一直被各位朋友看起来,最没有前途的职业。从一开始封装SQL语句,到后来的应用微软企业库(Enterprise Library),再到后来用Hibernate,Entity Framework,LLBL Gen,技术换了一个又一个,最终的初衷没有改变:读写数据库。一直被这样的生活所折磨,痛苦不堪。于是想想找到一些突破口,能做一些MIS类型的项目的公共组件,以简化每个项目的不同技术给自己带来的痛苦。后来发展成为一套公共组件,给内部的项目试用,反馈的效率还可以,但拿到外面去给别人看,受过不少打击。再后来,干脆直接在此框架做出一个产品,一方面把现在的技术完善,另一方面也可以校正技术上的偏差和错误,于是就诞生了这个ERP项目。
技术
C# 4.0 作为主要编程语言,完成95%的代码,同时嵌入一个脚本编辑环境,用IronPython作脚本,作适当的扩展。
SQL
Server 2008
R2作数据库,不折腾Oracle,也考虑MySQL。曾经想把现有的系统移植到Oracle上来,但一想到有调用几百个存储过程的报表,就头疼。
数据访问用ORM,LLBL Gen Pro 3.1,EF, NHibernate不考虑。
界面用WinForm,不考虑WPF和ASP.NET,曾经想把一部分功能做成ASP.NET(比如供应商送货,客户发票),后来放弃。
通信用.NET Remoting,部分地方用WCF以开放接口给外面调用。
项目
先做成成一个进销存,基本的采购销售和仓库三个模块要有。再后来加入生产,工程,物料需求计划,财务,构成一个MRP系统,再加上人力资源,客户,固定资产组成一个ERP系统,主界面的长的样子如下:
曾经大量研究过金碟的主界面,用友ERP的主界面,还有其它很多第三方著名系统的主界面,最后定格成这个样子。主界面中,业务导航图,功能分类,功能的快捷方式都具备,提供了ListView,Context Menu,MenuStrip三种方式的导航。
团队
这个项目由三个人完成,一个负责需求和测试,我和另一个朋友负责编程。首先要面对的是大量的基础功能要先设计出来,比如菜单设计器,报表设计器,查询设计器,有了这三个基础功能,系统的可配置性相对比较高。其次就是增加基础的进销存的功能。比如先做入库和出库,再到做销售送货时,自动产生出库单。借助于对象关系映射(ORM,LLBL Gen),代码的可复用性大大提高。在需求方面,都是文档话的需求,有自己的需求文档管理系统。如下图所示:
请各位不要疑问为什么不用TFS(Team Foudation System),TFS是功能强大,但对系统要求相对高,4G内存装个TFS,再装VS2013,工作起来有些吃力。需求管理,能实实在在把它用起来,就比较好。如果不是多人合作,用Word/Excel都可以管理需求,关键是要把它的价值发挥出来,遇到各种需求都录入系统中,对需求的修改也录入系统,以追踪对系统的每一次改动。源代码管理则是用老古董Visual SourceSafe 2005,简单熟悉和方便,不折腾最新的Git,SVN之类的新的工具,把时间留给家人或是出去旅游更有价值。
方向
ERP是个竞争很激烈的领域,首先要面对的是金蝶和用友的垄断式的市场格局,这就好比新生的电子表格软件做好之后,首先要考虑导入和导出Microsoft
Excel格式。但是ERP市场又有点特殊,它是依赖数据带来的分析,从而为企业的制造产生价值,所有的生产计划,销售资料,客户资料都是企业的有价值的数据,这些数据依赖技术服务的支持才可以进行下去,所以盗版的企业管理软件很少有公司用,这一点给我们的产品提供了突破口,找到客户并且把它实施下去,就可以在金蝶和用友的阴影下生存,继续发展。这也是珠三角仍然还有上千家ERP软件公司的原因。目前实施的几家客户,效果还可以,因为创业团队在深圳,立足点也定位在深圳,东莞,广州和珠海四个城市。
金蝶和用友有一个问题,因为功能过于庞大复杂,这也给我们的产品带来了机遇。有时候客户只想要一个进销存,但是你却给它一个ERP,客户反而觉得复杂不好用,还是我们的产品方便。
生存
期初没有太多的定位,有单可做的项目都接下来,生存要紧。有些小程序或是小软件之类的需求也把单接下来完成。有的是帮忙客户导入导出数据,有的业务是帮忙客户对接2个系统的数据,但是没有源码可参考,于是用查询跟踪器录制数据变化,然后对比结果,从中发现系统逻辑进而完成需求。有的用.NET写的软件,可以反编译它的代码,直接把代码中的SQL语句拷贝出来,完成客户任务。猪八戒上面的任务500以下的都不考虑接,还有的50块就写个程序的直接拉黑名单不做。一天的人工费用加上其它的开支,最少也要500,而且一个价值仅仅是500的项目,通常都要几个沟通来回才能搞定,有时候也是边做边明解需求。客户说我没有明白它的意思,我说你没有写下来的,沟通中没有直接说明的,没有记录的都是新需求,要加价才能完成,这样任务完成快,但也容易导致客户流失。
另一个途径则是卖组件,框架的源码是对外出售的,有过来看一下,问一下价格就走人的朋友,有过来了解框架,了解每一层面的做法,然后说这不好再走人的朋友,还有要求增加功能然后再考虑买的朋友。如果当初你考虑用我的这个框架,是不是你现在就可以看到我的这个项目了。亦或是你现在还在考虑用Entity
Framework或是Hibernate来做项目,对WCF的双工特性还有点不熟悉,对如何实现服务器端异常中断后,客户端所有的界面都要禁用变灰还不能实现。
最后一个途径是做实施,二次开发。金蝶K3二次开发,做一此插件或查询。客户遇到技术问题也帮忙客户解决。对于从程序员出身的朋友,做这一行不难。自己写的系统没有多少人,可以考虑给别人的系统做查询或插件,能增加收入就好,不应该在乎VB好不好用,也没有智能提示。
转做项目经理之后,一个很明显的感觉是你心里总是要有方案,用鬼佬的话讲叫Always has a plan。一个需求谈下来,有几种实现方案,自己要会对比权衡,要很快的找到技术的突破口或是放弃,不再是像程序员那样,需求都做成文档了,再给你编码。不过回当想初的程序员时代,需求都是人家沟通,妥协好了,容不得自己半点修改,现在再回想过去,自己当初做的不够好,只是完成任务(get the job done),而不是做的更好一点(good enough),没有去想明白为什么不能按照自己的来修改。