如何有效地提升开发团队的水平? - bravenewgeek

19-01-18 banq
                   

客户经常会问的一个问题是:如何有效地提升开发团队的水平?你如何让一组从未编写过Python的工程师使其成为高效的Python开发人员?你如何让从未构建过分布式系统的团队可以构建可靠,容错的微服务?让从未有云中构建经验的团队负责构建云软件?

有人说培训会提升团队水平,引入一个可以教我们如何高效编写Python或如何构建云软件的咨询公司。通过训练运维和开发人员。

我反问那些提出这个解决方案的人:你什么时候知道你准备好了?两天的培训是否足够,还是我们应该选择为期三天的培训?为期六个月的双编码训练营?您需要在培训计划上花费了大量现金,更不用说让一支昂贵的工程师团队参加多天或多周研讨会的机会成本。权衡取舍值得吗?或许,很难说。当下一个新事物出现时会发生什么?我们必须重新开始整个过程​​。

其他人认为技术工具将有助于提升团队水平。CI / CD管道将使开发人员更有效,并能够更快地发布更高质量的软件。机器学习产品将使我们的待命体验更易于管理。无服务器将提高工程师的工作效率。自动化将改善我们公司的缓慢和官僚程序。

对于这种解决方案回答很简单:工具通常是用于对付破碎或低效政策的创可贴,而政策则是组织的疤痕修补。工具可能很有用,但它们不会修复你破碎的文化,它们肯定不会使你的团队升级,只能补充它们。

还有人说开发者的工程方法会使团队升级:进行结对编程或测试驱动开发(TDD)的团队将更快地升级并且更有效 - 或者scrum,或敏捷,或者mob编程。没有遵循这些做法的团队需要更长时间才能做好准备。

这些东西可以提供帮助,但实际上并不重要。如果这听起来像不尊重你了,你可能想停下来思考一下这些教条。我见过团队使用scrum,结对编程和TDD编写了可怕的软件;我也见过没有编写单元测试的团队编写出色的软件;我见过团队在本地实施DevOps;我已经看到团队在云端完全孤立操作和开发。这些是工具箱中的工具,团队可以选择利用它们,但它们不会神奇地使团队做好准备或更有效率。

一个例外是代码审查。(审查者必须是非代码作者)

代码审查是有助于提高软件质量的一种做法,并且有经验 数据可以支持这一点。结对编程可以是指导初级工程师并确保其他人理解代码的好方法,但它不能代替代码审查。在与另一个人合作的过程中,自己创造一个糟糕的想法同样容易,但当你引入一个不受外界影响的人时,他们更有可能意识到这是一个坏主意。

代码审查是快速升级团队的有效方式,前提是您有一些知识渊博的审核人员来引导流程(作为推论,这意味着高绩效团队应该偶​​尔被分解以培养组织的其他部分)。它们为开发人员提供快速反馈,最终将其内化,然后将其灌输到自己的代码审查中。因此,它迅速传播专业知识。升级变得具有感染力。

当我开始在Workiva工作时,我亲身体验过这一点。我从未编写过一行Python并且之前从未使用过Google App Engine,我加入了这家公司,其产品主要是用Python编写并在Google App Engine上运行。在几个月的时间里,我成为了一名相当熟练的Python开发人员,对App Engine和分布式系统实践非常了解。我没有做任何培训。我没看过任何书。我很少配对编码。通过代码审查(特别是小组代码审查!),我就把这些阻碍放倒了。

我们对代码审查无情经常让新员工措手不及。使用这种方法,Workiva有效地将一个几乎没有Python或云经验的工程师团队带到了一个用Python编写的基于云的SaaS产品,然后在几年内进行了IPO。

代码审查促进了一种将自我与代码分开的文化。人们自然受到批评的威胁,但是通过代码审查文化,我们批评代码而不是人。代码审查也是在团队中共享上下文的好方法。当其他人审核您的代码时,他们会了解您所处的位置。代码审查为您的团队提供了一个脉搏,当团队成员需要上下文切换到您正在处理的内容时,这可以提供帮助。

它们也是扩展产品开发其他功能的有效方式。例如,许多公司挣扎的一个领域是安全性。InfoSec团队经常成为研发组织的瓶颈,并且经常受资源限制。通过开发安全审核程序,我们可以更好地扩展我们处理安全性和合规性的方式。要求对安全性敏感的更改进行安全审查。为了成为安全审核员,工程师必须通过必须每年更新的安全培训计划。谷歌进一步采用了这一想法,获得了“JS可读性”等不同领域的认证。

这就是为什么我们在Real Kinetic 的咨询强调指导和建立持续改进的文化。这也是我们为行动带来偏见的原因。我们与希望开始采用新实践和技术的公司进行对话,但感觉他们的团队准备不足。这就是现实:你永远不会有充分的准备,因为你永远无法做好充分的准备。正如约翰加尔指出的那样,军队所能做的最好的事情就是做好充分的准备来对抗前一场战争。这就是敏捷确实重要的地方,但只有在快速反应和转动的意义上才能实现敏捷。

没有什么能够取代经验。

通过观看电视上的职业体育运动,您不会成为职业运动员。您不会通过在书本中阅读或进行培训来构建可靠的云软件。要清楚,这些事情可以提供帮助,但它们不是策略。同样,开发人员实践可以提供帮助,但它们不是先决条件。通常情况下,它们会成为情感或哲学辩论而不是客观讨论。需要给团队提供试验和犯错的自由度,以便发展这种体验。他们需要开始做。

代码审查是一个例外。这是升级开发团队的最有效方法。通过严格的代码审查,快速迭代和执行,您的团队将比任何培训课程都能更快地升级。如果您认为他们会提供帮助,请投资培训或其他资源,但在合并到母版之前要求对更改进行代码审查。除了定期回顾,这是建立持续改进文化的基础组成部分。专业知识将开始在您的组织中像野火一样传播。

                   

3