与领导相处:你直言百句不如让他犯错一次
当你与领导就某一问题发生分歧时,你跟他直言你心中的看法,有时既使你再有道理,领导也未必会接受,哪怕他指不出你的问题在哪,他的好在哪,毕竟领导就是领导;这时候还不如充不懂,索性按领导的来,哪怕明知道是错的,有些弯路还是要走的,有些学费还是交的,这样印象才深刻。
以上是我从公司年初时开始做的一个产品,到七月底已成无底洞,最后不得不叫停的经历中得到的心得体会。
今年年初2月份,落到小组的身上开发任务有两个公司的产品,其中一个比较小,估计1个半月左右可以完成,而另一个则相对难一些(关于生产制造方面的),估计要4个月(单单开发,不含测试);当时小组共有人员5人,这是我初步对开发时间的估算。
在开发前的讨论会上,负责开发部的头头倒是没什么意见,毕竟大家都是搞开发的,都知根知底;可是负责市场的一位领导(下文称市场老A,比较牛的意思)明确表示反对,他最主要是觉得我估算的时间过长,而我当然是不太服气罗,又是摆数据,又是说事实。把我们组前一年开发进度数据,现在要开发的产品有哪些业务难点,哪些地方采用了新技术,一一分析给他听;可人家就是不买单。那人家心里的时间是多少呀?1,2个月搞定,听得我头都大。
照理说我估算的时间还是有那么点道理可依的,可人家为什么就是不接受呢,是没有说服力,还是?我百思不得其解,在跟好朋友聊天时说起这个事,结论就是:软件公司中也是讲政治的,得罪领导了!那好吧,下面我作一下检草,希望大家不要再犯,免得吃闷声亏。
1,领导的光辉事迹要表示崇拜,不要持怀疑态度。
想当年市场老A也是做开发的,听说还是带队的;有一次,他跟大伙吹嘘当年带领一支铁打的开发团队,能够上刀山、下火海、干活干到人吐血(这是原话,我没多加一字),最猛时他小组一连通宵加班一周多,两人直接送医院,三个月里面做一套很牛的系统。听到这里,我就暗骂,NND,无数开发人员就是被这样玩残的,丫的还把这当成光辉事迹了。再说了晚上弄通宵,明天怎么也得休息一个上午或下午吧,算一算时间,不是差不多的吗,小学数学有问题?再说做的系统那么牛,大家当然要领教下罗,一看VB做的,50来个数据库表,千篇一律的添加、删除、修改,搜索条;一个函数一写就是一大段,老长老长的,模块复用少,随处可见SQL语句,虽说在四五年前还过得去,但也不至于说的那么牛吧!当时我也老实,实话实说,说很一般,不怎么样!“正确做法”:当时我应该表现为握紧双手,仰视市场老A,表示崇拜,并后悔不能早生几年参加他的团队而抱憾终生。
2,做事要按照领导的喜好来。
市场老A在工作上的喜好招数精神胜利法+打鸡血,具体表现为不管三七二十一,订个很牛的目标且要去做到,在销售上行得通,毕竟销售要忽悠客户,要敢于把话说大点,让人觉得你有料(销售这方面我是外行,没发言权);但他把这招强加给开发组,那就让人受不了了。具体表现在开发时间的估算上,在他眼里再难的系统上限也就一个月,你说破嘴皮,他顶多给你打针鸡血,抓抓紧,加加班!在开发延时则是继续打鸡血,延长时间最多为一周,不过最好延长一天。这样岂不是把开发的都玩残了,还好他有个毛病,你可以无限次延,但你一下跟他说清楚要延长N周,他就要开骂了。这被很多组开发的人把握了,接他的需求做产品,他说多长就多长,后面不行就延时,曾经有个小组的开发延了3次3天,2次一天,4个一周才脱离苦海;有次跟他算开发时间,他照例给我一个月,我没吱声,当着大伙的面算时间,一天按24小时算,一个月都做不完;还有次开发延时,我申请15天,被他狂骂,无耐又是当着大家的面算,最后领导都觉得15天少了,他才同意(我笨呀,不会延时两次一周吗?猪)。“正确做法”:做事要按照领导的喜好来,错的也是对的,反之,对的也是错的。
3,领导说的都是对的,不要反驳。
记得有一次大家一起吃饭,市场老A聊起他为什么从开发转向做销售、做市场;原因是做开发没前途,做不过30岁......末了他还提起网上《程序员与妓女区别》那遍文章,并强调说什么现在看来程序员还不如妓女,妓女都能做过30岁。当时我一听火就不打一处来,会不会尊重人呀?,真想上去抽他,当即反唇相讥,“在那支铁一样的团队,我搞两年就顶不住了,工资不够进医院。”他一听一下就无语了,而且脸色难看,当时我还暗爽,现在想想,我又错了,“正确做法”:吃饭的时候应该多吃饭,多吃菜,多喝汤;你说什么话呀,不务正业。
不过看来我是很难做到了,做人太直很难改的,不过尽量改吧。下面回到开发的正题上来。
在软件公司一般平级的市场与开发人员,市场的要高出开发的半级(谁让钱都是从人家那里进来的呀),即然市场头头表示反对,我的头头也不好说什么了,当时<市场老A>表示能否把小组分成两小波人,我带其中-波做那个小产品,另外一波人做大的那个产品;做大产品那波人反映比较有难度,市场老A当即表示,推荐几个实习生来,突击培训两三天,快速上手,加入小组快速开发,(我差点雷倒,还真把我们当民工了,随便拉两个人加进来,就能快速开发,你还以为是搬石头呢?!)最后,从我小组中抽三个人+两个实习生组成一组开发新产品,其中一人任组长,由他负责,我和另外一人做那个小产品(差点成光杆40);
虽然是开发不同的产品,但名义上还是一个组,日常在同一个地方工作,每周还是照样坐到一起开个总结的例会。当时自己也没想那么多,还对他们的开发存在的问题提了一些意见,一个项目做坏了,是有因可找的,下面是我的分析。
1,设计没有做好,过早地开始编码就是做负功。
一般情况下市场老A只给一个月的时间,可这次却破天荒给了两个月,让我的组其中一个组员充当临时的组长进行设计,说这个系统比较难,其中一部分就是业务比较绕,花了一周多熟悉业务,一周来设计数据库,业务没有熟透的情况下就开始设计数据库,自然设计不完,有些核心的功能没弄,加上时间紧,他们就决定开始编码了;当时我表示反对,理由如上;临时的组长的理由是系统是基于模块设计的,核心功能属于其中一个模块,可以先把其它的模块做好,然后再做这个模块(这个模块比较难),模块化设计是这样理解的么?当时市场老A没出声,意思就是赞同,所以设计就这样算完成了。
2,验证设计要严谨
做完设计之后,要检查一下设计是否合理,因为做的是B/S的信息系统,设计完了之后形成数据库,个人比较喜欢的方法就是模拟填一遍数据,自己想像一下界面,心里考虑数据在程序中的流转处理,一步步地填入数据库,有没有少业务字段,要不要加辅助程序设计的字段,设计一目了解。当时我也是这样建议,可人家认为这样很费事,我也承认这样是费事,且看上去大伙都是在那想,偶尔录录数据;远不如狂敲代码来得爽,可这是狂敲代码的基础呀;因为没做这一步,后面的开发出现了不少的问题,写着写着代码,居然发现数据库里面少字段,或者编程时才发现设计不合理,那也就只有回去改了,这样反复修改的所费的时间会更多,所以说古语“磨刀不误砍柴功还是很有道理”的。
3,边设计边开发要不得
前面要做的是基础功能模块,就算再怎么设计不做好,多改改,多花点时间还算做得差不多了;这时候已经超出原定时间了,可是核心的模块还没做设计呢,好了,现在就动手,在设计的时候才发现前面做的基础模块有些地方跟核心模块接不上,满足不了要求,那只好改罗;注意了,这是初步设计核心模块是发现对不上,一句话改;随着对核心模块设计的深入,发现前面做的东西很多地方满足不了要求,改了的还要改,那头才大呢。
当时我的想法是,停止编码的开发,只做设计,把设计完全做好了之后,要改的再改。刚开始市场老A觉得会浪费人手,因为停止编码工作,也就是说有人暂时没事做,看起来挺可惜的。于是还是坚持了一段时间边设计边开发的搞法。
最后连负责开发的人自己得觉得搞不下去了,前面设计的东西没有考虑好,后面设计时发现已经做好的东西要改,而且这要改东西不是一般的多;再加上后面边设计边开发,说得严重一点就是早上改了,明天设计时居然发现不行,还要改,这不是要人命吗?在七月底的时候,公司看不到产品成功的希望,将开发叫停。
在后来的失败总结会上也颇有趣味
1,领导是对的。
照理来说团队开发软件失败,负责人怎么都应该是第一责任人吧,可这次人家压根不是搞实际开发,是锻炼新人去了,当成练兵项目了!
2,领导栽你赃,你要认。
几个月白做功,怎么也要有人被批评处罚吧,直接带队开发的组长(我组一个组员)让领导比较失望(他也冤呀,没带队经验,硬拉着搞这块硬骨头,而且外行人负责指挥)......然后我也被小点了下名,原因是实习生没事做,你这个组长怎么不分配点事?(边设计边开发阶段,没有抄代码的任务,实习生只能在那无所事事,我当时和另一组员在开发小产品,我能跨组拉人干活吗?),不过这次我总算有点进步了,不出声,默认了。
不过经过这次之后,市场老A对开发的干涉就少很多了,这也算是一个好的结果吧!
补充:
前段时间刚把今年的第二个任务完成了(也是公司的一个产品),所以才有空写写心得,早上起来发现有人留言说我发牢骚,其实不是,是有点气愤,程序员素有把程序当成自己的孩子之称,试问因为别人的原因把自己的孩子弄残了,你能不气愤吗?不过话又说回来,这其实不是我的孩子,当时我小组已经分成两组,我只负责小产品,另外一波人弄大产品,我的小产品于60天后完成(还是延时了一段时间),可是大产品最终失败,我从未参加里面的开发。但是在小组例会中(名义上还是一个组),我每次都给出了自己的意见,上面说的那几点我都是在开发过程中就提出来了,可未被采纳,最终大产品完全失败。我也不是那种事后说风凉话的人。
项目失败后,小组再次合并成一个,我们下一个任务就是接手上面的烂尾项目的开发,或者几个月之后我可以写一篇如何接手烂尾项目的随笔了,呵呵!
还有我文章中还想表达是现在国内开发时,外行人员(销售、市场)对开发中的本应由开发负责人拍板决定的问题横加干涉(比如开发时间的估算,人员的使用、配置),这是开发过程中经常遇到的问题,给开发添加了很多不必要的麻烦,有时甚至直接倒至开发失败。