看到这个标题,我想应该不少人都有苦涩的回忆,我这几年的创业经验中,也碰过几次程序员人间蒸发导致技术开发难以接手的案例,也听说过类似的烂摊子也的确不少,我都有遇过,通常创业者本身不懂技术或是对技术一知半解的状况,就更容易被程序员唬得一愣一愣的。别以为这种事只有遇到外包才会发生,我也看过技术合伙人学会隐身术后就人间蒸发的惨痛案例。
因此,经过去年一年在程序员客栈工作,我都建议每个非技术背景的朋友,可以至少知道一些基础,这样当程序员发生问题的时候,就不致于发生不知道代码、资料库不知在何处的窘境。为了把风险降到最低,以下来谈谈创业者在与程序员合作时需要注意的几个重点。
防范风险前,先了解工程师对公司的期许
理想的情况下,我们都不希望让一个优秀的程序员离开工作团队,希望程序员能与公司一同成长、长久共事,所以我们可以先了解对于大部分程序员来说,对公司的期许是什么。
一般来说,我们都知道营运端的人需要技术端的人做出平台来让公司运转,而风险就在于技术端的人没办法如期完成工作,更严重一些则是无法交出一个像样的平台,甚或是人间蒸发。所以这也是为什么敏捷开发的理念,将产品开发的周期减短,也是减轻风险的一种方式。但是反过来,大家不知道有没有想过,对技术端的人来说,风险在哪里?这边举一个我最常用的例子,如果一个程序员在阿里巴巴写一行代码跟在任何一家创业公司写一行代码,谁的价值比较高?这答案显而易见,当然是阿里巴巴,因为使用者的量体大小,造成软体平台的价值有所差异。所以,对程序员来说,如果他有更好的机会做更大的发挥,本来就是他对于营运端的期许,发挥不如预期自然也成为风险。
一间公司成功的关键之一,就是降低人才的流动率,让每个人的技能与经验能够不断的累积而成长,也能完成对自己的期待。然而往往事与愿违,或许对于耿直的程序员来说,有更好的选择,也因此管理技术的风险才会显得如此的重要。
技术管理的风险在何处?如何将问题降到最低?
技术容易发生问题的地方,根据我们过去的经验,简单可分为几种:
问题一:开发团队因故无法完成或交付任务:这种状况其实还可以细分为完成一半还是全数完成,以及程序员还有办法联络到还是无法联络到,也因此我们在做管理的当下,一定要记得掌握一些基本的原则。
预防方法:
(1) 代码一定要用Git 管理,并且定期请工程师Commit 代码,而且一定要写Commit Log。如果是做到一半的开发,至少会大概知道程序员写到哪。
(2) 数据库定期备份,虽然程序员有时候会做自动备份,但是有时候翻脸不认人的时候,还是有数据存在自己电脑最实在。
(3) 所有的服务器帐号密码一定要有列表,如果交接后,请全数变更。这样比较不怕程序员消失,就无法进入服务器进行管理与备份。
(4) 最关键也最重要的就是要有技术文件,但是很多人其实并不了解要做哪些文件才算齐全,不过至少有张图让你了解你们用了几台Server,大概系统的架构长怎样,API规划的文件是怎样,这些基本的理解,最好还是要有一些文件去做纪录和呈述。
问题二:数据库发生问题或是不翼而飞:前阵子发生的血淋淋案例就是Gitlab 的工程师不小心删除服务器的数据库,这些状况都让不少代码与数据付之一炬。
预防方法:
(1) 数据库备份其实也是一门学问,除了现在有很多云端服务会提供自动备份硬盘,建议还是可以定期一个月手动异地备份一次。
(2) 进一步请工程师使用Docker 进行管理,Docker 除了单纯的程式与资料备份外,能够更快地还原整体开发环境。
(3) 转移Schema 前一定要进行测试,很多数据的毁损与遗失,往往发生在schema 改变的当下,也因此,每次转移前的备份,决定是否要停机转移等等,都是需要谨慎思考的问题。
我认为作为一家创业公司的创始人,最好能够自己稍作了解,或是跟着走一趟,毕竟数据销毁的事,对很多IT 公司来说,应该就是命脉了。
问题三:开发时间过久才发现大家想的不一样。这问题有两种,一种是工程师的能力与原本评估有落差,另一点则是沟通不善。沟通不到位较为简单处理。但以评估落差来说,对于找二手手机号购买外包或是再找其他工程师的方案,其实各有不同的恼人问题,对外包来说,麻烦的是如果头款已经支付,很难做到一半停下来,而换其他工程师的话,熟悉代码可能要好久,这都是普遍可以见到的状况。
预防方法:
(1)如果是沟通不良的问题,团队可以用两到三周的时间作为一个循环,让工程团队定期做一个简单的Demo,每一次的工作都不宜开出一个太大的项目组,有别于以往长期项目组的思维,凡事要做到尽善尽美的思维一定要改掉。反过来说,每一个项目开发组慢慢建立,从主要功能到辅助功能分批完成,可以有阶段性的产出并且经历测试,这点非常重要。
(2) 针对选择招聘程序员或是外包团队,很多人会问说怎么可以确认工程师的程度?当然可以做reference check 或是code review,也许有些帮助。当然我们程序员客栈的程序员都是我们亲自审核的,这一点相信在业内已经有目共睹了吧?一般的客户最开始都是先让我们的程序员去做一些模块化开发,最后才决定这个人是否靠谱,这种方法确实会大大降低与新工程师合作的风险。
很多人可能会想说,如果我们公司有良好的文化,有一大堆零食,有很好的福利,聘一个很厉害的工程师来,应该就不会遇到上述的这些问题了吧。但事实上是,即使连Google这么梦幻的公司,他们要写的每一行代码之前,开发者都必须先交出文件(Design Guide),去阐述待开发组的目的、功能、引用哪些Library等等,才能够进行开发。良好的文件管理与测试习惯,绝对会是风险管理的最大帮手。
永远要对最坏的状况有所准备
这篇文章提到的内容,对很多技术管理者来说,可能是基本中的基本,不过对于新手创业家来说,却是容易被忽略和受伤害的一环,有一些好的idea,却遇到一些不在预期内的风险,最后造成了不好的结果,这是相当可惜的事。也因此,对于创业家来说,了解技术的风险,就像了解财务的风险一样,都是需要学习的功课。我们都知道,给予一同创业的伙伴一个最好的环境,大家发挥所长一同迈向最完美的结果,是非常理想的情况,不过现实不见得如此美好,问题发生时,负责的人就必须跳下去亲自灭火,如果能有时间、金钱的帮助,找到新的合作对象、救火队,漂亮的打场胜仗,当然是最理想,但最害怕的,莫过于在公司融资快烧完时发现平台开发需要一切从零开始的悲剧,创业家们不可不慎,提前思考风险管理!
如果你有软件开发方面的问题,欢迎免费咨询微信 chengxuyuan8988 ,注明“来自今日头条”。