<p>Under what circumstances - if any - does adding programmers to a team actually speed development of an already late project?</p>

[{'answer_id': 76550, 'author': 'JosephStyons', 'author_id': 672, 'author_profile': 'https://Stackoverflow.com/users/672', 'pm_score': 3, 'selected': False, 'text': "<p>If the existing programmers are totally incompetent, then adding competent programmers may help.</p>\n\n<p>I can imagine a situation where you had a very modular system, and the existing programmer(s) hadn't even <em>started</em> on a very isolated module.  In that case, assigning just that portion of the project to a new programmer might help.</p>\n\n<p>Basically the Mythical Man Month references are correct, except in contrived cases like the one I made up.  Mr. Brooks did solid research to demonstrate that after a certain point, the networking and communication costs of adding new programmers to a project will outweigh any benefits you gain from their productivity.</p>\n"}, {'answer_id': 76577, 'author': 'Tom Ritter', 'author_id': 8435, 'author_profile': 'https://Stackoverflow.com/users/8435', 'pm_score': 2, 'selected': False, 'text': "<ul>\n<li>Self-contained modules that have yet to be started</li>\n<li>Lacking development tools they can integrate (like an automated build manager)</li>\n</ul>\n\n<p>Primarily I'm thinking of things that let them stay out of the currently developing people's way.  I do agree with Mythical Man-Month, but I also think there are exceptions to everything.</p>\n"}, {'answer_id': 76605, 'author': 'Lost in Alabama', 'author_id': 5285, 'author_profile': 'https://Stackoverflow.com/users/5285', 'pm_score': 4, 'selected': False, 'text': "<p>Maybe if the following conditions apply:</p>\n\n<ol>\n<li>The new programmers already understand the project and don't need any ramp-up time.</li>\n<li>The new programmers already are proficient with the development environment.</li>\n<li>No adminstrative time is needed to add the developers to the team.</li>\n<li>Almost no communication is required between team members. </li>\n</ol>\n\n<p>I'll let you know the first time I see all of these at once.</p>\n"}, {'answer_id': 76613, 'author': 'Lasse V. Karlsen', 'author_id': 267, 'author_profile': 'https://Stackoverflow.com/users/267', 'pm_score': 5, 'selected': False, 'text': "<p>It only helps if you have a resource-driven project.</p>\n\n<p>For instance, consider this:</p>\n\n<p>You need to paint a large poster, say 4 by 6 meters. A poster that big, you can probably put two or three people in front of it, and have them paint in parallel. However, placing 20 people in front of it won't work. Additionally, you'll need skilled people, unless you want a crappy poster.</p>\n\n<p>However, if your project is to stuff envelopes with ready-printed letters (like <em>You MIGHT have won!</em>) then the more people you add, the faster it goes. There is some overhead in doling out stacks of work, so you can't get benefits up to the point where you have one person pr. envelope, but you can get benefits from much more than just 2 or 3 people.</p>\n\n<p>So if your project can easily be divided into small chunks, and if the team members can get up to speed quickly (like... instantaneously), then adding more people will make it go  faster, up to a point.</p>\n\n<p>Sadly, not many projects are like that in our world, which is why docgnome's tip about the Mythical Man-Month book is a really good advice.</p>\n"}, {'answer_id': 76647, 'author': 'Leigh Caldwell', 'author_id': 3267, 'author_profile': 'https://Stackoverflow.com/users/3267', 'pm_score': 3, 'selected': False, 'text': "<ul>\n<li>If the new people focus on testing</li>\n<li>If you can isolate independent features that don't create new dependencies</li>\n<li>If you can orthogonalise some aspects of the project (especially non-coding tasks such as visual design/layout, database tuning/indexing, or server setup/network configuration) so that one person can work on that while the others carry on with application code</li>\n<li>If the people know each other, and the technology, and the business requirements, and the design, well enough to be able to do things with a knowledge of when they'll step on each other's toes and how to avoid doing so (this, of course, is pretty hard to arrange if it isn't already the case)</li>\n</ul>\n"}, {'answer_id': 76759, 'author': 'Daniel', 'author_id': 13615, 'author_profile': 'https://Stackoverflow.com/users/13615', 'pm_score': 2, 'selected': False, 'text': '<p>Only when you have at that late stage some independent (almost 0% interaction with other parts of the project) tasks not tackled yet by anybody and you can bring on the team somebody that is a specialist in that domain. The addition of a team member has to minimize the disruption for the rest of the team.</p>\n'}, {'answer_id': 76830, 'author': 'Giovanni Galbo', 'author_id': 4050, 'author_profile': 'https://Stackoverflow.com/users/4050', 'pm_score': 2, 'selected': False, 'text': "<p>I suppose the adding people toward the end of the work could speed things up if:</p>\n\n<ol>\n<li><p>The work can be done in parallel.</p></li>\n<li><p>The amount saved by added resources is more than the amount of time lost by having the people experienced with the project explain things to those that are inexperienced.</p></li>\n</ol>\n\n<p>EDIT: I forgot to mention, this kind of thing doesn't happen all too often.  Usually it is fairly straight forward stuff, like admin screens that do simple CRUD to a table.  These days these types of tools can be mostly autogenerated anyway.</p>\n\n<p>Be careful of managers that bank on this kind of work to hand off though.  It sounds great, but it in reality there usually isn't enough of it trim any significant time off of the project.</p>\n"}, {'answer_id': 77442, 'author': 'Zach Burlingame', 'author_id': 2233, 'author_profile': 'https://Stackoverflow.com/users/2233', 'pm_score': 7, 'selected': True, 'text': '<p>The exact circumstances are obviously very specific to your project ( e.g. development team, management style, process maturity, difficulty of the subject matter, etc.).  In order to scope this a bit better so we can speak about it in anything but sweeping oversimplifications, I\'m going to restate your question:</p>\n\n<blockquote>\n  <p>Under what circumstances, if any, can adding team members to a software development project that is running late result in a reduction in the actual ship date with a level of quality equal to that if the existing team were allow to work until completion?</p>\n</blockquote>\n\n<p>There are a number of things that I think are <em>necessary</em>, but not sufficient, for this to occur (in no particular order):</p>\n\n<ul>\n<li><strong>The proposed individuals to be added to the project must have:</strong>\n\n<ul>\n<li>At least a reasonable understanding of the problem domain of the project</li>\n<li>Be proficient in the language of the project and the specific technologies that they would use for the tasks they would be given</li>\n<li>Their proficiency must /not/ be much less or much greater than the weakest or strongest existing member respectively. Weak members will drain your existing staff with tertiary problems while a new person who is too strong will disrupt the team with how everything they have done and are doing is wrong.</li>\n<li>Have good communication skills</li>\n<li>Be highly motivated (e.g. be able to work independently without prodding)</li>\n</ul></li>\n<li><strong>The existing team members must have:</strong>\n\n<ul>\n<li>Excellent communication skills</li>\n<li>Excellent time management skills</li>\n</ul></li>\n<li><strong>The project lead/management must have:</strong>\n\n<ul>\n<li>Good prioritization and resource allocation abilities</li>\n<li>A high level of respect from the existing team members</li>\n<li>Excellent communication skills</li>\n</ul></li>\n<li><strong>The project must have:</strong>\n\n<ul>\n<li>A good, completed, and documented software design specification</li>\n<li>Good documentation of things already implemented</li>\n<li>A modular design to allow clear chunks of responsibility to be carved out</li>\n<li>Sufficient automated processes for quality assurance for the required defect level These might include such things as: unit tests, regression tests, automated build deployments, etc.)</li>\n<li>A bug/feature tracking system that is currently in-place and in-use by the team (e.g. trac, SourceForge, FogBugz, etc).</li>\n</ul></li>\n</ul>\n\n<p>One of the first things that should be discussed is whether the ship date <em>can</em> be slipped, whether features can be cut, and if some combinations of the two will allow you to satisfy release with your existing staff. Many times its a couple features that are really hogging the resources of the team that won\'t deliver value equal to the investment. So give your project\'s priorities a serious review before anything else.</p>\n\n<p>If the outcome of the above paragraph isn\'t sufficient, then visit the list above. If you caught the schedule slip early, the addition of the right team members at the right time may save the release. Unfortunately, the closer you get to your expected ship date, the more things can go wrong with adding people. At one point, you\'ll cross the "point of no return" where no amount of change (other than shipping the current development branch) can save your release.</p>\n\n<p>I could go on and on but I think I hit the major points. Outside of the project and in terms of your career, the company\'s future success, etc. one of the things that you should definitely do is figure out why you were late, if anything could have been done alert you earlier, and what measures you need to take to prevent it in the future. A late project usually occurs because you were either:</p>\n\n<ul>\n<li>Were late before you started (more\nstuff than time) and/or </li>\n<li>slipped 1hr, 1day at time.</li>\n</ul>\n\n<p>Hope that helps!</p>\n'}, {'answer_id': 77965, 'author': 'screenglow', 'author_id': 424554, 'author_profile': 'https://Stackoverflow.com/users/424554', 'pm_score': 2, 'selected': False, 'text': "<p>Obviously every project is different but most development jobs can be assured to have a certain amount of collaboration among developers. Where this is the case my experience has been that fresh resources can actually unintentionally slow down the people they are relying on to bring them up to speed and in some cases this can be your key people (incidentally it's usually 'key' people that would take the time to educate a newb). When they <em>are</em> up to speed, there are no guarantees that their work will fit into established 'rules' or 'work culture' with the rest of the team. So again, it can do more harm than good. So that aside, these are the circumstances where it might be beneficial:</p>\n\n<p>1) The new resource has a tight task which requires a minimum of interaction with other developers and a skill set that's already been demonstrated. (ie. porting existing code to a new platform, externally refactoring a dead module that's currently locked down in the existing code base).</p>\n\n<p>2) The project is managed in such a way that other more senior team members time can be shared to assist bringing the newb up to speed and mentoring them along the way to ensure their work is compatible with what's already been done. </p>\n\n<p>3) The other team members are very patient. </p>\n"}, {'answer_id': 77983, 'author': 'apenwarr', 'author_id': 42219, 'author_profile': 'https://Stackoverflow.com/users/42219', 'pm_score': 4, 'selected': False, 'text': "<p>According to the Mythical Man-Month, the main reason adding people to a late project makes it later is the O(n^2) communication overhead.</p>\n\n<p>I've experienced one primary exception to this: if there's only <em>one</em> person on a project, it's almost always doomed.  Adding a second one speeds it up almost every time.  That's because communication isn't <em>overhead</em> in that case - it's a helpful opportunity to clarify your thoughts and make fewer stupid mistakes.</p>\n\n<p>Also, as you obviously knew when you posted your question, the advice from the Mythical Man-Month only applies to <em>late</em> projects.  If your project isn't already late, it is quite possible that adding people won't make it later.  Assuming you do it properly, of course.</p>\n"}, {'answer_id': 79686, 'author': 'Matthew Cole', 'author_id': 13348, 'author_profile': 'https://Stackoverflow.com/users/13348', 'pm_score': 2, 'selected': False, 'text': "<p>I think adding people to a team may speed up a project more than adding them to the project itself.  </p>\n\n<p>I often run into the problem of having too many concurrent projects.  Any one of those projects could be completed faster if I could focus on that project alone.  By adding team members, I could transition off other projects.</p>\n\n<p>Of course, this assumes that you've hired capable, self-motivated developers, who are able to inherit large projects and learn independently.   :-)</p>\n"}, {'answer_id': 79916, 'author': 'JackCorn', 'author_id': 14919, 'author_profile': 'https://Stackoverflow.com/users/14919', 'pm_score': 1, 'selected': False, 'text': "<p>Simply put. It comes down to comparing the time left and productivity you will get from someone excluding the amount of time it takes the additional resources to come up to speed and be productive and subtracting the time invested in teaching them by existing resources. The key factors (in order of significance):</p>\n\n<ol>\n<li>How good the resource is at picking\nit up. The best developers can walk\nonto a new site and be productive\nfixing bugs almost instantly with\nlittle assistance. This skill is\nrare but can be learnt. </li>\n<li>The segregability of tasks. They need to\nbe able to work on objects and\nfunctions without tripping over the\nexisting developers and slowing them\ndown. </li>\n<li>The complexity of the project\nand documentation available. If it's\na vanilla best practice ASP.Net\napplication and common\nwell-documented business scenarios\nthen a good developer can just get\nstuck in straight away. This factor\nmore than any will determine how\nmuch time the existing resources\nwill have to invest in teaching and\ntherefore the initial negative\nimpact of the new resources. </li>\n<li>The amount of time left. This is often\nmis-estimated too. Frequently the\nlogic will be we only have x weeks\nleft and it will take x+1 weeks to\nget someone up to speed. In reality\nthe project IS going to slip and\ndoes in fact have 2x weeks of dev\nleft to go and getting more\nresources on sooner rather than\nlater will help.</li>\n</ol>\n"}, {'answer_id': 81507, 'author': 'JXG', 'author_id': 15456, 'author_profile': 'https://Stackoverflow.com/users/15456', 'pm_score': 2, 'selected': False, 'text': '<p>Rather than adding programmers, one can think about adding administrative help.  Anything that will remove distractions, improve focus, or improve motivation can be helpful.  This includes both system and administration, as well as more prosaic things like getting lunches.</p>\n'}, {'answer_id': 81834, 'author': 'Bill Michell', 'author_id': 7938, 'author_profile': 'https://Stackoverflow.com/users/7938', 'pm_score': 1, 'selected': False, 'text': '<p>Where a team is already used to pair programming, then adding another developer <em>who is already skilled at pairing</em> may not slow the project down, particularly if development is proceeding with a TDD style.</p>\n\n<p>The new developer will slowly become more productive as they understand the code base more, and any misunderstandings will be caught very early either by their pair, or by the test suite that is run before every check-in (and there should ideally be a check in at least every ten minutes).</p>\n\n<p>However, the effects of the extra communication overheads need to be taken into account. It is important not to dilute the existing knowledge of the project too much.</p>\n'}, {'answer_id': 112221, 'author': 'Oskar', 'author_id': 5472, 'author_profile': 'https://Stackoverflow.com/users/5472', 'pm_score': 2, 'selected': False, 'text': '<p>If the extra resource <strong>complement</strong> your existing team it can be ideal. For example, if you are about to set up your production hardware and verify that the database is actually tuned as opposed to just returning good results (that your team knows as domain experts) borrowing time from a good dba who works on the the project next to yours can speed the team up without much training cost</p>\n'}, {'answer_id': 6795833, 'author': 'Caleb', 'author_id': 643383, 'author_profile': 'https://Stackoverflow.com/users/643383', 'pm_score': 1, 'selected': False, 'text': '<p>Adding developers makes sense when the productivity contributed by the additional developers exceeds the productivity lost to training and managing those developers.</p>\n'}]
['https://Stackoverflow.com/questions/76526', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/4200/']