2.5 工作地点与关系
近年来,软件开发管理的复杂度比以前大了很多。也许你很幸运,仍然保持在简单的环境中,但这样的日子很快就不会再有了。即使现在不受影响,早晚都会受到影响的;否则,你的企业将不再具备竞争力。
以前,听到的问题都是:“去哪里找一个程序员来做项目?”后来逐渐开始思考是招聘现场全职雇员还是招聘合同工的问题。现在,在哪里完成工作、怎样完成工作往往涉及大量的决策,需要仔细考虑。
通常,这些决策不由你来做出,它们可能是由你的领导或者项目情况而定的。无论如何,要想取得成功,必须解决好工作地点和工作关系的多样性问题。
管理中可能涉及的程序员工作地点与工作关系的情况有以下5种:
内部雇员(in-house employees);
远程雇员(geographically distant employees);
合同工(contractors);
合同管理团队(contracted managed teams);
外包公司(outsourcing companies)。
可以将这些类型的关系视为一组“约束关系”,排序的依据就是相应的约束程度。约束力度越大(对内部雇员的约束力度最大),你对程序员工作的控制力和能见度就越强;约束力度越小(对外包公司的约束力度最小),所需做的间接管理工作就越多,通常只能通过规格说明和交付成果进行的,而无法直接管理人员。
2.5.1 内部雇员
本章已讨论过的大多数工具都是为内部雇员设计的。招聘内部雇员意味着你和你的公司为了使雇员好好干活,除了支付报酬之外,还要明确承诺提供一系列经过商定的额外待遇以及专属的工作环境。这是一种常见的合同。
但合同中还包含许多隐含的假定,至少根据我们的经验是这样。内部雇员希望能干一番事业,而不仅仅是打一份工。因此,你还必须考虑为他们提供:
专业技能的提升和职业的成长,以及能够对此产生促进作用的机会;
定期的反馈;
就公司新闻和大事的交流;
有待发现的、几乎无穷无尽的其他需求。
不过,如果你能和内部雇员建立起密切的关系,就可以大大减少有效管理所需的沟通。
2.5.2 远程雇员
从根本上讲,远程雇员的管理方法与内部雇员的管理方法是一样的。你仍然要满足他们的众多需求,他们也仍然要好好干活。但管理这种不常见面或定期碰头的雇员时,传达指示和沟通交流都会更麻烦。
Evans & Sutherland(E&S)的创始人,曾告诉Mickey一种如何有效判断沟通难度的方法:
沟通的效果,在国内,是距离平方的倒数,跨越了国界,就是距离的立方的倒数。
——David C. Evans
根据我们的经验,这条经验法则很正确。我们见过太多因为对方不在身边而沟通失败的例子了。距离越远(楼下、相邻的楼中、相邻的时区、世界的另一端),沟通越困难。如果这种距离是跨国的,由于时差、语言和口音的挑战以及文化的障碍等影响极大,沟通受到的妨碍往往更大。
因此,当你准备招聘一名远程雇员(或者有雇员即将迁居其他州或国家,而你打算留用他)时,一定要了解为了保证足够的沟通,所需要做出的努力。即使你已经预料到远程管理很难,但实际的难度可能会超出你的想象。
远程雇员的另一个问题是,他们所能从事的项目类型几乎肯定是受限制的。也许你的公司或组织能提供很多项目供远程程序员独立工作,但大多数公司都不是这样的情况。只有很特别的程序员才能超越时空的束缚,与远程的团队紧密协作并获得高效的产出。在招聘远程雇员之前,请确保他是这种特别的程序员,或者你有足够多的、很大程度上可由他独立完成的项目。
2.5.3 合同工
决定雇用合同工而不是全职雇员,不能随随便拍板,通常需要视具体情况而定。如果某项任务工作量很有限,或者全职雇员全都没有时间来完成,那么雇一名合同工是不错的决定。
根据定义,合同工是以获取报酬为目的而帮你干活的“枪手”。合同工不应有隐含的需求。开工前,所有的需求都必须在合同中阐明。
在我们讨论的各种关系中,公司与合同工的这种关系一般是最简单的,简单的原因在于,它可以随时终止,而不需要任何理由或提醒[4]。但这并不是说这种关系不可能变得复杂。如果变得复杂了,毫无疑问是你的过失。你应当制定规则并适时做出决策。
那这种简单的关系怎么会变得复杂呢?通常是由于你并没有按照合同工的经典定义,找合同工做某项具体的工作。很多时候,你想要找的是全职雇员,但暂时找不到合适的或者不确定已找到的人是否合适,于是,你就先招了一个合同工,但却将其视为全职雇员来对待,这就会导致合同工也有了类似于全职雇员的隐含需求,而这些需求有时经过诉讼会得到法庭的支持。因此,在我们担任过经理的公司中,人力资源部门和法律部门都明确要求程序设计经理不得为合同工提供额外的福利(衬衫或者外部的团队活动)。
所以,请特别留心你为合同工设定的需求和待遇。要将他们视为拿报酬的枪手来对待,不要因为他们的待遇不同于全职雇员而不安。他们不是雇员。
2.5.4 合同管理团队和外包公司
我们认为一线的程序设计经理不应当接受管理外包关系的任务,因此外包团队和公司的管理问题本书不拟讨论。外包管理需要专门的技巧和格外的小心。当项目的某一部分可能需要外包时,只有在你能得到具有这方面管理经验的人士的帮助与支持的情况下,才可以选择接受外包。否则,接受外包会连累身为程序设计经理的你。
管理外包资源本身就是一份需要全身心投入的工作,第5章将讨论从海外合同工那里获得价值的挑战。