开发软件,特别是大型软件有点像工程项目。 试问什么工程项目(或者是某个项目)不贵呢?是造桥便宜,还是拍100集电视剧便宜? 其实开发软件的费用,主要有软件开发人员的成本,包括开发工程师,测试工程师,需求分析师,项目经理等等。还有必要的软硬件成本分摊。如笔记本,台式机,软件工具如IDE,必要的第三方插件等。这些都要费用的,下面以app开发成本数字为例 如果市场上定制开发软件的人工成本按一人月20,000人民币来算,在北上广深这个算低位数了,因为加上社保等费用了,平均每人天1,000人民币。目前就简单这样算 根据《软件估算》提供的经验数据,随软件复杂度变化,在整个交付项目期间,平均每个程序员每天产出的代码量在2行到200行之间。如果以平均每天产出100行代码来算,则编写每行代码的成本是10元钱。把软件写出来只是第一步。软件要放在某个环境上去运行的。服务器端的软件要部署在可靠的服务器上,要有可靠的网络连接。客户端的软件(比如一个app)要安装在使用者的电脑或手机上。软件要维护要升级要管理要排错的。有了一个软件,有了一台服务器,就得有掌握这个技能的人来管理它的。根据企业级Enterprise Management Associates的数据,60%~70%的IT预算耗费在运营和维护上。于是我们可以大致估算到,加上运营和维护成本,一行代码的成本就会达到30元。那么一个app会有多少行代码呢?当然也随复杂度不同会有很大变化,再以两个国外app例子作为参考。 一个Android应用是克林顿健康倡议给非洲国家开发的基层医疗物流管理软件,乡村医生可以用这个工具来管理他们的药品库存。这个软件的代码超过46,000行。另一个RapidFTR是一个用于"家庭跟踪和团聚"的Android应用。当战争、地震、海啸等灾害发生时,国际援助团队可以用这个应用来寻找失散的儿童。这个软件大约有34,000行代码。换句话说,这两个目标很单纯、功能并不复杂的Android应用,拥有它们的成本都在百万人民币以上。以上的两个例子是针对于以前的数据,而随着现在行业的快速发展,实际成本也在逐渐下降,不过虽说开发一个软件或者APP不用百万人民币,但是几万或者十几万还是要的。 还有很多附带的问题,如范围的蔓延,必须的前提条件不到位等。所以软件开发很少不延期,自然费用成本也上去了。 从事企业信息化管理多年,但看到问题时依然感觉无从下手。 中国企业太需要信息化管理,然而,更需要的是决策层领导层懂信息化。如果不懂,是很难出成果的,还会浪费时间,打击企业信息化信心。其中他们面临的第一大障碍就是:软件开发太贵!(或上系统太贵) 有这种思想和理解,对信息化而言带来的,只能是阻碍。 说太贵的,大多不懂企业信息化,更别说开发了。 就像之前我回答过一个问题:如何看待领导花十万上考勤系统的行为?(言下之意就是领导很二,人家买个考勤机几百块搞定的问题,领导花了十万?当然还有可能认为领导吃了9.95万的回扣吧,总之就大概这意思,当然这种情况当然不排除,但不是讨论范围),但就算有人认为很简单考勤系统,如果用户数1000,全国都有门店,要实现考勤漫游,如果还要支持手机端打考勤和请假,人员有定期排班和不定期排班,连上软硬件,还有需求调研,开发,培训全员一起,全部上好(好吧,外加领导层全力支持!)。给你十万,不亏你就得谢天谢地!如果对方领导还不一定统一支持,给你50一百万万都未必能成。 传统行业上信息化,企业老板(或决策层)非常关键: 1、老板要懂信息化 ,只有自己懂了,才能评价贵不贵的问题,才能清晰信息化真正的价值,才能支持信息化正确走向(现在做老板真的挺难的,要会经营管理,能搞定客户和政府关系,还要懂信息化…不懂怎么办?学呀!多参加IT论坛互联网会议都好,有老板为了搞懂九零后思维,专门学习打王者荣耀,看玄幻网络小说); 2、其次,他要找一个懂信息化建设的人来全盘规划企业信息化(就是CIO) 。并全面信任他(当然,前提他要有这个能力)。对这个人的要求其实非常高: 1)他要有很全面的IT视野。 他的视野,决定企业视野,一定程度决定企业的发展甚至生死,IT经历一定要丰富,IT技能要全面(要都干过),包含六个层面:基础架构、网络、服务器、运维、开发、数据库 ,缺一不可。这六个层面全面了,他才可能将企业需求转化为可操作的信息系统(还不涉及到钱、时间成本、部门协作等问题) 2)他要懂企业经营管理。 企业上信息化,不仅仅是把软件开发出来,部署到服务器就算成,如果用不起来就是一堆废铜烂铁(还是很费电、不断增加成本的废铜烂铁)。所以他要清晰企业经营管理的方方面面,所有显规则和潜规则,要能辨别有些即使他们叫苦连天,实际并无多大用处的需求,他(cio)的判断力,就来源于他对企业经营管理的理解和经验,如果判断错误,后果可能很严重。 所以,他不但是IT高手,还要是企业经营管理的能手,必须是老司机。 3)老板必须全面信任他。 因为他提出很多东西,如果老板不信任,可能就支持不到位,系统本身很容易出BUG错误之类,如果不够信任,系统一出问题,老板心里发毛,很多事情不议或不决,项目很可能就黄了。 3、要对信息系统可控。 这个也非常非常重要,但很多人没有意识到(或没感觉)。很多企业,选了大牌如SAP IBM 微软 Saleforce 用友、金蝶等全套方案,看上去很完美了。并不是说这些方案不好,但千万不要忽视两个重要问题: 1)企业需求会不断变化; 2)IT系统本身也需要持续改进。 即使系统上线,如果系统不可控(一开始没规划好)会发生什么?即使系统正常上线,半年一年后一定有新需求系统要增加新功能,那怎么办呢?就找原厂(一定会发生的情节是:你认为这个功能很简单,但原厂认为已经超出原合同范围,不要问我怎么知道的),你又要和原厂开始谈判,协商新的功能价格,然后走商务流程(规则就是:越大的公司,内部流程越复杂,速度就越慢),擦,原项目经理已经离职了?派新项目经理过来?没办法还得配合他把原来的需求文档全啃一遍,再结合新需求,费心费神不说,因为时间紧,赶紧设计新开发方案,然后开发 测试 …就这样半年过去了,公司钱也花了,活动上的档期也不对,大家反馈这个新功能还并不好用,老是有很多问题…老板很蒙圈,有气都没地发去,而且这个过程你没得选(就为这一个功能换系统代价太高,而且时间也不允许)。这就是系统不可控的后果,所以企业上信息化,一定要考虑是否可控?如果要可控,那么无论是外包还是自建,都一定要培养自己的技术团队(能全面接管系统开发和运维),花钱养这个团队一定是值得的(前提是cio管理的好)。 现在我们再来看题主问题,为什么开发软件会这么贵呢? 我们来看下,开发系统上线要经过什么的过程? 1、需求,需求是系统的基础,可以说开发一个系统,拿到真实的需求是最困难的,这点张小龙和乔布斯都深有感触,张小龙曾说过(大意如此):判断用户的真需求还是伪需求最困难。 举个很简单的例子:没有汽车之前,福特去调研需求:您需要什么样的交通工具?用户:我需要一匹更快的马!如果按用户需求思维,福特真设计四条腿的机械马,我想就不会成就福特公司,也不会有当今发达的汽车工业。所以,鉴别真伪需求,显性需求、隐形需求就很难,何况还可能转化用户需求(把马转化成汽车)? 2、设计,这是整个系统的灵魂步骤,一个系统设计不过关,必定走不久,未来业务变化,可能又要换系统,拿到需求就要进行 1)业务流程设计(可能涉及到业务流程重组,最费事又可能最反复,也是风险最高的地方); 2)系统架构设计(cs还是bs,私有部署还是云部署?其中架构时是否考虑可拓展的一体化的思想 最为关键!决定这个系统能支持企业走多远!) 3)功能设计(需要什么样的功能,达到这样的功能要几步,分别是什么操作等) 4)程序代码规范设计(包括库、类、公用方法和控件的准备) 5)数据库的设计(要几个数据库,这几个数据库的关联性是什么?分别如何存放?每一条数据的来源和走向都要清晰,还要预估一年后表的增长数,服务器的承受能力和方案) 6)还有服务器的部署设计(业务跑公网还是私网?有没有API接口?服务器的高可用方案?应用的高可用方案?数据库的高可用方案?) 7)还有网络方案(公网还是vpn?网络安全性,vpn的稳定性?断网的处理方案?)是不是蒙圈了? 3、代码开发,尽可能保持统一一种语言来写系统(大项目可能很难做到),尽可能少的人来编写模块代码,需要研发经理统一分配模块,研发经理来审核各成员代码,代码本身也需要统一管理(不管是svn还是tfs),否则项目往后就无法维护…如果是互联网系统,还需要美工、UI和前端代码,代码质量基本决定项目质量,尤其是关键模块(高频操作模块、或涉及金额、库存等 )。 4、测试,测试人员要充分理解编程思想和业务逻辑,编写全面的测试用例。尽可能的测出系统bug和问题,反馈给开发修正(测试也分阶段和模块,还有压力测试,要看项目大小和进度)。 5、培训,系统上线前系统要做动员和培训,让具体操作人员清晰系统操作和管理范围(这时候因为会改变很多人的操作习惯,还有系统有不完善,可能不配合,所以一定做上线动员,而且是老板做,明确不走系统就走人!)。 6、上线,如果前面步骤都过来了,那么确定上线时间,以及历史数据的处理方式(一般财务有懂信息的人才),导入数据(可能是库存,余额等,也要看实施方案,如果双线并行,可能数据也不用导),然后到点就上新系统(终端、服务器、网络都要提前配好),建立问题实时反馈通道和快速解决问题的通道(电话、qq、钉钉等都可以),实施人员下放到各使用系统单位,实时监控系统问题,发现系统问题,研发人员在后台实时修改,快速测试和更新系统 。一个月之后把上线数据拿出来财务(过生产、业务数据)分析,没有大问题就算上线成功。 7、持续改进,快速迭代。(这个非常重要,但最容易忽视,也是企业最容易吃亏的地方) 。企业级系统不是上线成功就万事大吉了!市场在不断变化,企业也会不断扩张,需求也在不断变化,系统本身也会不断发现BUG要修正,所以系统本身就要求能不断持续改进(快,比别人更快的更新能力),就要求要有这样能力的团队或机制来保障。一句话就是刚才说的关键点:对信息系统要可控! 8、上述七个过程,有流水线操作,也可能交叉操作,是一个管理过程,你觉得需要一个什么样的人才能管理好,需要一种什么的团队来配合?达到预期目标呢? 所以,题主的问题是为什么软件开发会这么贵? 看到这里,非常感谢你,相信你也明白了。因为做好好系统开发很麻烦,过程管控复杂,既要求老板懂、要求高智高知高见,也要求懂业务、懂流程、懂管理,还要配合高体力团队协同的工作啊。 当然,你可以说,外面买一套进销存系统才五百块,也能管理我店业务,那你怎么说?所以还是刚才的问题。是的,如果要出行,也没必要非得自己买车,打车出行有时更方便,那是不是买车就没有必要了?就像判断药物毒性一样,抛开剂量谈毒性都是耍流氓,软件系统抛开需求谈价格也是耍流氓。对一个早点铺子来讲,开通微信支付宝支付就已经是信息化了。 当然,你说我也可以采用Saas方案,就没这么复杂了,功能也挺强大。是的,这个世界正因为有多种选择才丰富多彩,选择自己用起来就好,没有对错,只是一体化没那么好做吧?后面的和其他系统的集成和拓展性也是需要评估吧?一般企业会有多种系统,多种系统都用saas?还是混合?数据如何打通?想想就复杂吧? 全文在手机上编辑,案例都凭记忆(没有百度),如有有错漏请谅解。保证良心干货,如需转载请联系我本人同意。 我就以小程序,为例子说明。小程序还算是互联网开发成本最少的了。 00001. 小程序认证费300元/年 00002. 云服务器费用1000-10000元/每年(应用场景不同,对服务器配置的要求不同) 00003. 购买域名50元/年(这里说的普通域名) 00004. SSL证书费用(可以使用阿里云免费的) 00005. 短信费用(部分小程序需要) 00006. 物流接口费用(商城类需要) 00007. OSS存储费用(教育类、商城类需要) 00008. 小程序开发费用(根据实际情况做评估) 前面运营可能只有几千上万的花费,但第八点开发费用就贵了,一般在4-5万作用,功能定制更有可能达到10多万 最后送一个福利给大家,最近整理了各行各业带后台的小程序源码,顺便分享给大家,请给这个问答点赞评论一下,然后私信我获取。 大家都在说人力资源成本,我说另外一个观点:软件开发成本高是因为软件业的劳动生产率最低。软件行业可以说是生产力最最落后的一个产业。 做软件开发的人都知道软件工程领域有一个知名的词,叫做不重新发明轮子,可是对于软件来说,不重新发明轮子的机会很少,这里涉及到一个问题,软件的生产方式。我们举个例子,就像我们以前农村盖房子,没有砖的时候怎么办?我们都知道以前农村的土房子的盖法:1、先从地里挖土 2拉土到一个造房子的不远的地方 3、先把土做成土坯子 4、晾干 5、拉到盖房子的地方 6、挖地基 7、砌墙 8、砍树 9做房顶 10、房子建好 11、晾干 12、在墙上摸泥 13、做家具 。靠,终于可以睡了。 大家是不是觉得我是的啰嗦?可是,软件行业目前的生产效率就处在这个阶段,生产效率极其底下,全靠人口往上堆。 如果说刚才的生产过程是1.0版本,那么盖房子现在已经发展到了10.0版本——直接3d打印盖房子。可是软件业呢?最多4.0版本。而且还极其难用,比如做网站的模板化开发,模板极其难满足扩展需求,会让使用者抓狂的,还有一些开发平台,稍微一点定制化开发,简直要把原来的架构师搬出来。 所以软件行业一直有个梦想,就是像搭积木一样,或者像硬件一样,组件化,插件化。其实现在软件届已经再往这个方向发展,比如iaas平台,paas平台,基于spring clound的微服务架构。 但是很多公司由于常年的积累,东西特别多,都是从做土坯子起来的,而且软件行业的人员流动率特别高,你让乙方调架构,还不如让他重新构建。遗留系统问题,让很多公司就是在吃老本,系统调整起来特别费劲。 但是这样依然可以提高生产率。但是就是因为行业里软件没有标准化流程,所以,每次定制还是很难。但是这个状况也在慢慢改善,比如SaaS模式。 所以,软件行业收费高,这是跟软件的发展相关的,软件行业才发展了多长时间呀。但是即便这样,已经出现了越来越多的颠覆者,比如智汇加基于spring clound的微服务架构,形成了500+的服务接口,预算两个月工期的项目,一周就可以定制化完成。 还有一个关键点就是报价模式,软件届一般的报价模式就是按工作量算人头,这个是行业例行模式。但是这个状况也在改变,比如现在的SaaS,就是一种租赁模式。 软件行业的组件化,服务化慢慢成为现实,这是很多软件行业的人付出了血的代价换来的。软件行业一直出现猝死情况,这是其他行业很少看到的现象。软件行业的未来一定是微服务化的,像组装电脑一样组装软件系统,一定会成为现实。 任何一个行业的发展都是不断提升生产率,降低生产成本,软件行业也不例外。相信不久的将来,软件就会形成一种新的报价方式,而这一定是因为生产效率的提升,业务标准化带来的。 祝软件行业越来越好,越来越规范。也祝软件人保住自己的身体,一起来等待这天的到来。 1,"软件开发"通常意味着坚持公司为赚钱而设置的任何业务流程(敏捷,Scrum,极限编程,无论你想要什么),因为市场有最后期限。不再是一只孤独的狼在他的车库里制作东西。我们以Web开发为例。当Internet首次出现时,您可以使用无格式的HTML按钮。然后是jQuery和第一个Web框架。现在来了Angular,Vue,React。无论您如何看待这些框架,它们都比第一代或前几代显着"更难"。 "足球妈妈变身HTML程序员"已经被市场定价了一段时间了。是的,她仍然可以做到这一点,但需要大量的知识,背景和承诺要大得多。 2,如果你想要技术谈话,前端艺术的当前"状态"是不变性和有限状态机,又名Redux(2018)。要理解它的好处和用途,有一点数学思想是有帮助的。这就是为什么可以让STEM毕业生在2018年"制作网站"(我不会讨论你是否需要获得学位或STEM学位或CS学位才能在这个领域工作,如果你努力工作,我的信念是不对的足够,并且是自我指导,但它有助于很多)。 3,在业务方面,他们希望获得越来越多的可见性和控制力。在技术方面,即使像网络开发这样的"低技能"工作,也越来越多地了解。这不仅仅是网络发展的现象。有更多,更多要知道,需要更多技能。全球化是不可逆转的。堆栈溢出和Internet的结果意味着栏*被抬高*不降低。如果每个人都可以轻松获取信息并轻松获取信息,那么期望值就会下降。而且重要的是期望,而不是供需,因为市场并不完美。 4,人们平均在几年内(Facebook,谷歌,苹果等)淘汰顶级科技公司。你总是需要"鲜肉"。与此同时,每个人都希望在这个新的超级和演出经济中"开创自己的事业"。这意味着程序员将越来越多地在初创公司中保持需求,不仅仅是为了他们自己,而是为了数百万希望程序员执行他们的想法的人(即使他们的想法只有1%的成功机会)。 更高的商业期望+更高的技术预期+成熟市场的更高期望+更高的整体预期=更难的工作和更多的钱来弥补这种"痛苦"。 附:我看好编程作为一种职业。也许有些人认为传统的编程工作会消失,你根本不需要交谈或沟通,而是在工作中度过美好的一天。但是对于业务来说,市场总是希望刷新UI(这只是人性)。他们总是想要一个左边五个像素或右边十个像素的按钮。时尚变化。最重要的是,自动化不能解决与六个人进行通信以完成编程任务的问题,也不能解决将普通英语解释为需求的问题。有人会说这不是程序员。我会说这一直是程序员的工作,将简单的英语翻译成代码。 同时有一件事会继续扩大......错误,错误,错误。更多遗留代码,更多错误。编程成为一个糟糕的职业生涯的唯一方法是,如果真正的人工智能发生,然后每个人都生活在一个后稀缺社会,因为我们所有的机器人管家都为我们做了一切,没有工作是安全的。如果你认为"好"的程序员工作是10万美元+轻松赚钱只有10到4而且有惊人的好处,那么是的,也许编程会"死"。但是如果你对这个定义很灵活,并且可能考虑将工作作为一种特权,那么很明显,编程将一直持续到后稀缺社会。 软件开发定价一般不这么计算。比较靠谱的方法是。价格=市场成本+开发成本+管理成本+利润组成。 市场成本=市场部门的费用分摊+销售提成 开发成本=原材料成本+开发人员费用 原材料成本=数据库+操作系统+中间件+开发工具平摊费用 开发人员费用=开发人员工资+差旅费用+售后服务费用 管理成本=后期人员费用分摊+管理费用分摊+财务费用(17%增值税) 利润一般根据技术含量界定: 普通PC数据库管理软件利润一般是项目的30%以上,其他一般来说高于这个比例。 APP利润一般高于50%。 这个利润其实还不如很多传统行业。所以现在传统软行业一定是IT民工了。不赚钱了。这也就是为什么软件行业目前不景气的原因。SAAS是软件行业目前发展的方向,但是正如传统制造业向互联网转型一样不是谁都可以的。 开发软件为什么那么贵,主要有以下几点: 1、系统越来越复杂,客户要求越来越高; 2、人工成本不断升高,体现在薪水提高和人数增加。比如以前一个人能做很多事,一个项目几个人就能搞定,而现在分工更细,每个人只会或只做很小的部分工作,多大的项目也要那么多人,如果管理跟不上或者项目不多,工作不饱和,成本就会急剧增加; 3、客户本身问题,现在大多数企业的管理水平较低,一个行业没有统一标准,大多都是按照自己的经验和想法去提需求,这样软件代码或模块复用性就差,成本必然增加; 4、项目中,项目经理、产品经理和客户之间没有就需求,功能,模块,成本等充分沟通,造成需求分析不彻底,成本把控不完善,重复开发,开发迭代次数多等问题,从而提供开发成本。 有效降低成本方法就是采用saas服务方式。 嫌贵你自己来啊,比方说我家装修,材料都是我自己买的,有些刷墙之类的小活我都自己干了,省了点钱。你搞软件要想省钱,你也可以自己买服务器,买域名,搞点设计啥的,只要你会还是能省下钱的 贵嘛?已经放弃收费贵的开发工具了如微软系统,同时微软已经放弃中国市场。国内只用免费开发工具开源项目只做二次开发,只拿人家做过的改吧改吧本地化。可还架不住开发公司倒闭的速度,996用生命拼35岁劝退的秃顶职业不知道还要卷多久,早已经不是贵不贵的问题了,已经山寨又山寨,便宜又便宜,还想怎样?[泪奔]