大数据文摘作品
编译:赵逸云、Shan LIU 、蒋宝尚
如何成为一位合格的CTO,在成为CTO之前又需要哪些职业素养,即将离职的 SketchDeck CTO讲述他在过去四年担任此职位的经验。
这是一段刺激又美妙的体验,在创业公司工作与传统的任职大不相同:一开始,你完全不知道公司是否会成功,也不知道它会不会变成一份全职工作,之后,随着公司的发展,你体验着新的各不相同的职位。总的来说,你会经常做着你曾经从未做过的工作。在你还未充分利用手中的权力之前,新的责任已经来到了你的面前。
创业公司像大海中小船,能够灵活处理突发事件,但是你在第一天做出的决定会随着时间的推移不断往外产生涟漪。我现在知道的是,你选择的基础建设、框架结构和语言都将在未来的很长一段时间里伴你左右。
随着公司的成长,构建更多功能和子系统的重压会不断增大,每一个都将进一步锁住你的选择。伴随你获得更多动力的,是压力的持续增加,这时你再想停下来重新修改这些已经不可能了。
我对我们的选择非常满意:Amazon Web Services, Elastic Beanstalk, Firebase, AngularJS, Coffeescript, Kafka, Simple Queue System, SocketStream, Docker, SemaphoreCI, MySQL。列表中,仅有 AngularJS和MySQL在规模方面存在问题。我们的整个AngularJS代码包太大了,下载需要相当长的一段时间,应用程序也有点太慢了。随着BI查询复杂性的增加,(RDS中的)MySQL会崩溃并重新启动,这个问题很难解决。
众所周知,一项技术的生命周期惊人的短。CoffeeScript和AngularJS是已经过时的组件(我们计划迁移至TypeScript和最新的Angular)。当我们采用这些技术的时候,他们都相当的先进,真是庆幸,我对前沿科技的偏爱并没有引起任何严重的问题。我极其欣赏CoffeeScript ,因为其简洁的功能性语法,这些年里它极大地帮我大大提高了生产效率。
基于以上,你得明白你需要准确计算预算时间,并为技术的更替制定策略。你在采用任何技术时都得接受长期的“技术债务”。
同样,你编写的组件和库将长期存在,不管你写得好不好,他们的状态一直都会这样——所以,为将来的维护人员着想,你最好多花一点时间在上面。
我们试图在我们所处理的代码领域进行小幅改进。有时,考虑到代码库的(总是不完美)的总体状态,可能会有压力,此时,我就会进行不断的小改进。
最后,是关于测试的简短说明:我发现让我们的团队编写测试代码真的很困难。我为我们系统中的很多部分都编写了测试用例,并配置好了测试服务器,在每次有代码提交的时候会自动运行。尽管如此,我很少看到其他人添加测试。我总是希望团队里能够重视测试,但是不尽如人意。以下是我解决这个问题的想法:
- 开设有关如何编写测试的复习课程;
- 要求重要功能包括至少一个测试;
- 优化我们的测试服务器,使之在10秒钟内完成而不是10分钟(哎!),让程序员及时看到测试结果。
除了纯粹的技术决策之外,一名CTO还应兼顾人员管理。每天的大部分工作将是管理,领导,招聘和解雇人员。我不得不将学习这些贯穿始终。当然随着实践的进行,对这些流程会越来越熟练。
虽然员工是公司最宝贵的资产,但招聘员工的过程同样让人精疲力尽。相比收获了新入职的人,你可能需要花更多的时间来考虑雇用和拒绝更多的人。你可能需要更严格地过滤。我从未想到完美的创业团队成员是多么难得,也没想到会花如此多的时间和精力来寻找他们。
明确何时招人也是一个棘手的问题:是现在还是之后为这个职位招人?应该先为哪些职位招人?这些问题在你得到投资之后会尤其突出,因为你觉得你有义务让这些资金发挥最大价值。幸运的是,我们从Michael Siebel和YC那儿收获了一些具有帮助性的建议:
- 当你感觉某个职位需求非常迫切的时候才开始招聘(比如快赶不上合同进度了的时候):
- 招人是为了满足业务发展的需要,不能本末倒置(这条主要适用于还没有形成规模化的早期公司);
- 不要招人来做一些你都还没想明白的事情(一些优秀的候选人也许能给公司带来新的动力,但通常的做法还是靠“有魔力”的创始人配置公司资源来适应新的发展)。
综上所述,如果你不确定是否需要为某个岗位招聘员工,可能做这个决定为时过早。我们也曾试图雇人来给公司实现我们自己也没有计划好的增长方案,但大部分时候都失败了。
员工管理一直相对比较顺利 —— 定期开诚布公的检查,明确什么是该做的,什么是不该做的,这些措施让我和我的员工保持着良好的关系。
管理人员一直相对比较顺利——与员工定期的、开诚布公的交流,这让我和同事们保持良好的关系。
我发现解雇员工是工作中很棘手的问题。你能从其他地方找到很多有用的建议,我在这儿简单地重申一下,早在你理性地决定和正式解雇一个人之前,你的直觉就已经做出判断了,但是解聘员工的这个过程非常痛苦。
良好的定期交流有助于双方接受最坏的结果。最后,基于一份个人发展计划,有一部分人真的能够应付自如,成为高效的团队成员;每个人都应该有这样的机会去展示自己。
伴随公司发展的一大乐趣就是看到一些优秀的人才在各自的领域能够独挡一面。在此,我要向我的整个团队致以诚挚的敬意和祝贺。
原文链接:
https://medium.com/sketchdeck-developer-blog/what-i-wish-i-knew-when-i-became-cto-fdc934b790e3