2006年,本文的叙述者Lan Langworth加入Google。4年5个月之后,Lan离开了山景城,选择加入游戏公司Artillery,开始了CTO的生涯。
成为一家公司的CTO是不少工程师的憧憬。可是,从第一行代码命令开始,要建立一家成功的公司需要付出更多。以下,是我曾经踩过的那些坑。
1、离开编程的舒适区 Leaving the Comfort Zone
创业初期筹集资金的时候,我第一次遇到编程以外的挑战。和投资者周旋对一位软件工程师来说真是一件苦差事,如果你也习惯了坐在自己的工位,仅通过GChat彼此交流。突然之间,我得穿上没有洞的衬衫参加各种大型会议,并试图说服在场的人我们能实现不可能的事。
对于工程师来说,承诺一周以后的deadline已经很难了。投资人却会challenge你承诺今后1~2年的事情,并会在每一个节点问你问题。「真的吗?」他们中的有人说,「你要做一个AAA游戏?你怎么把2G的内容放进浏览器?你怎么让它有趣?」
幸运的是,多年的软件工程师生涯赋予了我一项珍贵的技能:直觉。我豪不怀疑我们在做的事情是可行的。一旦我自己深信不疑,让其他人相信也就轻松多了。
就像说服投资人,团结新的队伍也是一项挑战。几个月之前,我们决定做游戏,虽然不知道它会成为什么样子,但是开始做是第一步。一位合作的艺术家给我发来了一张游戏的图片:一片郁郁葱葱的草地。我把它做成了36’’x 24’’的大海报,挂在墙上。
从此,无论谁问我他们接下来要干嘛,我都会指着这张图说:「只要能让我们离这里更进一步。」这是自我驱动型工程师需要听到的话。我们有一个清晰的目标,正踏踏实实地挂在墙上,我们要做的就是努力实现它。
CTO的职位意味着更多的责任,却不代表冗长的会议和官僚主义。除了技术,CTO还要承担更多的管理职能:雇佣合适的员工,解雇不合适的员工,持续地创造和输出idea,带着目标团结队伍。
2、沟通的陷阱 Failures in Communication
起初,我想当然地以为在这样一支几个人的小队伍,相对于在Google,沟通应该不是问题,但是我错了。在加入Artillery的头几个月,其他的合伙人和我都已经数次激怒了对方。
三位Co-founders的沟通很混乱,一个人说给另一个人,第二个人又传话给第三个人。作为一名软件工程师,如果你在一支全是工程师的队伍,沟通是相对容易的。当这支队伍混入了其他职位的人,且多于10个,沟通会变得有点棘手。相信我,沟通会比你想象的难,但是必须好好地掌握。
所以我们准备花更多的时间一起筹划,比如花一个小时坐在房间,清楚地写出来当下在进行的事情和面临的问题。第一次这样沟通,还不到60分钟,我们就解决了能想出来的大部分问题——大部分都是由于沟通失误造成的误解(!)。从此每周,我们都会开一次这样的founder’s meeting,并把决议都记在一个长长的Google文档,方便随时查阅。从此我们再也没有出现过严重的分歧。
但是,仅仅增加沟通的量是不够的,更重要的是掌握沟通的技巧,提高沟通的效率。刚开始例会的时候,过了30分钟后,我们才意识到刚才是在用各自不同的话语表达同一个观点,这种无休止的争论纯粹是浪费时间,
另外,真诚的批评是原则:把自我关在门外,开诚布公地讨论,给彼此最坦诚的反馈。我们的会议中常会听到这句话:「哦,我不认为它会这样。」建设性的批判能帮助彼此更好地完善自我。
其次,email也是一个坑。通过email很难传递情绪,很容易成为误解的发源地,会影响情绪,甚至影响表现。同样的话语,如果是面对面的对话就会有完全不一样的效果。
分享一个简单的小技巧:当我怀疑我发出的某条信息可能会有歧义,我会加一个表情,比如 [mood: agreeable],从而确保传达出我乐意的态度。如果你也这样做,你会发现它非常有效,可以让所有人保持冷静,避免不必要的争端。
3、选择正确的技术 Choose the Right Technology
Web开发是一个有创造力的快速发展的世界。各种各样的新idea和工具层出不穷,似乎换一个新框架或代码就能解决你所有的问题。但是作为CTO你要记住,挑选怎样的技术相当于你花了一笔真金白银,一旦你做了决定,很可能你就没有时间和资源再走回头路了。
在Artillery,我们清楚我们会写很多的JavaScript,即使大家都懂的,JavaScript有各种让你不爽的地方 。我们之前有使用过CoffeeScript,它运作的不错,我们也喜欢它的作者做的大部分决定,所以我们最终选择了它。然而最关键的原因是,我们并不会被困死在CoffeeScript上。如果哪天我们想丢弃它,我们可以将轻量级的CoffeeScript全部编译成JavaScript,并从那里继续前进。这么做合情合理的,而且成本也很低。
服务器端的决定就没有那么容易。Node.js显然是我们的首选,它可以轻松分享客户端和服务器端的代码。然而,那个时候Node.js还很年轻,而且它的生态圈也不成熟。当时很难评估Node.js的第三方库的质量和安全性,有很多相似功能、但又在开发的不同阶段的库。
这让我们停下来思考了一下。但是经过更多的研究,一件事情提醒了我们:Node.js的更新速度很快。Node.js基于的V8,已经被证明在Google Chrome上跑的又快又干净。如果只有一家公司拥有最多值得信任的聪明人在致力于语言,那就是Google。依靠这个框架似乎是一个安全的选择。Node.js的代码新版本是一致的,而且强大的Github社区又提供了频繁代码更新的便利。在仔细的审议后,我们决定用Node.js,现在很庆幸我们做了这个决定。
4、放弃side project Harbor Your Resources
我很喜欢side project,我总是要做点什么——一个游戏、一个WebApp,或其他的什么工具。这是我保持学习,玩儿新东西的方法。但是当Artillery成为现实,我的兴趣突然成为我的全职,我该怎么度过我的空闲时间呢?
我曾经花了一个周末,和一个朋友做一个电商网站的原型。「花不了多长时间的」我记得我还这样说过,「我只需要用Django、PayPal和一个购物车。」它的确只花了两天,却耗尽了我一个礼拜的精力。
从此,我才意识到精神充电是必须的。在其他项目上分脑力让我在工作中降低了效率。作为CTO,跟上新技术是我的责任,为什么我还要做那些无益于我提高的事情呢?做外部的项目会给我的正职带来压力,对我的合伙人也不公平。
我停掉了side project,创造力和精力又回来了。虽然我有时还是会陷入卡壳,想修复一个bug却怎么也办不到,但是了解了生产力低估周期后,我放轻松了。如果此时状态不佳,不如接受它,和周围的伙伴交流一下,做一些简单的活儿。这样总比恐慌、错过deadline要好。
5、团队管理太难 The spirit of a perk
开始组建团队的时候,我们会说很多在Artillery工作的美好愿景,包括各种各样的福利待遇。我们希望用有趣又有意义的工作来吸引最优秀的人才。
于是我们在网站上挂了很多福利:免费午餐、完善的医疗保险、交通报销、无限的假期、WorkStation预算、从东京买来的游戏原型手办……列出这些福利简单,然而并没有什么用。
比如,开始我以为无期限的假期是一个好主意。没想到似乎给员工带来了更多的压力:优秀的员工害怕他们休假太多而不敢提出请求。最后,我们决定还是采取固定期限的带薪休假模式——既能缓解员工焦虑,又能足量地满足员工的度假需求。
再比如,自主选择编程装备带来了各种奇葩需求:20美元的Razer Goliathus鼠标垫值不值?我想用自己的笔记本工作,把我的预算花在昂贵的外设上吧!甚至还有员工想要高昂维护费用的组装系统——至此,我终于确定每个人都应该用Mac OS X——因为它足够干净、简单。
要解决问题首先要理解福利的实质是什么。比如装备福利,它的目的不是无限制地满足员工的每一个细微的需求,而是为他们提供良好的工作环境,确保没有人还在使用老旧、迟缓的电脑。
那些员工看似在浪费你的好意,其实并没有恶意。你得帮助他们理解政策、福利背后的逻辑,他们会做出更好、更谨慎的选择。
100offer 说:
Lan离开Google的原因很简单:在这里很难保持冲劲和创造力。在大公司离职工程师中,这样的理由太常见了,软件工程师很容易被隔离在业务线外,唯一的任务就是不断输出优质的代码。
创业不是解决大公司病的灵丹妙药,选择加入一家小公司当CTO,意味着生活一半是巨大的自由,另一半是巨大的责任。CTO的工作如此辛苦,会花掉全部的脑力和精力——但为什么还要选择呢?
因为人生需要一次All in。
题图:Miguel Parisi
欢迎关注100offer微信号
网友评论