3.4 创业公司和投资
在一些环境中,有强大的力量在反对战略性方法。例如,处于早期阶段的创业公司会感到巨大的压力,需要快速发布他们的早期版本。在这些公司中,即使是10-20%的投资也可能是无法承受的。因此,许多创业公司采取了战术性的方法,在设计上花费的精力很少,当问题出现时,在清理上花费的精力更少。他们将此合理化,认为如果他们成功了,他们就会有足够的钱雇佣额外的工程师来清理问题。
如果你所在的公司倾向于这个方向,你应该意识到,一旦代码库变成了意大利面,就几乎不可能修复。你可能会在产品的生命周期中付出高昂的开发成本。此外,好的(或坏的)设计的回报来得相当快,所以很有可能战术性的方法甚至不会加速你的第一个产品发布。
另一件需要考虑的事情是,一个公司成功的最重要因素之一是其工程师的质量。降低开发成本的最好方法是雇佣优秀的工程师:他们的成本并不比平庸的工程师高多少,但却有极大的生产力。然而,最好的工程师对好的设计非常关心。如果你的代码库一片狼藉,消息就会传出去,这将使你更难招聘到人。结果是,你很可能会以招到平庸的工程师告终。这将增加你未来的成本,并可能导致系统结构进一步退化。
Facebook是一个鼓励战术性编程的创业公司的例子。多年来,该公司的座右铭是“快速行动,打破常规(Move fast and break things)”。刚从大学毕业的新工程师被鼓励立即投入到公司的代码库中;工程师们在工作的第一周就将提交的代码推向生产是很正常的。从积极的方面来说,Facebook因赋予其员工权力而名声在外。工程师们有很大的自由度,很少有规则和限制来阻碍他们。
Facebook作为一家公司取得了惊人的成功,但它的代码库由于公司的战术性方法而受到影响;许多代码不稳定,难以理解,很少有注释或测试,而且使用起来很痛苦。随着时间的推移,该公司意识到其文化是不可持续的。最终,Facebook将其座右铭改为“用坚实的基础设施快速前进(Move fast with solid infrastructure)”,以鼓励其工程师在良好的设计上投入更多。Facebook是否能成功地清理多年来战术性编程所积累的问题,还有待观察。
为了公平起见,我应该指出,Facebook的代码可能并不比创业公司的平均水平差多少。战术性编程在初创企业中很常见;Facebook只是碰巧是一个特别明显的例子。
幸运的是,用战略性方法在硅谷取得成功也是可能的。谷歌和VMware与Facebook在同一时期成长起来,但这两家公司都接受了更多的战略性方法。两家公司都非常强调高质量的代码和良好的设计,而且两家公司都推出了成熟的产品,用可靠的软件系统解决复杂的问题。这两家公司强大的技术文化在硅谷是众所周知的。很少有其他公司能在雇佣顶尖技术人才方面与它们竞争。
这些例子表明,一个公司可以通过任何一种方法取得成功。然而,在一个关心软件设计并拥有干净的代码库的公司工作要有趣得多。
Last updated