二次方(2017)

2020-05-31 08:09:59

有几个我可以没有的最佳实践,我以前认为它们是绝对必要的。我认为这是几个不同因素的作用,但我对其中一个特别好奇。

我以前曾在大大小小的团队中工作过,但我目前只与另一位开发人员密切合作。我想我会试着列出所有我们不再需要做的事情,看看当你只有两个真正的开发人员时,是否存在任何类型的流程/价值拐点。

作为背景,让我解释一下我们一直在做什么。它不是革命性的,甚至不是特别有趣。如果你眯着眼睛看,它看起来像XP。

我们坐在用户旁边。有时声音会很大,但这是保持联系和了解正在发生的事情的最好方式。

我们每天配对大约6个小时。所有关键路径上的东西都是配对的。一直都是。我们的目标总是让我们正在研究的东西尽快投入生产,这是我找到的最好的方法,就是用一双。

我们练习TDD。我们的测试运行得很快(对于整个套件,通常是1秒或更短),并且我们在每次输入时都会自动运行它们。我们通常像这样测试所有东西,除了shell脚本,因为我们从来没有找到一种测试我们喜欢的脚本的方法。

我们绝对毫不留情地重构。“每一行代码都必须有一个与公司价值直接相关的目的。如果您想知道它是什么,通常可以将其注释掉,然后查看哪个测试(正好是一个测试)失败了。然而,我们不会为了改变而回头去改变它们。重构从来不是一项独立的任务,它总是作为添加新功能的一部分来完成。我们的客户不知道我们是否/何时进行重构,他们也不关心,因为这从来不会妨碍交付。

我们首先部署,而且经常是这样。开始一个新项目的第一步通常是部署它。我发现,弄清楚你将如何做到这一点会影响你将做出的其余决定。每次我们把系统做得更好,我们就会投入生产,即使这只是一行代码。我们有一个测试环境,它合理地反映了我们的生产环境(包括数据),我们通常首先在那里部署。

没有正式的积压。我们有三个州的新功能。现在,下一个,可能永远不会。我们现在正在做的任何事情都是我们能想到的最有价值的事情。无论下一步是什么,都是下一个最有价值的东西。当我们拉新工作时,我们会问下一步是什么?并进行讨论。如果有人来找我们,我们会问,这比我们下一步计划做的事情更有价值吗?如果不是,它通常会被遗忘,因为当我们完成这个想法时,还有其他更新、更好的东西。但如果它再次出现,也许它就会入围。

没有项目经理/分析师。我们交付软件的心态是,它就像是在湖上奔跑。如果你继续快速移动,你就会一直移动。我们假设我们的特征的价值是幂律分布的。有几件事真的很重要(现在和未来),其他所有事情可能都不重要。我们非常了解什么对公司有价值,因此找到最适合公司的合适技术业务的责任落在我们肩上。(这句话的意思是:我们现在和将来都很重要),其他事情可能都不重要。我们非常了解什么对公司有价值,因此找到最适合公司的合适技术业务的责任就落在我们身上。

没有预估。“我们有一项预估:那太大了。除此之外,我们只是开始,循序渐进地交付。”如果某件事需要超过几天的时间才能实现增值,我们会重新组织,并确保我们做得正确。我们只有几个例子,我们需要从战略上做一些不能被拆散的事情,而且需要几个星期以上的时间。

没有单独的警察小组。“我一天早一点进来,确保一夜之间没有东西坏掉。”我的同事待得稍晚一些,而且倾向于处理必须在几个小时后完成的事情。当夜班任务出现时,我们就把它们分开。白天发生的任何事情,我们都会处理,或者我们暂时分开两个人,一个人继续编写代码。

没有缺陷跟踪。“我们立即修复错误。”他们永远是第一要务,通常会打断我们正在做的任何事情。或者,如果某个错误不值得修复,我们会更改警报以反映这一点。我们有一个相当好的监控系统,所以我们的警报通常是可操作的和值得信赖的。如果你收到一封电子邮件,你很有可能需要做点什么(要么修复它,要么让它安静下来),而这件事马上就会发生。

没有缓慢的测试。我们所有的测试都是快速测试。它们每个都运行几毫秒,并且通常一次只测试几行代码。我们试图避免代码与许多不同的测试重叠。你的代码中有太多的分支,这会使重构变得困难。

没有集成测试。“我们使用我们的测试环境来探索软件,寻找我们错过的快速测试。我们坚信这是不应该以任何方式自动化的东西……这就是快速测试的目的。如果我们担心集成点,我们通常会将这些检查直接构建到软件中,并使其在部署时很快失败。

没有CI/BUILD服务器。主分支既是开发部门又是生产部门。我们还使用GIT作为我们的部署系统(旧的Heroku风格),因此您不能在没有首先集成的情况下进行部署……这无论如何都不是问题,因为我们总是配对。

没有代码审查。因为我们一直在重新配对,所以我们都知道关于代码的所有需要知道的事情。

没有正式的文档。再说一次,我们有配对、测试和编写得很好的代码,我们都可以阅读。我们通常将运营任务完全自动化,这是其自身的文档形式。只要我们搜索电子邮件和聊天来填写剩下的内容,这就不是问题了。

显然,这在很大程度上是因为我们所处的环境。但我不禁想知道,除了上下文之外,是否还有其他东西?在一个本来很大的组织中拥有一个两人的团队,是不是让我们跳过了很多其他必要的练习,或者只是把所有的事情都向下舍入到更小的团队才更有效率?";