笔者经常听到有人抱怨一些科技巨头,比如Google,他们旗下拥有数千个全世界最优秀的工程师,但悲剧的是,推出的产品里面依然存在许多bug。难道说,谷歌的软件开发人员实际上并没有人们眼中那么出色?还是谷歌自己就疏于管理,不重视解决小问题,比如浏览器页面布局,以及电子邮件发送系统,等等。
当然,答案其实是,所有的科技公司在成长过程中都需要“还债”。即便是最优秀的项目团队,在功能开发和Bug维护上依旧会出错。为什么?因为代码群的规模实在是太大了,而维护工作也异常艰苦。
如果新增一项新功能,除了要编写新的代码之外,还要牵涉到许多其他工作,比如自动软件测试,质量保证流程,代码文档,部署流程,以及需要解决支持新功能的可扩展性,等等。新增一项新功能,意味着很多其他工作量会呈指数级增长。
实际上,科技公司一般不会处理那些低优先级的bug,他们会先把那些催得紧、影响大的“债”给先还掉。像谷歌这样日进斗金的大企业,基本上拥有极大地现金库存,加上耐心的投资人和旗下大量优秀的工程师,他们完全可以支撑一些bug所带来的成本支出。
但是对于初创公司(或是绝大多数其他公司)而言,他们不可能像谷歌这么奢侈。不少原本非常有前途的公司,正是由于没有能力“偿还”产品bug的“债”,最终由于不堪财务上的重压、或是没有针对多变的商业环境快速转型而倒闭。
初创公司的首席执行官和首席技术官要对技术bug问题引起足够重视,不要等到日积月累,最终无法解决,被最后一根稻草压倒。在笔者自己的公司Brainscape,我们就非常重视这些问题,或许下面这些经验教训也会对你有所帮助:
1、 不要打开太多一连串的复杂问题
当你要给自己的产品添加新功能时,最好先和公司里的资深工程师做下交流,对当下正在进行的工作有所了解,看看维护这个功能许多多少工作量。你需要考虑新增功能所带来的维护成本有多少,包括工程师的薪水,维护管理工作所需要耗费的时间,等等。最终确定这个新功能是否值得立刻投产,还是稍后再议。
2、 提前考虑代码重构
如果你的公司和绝大多数初创公司没啥两样,那么就意味着在推出合适的产品之前,需要对各种不同的功能和用户体验进行大量测试。实际上,这是一个很好的机会,因为你可以看看究竟哪些代码可以不要,取其精华弃其糟粕。
在拓展产品或招募新工程师之前,其实有个不错的办法,那就是尝试重写代码。或许在你募集到资金,有钱“挥霍”之后,就会发现这么做带来的好处啦。
3、 招募合适的首席技术官
其实对很多创业初期的公司来说,他们的“CTO”要么是刚从大学毕业,要么就是个编程菜鸟。通常而言,这个CTO会具备“黑客思维”,写几段比较牛的代码,快速实现产品新功能,也能熟练使用编程工具和应用程序接口。的确,对于创业初期的公司来说,这样的CTO也挺不错的。
但是,当你的公司逐渐变得成熟,开始成为一家真正意义上的“企业”之后,产品的可扩展问题将会呈指数级增长,一个公司的技术架构将会成为他们是否成功的关键因素之一。因此,你需要招募一名成熟的首席技术官,至少他/她得管理过大型开发团队,能够处理数十万行的代码,以及两年以上工作经验。
4、 避易就难
真正牛*的软件工程师,通常不会三下五除二就写代码,也不会尽可能快地去部署产品功能,他们会从长远角度看考虑新功能,比如随着用户数量的增长,这个功能是否会对的登录时间产生影响?如果再新增其他功能的话,维护难度是否也会增加?
牛*工程师会在开发速度、性能、可扩展性、稳定性、安全性、可靠性、以及可维护性等多方面进行权衡,而且会把开发时间尽可能延长两倍,避免日后花十倍的时间处理问题。这就是所谓“避易就难”的真正意义。
5、 最小化程序员自身引起的失误
每次,当一名软件工程师辞职,他/她就会留下一堆“遗留代码”,而接手的新程序员通常需要花很长时间去学习,这么做真的是非常浪费时间,也造成了极大地资源浪费。所以,你需要考虑这一点,然后,对你的程序员好一些哦。
6、 创造冗余团队
这似乎有些不合常理,因为人员冗余对公司来说都会造成很大负担。但是,为了避免出现前面提到的第五点,那么至少要确保两个以上工程师熟悉你的代码库。
最后,如果你的公司和其他绝大多数公司一样,那么在公司内部通常会有两类人,一类是“销售员”,他们希望推动公司业绩快速增长,因此会要求开发更多产品新功能;另一类则是“程序员”,他们更多地会考虑更好的技术解决方案,以及软件产品的可维护性。
而你需要做的,就是利用好这两类人,在企业增长和“还债”这两方面做好平衡,这样才能让你的公司获得长期成功。
(via Entrepreneur , 译/快鲤鱼,转载请标明出处)
寻求快鲤鱼免费报道,点此申请!