技术之路-外包

—-记一次谈话心得.
编辑:酱游科技IT技术部

收获

外包是一个很具有挑战性的东西,在我们没有任何经验的前提下做外包,其实是一个很大的挑战,所以,能够在与这方面有了一些经验甚至小成就的人谈,是会有很多收获的,但是,别人讲的虽然很有道理,不一定适合我们,我们也不可能照葫芦画瓢的去完全照抄别人的那一套,我们需要做的是在别人的基础上提炼出适合自己的一种方式。我对一些别人的观点甚至做事的方式持一种怀疑态度,真的是这样的吗?

谈判(技术牵引、展现诚意、适当回扣)

合理谈判,用技术的眼光去看问题,在一些问题上要提供可行的且对我们有利的解决方案。

分阶段

将大画小,分不同的阶段解决不同阶段亟待解决的问题,有目的性的完成每个阶段的目标性问题。

  1. 第一阶段定需求,拟出项目主线并根据主线制定产品需求文档(PRD)
  2. 第二阶段谈价钱,旁敲侧击出对方的预算这些相关的东西,并根据这些东西适当的给出价格。
  3. 第三阶段表诚意,在这个基础上表明自己的诚意,若有相关竞争的团队,则试探出对方的报价或者项目对接人回扣这套东西,做一些适当的调整以保证项目能够最终谈成。

注意

  • 第一阶段主要谈需求,谈项目主线,根据谈判结果有一周左右时间出具体的方案。
  • 第二阶段是根据第一轮筛选后的,期间的一周时间要与对方的对接人私下多交流,从话语中探出对方在此项目的角色,对方的为人等,如果对方只是项目经理或者跟对方公司关联不大的人,从话语中探出对方吃回扣那套,就要表明自己的回扣一般10%~15%,90%的人都吃这套,也是关键点,然后探出对方对此项目的预算,根据预算报价,加大成功可能性。
  • 第三阶段一般就最后两个团队竞标,展示出自己的诚意,能通过第二阶段打通的人脉来探出对方外包公司的报价是最好,然后下调自己的价位。

开发

开发周期

  1. 第一阶段定需求,根据主线拟定PRD文档。
  2. 第二阶段出产品图,给需求方查看。
  3. 第三阶段开发产品,先出demo版,多余需求方进行持续的交流沟通。

注意

  • 外包的开发,分三期,一期定需求、二期出界面、三期开发;也分三个版本,demo版、可运行版本、成品。
  • 一期定需求:根据主线些产品需求文档PRD,跟对方核对需求,签字。
  • 二期出界面:界面先出主线图,二级页面,出两到三套的界面图(主要定风格、整体样式),当然这里有一套比较完美的其它的是作为对比存在的,给老板选择,让他看到你认真做了,而且他选择也让他参与其中。其中一套一定要接近产品原型,引导对方选择这套,而这套图也将作为技术开这块指定方案,拉近工期。确定好一二级界面后,再出之后的三级四级页面,PRD中一般不会写得那么细,所以在图设计好确定后也要签字,以免不必要的修改。
  • 三期开发:主要根据之前累计的模板快速套出产品,不要一次性做出产品在与对方交流,每周最好交流,没半个月出一个版本,所谓版本不是迭代版本而是demo、可运行的、成品几个阶段的版本,让别人看到实际的东西,别人才心里有底。

关于产品

优先满足界面,客户一般是不关注后台代码也看不懂代码,他们唯一能看到的就是界面展示效果,所有在出版本时候也可以有点吧界面完成。

关于修改

修改在所难免,小修改还是要满足的,但是一定要表现出自己的不情愿与加大了工作量,但是大的修改必须要谈,引导选择其它简单的方案,或者砍掉一部分功能;实在要修改要添加功能,谈价钱。

项目的评判

怎么样去评判一个项目,一个项目要具有一个怎样的样子我们才应该去做?或者说,这个项目到底能够给我们带来什么?在做这个项目的过程中,我们能够有哪些收获?我们做一个外包项目的出发点往往都很直接很明确,那就是赚钱,但是经过昨天与这个行业一些做的比价好的人的接触,我发现,我们只是把自己限制在了一个框架内,因为外包是一个长久的合作或者是一个长久的需要时间去积累的东西,在这个积累的时间内我们可以做很多东西,例如:人脉资源、口碑、谈判的技巧以及技术的实现,这些是钱买不到的东西,这些东西能够创造的价值甚至还要超过我们挣的钱的5番、10番。总之一句话,并不是说钱多的项目我们就要去做,我们要理性的分析这个东西能不能够给我们带来金钱以外的东西,这才是对于现阶段的我们最重要的地方。

利益最大化

能够挣钱的外包才是一个好外包,我们不用去过多的考虑此外的东西,我们不用去过多的关注项目本身。我们在接触的时候就要理性的去判断,这个项目能不能让我们的收益最大化,因为有钱挣才是我们的终极目标。在这个过程中,我们可以做出一些衡量,在能够保证基本资金收益的前提下,是否可以获得除了金钱以外的东西,因为我们现阶段属于创业初期,可能说利益的这个东西已经不仅仅指代金钱了,我们能够获得的其它方面的东西其实对我们来说永远是我们原始财富的积累:

  • 时间周期长,预算充足。
  • 时间紧,预算充足。
  • 时间一般,预算一般,能够获取技术上的一些锻炼的机会。
  • 时间周期长,预算充足,能够获取技术上的锻炼的机会

这个只是一个大致的方向,具体的情况视情况而定,总之一个原则:最大化我们的利益,这个利益不只是金钱,还包括能够给我们带来更多机会、创造更多价值的东西。

总结

  • 谈外包需要先了解产品,然后出方案去竞选。
  • 谈项目,展现自己诚意,技术去牵制甲方,建议先做微信端同时建议之后出app端,一定适当的去回扣,关系很重要。
  • 模板,外包离不开模板,也是外包公司的生命力,模板可以自己开发产品累积,也可以选购一些现成的行业内比较成熟的模板,也可以买别人的产品反编译,但一定要把模板掌握在自己手里,能够轻松修改。
  • 注重表面功夫,不要太自已底层的性能、优化、安全之类的,一般外包维护期就3~6个月,在此期间业务一般增长不会爆表,可以安全渡过,之后就没什么事了。
  • 技术选型,一般项目检简单的做,一般项目在外包质保期间用户、并发不会很大,能保证产品流畅运行就ok。
  • 服务器,建议选购阿里云,而且让甲方预估自己每个阶段的用户数与并发量,根据用户数给甲方建议配置。
  • 在有技术积累的前提下,外包成本可以压到最低,从而达到利润最大化。
  • 谈外包是需要把甲方往自己希望的方向上引导,主动权掌握在自己手里,否则会有改不完的需求。
  • 尽量让客户先做微信端,然后网页,最后app。
  • UI尽量做到最好,因为客户最先看到的是UI。
  • UI出两套给客户选择,让客户主动选择做得好的一套。
  • 微信网页外包相对很好做,效率很高,但是钱比较少。
  • 确定客户需求的主线(注意,一定是主线,细节不考虑),估算开发成本,视情况报价。附加功能额外算价钱.
  • 谈好之后立即签合同,一切开发按照合同来,如果客户中途改需求,可以按照合同来视情况拒绝或接受(考虑下个版本,价格)。

关于我们

不足

在以往的项目研发中,我们往往把精力专注于项目本身,很少将目光集中在技术的实现方面,在外包谈判的时候,很少有机会接触到实在的项目,一般都是直接以微信或者网页的形式给我们做,接触的形式与真正意义上的项目还是有很大的区别,其实在这样的一个过程中,我们就会很大程度上的忽略自己所扮演的角色以及我们所擅长的东西。再一点就是在技术研发与实现的过程中,我们能够遇见到一些问题的发生,比如说在设计框架的时候,是应该严格按照规范文档进行设计的,以及API的设计也是非常有讲究的,但是当我们真正去做的时候,却很容易忽略这方面的重要性,甚至是完全按照自己的意愿去写了,这样的一种方式是有问题的,也是目前在技术方面存在的问题之一,我们对于外包业务存在的问题归纳如下:

  • 接触的外包形式与真正的项目有区别。
  • 与外界接触少,对需求方所关注的问题缺乏一个认知。
  • 技术在研发的过程中往往忽略代码的重用性,特别是服务器。
  • 没有类似的模版或者流程化的东西,效率因此而比较低。

怎样解决

在整项目的研发过程中,不论是涉及到项目的谈判与竞标还是我们技术的实现,其实我们最缺乏的就是经验,那么我们应该怎么做呢?第一步首先要把自己现在有的东西做好,如果自己的东西都做不好,怎么去做别人的东西?所以我们在做好自己东西的同时,应该多去接触这些东西,能够接一些可以弥补我们技术实现的一些单子来积攒我们所缺乏的模版、经验的东西,从小单子不断的往大单子做,同时要将这一套流程深刻的运用起来。

  • 先把自己手上的东西做好。
  • 其次,从小单子多接触外包这方面的东西。
  • 从零开始积攒开发功能模块和模版。
  • 多运用流程化的东西。

技术方向

在产品的研发中,技术的实现是最重要的环节,不管在塑造自己的口碑(说高大上点叫做品牌形象)还是在对自己的实力的提升方面,其实都是很重要的东西,在技术方面,昨天东哥也提到了关于开发模版的这样一个很实在的东西,其实开发模版在我个人的理解来看,就是在开发环节中的一种常用的手段,我个人十很注重这方面的东西的。但是在我们技术团队内部,这方面是很缺乏的。一方面是这方面的东西接触不多,缺乏这样的一个意识,每次在做项目的时候基本上都是在重复造轮子,这样的开发成本非常大,对我们这样的初期创业团队扩展外包业务甚至说在自己项目的过程中是非常不利的,因为第一点,开发成本会增大,每次花费在同样的功能模块的精力和时间就是成倍的在增加;第二点,维护的成本也很大,如果模块没有分离,相似的模块的维护成本也会随着项目的增加而成倍的增加。所以,在这个过程中,我们需要不断的弥补这方面的缺陷。

模块抽离

简介

在建立模版之前,其实更重要的是一些公用模块的抽离,因为模块的抽离是较模版建立而言更为简单、更好把控的环节,说白了,模版也是由这些小模块构建而成的。公用的模块不应该依赖于某一个或两个项目,而应该是与项目实体抽离分开的一个环节,在做项目的时候,就我们的现状而言,更重要的是注重这方面的问题

实施方案

客户端

客户端主要指的是iOSAndroid两个平台的开发,在项目的研发过程中,需要不断的积累使用的开源框架以及一些常用的工具类,在这个基础上做一个大致的分类,那么在下次使用的时候就可以根据特定的开发场景使用相应的一些模块话的功能:

  • 总结之前写过的项目酱游小工蜂师傅版,将使用到的开源框架或者一些工具类整理归纳。
  • 在没有项目的时候,要多写一些框架,上传GitHub,并使用Travis ci开源持续集成系统进行在线的测试服务,确保工具类能够正常使用。
  • 有项目的时候,在不影响项目周期的大前提下,尽量把模块抽离本工程开发,在新工程里边开发了之后集成在项目中使用。
服务器

服务器主要负责网页后端(前端界面的调试与部分js)、微信开发以及App后台的搭建,在项目研发的过程中,其实很多功能模块在相似的场景中是可以通用的,甚至可以将一些数据存储、逻辑操作等做成服务器集群的概念,也就是最近几年比较多的BaaS后端服务,但是这是一个相当浩大的工程,所以需要时间的积累:

  • 在项目开发的时候,做一个详细规划,同样的使用模块抽离的方式,将通用模块新建一个项目进行设计与实现,同时完成相应的测试以确保模块的功能的稳定性。
  • 没有项目的时候总结归纳之前的项目并对抽离完善一些相应的模块。
  • 对每个模块,要定期进行测试与维护,确保功能能够正常运行。
  • 有项目的时候要增加没有的模块,对现有的模块进行不断的完善。

结语

在缺乏经验的这个阶段,我们需要的东西是学习,不断的学习、拼搏。只有多去学多去实践,才能获得最终属于我们自己的天空。