在什么情况下 - 如果有的话 - 确实为团队添加程序员实际上加速了已经很晚的项目的开发?
答案 0 :(得分:87)
确切的情况显然对您的项目非常具体(例如开发团队,管理风格,流程成熟度,主题难度等)。为了更好地说明这一点,我们可以在任何事情上谈论它,但是过于简单化,我将重申你的问题:
在什么情况下,如果有的话,可以将团队成员添加到迟到的软件开发项目中,导致实际发货日期减少,质量水平等于现有团队允许工作直到完成?
我认为有很多事情是必要的,但还不够,因为这种情况发生(没有特别的顺序):
应该讨论的第一件事是,船舶日期是否可以,是否可以削减功能,以及两者的某些组合是否允许您满足现有版本的发布员工。很多时候,它的一些功能确实占用了团队的资源,而这些资源无法提供与投资相等的价值。因此,首先要对项目的优先级进行认真审查。
如果上段的结果不充分,请访问上面的列表。如果您及早发现了时间表,那么在合适的时间添加合适的团队成员可以节省发布时间。不幸的是,越接近预期的发货日期,添加人员就越多。在某一点上,您将跨越“不归路”,其中没有任何变化(除了运送当前的开发分支)可以保存您的版本。
我可以继续,但我认为我达到了重点。在项目之外,在你的职业生涯,公司未来的成功等方面,你应该做的事情之一是找出你迟到的原因,如果有什么事情可以提前告知你,你需要什么样的措施为了防止将来发生这种情况。通常会发生一个迟到的项目,因为你要么:
希望有所帮助!
答案 1 :(得分:29)
只有拥有资源驱动的项目才有用。
例如,考虑一下:
你需要画一张大海报,比如4乘6米。一张大的海报,你可以把两三个人放在它前面,让它们并行绘画。但是,在它前面放置20个人是行不通的。此外,你需要熟练的人,除非你想要一个糟糕的海报。
但是,如果你的项目是要填写带有现成字母的信封(比如你可能已经赢了!),那么你添加的人越多,它就越快。挖出一堆工作会有一些开销,所以你无法获得收益,直到你有一个人的优势。信封,但你可以从不仅仅2或3人获得好处。
因此,如果您的项目可以轻松划分为小块,并且如果团队成员可以快速加速(例如......瞬间),那么添加更多人将使其更快,达到一定程度。< / p>
可悲的是,在我们的世界里,没有多少项目是这样的,这就是为什么docgnome关于神话人月书的提示是一个非常好的建议。
答案 2 :(得分:17)
如果符合以下条件,则可能:
我第一次看到所有这些内容时会通知你。
答案 3 :(得分:11)
根据神话人月,将人们添加到后期项目的主要原因是后来是O(n ^ 2)通信开销。
我遇到过一个主要的例外:如果一个项目中只有一个人,那几乎总是注定失败。添加第二个几乎每次都会加速。那是因为在这种情况下沟通不是开销 - 这是一个有用的机会来澄清你的想法并减少愚蠢的错误。
另外,正如你明显知道你何时发布了你的问题,神话人月的建议仅适用于晚期项目。如果你的项目还没有迟到,那么添加人员很可能不会在以后制作。当然,假设你做得恰到好处。
答案 4 :(得分:10)
如果现有的程序员完全不称职,那么增加有能力的程序员可能会有帮助。
我可以想象你有一个非常模块化的系统,现有的程序员甚至没有在一个非常孤立的模块上启动。在这种情况下,只将项目的那一部分分配给新的程序员可能有所帮助。
基本上神话人月的参考是正确的,除了像我组成的人工案例。布鲁克斯先生做了可靠的研究,证明在一定程度上,为项目增加新程序员的网络和通信成本将超过你从他们的生产力中获得的任何好处。
答案 5 :(得分:5)
答案 6 :(得分:4)
只有当你在最后阶段有一些独立的(几乎与项目的其他部分有0%的互动)时,任何人都没有解决这些任务,你可以让团队成为该领域的专家。增加一名团队成员必须尽量减少对团队其他成员的干扰。
答案 7 :(得分:4)
可以考虑添加管理帮助,而不是添加程序员。任何可以消除干扰,改善焦点或提高动力的事情都会有所帮助。这包括系统和管理,以及更简单的事情,如午餐。
答案 8 :(得分:3)
我认为,在工作结束时添加人员可以加快速度:
工作可以并行完成。
增加资源所节省的金额超过了让项目经验丰富的人向缺乏经验的人解释的时间。
小心那些依靠此类工作的管理人员。这听起来不错,但实际上它通常没有足够的时间来减少项目的任何重要时间。
答案 9 :(得分:3)
显然,每个项目都不同,但大多数开发工作都可以保证在开发人员之间进行一定程度的协作。在这种情况下,我的经验是,新鲜的资源实际上可能无意中减慢了他们所依赖的人的速度,使他们加快速度,在某些情况下,这可能是你的关键人物(顺便提一下,这通常是'关键'人教育新词的时间。当他们 达到速度时,无法保证他们的工作能够与团队的其他成员适应既定的“规则”或“工作文化”。再说一次,它可能弊大于利。除此之外,这些是可能有益的情况:
1)新资源的任务紧张,需要与其他开发人员进行最少的交互,并且已经展示了一套技能。 (即将现有代码移植到新平台,从外部重构当前锁定在现有代码库中的死模块)。
2)项目的管理方式可以让其他更高级的团队成员分享时间,以帮助新人加快速度,并在整个过程中指导他们,以确保他们的工作与已经完成的工作兼容。
3)其他团队成员非常耐心。
答案 10 :(得分:2)
我主要想的是让他们远离当前正在发展的人的方式。我同意神话人月,但我也认为一切都有例外。
答案 11 :(得分:2)
我认为将人员添加到团队可能会加速项目,而不是将其添加到项目本身。
我经常遇到太多并发项目的问题。如果我可以单独专注于该项目,那么这些项目中的任何一个都可以更快地完成。通过添加团队成员,我可以转移其他项目。
当然,这假设您已聘请有能力,自我激励的开发人员,他们能够继承大型项目并独立学习。 : - )
答案 12 :(得分:2)
如果额外资源补充您现有的团队,那么它可能是理想的。例如,如果您要设置生产硬件并验证数据库是否实际调整,而不仅仅是返回良好的结果(您的团队知道为域专家),那么从下一个项目工作的优秀dba借用时间对你而言,可以在没有太多培训费用的情况下加快团队工作
答案 13 :(得分:1)
简单地说。它归结为比较剩余的时间和从某人获得的生产力,不包括额外资源加速和提高生产所需的时间,并减去现有资源教学所花费的时间。关键因素(按重要性排序):
答案 14 :(得分:1)
如果团队已经习惯配对编程,那么添加另一个已经熟练配对的开发人员可能不会减慢项目速度,特别是如果开发正在进行TDD风格。
新开发人员将逐渐变得更有效率,因为他们更了解代码库,并且任何误解都会很快被他们的对或者每次签到之前运行的测试套件捕获(理想情况下应该至少每十分钟检查一次。)
但是,需要考虑额外通信开销的影响。重要的是不要过多地淡化项目的现有知识。
答案 15 :(得分:1)
当额外开发人员贡献的生产力超过培训和管理这些开发人员所损失的生产力时,添加开发人员是有意义的。