如何为昂贵的程序员辩护?


33

在我们公司中,我们需要做许多看似并不复杂的事情,例如开发Mobile UI。

假设经验丰富的程序员花费我们的费用是初学者的4倍。

两者基本上都可以在相同的时间内完成看似简单的事情。

不同之处在于,经验丰富的程序员产生的bug更少,代码更稳定等。初学者程序员浪费了很多其他人(PM,客户端等)的时间。但是它们便宜得多。

counter参数是,有经验的初学者用相同的时间来制作HTML表。因此,聘请有经验的程序员来做是奢侈的,初学者也可以做到。

考虑到我们领域经验丰富的程序员与新程序员之间的差异可能是4倍,我们应该投资更多,更好的程序员,还是更多,更好的PM。


18
经验丰富的程序员将更快地编写代码,并减少错误,但是对简单项目的处理也会很快。
david25272

18
Let's say the experienced programmers costs us 4x as much as the beginners.-这不太可能。该比率更像是2倍或3倍。如果您付给程序员的钱太少了,那么您真正要做的就是雇用业余人员并对其进行培训,以完成所需的工作,只有在他们获得最少量的经验后,才让他们离开公司,前往更绿色的牧场。
罗伯特·哈维

4
Both are basically able to complete the seemingly simple things in the same amount of time.-嗯,有经验的程序员从长远来看可以节省大量时间,因为您不必就具体的操作方法给他更具体的说明。
罗伯特·哈维

8
@jules:为了外包/离岸,您必须编写一个非常详细的规范,该过程可能需要与有经验的程序员仅编写实际程序一样多的时间。不要相信我,与任何尝试离岸外包的人交谈。我有。
罗伯特·哈维

2
@Ewan:请举一个大型公司的例子,该公司在过去两年中离开伦敦,在英国其他地方寻找便宜的软件开发商。
gnasher729

Answers:


60

我对两种理论都在现实世界中进行过试验具有第一手的经验-实际上是在同一项目中。

在我到达之前,已经决定聘用更昂贵的BA和非常便宜的程序员-这个想法是要有质量很好的规格,非常初级的程序员会严格遵循。

经过6个多月的主要项目后,我接任开发经理。解决了一些卫生问题后,代码质量问题仍然存在。我有一些预算,并聘请了一位经验丰富的程序员(当然,更多是一名解决方案架构师),他们具有非常规的沟通技巧,并且曾经是C#培训者(该项目的编写语言)。这个想法是通过提供指导和有效的免费培训来提高其他编码人员的质量。

一两个月后,很痛苦的事实是,即使那样也行不通,因此将原始团队从该项目中删除,并添加了两个顶级抽屉式程序员。他们交付了原始团队在从头开始的3个1个月的sprint中尝试了8个多月而完全未能交付的项目,因为原始代码不可修改。

如果您的要求非常基本,那么您可能可以使用一个非常初级的程序员,但是从长远来看,它们的成本可能更高。有时,“简单”的需求会演变成极大的复杂性。

如果我没有做出艰难的选择来改变方向,那么他们可能仍会继续努力:)-更严重的是,在这个例子中,原始团队缺乏沟通和能力不足,因此他们不会提出任何问题。规范,但无论他们在结构上是否合理,都将尝试按照他们的要求去做一个更加有经验和自信的开发人员提出了问题,并挖掘了基本需求,因此最终首次提出了正确的解决方案。

哦,另一件事。不要以为您可以立即聘请优秀的程序员。那里有很多具有多年平庸经验的人,他们提供的结果几乎与初中一样差,但花费与超级巨星相同(有时甚至更多)。我有一个很好的“命中率”,但这是经验带来的,而且我有很多。那是一个完全不同的对话的主题,在这里没有话题...

TL; DR好的程序员是便宜货。困难的是找到他们并创造一个足够吸引人的工作环境来保留它们。


3
我会在您的tl; dr中将“ Experienced”与“ Good”交换,原因是您指出了上面的原因。另外,很有可能(但仍然很困难)找到具有相对较少或没有专业经验的优秀程序员。不过,我会承认,释放这些开发人员的潜力确实需要进行修饰,并且OP的公司很可能没有合适的文化来做到这一点。拥有一名优秀的程序员的好处之一是具有良好的行为举止和榜样的榜样,与平庸相反。
德里克·埃尔金斯

1
@Derek Elkins-好建议,完成了。同意你的第二点。在一份工作中,我受到预算的极大限制,但仍然设法组建了一支非常优秀的团队,其中包括一名经验丰富的现任程序员和三名非常初级的程序员(没有学位,很少的经验)作为新员工-其中一位特别出色。但是,我在发现令人沮丧的CV之前“花了很多钱”,然后才找到他们,并花了更多时间/金钱自己训练他们,在合适的水平上提出一些小任务,让他们拥有自己的解决方案并庆祝自己的成就。
mcottle '17

是的,我的经历是相似的,尽管我发现令人沮丧的初级CV比访问具有15年SQL经验,不知道外部联接是什么的“高级”开发人员要郁闷得多。但是,从公司适合度,忠诚度,总体士气的提高方面,培训成本还是有一定回报的;坦率地说,一旦接受培训,他们的成本可能会比“典型的”高级开发人员更好,更便宜。不过,这绝对是一项投资,而且回报时间通常太遥远而无济于事,即使这将是一次净赢。
德里克·埃尔金斯

好帖子+1。我只是要警告一下,交货时间是评估开发人员质量的非常钝的工具。我们有一个“超级明星”承包商,由于他的发展速度,最初他的需求量很大。一旦人们试图捡起他的东西,车轮很快就脱落了-黑客,硬编码,单片代码,缺乏单元测试-他很快就被派往包装袋仓促……
Robbie Dee

此外,优质的开发者花费少得多的时间比他们的后辈编码因为他们是巨资用于在帮助别人,代码审查,建筑,DEVOPS,棕色包包会,研讨会,培训等等等等的援助需求
罗比·迪

19

如果您有大量的性能统计数据,则可以通过数学来进行业务案例分析。这些可能表明开发速度将弥补价格的上涨,甚至更好,稳健的设计可以节省更多后续版本的维护和开发费用。不幸的是,这样的数字并不经常得到-特别是对于较新的技术。

另一个争论可能是上市时间。高层管理人员更容易理解。但是,如果时间不是很关键,这将无济于事。

在最后一招,找到的图片红阿代尔,在著名的消防队员,谁被称为在大灾过后缺乏经验的球员几次不成功的尝试。他的名言:

如果您认为聘请专业人士的成本很高,请等到您聘请了业余爱好者之后。

...应该以彩色打印并显眼地显示在您的办公室门上,这样每个人都可以了解它的全部内容;-)


我认为这是我见过的最好的答案,并且由于已经有很多答案,因此我要补充一点,高级专业开发人员的价值不在于减少错误,而且可以重复做同样的事情。这个想法是要找到一个可以消除重复工作并提高抽象水平的人,并指导和指导初级团队成员。我们需要在开发中将高级人员和初级人员更多地融合在一起,以摆脱对旧的坏主意的不断回收,这些旧主意从长远来看是行不通的。
JimmyJames

我认为很早就取消了寻找易于组合的统计信息以评估开发人员质量的要求,无论是代码行,缺陷数量,圈复杂度,代码覆盖率还是其他。金鹅是正确组合开发人员的预测指标,可以以最低的成本进行组装,以生产出足够好的产品。
罗比·迪

@RobbieDee不需要完美的模型:只是一种务实的方法。例如,如果您系统地估计与开发任务,实施时间和开发人员的资历水平相对应的故事点,那么您将逐渐收集非常有趣的平均值。当然,这些统计信息仅与估计使用相同技术的类似活动有关。它们只是平均值,而不是水晶碗。但是您可能会获得有助于显示趋势并证明资历价格比率合理的数据。
Christophe

@Christophe Story积分用于比较一项任务与另一项任务的复杂性-尽管它们以这种方式被大量滥用(2分= 1天等),但它们并不是为了衡量时间而设计的。
罗比·迪

@RobbieDee是我的意思:如果您想要性能统计信息,则需要比较任务执行时间和任务复杂性。所有的困难是要获得对复杂性的准确评估。只有在您可以轻松获得近似值的情况下,该统计数据才在实践中可行。如果使用FP,则非常准确。但是FP评估很耗时,而且不十分敏捷。故事点不太客观,但更容易获得。当然,您是对的:如果要求平均值,则需要线性化比例尺。在项目管理中,此方法称为“参数估计”。
Christophe

10

我喜欢并赞成mcottle的答案,但我想介绍其他答案尚未提出的其他动态和论点。

首先,在mcottle的答案中隐含的事实是,在一定技能水平以下,有些问题是不可能的。不幸的是,您发现此问题的方法是您的团队不断尝试和失败,这非常昂贵。失败之后,有两个可能的经验教训。一种选择是,您了解到您需要更多有能力的开发人员,因此您聘请了他们,并在预算和进度过度的情况下完成了该项目,但是至少您将来会做好准备。另一个选择是,对于您的团队来说,这样的项目“太难了”,将来不应该尝试这种事情,即您放弃该项目,而实际上放弃了任何类似的项目。当然,它很少会被表述为“我们太笨了,无法做到这一点”,而将其合理化为“我们的系统非常复杂”或“我们有很多遗留代码”或其他一些东西。后一种观点可能会严重扭曲公司对可能的发展以及应该进行多长时间/昂贵的开发的观点。”

一个问题是,您公司的计划到底是什么?好的,他们会雇用廉价的初级程序员。三年过去了,现在呢?他们如何对待过去三年来一直与他们在一起的开发人员?他们只是从不给他/她加薪吗?这里的选项如下:

  • 他们竞争性地加薪以留住员工,在这种情况下为什么他们现在要支付高级开发商费率会有问题?我会回到这。
  • 他们的薪资水平停滞不前,这意味着他们最终将精疲力尽给缺乏动力和/或技能的员工。
  • 他们更积极地罢免更多的高级员工。

后两个案例意味着大量的员工流失,这意味着公司知识的丧失和不断增加的员工薪酬。在第二种情况下,您实际上是在选择不良的开发人员,因此成本将以进度增加的形式增加。这种播放的方式是在X项目上一切正常,直到突然间Jim Jim离开了,他是最好的开发人员之一,因为他已经两年没有加薪了,现在该项目“可以理解”的时间要长得多您需要雇用和培训新的初级开发人员(大概)不会像Jim那样优秀。这是您重新调整期望的方式。

即使在提供竞争性加薪的情况下,如果您只有初级开发人员,他们应该在哪里学习以及如何学习?你基本上希望其中一人将学会对自己的良好做法,尽管他们的工作环境,并最终指导别人(而不是离开另谋高就)。与一些优秀的开发人员一起“启动泵”将更加有意义。您更有可能养成专家初学者的文化。结果是,您最终将向那些仅比初级开发者略胜一筹且具有文化毒性的人支付高级开发者费率。

特别是非常优秀的开发人员的一项好处,令我感到惊讶的是,没有人提到他们可以很容易成为乘法因素。初级开发人员和高级开发人员很可能花费相同的时间来制作表格。但是,好的开发人员不会这么做。他们将创建一个表生成器,以减少每个人创建表的时间。作为替代/补充,他们将提高每个人的能力上限。例如,实施Google MapReduce框架的开发人员可能非常有资格,但是即使用户的MapReduce完全无法自行制作其算法的大规模分布式版本,而现在使用MapReduce可以轻松实现。通常情况下,这种动态不太明显。例如,更好的源代码控制,测试和部署实践可以使每个人都变得更好,但是很难追踪到特定的人。

稍微争论一下对方,也许高层人士是对的。也许不需要更多有经验的开发人员。但是,如果真是这样,那么发展似乎并不是公司的重要组成部分。在那种情况下,我将完全淘汰开发人员,使用现成的软件或按需雇用承包商。也许值得探讨为什么他们不仅仅使用承包商,而不仅仅是内部团队。如果您反而会造成大量的员工流失,那么增加承包商就不成问题。


如果承包商需要高级人员的技能水平,但无法负担全年的全职工资,那么承包商可能是此OP的非常可行的答案。寻找值得信赖的当地承包公司。我说承包商的想法应该扩展到自己的答案中。
rwong

6

这不是一个非此即彼的情况。

尤其是在较大的项目中,通常会有一些经验丰富的高级职位人员,以及一些经验较少的初级职位。这样,高级人员不仅可以通过编写代码和做出更艰难的决策来直接为项目提供帮助,而且还可以通过指导初级人员来间接帮助项目。

通过谨慎操作,这还可以防止高级工程师被要求不断地进行缺乏挑战或兴趣的工作,从而使他们迅速精疲力尽。至少以我的经验,即使是花些时间指导一些热情的初级(甚至实习生)的人,也会使冲刺变得更加有趣。

公平地说,我应该补充一点,这种职位可能不适合所有高级工程师。它需要极大地强调体系结构和设计,通信,文档等。尤其是在早期,它还经常需要大量的纪律检查-对于从事代码编写工作的人来说,诱使他们只是跳入编写代码,而不是教初级工程师如何编写代码。当代码不是您个人所喜欢的代码时,即使它完全可以胜任工作,也常常会尝试从头开始进行完整的重写。

但是,如果您真的不能说服管理层同时使用各种经验水平,则基本上没有问题,您需要更多的经验。如果您完全将项目留给初级人员使用,则很有可能根本不会获得可用的产品。更糟糕的是,他们不会意识到自己正在做的事情并没有为使用产品提供任何实质性进展,因此,在有经验的人意识到他们已经做出了自己的贡献之后,他们将继续朝着选定的方向努力。早期的根本性错误,需要备份,重组,承担责任,并朝着新的方向开始,以便有希望到达有意义的目的地。


5

任何现实世界的项目都是由客户需求驱动的,因此涉及的任务是低复杂度(例如,构建CRUD表单)和高复杂度(例如,构建事件驱动的通知系统)。仅执行低复杂度任务的唯一方法是反复告诉客户“否”这个词,我从未听说过任何销售部门都愿意这样做。

如果您只有初级开发人员,则意味着您将只能执行低复杂度的任务,因此只能构建低价值的产品,并在市场上更加努力地使您的产品与众不同。如果要与众不同,则需要构建高价值的功能,这不可避免地会转化为高复杂性的任务。毕竟,如果这很容易,那将毫无价值。这意味着您需要人员来执行那些高度复杂的任务,并且需要高级开发人员。

如果您只有高级开发人员,则将浪费他们的技能来从事低价值的工作,在迫使他们进行上述工作时难以保留他们,并冒着他们进入建筑天文学领域尝试更多地完成简单任务的麻烦。有趣的工作。这意味着您还需要一些经验不足的开发人员来承担这些任务。

一个健康的团队致力于客户驱动的产品通常是混合的。初级开发人员和高级开发人员之间的比例取决于低复杂性和高复杂性任务之间的比例,并且取决于您的业务策略。如果您积极寻找大量低利润,容易理解的切饼机,那么您将不会有很多高复杂度的任务,并且可能会雇用大部分初级人员。如果您积极寻求差异化并以更高的利润率定位服务不足的细分市场,您将面临许多高复杂性的任务,并且主要是寻找高级开发人员。


3

在我的回答中,我将争辩说高级程序员不一定比初级开发人员更快的编码。实际上,最快的程序员是刚离开大学的普通人。

领域知识是高级开发人员的关键。一个好的高级开发人员应该具有该领域的丰富知识,而初级开发人员可能没有。经验丰富的开发人员了解问题,解决方案和解决方案。与大多数初级开发人员相比,他们可以为企业解决更复杂的问题。

编程是一种相对廉价的技能,重要的是专业知识。


2

不要试图“说明理由”市场决定了员工的价格。如果市场愿意为体验支付4倍以上的费用,那是因为整个公司都认为生产率提高了4倍。

现在显然市场可能是错误的,可能是3.5倍或5倍,但除非您是数字代理公司,否则要与市场竞争或此类细微差别都不重要。

您的真正问题是,您是否足够擅长面试,以能够区分经验丰富的开发人员和只是老套的开发人员。

关于PM与开发人员预算的第二个问题。我要说的是,开发人员可以没有PM,但PM不能没有开发人员。首先对您的开发引擎进行排序,然后获取PM,以减轻管理员的负担。


尽管从经济意义上讲这是正确的,但偏远地区(例如小城镇,农村地区)的市场可能会非常倾斜。大学城可能会更好。
rwong

是的,但是您的业务存在。
伊万

2

您不会在自己的国家/地区找到任何人,而这只是真正优秀开发人员的四分之一。您可能会找到薪水一半的人,这绝对是一个初学者。对于薪水只有四分之一的人,您需要出国旅行,然后您会遇到沟通方面的问题,盲目遵循规格的人们以及各种各样的麻烦。

需要一个好的开发人员。如果增加更多的初级程序员,则需要一个具有较强沟通能力的优秀开发人员,他们愿意并且有能力关注初级人员。没有一个好的开发人员,您会迷失方向。您可能会幸运地找到一些非凡的才华横溢的初学者,但是一旦他或她发现自己很优秀,他们就会想要更高的薪水。

如果您没有一个优秀的开发人员,那么您将没有人看到更广阔的前景,也没有人能够解决使用stackoverflow无法解决的问题。而且您将拥有令人讨厌且不可维护的代码,因为初级开发人员不知道如何创建可维护的代码。他们可以学习,但是他们不会缺少团队中的优秀开发人员。


1

在决定聘用更好的程序员是否具有成本效益之前,您的公司必须克服一些障碍。抱歉,如果我对您的工作地点做出一些负面的假设,但我不能说服他们知道他们在做什么。

  1. 他们是否准确评估过您构建的软件有多复杂?听起来他们不认为您的工作很难,那么为什么要雇用更好的人呢?您是否曾犯过错误,以及更好的解决方案和生产力将如何赚钱?节省时间是很大的,但是许多公司宁愿浪费程序员整整一个星期的时间,也不愿给他们钱来购买鼠标垫。
  2. 贵公司对优秀的程序员有吸引力吗?他们有能力识别他们吗?没有比雇用高级开发人员更糟糕的事情了,向他们支付更多的钱,由于缺乏技能和/或领导能力,他们拖垮了整个团队。
  3. 贵公司可以聘请优秀的程序员吗?如果他们要做的只是扔下劣质的规格,只是告诉他们去建造它,那有什么意义呢?他们会给他们任何以自己的方式做事的自由吗?毕竟,根据定义,一个好的程序员知道如何更好地利用自己的时间。它们会影响周围的人,并导致其他程序员得到改善。他们介绍了更好的设计和体系结构,其余的则基于使产品变得更好的基础上。

抱歉,但是我觉得您的公司不知道如何与一个好的程序员打交道,因此您可能希望说服他们首先聘请更好的经理并解决这些内部问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.