当我第一次选择自己的冒险时,我不知道在家远程工作会是什么样子。我以前从未做过。作为程序员,我的社交能力相当强。也就是说,按照正常的标准,我还是一个边缘型的反社会者。尽管如此,我还是担心我的工作生活和家庭生活不分,会被搅乱。
好吧,我还没有去搅拌疯狂呢,我想。但在建立Stack Overflow的过程中,我学到了一些关于远程工作意味着什么的东西--至少在编程方面。我们目前的团队包含5个人,分布在美国各地,还有纽约的团队。
我的第一个错误是试图独自编程。我每周都会和我的商业伙伴乔尔-斯波尔斯基(Joel Spolsky)通电话,在弄清我们一起尝试做的事情方面颇有成效--但他没有写代码。我一个人在写代码。真的是一个人。一个人独自工作。这对我来说根本行不通。我没有方向感,没有方向,患上了分析瘫痪症,几乎没有足够的动力去写几行代码。我很快意识到,我犯了一个巨大的错误,没有一个编码伙伴一起工作。
这种情况很快就得到了纠正,因为我很幸运地发现我最喜欢的一位老编码伙伴有空。尽管Jarrod在北卡罗来纳州,而我在加州,但共享的源代码是我们共同的粘合剂,它把我们粘在一起,激励我们,让我们继续前进。平心而论,我们也有相当大的优势,因为我们在以前的工作中一起工作过。但远程工作的最低门槛是找到一个和你一样热爱代码的人。这就......足够了。除此之外的任何其他东西--旧的友谊、新的友谊、良好的工作关系--都是锦上添花,让一起工作变得更加甜美好。我最终以同样的方式扩大了团队,加入了另一个老编码伙伴,Geoff,他住在俄勒冈州。又加入了来自德克萨斯州的Kevin,我并不认识他,但他在没有被要求的情况下为我们做了令人惊奇的东西。再加上佛罗里达州的Robert,我也不认识他,但他在我们网站的每一个部分都花了很多时间,我觉得他一直在和我们的团队并肩作战,一直在那里。
回想起来,远程开发之所以对我们有用,并不仅仅是对代码的共同热爱。我选择了那些我知道--我有无可争议的证据--是了不起的程序员的开发人员。我并不是说他们是完美的,远非如此,只是说他们是你所关心的任何衡量标准的顶级程序员。这就是为什么他们能够远程工作的原因。新手程序员,或者是有能力的程序员,他们是绝对不会有必要的胆量来完成远程工作的--至少,如果没有一个尖头发的经理,或者是脾气暴躁的老组长,在他们的脖子上呼吸,他们是不会有这样的胆量的。甚至不用考虑与任何渗出1和0的怪异远程工作,并有一个让事情完成的记录。
虽然Joel对Stack Overflow最终的发展提出了很多高层次的意见,但我最多每周只和他聊一次(这些电话是我们每周播客系列的起源)。我对我想让Stack Overflow成为什么,以及我想让它如何工作有一个强烈而清晰的愿景。每当有关于功能或实现的问题时,我的团队都能团结在我的周围,共同做出我们喜欢的决定,而且我个人认为这些决定与这个愿景是一致的。如果你了解我,你就会知道我也不羞于说"不"。我们能够建造出我们想要的东西,我们想要的方式。
底线,我们是在执行上帝的任务。我们现在也是。
所以,远程开发有几个基本的基本规则,至少在我看来是可行的。
-
远程团队的最小规模是两个人。一定要有一个好友,即使你的好友在另一个大陆,在世界的另一端。
-
只有绝对热爱代码的老手才需要申请远程开发职位。指导新手或临时程序员,在远程根本行不通。
-
为了有效地开展工作,远程团队需要有充分的自主权,需要一个有强烈愿景并有能力充分执行愿景的领导者(PM,如果你愿意的话)。
当你的远程团队只有三个人的时候,这一切都很好,就像我们为Stack Overflow的大部分开发工作所做的那样。而且都在同一个国家。现在我们需要发展公司,我想以分布式的方式发展公司,从世界各地雇佣其他了不起的开发人员,其中许多人是我通过Stack Overflow本身认识的。
但如何扩大远程开发的规模呢?Joel对此有一些根深蒂固的担忧,所以我请教了我的一位英雄Miguel de Icaza--我很自豪地指出,他是我们全明星顾问委员会的成员--他很慷慨地根据他运行Mono项目的经验给了我们一些个人建议,Mono项目有几十名开发者分布在世界各地。
冒着无情地总结的风险(也许是太多了),我将尽可能地归纳米格尔的建议。如果你打算发展一个规模庞大且仍能正常运作的远程团队,你需要准备好三个工具。
-
实时聊天
-
当你的团队成员住在巴西的时候,你不可能走到他的办公桌前问他一个简单的问题,或者询问他最近签到时的情况。不可能。你需要一种方法来随意地ping你的远程团队成员,并迅速得到回复。这应该是低摩擦的,并且所有远程开发人员都可以随时使用。IM、IRC、一些基于网络的工具、激光束、烟雾信号、信鸽、两个锡罐和一根绳子:随便,只要大家真的用得上。
我们目前正在尝试使用Campfire,但只要是能让你的团队持续使用的,都可以。聊天是你在远程工作时最基本的、无所不在的交流方式,所以在进一步发展之前,你需要绝对确保它的功能。
-
邮件列表
-
当然,你的远程团队可能会知道他们项目的细节,但所有其他的工作呢?他们如何发现这些东西,甚至首先知道它的存在?你需要一个虚拟的公告栏:一个发布公告、每周团队报告和会议总结的地方。这就是一个经典的老式邮件列表的用武之地。
我们正在使用Google Groups,虽然它是老式的,但它的工作效果很好。你可以在邮件到达时收到邮件,或者通过网页界面查看存档列表。不过,有一点要提醒你。每次你看到邮件列表中的东西到达你的收件箱时,你最好相信,在你的心里,它包含了有用的信息。一旦邮件列表变成了另一个"每当我有时间阅读这些东西",噪音引擎,或者分散工作的注意力......你就会让人哭得太厉害,毁了它。所以要非常小心。吵闹的、争论的、或者无用的东西发到邮件列表上,应该会被处以死刑。或noogies。
-
语音和视频聊天
-
虽然我很喜欢ASCII码,但有时面目全非的ASCII码字符并不足以捕捉到其背后人类的全部意图和感情。当你发现自己来回发送千字节的ASCII字符,但仍然不满意你的交流时,你应该给你的团队灌输一种"用语音"的反射性习惯。
永远不要低估真正与他人交谈的力量。我知道,我知道,我们从事编程这件事的全部原因是为了避免与其他人交谈,但请听我说。不飞6个多小时,你不可能在远程团队中面对面,谁有那么多时间?我还有工作要做呢!好吧,比起跳上飞机,下一个最好的办法就是打开Skype,进行一下语音聊天。小菜一碟。如果你能定期安排语音聊天,所有那些在无面的ASCII字符中完全消失的人类细微差别(是的,即使是我们的老朋友
*<:-))都
会回来。我建议至少每周一次,绝对是最低限度的;它们不一定是长时间的会议,但它肯定有助于了解所有这些令人敬畏的签到背后的人类。
没有人比我更讨厌会议和流程的哗众取宠,但你需要一定的流程来让一群松散联系的远程团队和开发人员保持同步。
-
星期一小组状况报告
每周一,就像某人的案例一样,每个团队都应该制作一份简短的、总结性的概要:
-
我们上周做了什么
-
本周我们计划做什么
-
任何阻挡我们或我们关注的东西
这不一定是(事实上也不应该是)一份长篇报告。越简短越好,但要尽量抓住所有有用的亮点。每周一像往常一样把它寄到邮件列表。现在,你有多少个"团队"由你决定;我不认为这需要在个人开发者层面进行,但你可以。
-
会议记录
-
任何时候,当你与别人进行你认为是"会议"的时候,都要做会议记录!也就是说,把发生的事情以要点的形式写下来,这样那些不能到场的远程团队成员就可以从中受益--或者至少听到--无论发生了什么。
同样,这不一定要很长,如果你觉得做会议记录很繁琐,那么你可能做错了。一个简单的列表式的句子应该足够了。我们不需要知道每一个小细节,只需要知道全局性的东西:谁在那里?讨论了什么话题?做出了什么决定?接下来的步骤是什么?
当然,以上两种情况都应该在完成后发送到邮件列表中,以便通知大家。你是有邮件列表的吧?当然,你有!
如果这看起来像很多jibba-jabba,那是因为远程开发很难。它需要纪律来使这一切工作,当然比把一群程序员堆在同一个格子间农场里更有纪律。但当你想象一下这种智力工作--不仅仅是编程,而是任何你主要从事思想工作的东西--在十年、二十年、甚至三十年后会是什么样子......你不觉得会很像现在Stack Overflow上每天发生的事情吗?也就是说,一个巴西的程序员帮助一个新泽西的程序员解决问题?
如果说我从Stack Overflow中学到了什么,那就是编程的世界是真正的全球化。我很荣幸能够认识这些来自世界各个角落的优秀程序员,哪怕只是通过一个网站以一种小小的方式。没有什么比增加国际成员到Stack Overflow团队的前景更让我兴奋的了。Stack Overflow的发展应该反映出Stack Overflow的本质:一个由志同道合的--我敢说是非常棒的--程序员组成的国际努力。我希望我能雇佣你们每一个人。好吧,也许我有点偏心。但对我来说,这就是Stack Overflow社区的厉害之处。
我相信远程开发代表了工作的未来。如果我们必须花一点时间来了解这些东西是如何运作的,甚至可能在途中犯一些错误,那也是值得的。在我看来,未来就是现在。为什么要等待呢?
请登录之后再进行评论