本文转自:http://www.freelancer-life.cn/basic-knowledge/coder-project.html
本文内容虽然09年写的,但是对我感觉还是有价值。
现在外包的软件项目不断增长,但随之而来的,承接外包的软件公司、软件团队也越来越多,包括很多个人SOHO一族也加入到承接软件的竞争行列中来了,因此现在对于软件项目的争夺也很激烈。有很多人不知道上哪里去争取项目,总是抱怨没有项目做;也有的人虽然编程技术不错,但是对于与客户谈项目却是一窍不通,结果应该拿到的项目也拿不到手;也有的虽然已经接到了项目,却发现在实施开发的时候遇到好多从来没有遇到过的问题。作为一个多年从事外包项目接单的软件开发人士,我想从以下几方面谈谈我的经验,希望对大家会有所帮助。
第一点, 到哪里接项目
软件团队或SOHO最为关心的一点是在哪里可以找到项目做,也就是到哪里可以找到有外包需求的客户。对于一般人来说,广交朋友然后通过熟人介绍还是接项目的第一途径,但这要求你的朋友或熟人要在企业或公司里有比效重要的管理位置,对于像那些每天只能是埋头写代码的程序员这显然是不太现实的。所以大家不能等着项目来找你,而是要主动的出击去找项目。
现在网上有很多软件外包网站,在这里你可以找到不少的软件外包信息。比如GAF (即Get A Freelancer - 是目前国外最流行的外包站点)上就有大量的软件外包信息。不过这里每天外包的项目虽然很多,但竞争也很激烈。一般一个外包信息发出后一天内就会有无数个竞争者(很多印度阿三在和你拼报价),所以能第一时间与客户取得联系是非常关键的。因为客户一般都是先入为主的,一般来说,如果第一个谈项目的人他觉得满意了,就会对其他的竞争者不再予以考虑,所以你要经常上网站上看看有什么最新的项目,并立即与项目的发包方取得直接的联系。其他比如Elance、GetACoder、ScriptLance上也有很多外包的信息,大家可以自己上去看看。
是不是第一个联系了客户就高枕无忧了呢?也不完全是这样的。前面说过了,一个项目总是有很多人去竞争,就算是你抢先联系了客户,但可能后来又有不少人也同样联系了他,而客户在这种情况下一般是处在比较犹豫的情形之中,这时,你就要经常不断地联系客户,不断地征询客户的意见,询问客户的项目需求,把你对项目的理解也经常与客户交流。这样,客户会觉得你比较有诚意来接这个项目,就会比较倾向于把项目交给你来完成。有时,与客户拉拉家常,也会拉近你与客户之间的距离。说不定你会意外发现客户原来还是你的老乡,那就更好谈了。总之,如果你想要想争取到项目,就要经常不断地与客户保持联系,直到最终达成意向。
第二点, 如何与客户谈需求
接项目最重要的一步是与客户谈需求。客户对软件的需求是项目规划和实施的根本,所以在与客户谈需求时,一定要让用户将所有的想法尽可能的阐述清楚,并把所有的要求罗列出来。这时候不应该害怕“勾引”起客户的潜在需求而增加设计开发的工作量。而应该直接明白地要客户把项目的要求一条条地列出来。这时先把条理、归纳、分析先都扔到一边去,用纸笔将用户最原始、最完整的要求准确地记录下来。假如项目在你对客户的需求没有完全了解清楚的情况下就匆匆上马,那么就会随时发生意想不到的变更,轻则使项目延期或超出预算,重则使得原来已经做好的软件要彻底推倒重来。
所以我们在实施项目之前应该深入了解和挖掘客户需求,对某些不明确的需求要与发包方反复进行讨论,对于项目实施过程中的需求变更要规定处理办法,并形成项目的最终需求。在需求分析阶段,接包方首先对发包方的需求认真分析,然后通过业务建模、会谈、问卷、需求会议等方式收集客户完整需求,形成文档,然后经过客户讨论、客户审查、文档修订等多次反复的过程。有一点需要注意,即使双方谈的很投缘,在讨论需求时也一定要详细周到,精确到每一条不能再划分的软件功能为止。
要消除客户的疑虑 - 作为客户,他对于项目的承接者总是存在各种疑虑。比如,这个项目究竟承接方有没有能力开发啊?项目组人员是否有这方面的经验?是否作过类似的产品,是否有这方面的技术能力?会不会只是骗了预付款就开溜啊?最后完成的项目能不能达到自己的要求啊?我们作为承接者,就是要千方百计打消客户的这种疑虑。比如,你要经常准备好一些成功的案例和以前的项目的DEMO,就是把你以前成功完成过的项目,做成一个DEMO给客户看,让他觉得你是有能力完成类似的项目的。俗话说,事实胜于雄辩,把你以前做过的类似的项目DEMO给他看,好过你一遍遍空口的承诺。因为软件开发的过程中谁也不能保证一点问题不出,相比较而言,一个有经验的开发人员会更容易得到客户的信任。因为你已经有和客户的项目功能接近的案例,无疑会缩短开发周期,技术上有更好的保障,因此客户也更乐于把项目交给你。所以,程序员平常必须多花点时间和精力,搜集整理以前自己做过的项目案例,并把它们分门别类地整理出来,遇到同类项目的客户,就可以给客户进行演示,这样客户就会放心把项目交给你了。另外,把团队组成人员、技术能力、经验等客户看重的东西整理出来并给客户看,也能够对争取到项目起很大的作用。
第三点, 如何合理地报价
在完全了解客户的需求后,下一步就是要确定一个合理的报价。接包方要从跟客户的交谈中尽量地了解出客户的准确意思,思考客户想要的是怎样的一个软件,项目复杂的程度多大,客户的要求有多高,客户的性格如何,能够接受的价格范围等等,这些因素对于软件项目的报价都是密切相关的。如果客户要的是一个小型的软件系统,不太苛求有多全面的功能,只要满足某一方面的需要,并且客户又是一个比较随和的人,那么项目可以报一个接近成本的价格;相反如果客户要求的是一个面面俱到的管理系统,需要有各方面的功能,缺一不可,并且客户又是那种对项目要求严格苛刻,绝不变通的人,那就要充分考虑各种不稳定的因素,报一个比较高的价格。
在很多的情况下,客户在跟接包方谈项目之前,心理都已经有一个价格底线。如果要投入的费用超过了客户的预算范围,客户将不再与你谈该项目,他会转而找其它软件团队商谈。所以跟客户谈项目的过程中要迅速地思考客户需求的真正含义,能够通过某种转换和变通,把客户对于技术的要求与自己团队的技术力量可以接受的价格相对比,从而得出一个双方都能接受的报价。在与客户的谈判当中,灵活变通是成功的关键之一。当然并不是所有的客户都可以通过变通而满足,遇到客户不认同项目费用的情况一定要处之泰然,真诚地为客户解释,把客户的需求细化为技术上的要求给他分析,让他同意你的报价的合理性。即使客户对编程技术不是很了解,但经过你的细致的分析后也会对你的报价表示认同的。
软件外包如何正确定价
随着行业竞争激烈,越来越多的公司对信息化存在很大的需求,因而软件外包业务近年来始终保持了较快增长速度。从这几年的统计数据来看,软件技术服务始终以高于行业平均增长速度增长,软件外包的市场也相应地在不断地扩大。但现实中很多人却感叹软件外包难做,其中最难的就是外包的定价,这也是由于软件商品的特殊性所决定的。软件不同于其他有形的物质产品,比如电脑,由于制造电脑需要原材料,还需要加工。把这两部分的成本加起来再加上利润就可以得出一台电脑的销售价格。而软件不需要有形的物质,完全是程序员的脑力劳动的结果,因而在很多普通人看来,似乎是不需要任何成本的。软件业者常感叹,企业客户都愿意花钱购买昂贵的经营设备,却在软件上斤斤计较,同样是生财工具,为什么花钱的意愿相差这么大?这样的想法也反映在个人客户身上,大多数的人愿意花钱购买价格昂贵的CPU和显卡,但对于软件,只想到如何省钱,甚至使用盗版。
本人在软件外包领域工作了很长的时间,经常接触到软件外包的双方,因此经常听到项目双方的心声。外包方经常抱怨接包方漫天要价,价格贵得离谱;而接包方同样怨声载道,认为自己的收入还不如一个民工来的多,感慨现在的软件比白菜卖得还便宜。这其实就是因为双方对软件外包如何计价没有一个统一的标准,因而造成双方在软件外包的价格上争执不下,甚至导致项目的谈判完全破裂。反映在现实外包中,项目的发包方和承接方在价格这个问题上经常存在巨大的差距。我就见过一个客户外包一个类似QQ这样的及时通讯软件,外包方认为正常的费用只要5千元,而承接方却咬定要5万元才能完成。
那么对于外包的价格有没有一个统一的标准呢?当然有的。学过经济学的都知道,商品的价格由商品的价值来决定,而商品的价值又由生产商品的社会必要劳动时间决定。有形的物质产品是这样定价,无形的软件产品也同样是这样来定价的。软件外包也有一个统一的计价标准,具体来说,外包费用=每位程序员每天的工资×项目所需要的工期(天数)×人数。这里的每位程序员每天的工资是由当地的程序员的工资水平来决定的,比如在上海,程序员的平均工资是6000元/月,那么每天就是200元。项目所需要的工期是指按正常的每天八小时工作制估算,该项目所需要的平均一般工作时间。注意,有些兼职者只能用业余时间来做项目,因而工期就长,但真正的计算工期是以平均的社会必要劳动时间来决定的,所以计算工期只能以正常的每天八小时工作制所需的时间为准。至于人数,因为有的项目不是一个人就可以完成的,比如一个网站项目,就需要有后台程序员、前台设计师以及美工共同配合完成。所以需要的人数至少是3人。举例来说吧,比如一个软件项目,要求设计方在1个月内完成,大概需要4人的协作,地点是在上海,那么项目的费用就是:200(元/天)x 30(天)x 4=24000元。所以该项目的合理定价应该是2万4千元。
实际外包时,外包的定价应该是在需求确定之后。接项目最重要的一步是外包的双方在一起谈需求,客户在谈需求时应该把对软件的所有要求都提出来,而接包方就依据客户的需求来确定项目所需要的工期以及人数,再套用前面的公式就可以得出外包的费用是多少。接包方应该把计算出的价格详细解释给客户听,如果双方有争议还可以进一步讨论。这样订出来的价格双方都会觉得满意,也有利于项目的顺利实施。
当然在实际的软件外包中,实际的价格还要受到供求关系的影响。因为商品价格虽然是以其价值为基础,但在供求关系的影响下会围绕价值上下波动。建议外包方在发布项目时,选择那些软件外包公司和团队比较集中的网站,比如(http://www.php168.com)等,由于在这些网站的软件外包公司和团队比较多,发布项目后一是可以马上得到回复,因而可以尽快找到项目接包方;二是由于竞争者众多,可以货比三家,选择一个相对比较便宜的价格来外包项目。当然从承接方来说,也要尽量避免恶性竞争,以免搞乱软件外包市场的正常价格秩序,否则到头来受害的还是你自己。
总之,软件作为特殊的商品,虽然定价相对比起有形的商品来说要复杂一些,但只要掌握了统一的价格标准,还是可以得出一个比较准确的报价来的。只要外包的双方能心平气和地坐在一起认真计算一番,就能得出一个双方都能满意的价格,外包的意向才能真正达成。也只有外包的双方按照按照统一的计价标准,遵循公平交易的原则,软件外包这个市场才能不断发展壮大。
第四点, 如何组织团队
由于客户的需求是不同的,因而项目也是各种各样的。有网站设计项目、也有软件设计项目,要求使用的编程语言也是多种多样的。即使是在一个项目中,比如说网站制作的项目中,也有着前台的美工设计和后台程序的编写的分工。这些工作如果全部交给一个人去作那是绝对完成不了的。即使是一个小的团队,也不能保证所有的人才都齐备。因此最好就是自己把项目初步设计好,然后找合作伙伴共同开发,自己总体掌握整个项目的全部进度。如果在身边没有好的合作伙伴的话,网上也能找到不少可以合作的伙伴。
第五点, 如何能收到项目款
这是整个项目中最后也是最难的一个环节。即使你的项目做得再好,如果没有收到款,那你前面的一切努力都等于是零。要想项目能顺利地收到款项,那么从项目未开始之前的谈判阶段就要对这一点加以注意。首先要判断对方是否是真心外包项目。这里有几点经验拿来给大家分享一下:如果你看到项目中说 “请提供完整的解决方案和成功案例发到某某邮箱”,这应该只是想套取设计方案而已,发几张你们公司或团队的推介广告和报价单给他即可。还有的客户张口就要源码要设计文档设计方案的,这种人目的性太强了,如果你真给了他就再也不理你啦。还有的外包方死活不肯介绍自己,不肯告诉自己是谁、怎么称呼、怎么联系、是什么公司、做什么业务的,与这种连最基本的诚信都没有的客户就根本没有必要谈下去。其次是判断对方是否有充足的资金和实力,项目要求是否合理(技术、周期等各方面)。这个可以在需求的谈判中可以有意识地来加以探明,如果对方的项目很大却老是强调项目非常简单,这应该是不想付足项目款;有的发包方坚持不肯给预付款,老是要求项目完成后再交全部款项,这应该是没有诚心付款。还有的项目要30天才能完成却只给几天的开发时间,这种项目外包方也是很值得怀疑的。
对于软件团队或个人SOHO族来说,由于不是公司,对方对于我们的信任度不会很高,所以对于大的项目一定要采用合同方式,这样出现问题才好解决。在合同中,最好订清楚分阶段来付款,这样有利于分散风险。比如,一般要求合同订好后先交30%的定金,项目进行到一半后待客户验证后交50%的项目款,全部项目完成并交付后再交清全部款项。这样做对于客户来说也比较好控制项目的进度,因此对方也比较容易认同并接受。
以上谈了软件团队或个人在承接软件项目时应该注意的几个关键问题,其实还有很多问题由于文章的篇幅所限没有涉及。比如对于项目的选择,有的人大的项目做不来,小的项目又不愿做。结果到头来什么项目都承接不到。因此一开始要把自己的期望值放低一些,先从一些几百元的小项目做起,有了一定经验后再接一些大项目,这样循序见进才能不断进步。