Software Outsourcing Survival Guide

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

软件外包是当你想要创建一个软件产品但软件工程不是你的核心能力时所采取的方法。这是一种聪明的商业实践,被从拥有1000美元个人网站的人到财富100强企业的所有人所采用。而且所有人都在某种程度上失败了。实际上,很难不失败。以下是我给那些决定外包软件开发的人的一些建议(最重要的建议在底部)。我希望有人在15年前就告诉过我这些。

拥有“雇佣合同”。确保你与软件外包团队签订的合同包括这样的内容:“根据美国版权法的定义,开发人员所创建的所有可交付成果都被视为‘为雇佣制作的作品’”。这是“无论你为我创造了什么,都是我的”的最简短、最容易理解的定义。将其写入合同中,外包公司就无法声称他们所创建的软件属于他们,这种情况时有发生。

拥有你的源代码仓库。确保源代码仓库在你的控制之下。最好的方法是为$7每月创建一个私有的GitHub仓库。仓库只对你和外包团队可见和可访问。此外,确保团队只有只读权限,除了通过拉取请求之外不能直接更改代码。在Git中,通过一次“强制”推送到“master”分支可能会导致整个历史被销毁。因此,最好是只有你一个人拥有写入权限。为了简化生活,我建议你使用Rultor作为一个工具,以便半自动地合并这些拉取请求。

定期收集指标。要求你的外包团队成员定期收集他们创建的软件的指标,并以某种方式将它们发送给你(例如通过电子邮件)。我建议使用代码行数、单元测试覆盖率(或单元测试的总数)、已开启和已关闭的问题以及构建持续时间等指标。我在这里谈论的是过程指标。这不是你已经从NewRelic获得的指标。这些指标将衡量团队的绩效,而不是正在开发中的产品。我不是说你应该通过这些指标来管理团队,但你必须关注这些数字及其变化。

进行独立的技术评审。我在几个月前的文章《你需要进行独立的技术评审!》中已经写过这些。这种评审的重要性难以高估。在软件外包中,它们尤为关键。实际上,这是收集关于你从外包商那里得到的软件的客观信息的最佳且可能是唯一的方式。不要依赖报告、承诺、保证和大量文档。相反,按小时雇用另一个人,并要求他审查你的外包合作伙伴正在开发的内容。定期而系统地进行这样的评审。不要害怕冒犯你的程序员。诚实地向他们解释评审者的关注点。如果他们是专业人士,他们会理解并尊重你的商业目标。你还可以向他们展示这篇文章。

自动化和控制部署。要求你的外包团队自动化整个部署流程并将其控制在你的手中。我建议你在项目开始的头几天就这样做。这意味着产品应该通过单击进行编译、测试、打包、安装和部署到生产仓库(或服务器)。应该创建一些脚本来自动化这一系列操作。这是你的外包合作伙伴必须为你创建的。然后,在开发开始后,每当对需要部署到生产环境的仓库进行了新的更改时,都必须执行相同的脚本。这里重要的是你应该知道这个脚本是如何工作的以及如何运行它。你应该能够自己构建和部署你的产品。

要求每周发布。不要等待最终版本。要求你的外包团队每周发布一个新版本。无论开发有多紧张,有多少功能正在“进行中”,都可以打包一个新版本并发布。如果开发真的很紧张,要求你的团队使用GitFlow或类似的方法来将稳定的生产分支与开发分支隔离开。但不要等待!确保你每周都能看到你的软件打包和部署,没有例外和借口。如果你的外包团队不能提供这些,开始担心并做出一些改变。

雇佣一个独立的CTO。这个建议主要是给小公司或个人,他们外包软件开发并依靠他们的专业知识,同时专注于自己的业务发展。那是不明智的。你应该雇佣一个独立的首席技术官(CTO),他向你汇报并控制外包团队的工作。这个人必须有不同的付款计划、不同的目标、条款和目的。你应该与CTO进行交谈,而CTO应该控制离岸团队。很多时候,业务主管试图变得精通软件,并直接控制软件团队,学习他们的软件术语、DevOps原则,甚至Java语法(我见过这样的情况)。这是一条通往失败的路。聪明一点——你进行业务发展,CTO向你汇报,而软件团队向CTO汇报。

定义奖励和惩罚。没有这两个关键组成部分就没有管理。你不需要管理外包店中的所有程序员,但你必须将整个店作为一个单一的控制单元进行管理。你必须给他们一些激励结构。他们必须知道如果成功会发生什么,如果失败会遭受多大的苦难。如果你不明确这个机制,你将面对一个隐含的版本,你获胜的机会非常低。大多数人认为对于软件团队来说,唯一的激励就是继续留在项目上。你付钱给他们,这就足够了,对吗?错了。当一个月的银行转账成为一种奖励,它的缺失成为一种惩罚时,管理就无法发挥作用。这太粗糙了,所以绝对无效。找到一个更好、更精细的机制。这篇文章可能会有所帮助:为什么金钱奖励不起作用。

2018年10月14日添加:

不要花费超过一个月的时间。有人说12周,我说一个月。我并不孤单。你知道吗,Minecraft的第一个版本(后来被微软以25亿美元收购)仅仅在[六天](https://www

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-17 at 14:36

sixnines availability badge   GitHub stars