我是怎么弄砸JobSite的

cf053c36520cf9e62fe2ccc84afcaab9
你玩过梭哈么?
那我问你一个问题:同花顺和一副牌是个什么关系?
在JobSite这个项目上,就是“把5周的项目做成了54周”(你想对了,大小王还不在我手里)。这个月底就是“整副牌”完结的时间,我能负责任的说,一定能凑够整副牌的。
听我仔细说说这个项目。
今年年初,1月份的时候,一个干瘦的人找到我们说要做一个APP,我们管他叫P先生吧,这个项目是一个简单的记账应用,P先生在建筑行业,负责盖房子,不是大北京那种高楼大厦,是小房子,第一个月开始挖坑,第三个月入住的那种。即便这样,一栋房子也会有好多承建商,比如负责门窗的,负责挖坑的,负责砌墙的等等,而总包商需要对他们做管理,协调他们生产,给他们付款,验收成果,还要把当前房子状态拍照给最终客户看。这样一套需求用一个大Excel加上一个共享目录放文件照片就可以搞定,只是不方便而已。
P先生找到我们,说:“后台已经全部做好,PC端的应用也基本上完成了,现在就差APP了,PC端是Restful风格,Json格式数据,理论上就是PC怎么调用,APP就怎么调用。就这么一个事情,你们看要多少钱?”
评估后,技术方案是用.net包装一下API,类似NodeJs包装Java API一个意思,前端用Ionic + angular2,预计咬咬牙的话,一个前端一个后端,哥俩儿2个月差不多能完成这个APP,实在不行,后端那哥们还可以帮帮前端,毕竟他的活儿简单,就是包一层而已。
方案和评估定了以后,被销售砍到了4周,一个月。
砍时间这事儿吧,不分国籍,全世界的销售都是这式儿的:和买裤子一样,照着一半砍。这销售要是TW的G先生,那一定会先喝一顿酒,然后一起看旅游卫视“有多远走(GUN)多远”。不过当时我是一个新人,公司唯一的销售还是合伙人,人家也是第一次砍,我这英语水平也不知道咋个“委婉”的回绝。。。(我还能写200多个理由,都省略了),最后我就说了句:“At least, one more week”,就这么凑成了5张牌。草草开始了。
一周后,后台的哥们提出要离岛到大城市,2周以后动身,考虑到也就是包一层的事儿,就跟他提了下面三个目标:
  1. 尽量在一周内努力完成
  2. 然后第二周可以放松一下,准备准备搬家什么的
  3. 第三周离职、搬家
结果呢,三个目标达成了2个,还不错吧,第二个和第三个目标毫不迟疑的达成了。
跟他聊了一下,得知由于“Java Session”的问题,无法和.net的壳儿做到安全衔接,所以整体方案眼看要扯淡,也就没有继续往下做。
你说咋整?找到CTO说了这个以后,CTO说他有方案可以跟他聊聊,聊完以后要求他再研究两天。两天后我跟进,发现仍然没有进展。又找CTO,以我雅思口语3分的水平和他争论,他意思是“再研究2天”,我意思是“人都要走了,谁给你好好研究?赶紧选别的方案呀”。
结果我赢了。等我说“要找一个Java开发工程师看看Java后台、直接连Java API”的时候,CTO说“就那个前端开发工程师就行,让他自己弄吧”。我照眼看了一下那个大胡子,我们叫他C先生吧,C先生得胡子长的都快分不清五官了,我心里有点儿犯嘀咕:这猴子能直立行走就已经是奇迹了吧。
后来又跟P先生开会,说了这个变故,P先生说,他可以让那个做网站的哥们(我们就叫他E先生吧)帮助我们弄后端的事情,不过人家有正经的工作,帮助我们只能算是茶余饭后的。
见了一面,发现他也是毛发浓密的。我这个脸上唯一毛发就是眉毛的人和两个猴子谈了一个下午,总算弄清楚真相了,才得知真相是多么的可怕:
  • 5年前P先生就开始做这个了,也就是说现在的Java后台是5年前的一哥们写的,话说5年前就Restful Java API,也算是浪尖上了;
  • 4年间,P先生重新做了1.0版本3遍,每次遇到重大问题的时候,Java开发就跟他说“基础没打好,得重新开始”,于是重写了3遍解决了3个大问题,但是功能上毫无进展;
  • 那个Java工程师是P先生的邻居,大学毕业生,闲散无业。前年得时候,在安省找到了工作,飞黄腾达去了,留下第三个未完成的1.0版本给P先生,于是P先生才不得已找到了E先生,无奈E先生只会Web端,这就才有的我们;
  • 那个1.0版本呢,虽然E先生有源代码,不过始终编译不过去,所以根本不敢动,无奈才用NodeJs包装。NodeJs是E先生的新玩具,现在正玩儿得乐呵;
这两个猴子的英语说的太快,以至于我打断了无数次,让他们重说我才能理解个中意思。不得不说,从那天下午以后,我跟两个猴子成了好朋友,尤其是C先生,我的同事,这一年来没少教我说话。
跑题了,跑题了,回到正题。
得知了具体情况以后,我感觉这个项目是这些年来遇到的比较邪门的那种,但是还不至于绝望。于是就计划着,一定要让C先生roll off,换成一个毕业生,减少损失。
5周很快就过了,10周都是一晃而过的。10周后,我如期的把C先生换下,毕业生顶上,为此还安排了无数次毕业生露脸活动以便让P先生放心。
毕业生接手后,我下一个方案是:让P先生逐步看到Java程序不变不行,然后就可以跟我们签一个Java后台的开发合同,在这个合同里面,把这段时间的损失再找回来。对于这个计划而言,毕业生不给力反倒是一个助力。
可是毕竟是个毕业生么,太不给力了,给的助力太大了,把项目推沟里了。事儿是这样的:
有一天CEO给我打电话,说他约了P先生,一起讨论一下项目。这个会就在一咖啡店,我自然是打开记事本准备记录,毕业生也连好了网络随时准备着,然后就听CEO和P先生飞快的说着我完全听不懂的话,伴随着哈哈大笑,就这样说了半个小时,最后用10分钟大致过了一下现在的问题,每次毕业生或者我说出大致预估时间后,CEO都会帮着P先生砍时间,最后我都懒得再争论了。
事后我越想越不对,岛上的人都这么奔放么?为啥CEO和P先生有种一见如故的感觉?
我问那毕业生,”他们说了半天,说的是个啥?”毕业生竟然回答,一大部分他也听不懂,好像说的是CEO的房子怎么样和P先生在岛上的其他地方有什么活儿。我又找到销售求证这到底是个咋呀?才得到了一个惊人的秘密:
P先生是CEO的邻居。他俩儿已经认识了10年!
怪不得,怪不得。。。
想都不用想,用毕业生的不给力“逼迫”P先生重新做Java后台的计划流产了。
还好我还有最后一招,就是把毕业生编入维护团队,以后所有P先生的活儿都按照维护团队计时。我心想:眼看着大把工时投入,没有收入,CEO您自己琢磨吧。
于是30周以后,终于把这个APP纳入到了维护团队,50周的时候,就是上个月,这个APP上线了,毕业生现在全职维护各种线上突发事情,所有工时没有收入,P先生坚持认为“你们的Bug还想跟我要钱?”,也曾经和P先生纠缠过什么是“Bug”,P先生认为“Bug就是APP不是像我想的那样运行,因为我想的已经全部都跟你们说了,不对肯定是你们没理解”。
说实话,我觉得免费维护期可能会持续很久,如果非要给个期限,可能是一万年。
好了,这就是前因后果了,我曾经做过事后推演。拿出“项目标准化对照表”,存在的问题有:
项目开始前:
  • 没有详细的技术方案论证;
  • 没有第三方程序的调研;
  • 没有坚持项目的预估,使用销售的“预估”;
  • 没有让销售介绍各个Stakeholder的关系;
项目进行中
  • 疏于站会,比如一周后才知道.net包装Java毫无进展;
  • 项目组缺人没有引起强烈重视,导致一个人做一个项目;
  • 腰杆不硬气,项目组有时候是需要“威胁”客户的,要知道他最怕什么,最怕什么就拿什么威胁。不过,如果每次“威胁”的结果都是CEO的回访电话,我也是服了。还有一个明显现象,30周到40周,所有的需求P先生都会抄送CEO了,可怕吧?还有更可怕的:从40周后,一些需求由CEO发出,抄送P先生!“或许是他们两个住的近,喝小酒的时候,因为CEO懂技术,所以他描述的比较清楚吧。”我这么猜。
  • 客户关系不熟,找不到切入点。这点是硬伤啊,对于一个东方人,口语这样,刚刚到这儿,连冬天要穿多厚的衣服都还不知道,怎么和土著人混关系?况且,有个懂技术的CEO做邻居,我要是P先生,我也不愿意跟你聊;
项目结束期:(好吧,这项目得1万年,远没到结束期,权且把上线前后当成结束期吧)
  • 没有倒计时的任务列表(这个列表有一个显著得作用“做完了这些,这事儿就完了”),所以导致“P先生认为没完,这事儿就完不了”;
  • 这个项目最后怎么样,谁也没有个说法。包括销售也不愿意豁出脸去要维护费,我更不会去了。可惜了那个毕业生,被豁出去了;
说了这么多问题,其实也有好的地方哈,比如:
  • 有周例会,一开始一周一次,从第十周开始,两周一次,当面Showcase,这就避免了“我说做完了,你说没做完”的扯皮;
  • 技术实践不错,有CI,按照规矩Push、Merge,毕业生学到了很多;
你觉得这个项目咋样?从事后沙盘来看,如果重新来,应该咋做?

发表评论

电子邮件地址不会被公开。