19

How do you know how many programmers a particular project needs to be successful?

The company I work for fulfills orders for client companies. We have written an in-house warehouse management system that handles location based inventory management, order processing, bill-of-lading generation, invoicing, freight auditing and reporting (probably 50 reports). It also has barcode scanning functions and a client portal along with dozens of other smaller features. It also includes a full employee timeclock. It integrates with Quickbooks, UPS and FedEx. It handles work for at least 50 clients all differing slightly in their functionality. For example, we import orders from files the customers send but each customer sends a different file format (csv, excel, flat file and web services) so we have well over a dozen order conversion methods setup. Exports are the same story.

The project is complex and growing in complexity every day with over a quarter million lines of code. It's about 250,000 lines of VB.NET code, 6,200 lines of Ruby code and maybe 5,000 lines of PHP. It also has a MySQL database with about 200 tables.

Because of the constantly changing requirements and differing needs of dozens of clients the code itself varies greatly in the quality from extremely poor to relatively good code.

Currently, this project has only a single programmer - myself. I also currently do all the product support for our company of 75 people or so. That includes troubleshooting and setting up new clients and any new features that are needed. Plus, we're trying to rewrite the whole thing to be 100% Ruby on Rails based. And we would like to market the whole system within the next year or so to be used by other companies.

Currently, we have only myself as a programmer but I don't believe that is sufficient. Does anyone have any recommendations for how many programmers a project of this magnitude should have or how we should go about determining the answer to that question? Particularly given the fact that management would like the product to be commercial quality by next year?

S.Robins
  • 11,385
  • 2
  • 36
  • 52
kstevens715
  • 293
  • 1
  • 2
  • 5
  • 11
    I was waiting for a lightbulb joke :( – Oded Jan 30 '12 at 21:44
  • lol... google the title and you'll probably find some. When I was googling I actually found a bunch of those accidentally lol. – kstevens715 Jan 30 '12 at 21:45
  • 8
    If the requirements keep changing, no number of extra hands will get this product shipped and out of the door. You have got to nail down the requirements first. – Oded Jan 30 '12 at 21:46
  • That's definitely true in my case. I know the question I'm asking probably isn't very answerable. But if I could compare what kinds of projects other people are working on and how many people are involved full-time in those projects maybe that would help. – kstevens715 Jan 30 '12 at 22:11
  • This question seems to be very similar to [this question](http://programmers.stackexchange.com/q/87959/39178). Perhaps you will also find some of the answers there to be useful. – S.Robins Jan 30 '12 at 22:28
  • How long have you been doing the work, and how has it gone for you? Is this something you've been handling well so far, working within 8 hour days mostly? – blueberryfields Jan 30 '12 at 22:49
  • So, is this question actually asking how to determine the staffing required, or are you looking for a specific recommendation? If the latter, then the question is highly subjective and may require rewording or risk closure. If the former, you may wish to make this clearer in the body of your question. – S.Robins Jan 31 '12 at 09:56
  • A simple way would be to estimate how long it would take you to complete all of the requirements, then estimate a small amount of time for problems that might surface, divide that by your schedule. If it will take 200 hours to complete and each developer works 40 hours, it would take about 5 developers to finish in a week. If you cannot determine what is required for a given milestone, then you will be unable to do this estimate, and even this suggestion does not scale well. – Ramhound Jan 31 '12 at 12:48

4 Answers4

10

Welcome to the oft times difficult world of resourcing!

The issue isn't one of Project Size vs Team Size. That's a very common misconception which often hides other problems which are usually management related. The issue is all about Scope. You need to decide what it is you can achieve with your current resources - aka you. Then you need to decide if your capacity for handling the workload is sufficient to handle the task within the time frames you have been allocated. Thus your project needs must be identified and scoped.

  • Do you want to spend time cleaning up the existing code base?
  • Is this a fundamental requirement to ensure the success of the project?
  • Do you have new features to add to the system? What are the most important aspects of your project that must be dealt with, and what are the minor items that are on the wish list?
  • Can any of the requirements be either abandoned, or at least put off until the next maintenance release?

When you have an idea of the scope of your requirements, you can more easily determine the workload required to achieve a result within a certain time frame. If your resources are likely to be overutilized, then you will need more staff. If your resources are likely to be underutilized, then you may find yourself able to either move your deadline closer, or increase the scope of your project.

If your gut-instinct tells you that you don't have enough staff to manage the project, you may be correct, but you need to understand why it is that you gut is telling you this. It's not enough to simply have a feeling. Instead, you need to be able to examine the problem scientifically in order to provide proof to back up your instincts, and you need to be prepared to face the possibility that you instincts might even be wrong. Once you have gathered your evidence - I.e.: scoped the project, then you really need to sit down with your management and make a case for either reducing the scope of the project, or increasing the resources available to ensure the success of the project, based on the evidence at hand.

user
  • 2,170
  • 8
  • 25
  • 36
S.Robins
  • 11,385
  • 2
  • 36
  • 52
  • Scope would seem to be complete rewriting of a 250K SLOC system into something that's of shrinkwrap quality (or at least consultingware quality). The advantage is that the requirements gathering and overall design are probably already done. This isn't small, and not something for one developer who has other responsibilities. – David Thornley Jan 30 '12 at 22:28
  • @DavidThornley That's highly dependent on on the scope of the developers duties, his deadlines, his workload, how his company is already marketing the product. I've seen many complex projects worked on by a 1-2 person team which have been very successful because they were well managed... and many more that have failed. I agree however that the task is a big one, and that in itself is already a bit of a red flag in terms of resourcing. The thing is, it isn't worth just hiring lots of people without having done a little homework first, which is really the point of my answer. :-) – S.Robins Jan 30 '12 at 22:38
  • Scope is something that I've been bringing up quite a bit the last couple of months. 20% of the project has 80% of the impact on the company. That's what I'm trying to focus on. Unfortunately, the 80% that has 20% of the impact is what gets pushed to the front of the line as we try to deal with "emergencies" by throwing more code and features at it. I once asked for a feature freeze so I could fix some core issues. They gave me 5 days. Needless to say it's 5 years later and many of the core issues remain. Thanks for your post though, very helpful. – kstevens715 Jan 31 '12 at 00:45
6

The success of the product / project will depend on the commitment of the company whose paying for it. If they're going to hire more programmers / support staff, there will be an inherent decrease of productivity from the one programmer, who know has to train, teach, manage, etc.. not that it's a bad thing.. but there will be a decrease before any increase is realized.. there's also the need for business analysts, managers, sales, and the support of the product once it's commercially available..

Hosting a commercial application is much more than just creating a solid platform. there's support requirements, technical support, bug fixing, user training, etc..

do you have any good analysis / spec / estimation procedure in place? if not, start now, you can do this by yourself.

are you working your brains out right now? If so, be prepared to work twice as hard if you're expected to manage this process and continue developing (raise due?) ..

and here's the answer from my previous experience being in a similar situation in the Southern California area pricing:

5-6 people && ~500k

  • 1 Lead Developer / manager wearer of all hats (~100k - 120k)

  • 2 Sr. (very capable, self driven) programmers with good DB understanding and Skills (2x ~80 - 100k)

  • 1 Project Manager to interface with Management ($$?) this person should also be able to understand the needs of the app, and communicate those needs directly to the programmers

  • 1? (HTML / UI) developer? with javascript skills (i hate programming UI / Markup code)

  • 1? Database person? however, most good programmers have no problem creating scalable data structures, however, if you're going to get into optimization concerns, you'll at least want to have a consultant

hanzolo
  • 3,111
  • 19
  • 21
  • 1
    +1 I like your breakdown very good! Complete OT the salaries you quote feels depressing for me as I have thought of working in SoCal but they are not much higher than western Europe, if the Sr people is like MSc+5years working. –  Jan 30 '12 at 23:43
  • 1
    I agree except that I'd also recommend an entry level programmer to take over support duties (client setup and minor enhancements) and to do general grunt work. Combining some roles may work depending on the skill levels involved. – jfrankcarr Jan 31 '12 at 01:24
  • Wow, you can get senior devs in So Cal for 80-100K? That seems quite low given the cost of living. Maybe we have different ideas of 'senior'; the senior devs I know in Dallas are getting considerably more than that. – kevin cline Jan 31 '12 at 19:46
  • We probably have different ideas of what taste's good too.. I hired 2 .Net Sr.'s who were young and talented with a lot of experience over the last 10 years who were willing to work within that range. We used the latest Microsoft Stack (TFS, .NET 4, C#, EF 4.1, MSSQL 2008 R2, blah blah.. ), and had no problem with banging out good clean code. We were a small team, and the problem we found trying to hire some Sr.'s was that they were resistant to learning and had too many opinions and carried too much baggage (We didn't have much of a hiring window either) – hanzolo Jan 31 '12 at 20:07
4

I would say at least 5 persons. One for test, one for spec, support and documentation and 3devs. There is a lot of things to be tested in you case, so a 50% dedicated tester should not be unreasonable. A person writing down the requirements and having customer support setting up your infra structure for testing etc should be there. Three developers I feel is quite low for a project like this. A large back end that is integrated to many third party systems, and a complete fronted with extremely many customized reports. I would like to have.

  1. A good back end developer (persistence / business layer)
  2. A good middle end / front end developer making action classes and JavaScript CSS Design.
  3. A good alround developer acting architect but also making code in all layers with expert help from the two other. This developer can also do things like setting up JUnit framework Maven Jenkins Git branching and so on.

What happens if you leave, becomes sick take vacation etc. One person per project is never smart. Neither is it good to be alone as you don't evolve professionally without coworkers. I work quite often alone, setting up new architectures and so on, often in teams of say 5 developers but I never evolve as much as when I say to a coworker lets set up this together and we lock our self up a week talking, discussing and choosing frameworks. Pair programming is extremely giving and can not be done with one dev, and who will make code reviews if you feel uncertain? If you get stuck who will help you? I would only undertake a one person project if it was part of a larger scope and could get expert resources called in if needed. You as a developer should not be stressed from the outside therefore the customer support guy mentioned earlier could act as a Scrum Master blocking all external impediments and he could prioritize support, new CRs and reason with the end customer if they want to change requirements as you were afraid of.

S.Robins
  • 11,385
  • 2
  • 36
  • 52
  • 1
    I took a 2 day vacation last summer and someone had to break into my house to get my laptop... yeah. I always talk about working in a vacuum because I don't have many other developers to interact with. And living in a small town there aren't even any user groups or anything to join. We (I?) just started writing test code recently, actually when we started transitioning to Rails. I already can't imagine developing without tests. I love the idea of having a 50% dedicated tester. – kstevens715 Jan 31 '12 at 00:57
  • 1
    At least one dev should be a database sepcialist. – HLGEM Jan 31 '12 at 15:40
3

1 programmer on a large codebase with all the responsibility of configuring, testing, communicating, supporting, documenting and bug fixing isn't going to have much time for writing new code or adding features (or even refactoring old code).

Break your week down by the percentage of these mandatory tasks that don't expand the business and you'll be surprised at how fast management hires extra help.

Large projects have a certain amount of associated overhead that won't go away (especially if implementing/testing with new clients all the time as you seem to be). This is the reason you have support rotations and support in general; so some of those on the team have time to work on new features.

You might also want to look into books on software estimation. These books may not sound like they have much to say, but they contain interesting case studies from a variety of fields and back their claims up with evidence.

brian
  • 3,579
  • 1
  • 20
  • 22
  • 95% of my time is spent doing one of those tasks. I like the idea of support rotations. That may be something to consider if we hire someone I can rotate with lol. Today, for example, I was actually getting to work on some core code and was interrupted because someone needed a battery. – kstevens715 Jan 31 '12 at 00:51
  • @kstevens715 - It sounds like you need help, even if its a somebody's kid that is technical. I assume you are being paid at least a 5 figure income, if I was told to get a battery, it would cost about $10 for my employeer(35% of my hourly wage). – Ramhound Jan 31 '12 at 12:53