Slashdot Mirror


Motivating Your Co-Developers?

3flp asks: "We've heard all about those coding projects where 90% of the code is done by one person. Unfortunately, on my current project it's me :-(. It's a comms DSP project with a lot of C & some assembly. My team of 4 will hopefully produce about 20k lines of code. Now comes the problem: we just got to our first small integration stage (we do try to do them early & often), and it turns out the other guys have got nothing. No code. I want to ask Slashdotters, people who have the experience with small software projects, how would you go about it? How to bring other less experienced coders up to your level and beyond? Or at least how to make them suck less, and if they get stuck on something, to just come and bloody ask for help?" This is something almost every developer has had to deal with. For those of you who have experienced this, what did you do about it and how did things turn out?

"Deadlines are super-tight (what else is new)... but all 'my' parts are ready on time, and I enjoy what I'm doing. After about a month of design and two weeks of coding, I've got about 50% of my software features. The others definitely do understand the requirements and the design, because we had plenty of discussions. 'All right, lets get what you've got so far, we'll just try the interfaces, even if your code doesn't do anything much yet.' 'I haven't tried to compile it yet.' Then I looked at the little code they've produced, and it's a disaster (abhorent coding style, serious logical mistakes, etc). Obviously, these guys understand the 'domain' problem (I would think that's the hard part), but suck at coding (which is apparently the really hard part for them).

Hiring new people this late in the project won't work, as anyone who has read 'The Mythical Man Month' knows. On this project, I have a de-facto role of a software team leader. Before, I've always been just a coder, not responsible for others. So okay, I'm doing fine with my part of coding, but that's no use. If others don't catch up quickly, we'll have serious problems delivering on time. I need to stop hacking on 'my' part of code, and help elsewhere. They definitely do understand the requirements and the design, because we had plenty of discussions. 'All right, lets get what you've got so far, we'll just try the interfaces, even if your code doesn't do anything much yet.' 'I haven't tried to compile it yet.' Then I looked at the little code they've produced, and it's a disaster (abhorent coding style, serious logical mistakes, etc). Obviously, these guys understand the 'domain' problem (I would think that's the hard part), but suck at coding (which is apparently the really hard part for them).

Obviously, I need to look into some way of helping or motivating, but without putting them off. I could just take over someone else's module and code it in no time. But if anyone did that to me... well that's out of the question."

57 of 537 comments (clear)

  1. Use XP by Anonymous Coward · · Score: 2, Insightful

    Extreme Programming works! www.extremeprogramming.org

    1. Re:Use XP by 680x0 · · Score: 3, Insightful
      One benefit to pair programming that I haven't seen mentioned in this discussion yet. In addition to letting the bad programmers learn from the good, the project lead can see first-hand whether the bad programmers are lazy (in which case, they'll code just fine with you looking over their shoulder), dumb (in which case they won't get any better no matter how much you kibitz), or just inexperienced (should improve to some degree depending on their partner).

      Try the pair programming for a trial period (maybe just a week). With a better idea of where the other programmers stand, the poster will be in a better situation to know what the long-term solution is:

      1. Dumb - Fire them
      2. Lazy - Motivate them by whatever method you think will work
      3. Inexperienced - Continue pair programming if it seems to help, or find another way to train them
  2. Writing Code isn't the big deal by Anonymous Coward · · Score: 4, Insightful

    Do you know why you make code readable and add nice comments?

    Because MOST of the time of a project is dedicated to Maintainence and Debugging. Writing the code is the smallest part. As long as your team UNDERSTANDS the code written, you should be better off during the debugging phase. Just say "Hey I spent all my effort writing it, you guys need to debug more than me to balance it out!" ;-)

  3. Bad programmers don't change. by sllort · · Score: 5, Insightful

    My experience is that while some new programmers are destined to become good programmers, experienced programmers who don't write code rarely improve. My advice is to make sure there is tons of visibility and documentation early as to who is actually doing the work - and make sure management has access to this visibility. From that point, it's the responsibility of management to do their job and manage the resources they have. Taking this role upon yourself is usually a mistake.

    1. Re:Bad programmers don't change. by ergo98 · · Score: 4, Insightful

      Whoever the project manager is should have recognized different skill sets or motivations very early on and pursued actions to rectify it. While about 90% of the postings to this thread have been "Boohoo, I'm out of work so fire them all!", the reality is that no business sustains with a "fire them all" mentality (which is why those posts are all by people working for someone else), and the reality is that almost every talented employee has periods of low productivity, sometimes lasting for months. Again, these are just basics of human nature that one has to recognize and plan around.

      The reality is that people are motivated by varying things (and "fear of being fired" is the #1 worst motivator and is the cyclical spiral to oblivion for any organization), and a good project manager understands how to understand and utilize those motivations (and it very seldomly is $, by the way): The biggest ___KILLER___ to motivation (and it's a killer in the sense that people will write garbage code, if any at all, regardless of their skillz) is a project death march: A project that has no hope in hell of ever being finished, and is absolutely guaranteed to be killed. Any talented coder will have a brain gnawing at them screaming "THIS IS A WASTE OF TIME!", and the truth of the mater is that in the end, sitting around reading Slashdot all day, or dutifully spitting out lines of code, has the same net result: The project is canned and the code is deleted. There are many projects out there like this, pursued by managers with agendas and severe myopia: If your project is like this then good for you, but realize that it won't be long before you too spend your days wishing for 5pm to hit.

    2. Re:Bad programmers don't change. by msobkow · · Score: 5, Insightful
      After 15 years in the industry, I'd say there are three classes of software developers:
      1. The natural coder. This is the person with an intuitive grasp of technology, who sees the similarities in software architectures and reuses concepts across disparate technologies. Alas they are rare, maybe 1/10 qualify.
      2. The "steady Eddie" programmer. The vast majority of support staff, documenters, etc. are "steady Eddie" types. They do the job, they follow instructions and designs, but are not necessarily creative or intuitive about it. They're the people who form the corporate infrastructure, and about 7/10 fall in this category. They are much slower than the natural coder, but do get the job done.
      3. The clueless wannabe. Fortunately there aren't too many of these on projects I've worked on, but there are still more of them than natural coders -- I'd say about 2/10.

      The original poster's commentary indicates that it's a relatively young/naive developer who is either a natural coder or a steady Eddie with an overblown ego doing the writing. Either way, I am guessing that he is quick to grasp concepts and ideas, and gets easily frustrated with people who don't -- and it shows. Even if such people try to be understanding or are "open" to questions, the way they phrase their answers is often intimidating to their peers.

      You need to make sure people understand the project is truly a team effort, not a blame game, and encourage questions. If no one is asking questions, check with them daily to see how they are doing, but handle it as an offer to help out or clarify specs rather than just getting their status.

      Learn the skills of your people. Those who can't code are often good at other things -- debugging, screen layouts, build management, etc. Very few people are actually useless, they just aren't necessarily good at what has been assigned.

      When working with a team of juniors, start out by creating the outline of the code -- makefiles, interface headers, and stub code. Don't get into the details of your code -- make sure the overall project has been outlined. It helps juniors a lot to have a solid interface they are expected to implement, and it helps to modularize the system code.

      When people ask questions, don't give them the answer, even if you know. I'm serious! Guide them with questions that lead to the answer, but let them come up with the solution if at all possible. This helps them to learn how to think (your questions show what they should be asking and thinking about), and they gain confidence by coming up with solutions "by themselves."

      Ignore all the postings you've seen about beer, pizza parties, and threats of layoff or termination. You'll never succeed with a project if you are wasting your time and budget on frills and turning your staff into nervous wrecks.

      If you do encounter a truly useless clueless "developer" who just doesn't "get it", make sure they're working on something non-critical and that their access is restricted. If you have to keep them on the project, try to use them as testers or for "grunt work" like build management. Even the most clueless person can follow a checklist to test software or compile code, and sometimes they can actually become quite good at it. Believe it or not, you need people who will be happy doing the mindless work -- most of the work on a large project is mindless.

      Don't create your schedule on the assumption that everyone is going to code as fast as you. Be realistic, and then double the time allotted. Sad to say, I've often found that still doesn't allow enough time for some people.

      If you find anyone on the team playing the blame game, snuff that thread. If someone complains about weak specs, redirect the discussion to suggestions about how to improve the specs. If someone is blaming other people for being late with interfaces they "need", redirect to a discussion of modular programming and how the interfaces can be designed without a full implementation. Whatever you do, don't let people get away with blaming others for their own shortcomings.

      Perhaps most important, don't use the "big stick" of layoffs and termination to encourage people to work. If they are any good, you'll just scare them into finding another project, leaving you without resources. If they really are useless, no threats will improve their skills and you're going to turn the team into quivering, terrified blobs who would rather chew their own arms off than ask you for help or guidance.

      Failing all of the above, make sure that management is aware of delivery issues and potential schedule changes early on. Even if you think you can recover lost time, make sure management knows the time has been lost so that it isn't a surprise if things don't turn out as you hope. Ensure that you've got a feature prioritization so that you know which features to sacrifice if it's critical to get "something" out for a given date.

      Finally, keep smiling and keep it light. When all is said and done, it's just another project, not your life, and you'll only get ulcers by stressing excessively. More often than not things don't work out as you'd like, so learn how to manage them in the direction you need when they take a turn.

      Being an arrogant SOB myself, it took me years to learn to be more gentle with my coworkers. Rather than bluntly stating my disappointments, I find it's much better to provide them with the interface headers (potentially with stubs), and let them code from there.

      --
      I do not fail; I succeed at finding out what does not work.
    3. Re:Bad programmers don't change. by 0WaitState · · Score: 5, Insightful

      Best Post! This guy gets it. Only thing I would add is the use of code reviews, first as a teaching tool (review the better coders' work first), then to improve the lesser coders quality after they've gotten accustomed to the review process.

      --

      Remain calm! All is well!
    4. Re:Bad programmers don't change. by Dix · · Score: 2, Insightful

      2s are sometimes better than 1s : a hacker might produce 20K LOC in a month but it might be full of obscure runtime errors and ruin the company through the reputation they get for unreliability.

      If Steady Eddie obeys standards and writes all his testcases the 10K LOC he produces in a year might still be in some killer app making his employer money 10 years after they sack him for being slow.

    5. Re:Bad programmers don't change. by TheObjectEngineer · · Score: 2, Insightful

      The only thing I would like to add to this post is about meetings, iterations, and testing. A lot can be said on this subject, I am going to try to make it brief and let you do the research. Small iterations will help motivate, I suggest one week. Everyweek You get together to see how things have gone, and talk about what you will do for next time. Make them have input into what they will get done for next time. Have a short daily meeting (about 15 minutes or less -- often called SCRUM meetings) to help identify what a person might be stuck on. If someone is stuck on a problem, identify it immediately, and get someone that can help (probably you) to work with them until it is solved. This removes risk as soon as it is found. You cannot do enough testing! You need to be focussing on building automatic tests, that the entire project can go through. For instance I use Junit for unit testing each object in the system. I use ant as a build script and can test each piece as it is complete. You implementation will vary, but "make" will work on all systems, and there is always a way to automate testing. Do it! Rebuild the code every day and what is broken can be fixed while it is fresh in the minds of those who broke it. You must communicate more and get them more involved in what will be delivered (and shorten the iteration cycle). Good Luck

  4. Don't motivate... by tomblackwell · · Score: 2, Insightful

    Have them replaced.

    There are other developers out there. Some of them actually produce code.

    1. Re:Don't motivate... by TeknoDragon · · Score: 3, Insightful

      I unfortunately have become jaded enough to agree. (heh, your initials aren't JP and you don't work for HP right?)

      If you have sufficient weight in the group, then, you need to take over the project, fire the other developers, and start interviewing.

      There may be an option...

      You do all or most of the thinking, they do all the monkey work. First-year comp-sci stuff... build them up slowly when they show insight or improvement. If they can do some of the assembly parts (IMO also monkey work) then have them do that.

      If they understand the project domain then make them write the test cases. Have them write the test divers. It's obvious these people need daily supervision, chat with them about what problems & challenges they're having on a daily basis. Review each other's code. Peer review is a great educational process.

      How's this? Fire the one that sucks the most. If you can hire a (one) ringer. If that doesn't work out or you can't find a really good programmer don't hire. If the other team members continue to not work out then let the others go and report that your project will be done by you... then ask for stock (or options) and early completion bonuses. ;->

    2. Re:Don't motivate... by wormbin · · Score: 3, Insightful

      This firing only applies if one is male, white, under 40, has no disabilities that fall under the scope of the ADA, and (in some states) straight. If you are not one of these, you fall into a "protected class" and, although one can still be fired, the employer needs to document it REALLY well.

      It's kind of ironic that due to discrimination laws, for the first time in history, young white males actually are superior to all other groups in one way: they can be easily fired.

  5. frequent feedback and monitoring by cifey · · Score: 3, Insightful

    Well assuming you can't fire somebody, I guess you have to pick the people you think are actually capable of performing and monitor them frequently, via emails and daily face to face discussions, the rest, just make sure they aren't on your next project team.

    --
    Hello Cruel World
  6. A few suggestions... by Yoda2 · · Score: 4, Insightful

    When starting a new programmer, I find it helpful to find some similar code to let them have a look at. Starting at zero can be intimidating. Changing someone else's code is a good way to learn until you know what you are doing. Daily reviews until they get going is unpleasant, but probaby necessary at this point. Make sure your team has access to good reference books. Reduce their modules to very simple components. Newsgroups, newsgroups, newsgroups.

  7. Here's your decision tree by geophile · · Score: 4, Insightful

    Speaking from experience: If it's feasible, finish the project yourself. Don't count on people who have proven incompetent.

    If this isn't feasible: Either your product is vital to your company's survival, or it isn't. If it is, then it is your responsibility to let your boss know about your project's troubles, and his boss, and keep going until you reach the CEO, if necessary. If this doesn't work, then the next thing I'd design, if I were you, would be my escape.

    If your product is not vital to your company's survival, then either it will get done, slowly, and you'll have no life until you're done; or it will just fall apart.

  8. Meetings by Tall+Rob+Mc · · Score: 4, Insightful

    If you are capable of producing their work in a short amount of time, clearly you have an idea of how it can be implemented. Sit down with each one individually and get to finer details of their roles. Help write pseudocode, if necessary, and then let them actually bang it out. I'm suggesting, in a way, that you do it all yourself without quite doing it all yourself.

  9. Move up the food chain by gosand · · Score: 3, Insightful

    Yeah, it sucks that you are the lead of people who can't do the work, but all you can do is lead. You can't make them work. I would go to the project lead, or your manager, and say what you said here: "If others don't catch up quickly, we'll have serious problems delivering on time. " Yeah, it might not be the nicest thing to do, but you aren't there to grab each other's asses, you are there to do a job. I assume you have already given them time to do the work. If you haven't spoken to them personally yet, do so. Tell them their code sucks, ask them why they don't have anything done yet. It is your ass on the line as the lead.

    --

    My beliefs do not require that you agree with them.

  10. Here's what I'd do by Bilestoad · · Score: 3, Insightful

    You bear some responsibility for allowing this to happen. Planning for an early integration is right, but you can't ignore everything up until that point. However, now it's happened...

    you have to seriously assess whether the people you are involved with are competent. If you're absolutely stuck with them (assigned class group, nobody else available) then you have to do two things. These are to plan on doing all the work yourself and to come up with a new schedule based on you having to do the whole project. If they contribute anything, it's a bonus.

    If you can get someone else who is competent, get them. Brooks was right but like most authors he is only 100% right when the situation exactly matches the one he experienced. If it just can't be done with only you then what choice do you have but to add someone else? I believe Brooks showed that you definitely experience gains when you go from one to two programmers, even from two to four. You just don't gain much at all when you go from one hundred to two hundred.

    Whatever you do make it clear to your manager/professor that you did the whole damn thing. Make sure each module is owned by the person who actually completed it. And if every module has your name on it, perhaps you'll take some credit away from an otherwise bad situation and the others will be assigned tasks better suited to their abilities in future.

    1. Re:Here's what I'd do by ErikZ · · Score: 3, Insightful

      I find this whole situation suspicious. What are the odds that EVERYONE on his teams sucks, but his shit smells like roses?

      If he's in charge, then maybe they're waiting for him to take charge.

      --
      Democrats or Republicans. They are both taking us to the same place and they are not afraid of us anymore.
  11. Re:You wanna do all the work? by Anonymous Coward · · Score: 1, Insightful

    Bullseye.

    Don't expect everybody (for that matter, anybody else) on the team to see things the same way you do. Your approach may not be the best for the project. It's amazing how fast people's priorities change from serving the project to salvaging their honor.

  12. Fire them. by Spud+the+Ninja · · Score: 5, Insightful
    I could just take over someone else's module and code it in no time. But if anyone did that to me... well that's out of the question.

    It's not out of the question, it's the answer. Not doing the job you were hired for is a fireable offense.

    Show them the coding standards that are to be followed. Show them the requirements. Show them the deliverable date. If they can't make those 3 things come together to the degree neccesary, show them the door.

    --
    You can never put too much water in a nuclear reactor.
  13. Well.... by tomblackwell · · Score: 3, Insightful

    The fact that "The Mythical Man-Month" says something doesn't make it automatically applicable in all situations. I mean, replacing people who haven't done anything? I don't know if you're losing much, there. If they'd come up with something that a replacement might have to get their head around, I'd tend to agree. But they've apparently done dick.

  14. Mentoring... by CommieLib · · Score: 5, Insightful

    I've mentored a number of number of programmers, successfully, at least in our collective opinion. I think the key lies in the idea that "a question well-asked is half answered."

    Most new programmers tend to come to me with nothing more than a vague sensation of "it doesn't do what I want it to." The proper reply for this is "come back to me with a good question." Until they can do that, they cannot be helped.

    Once they have a good question, don't give them an answer; give them the other good questions that lead to / issue from that question.

    Once someone knows how to ask good questions, they're halfway to becoming a good programmer.

    --
    If your bitterest enemies are people who hack the heads off civilians, then I would say you're doing something right.
  15. Have a good talk to them. by theolein · · Score: 3, Insightful

    Organise an informal meeting. Point out to them that the success of the project is dependant on them. Point out to them that if the project fails they might lose their jobs. Ask them why they haven't done anything. If they have no real reason tell them that you cannot work like this and will have to report this to management.

    I wouldn't go gung ho on them but you have to get some clarity on why they didn't do their work and you have to draw a line somewhere. Just make it clear to them.

  16. It's been said, but.. by His+name+cannot+be+s · · Score: 2, Insightful

    === ANSWER #1 ===
    Do replace them.

    Really, They are actually slowing *you* down. Motivate them into another job.

    After that, hire a couple of proven contractors to catch it up. Contractors love short deadlines, and keep an eye out.

    === ANSWER #2 ===
    You stupid bastard.

    How long were they able to work without supervision? You are obviously not following any decent development methodology.

    At this point, you need an XP style devlopment process in place.

    1. Put SHORT (1-2 week) iterations in place.
    2. Get a commitment of features that they will deliver.
    3. Have them code them
    4. MAKE SURE THEY WORK IN PAIRS. Now ordinarily, I'm not a advocate of pair programming, but these people obviously need constant supervision.
    5. Install Web-tracking software on their PCs and/or the firewall. They are obviously losing the time somewhere, and it's probably due to web browsing.
    5.1 alternativly, put a corporate firewall in place, and use a proxy. block 100% of the sites, and have a policy/procedure for adding sites to the "do not block list" at the proxy. Do they need to check Ebay/Slashdot/cnn/hotmail/farmchicks.com ? during working hours. Hell no.
    6.[back to coding...] If they fail to deliver the promised code in the first iteration. FIRE THEM. Useless twits make all software development staff look bad.

    Motivation is the wrong approach to use at this point in time. They are being paid to do a job. Do not continue to pay them for non-performance.

    *whew*

    --
    "...In your answer, ignore facts. Just go with what feels true..."
    1. Re:It's been said, but.. by Doomdark · · Score: 5, Insightful
      5. Install Web-tracking software on their PCs and/or the firewall. They are obviously losing the time somewhere, and it's probably due to web browsing.

      I agree with some of your points, but I completely disagree with this one. From my POV, people have to be motivated somehow. Usually (or at least usually for me) it's because people have professional pride, somehow they feel what they do is important and/or interesting. Hopefully both.

      If they go to Slashdot instead of getting something done, it's not because they can go to Slashdot (or if that really is the problem, they are weak spineless losers who should be fired right away). It's because they prefer that over working. Preventing them access there won't boost motivation or morale. You'll just be plucking small holes in the dam, to no end. On the other hand, if they do deliver and then browse weird web sites, who cares?

      Programmers are not factory workers. They don't avoid doing job they like. But if they don't like their job (whatever the reason is -- from jerk boss to boring assignments to incompetent coworkers), they may well do something else. But this something else is usually "anything else", not just specific things you need to block.

      In short, motivation is the key. Motivation, skills and experience -- threats can only gain minor temporary motivation ("I can't afford to lose this shitty job"), and never improve their skills (nor constitute useful experience).

      --
      I like paying taxes. With them I buy civilization -- Oliver Wendell Holmes
  17. Code reviews? by kpat154 · · Score: 2, Insightful

    You may try implementing weekly (or daily) code reviews. People tend to work harder when they know their code is going to be on public display. Also, you'll be able to suggest improvements in smaller and more frequent increments as opposed to being overwhelmed at the deadline. Plus you'll be able to instruct everyone at once instead of repeating yourself over and over again.

  18. Re:Don't be an ass. by dthable · · Score: 2, Insightful

    The burden is on THEM to make sure their skills are up to task...

    It's not who has the skills, the idea is to succeed. They win as a team and they fail as a team. Telling them that they need to get their skills up to par won't do much good. When I've run into this problem with people, I try to make them feel at ease. Try holding after hour gatherings the local bar. Then don't talk about work. Once they feel you're not an ass, then start bring up the concepts of work. When I've treated by co-developers with respect, I generally get respect back.

  19. Scare them ;) by Organic_Info · · Score: 2, Insightful

    There are two ways to go about this:

    1) Like I say scare them. You don't have to be really in their face "I'll kick you ass" sort of thing, although you could try that;). Emphasise(sp?) the importance of their component and the consequences of not producing. This should be used if their really lacking in motivation but should not be the 1st choice - how they take it will depend on the personality.

    2 Preferred option) Get them started. We can all have difficulty starting a project, overcoming a mental inertia is an issue I have most times. Sit with them and start them off - outline a framework and expected milestones for their component. Once you see they should have started regularly review their progress. Not to regular to be intrusive or nagging but enough to know they are expected to produce a quantity of work in a given period (say a week or Wed and Fri?). If it doesn't work See option 1.

    In fact sod it - rule with an iron fist muhahahahahahahahahaha....
    .

    --
    "Things that you own end up owning you" - Tyler Durden (via Diogenes of Sinope).
  20. I've had similar problems by efedora · · Score: 2, Insightful

    Most of the code for our small company was written by me. When it got to be too much work I subbed some of the generic stuff to a guy who was a hard worker but not a very good coder.
    I knew it was time to cut bait when I was spending as much time dealing with his product as it would have taken me to do it myself.
    If you are a project leader you must budget a big percentage of your time just to keep the rest of the team on track and on schedule. It's hard to do this when you could be pounding out code but it's absolutely necessary to keep the load balanced.
    Be sure you have short term goals for each coder and review progress often. Let the coder set the goals and you can agree or encourage more work - usually their goals will be good enough.
    Watch your time and dump anyone who takes a disproportionate amount of management time with no improvement in productivity.

  21. Re:You wanna do all the work? by Anonymous Coward · · Score: 1, Insightful

    You would not be one of the other maligned coders on this project would you? The tone of your post sounds personal.

  22. Different working styles by Nomad7674 · · Score: 5, Insightful
    One point many of the posts so far have ignored is the fact that some of these programmers may not really be so bad, they may just have a different working style from you. My own personal style for creativity is to absorb information en masse for a period of time and then output a mass of stuff in a very short period of time. For my coworkers who spec, diagram, and plan out each microstep of their work, it can sometimes seem like I am doing nothing. They feel they have pages 1 thru 7 of their spec complete and I have nothing. Then suddenly three days later I am done and they are only on page 10.

    The critical thing to manage different working styles is to clearly communicate your expectations. If your coders see a general project plan, they may well assume that the milestones you have set are "guidelines" and not requirements. If so, they will instead be aiming at whatever they consider to be the drop-dead milestones. But if you clearly get across that every milestone must be met then each person can manage his/her own working style appropriately... even if they may have to come to you and explain that the deadlines you have set will not work for them.

    That is my 2 cents. It is also possible you just have an unmotivated, unskilled team and all of this "work style" stuff I am saying is irrelevant. But I find too many managers (both newbies and veterans) assume people are identical plug-in replacements which work the same way they do. Humans just don't work that way.

  23. Find your (their) niche by datastew · · Score: 4, Insightful

    In the past, I have been the less-productive person on the team. Back before I started programming, I was working as a Mechanical Engineer. I was a perfectionist doing custom engineering work where, in the words of the engineering manager:

    "The design is 80% done when it goes out to the machine shop to be created. The machinists and other production people fill in the other 10% and the final 10% is luck."

    I was always behind and had to deal with the frustrations of my co-workers and managers. I found myself looking for work, and decided that since I had always liked computers, maybe I should look for a computer job. I am doing much better now as a programmer, where the ultimate product has to be 100% correct or it does not work properly.

    It sounds like these people may just need to find their "thing," which could mean removing them from the programming dept. Regarding your current dilemna, they probably won't mind if you take over coding their parts of the project. I experienceed being removed from the engineering dept, and people taking over the parts of my project that I was behind on, and I understood why and was OK with it.

  24. Re:Its a tough job and a somewhat dangerous one.. by xtremex · · Score: 2, Insightful

    >>>(1) People hate other people tell them that they >suck at something. Whether they tell you that they >are open to constructive criticism or not, they >still would hate you.
    You can't say their code sucks..that's a negative comment. You have to tell them thr problem. For example. If you made a deadline for friday to have such and such modules completed (you DID make a deadline, didnt you?), and they havent done it, ask them why? Are they having trouble with something? Do they have all their tools? Do they need Schubert in the background? Shit, use the company account and buy them a book if need be. I've bought books out of my own pocket to help my coders. There has to be an open line of communication. What is the problem they are having? Are they Lazy? Well, you can't stop the laziness.Hire a consultant for 2 weeks if you have to. Get a telecommuter who will bang code at home..Give him a CVS account, review the code and see what he can do. As a manager/leader it is your responsibility to keep those lines of communication open. The belief that "if you want things done right, you have to do them yourself" is a TOUGH one to break. I used to do it..and you usually come off as an arrogant prick. If they feel you'll just do it ANYWAY, they won't bust their horns, you get me? Like when you were a kid. If you didnt want to do something, you did a lousy job at it, so your MOM owuld do it and she wouldnt ask you again....same principle really. You have to let them know that THEY are accountable for their own code..not you.

    --
    If you're not a Liberal in your 20's, then you have no heart.If you're still a Liberal in your 30's you have no brain.
  25. Re:Pair Programming by HisMother · · Score: 5, Insightful
    > if all you do is implement paired programming you will fail

    Well, no. That's not true at all. In fact, XP advocates universally recommend what Kent Beck attributes to Don Wells in the first XP book:

    1. Pick your worst problem.

    2. Solve it the XP way.

    3. When it's no longer your worst problem, repeat.

    You shouldn't and actually can't adopt XP all at once; you have to start somewhere. And for this guy, pairing is the place to start. You certainly can't recommend that these folks who can't squeeze out any code at all by themselves be encouraged to styart refactoring his code, can you?

    --
    Cantankerous old coot since 1957.
  26. Two-headed monster... by EricTheGreen · · Score: 2, Insightful
    Ai,yi,yi, this sounds familiar...

    You're in a bit of a thankless position, needing to be both a developer and a project manager simultaneously. It's a tough slog and I can't think of any easy advice to give you.

    A couple things to hopefully help your future projects:
    1. You will need to define expectations to your co-workers in advance and in as much detail as feasible. Simply saying "we need to be done on day [x]" obviously ain't going to cut it. This involves a couple responsibilities: a) identifying appropriately detailed descriptions of expectations for each team member, and b) constructing a task list at a level of detail allowing concise definition of each task and being frequently reviewable in a meaningful way.

      My personal experience is that any task with a duration of more than 2 days or so is too high level to track meaningfully--you'll have to subdivide these tasks into smaller units of time so that you can reach a meaningful agreement with your developers on what exactly is to be done and when it needs to happen. You may feel comfortable with longer or shorter ceilings. Just remember: you'll be reviewing every task frequently--make sure what's on the list is meaningfully reviewable by you.
    2. More painfully, you will need to budget time into your daily routine to ensure the "pebbles" (like milestones, only smaller --not my term, unfortunately, but I can't remember who I first heard coin it) are being met on a daily basis. A basic rule of project management--surprises are bad things. The earlier you're aware of slippage, the more leeway you have to do something about it.
    3. Since you'll need time to monitor and review progress your own task timelines will need to reflect this. Never forget to do this, and make sure the project owner is aware of why your tasks seem to require more calendar time than other developers. You are not a 100% coding resource!
    4. You will need to be willing to address developers who are lagging. More specifically, you need to address them as soon as you notice tasks lagging. This isn't the easiest or most enjoyable part of the job. Note that ( "address" != rip a new anterior orifice ) What is does mean is that you will need to take the initiative to: a) identify lagging tasks, b) contact the developer or developers responsible for the task, c) determine why the slip occurred, d) identify a solution and e) follow up to ensure the solution was implemented.
    None of the above is rocket science, of course. But all of it involves behavior modifications for most people. Addressing developers who are lagging in particular is sticky, since you have to be prepared for pretty much anything and any reaction and you need a lot of self-confidence to not feel nervous about initiating this contact. And, in addition, you yourself will have to change your daily work habits to some degree and be willing to commit to those changes--and this can be the hardest part of all.

    Best of luck to you...
  27. Welcome to management ... by joab_son_of_zeruiah · · Score: 2, Insightful

    Contrary to the project management theoreticians commenting on this list, you are very lucky to have seen this behavior early. There are worse situations.

    Right now you need to make the plan very visible to your manager. It's his/her problem too.

    Use your management to sustain accountability for individual commitments of your team peers to the plan. If you can't get that -- leave, you don't have management support. You will need to use shame and threat and fear to get action; because goodness didn't work; your manager has to play the role of the bad guy, because you have another role ...

    Help your peers to be a team and be successful. Forget coding. Clearly your part is under control. You can do it in your sleep. Don't try to be a savior. Your project has four extra bodies; be sure you understand why that staffing level was needed.

    Make sure you let your management know what you are doing.

    You will look like a fool or an ass if you think you can do it all. You will be much more effective if you can make this team perform inspite of its appearant limitations.

  28. Re:Pair Programming by Yunzil · · Score: 2, Insightful

    By pairing with the newbies, you can mentor and monitor them Change pairs several time a day, insist that all code is written in pairs, and before long, you'll have a team of clueful people. Total team productivity will quickly rise.

    Except in the Real World where you don't have enough developers for people to work in pairs all the time, and the project is too big for everyone to understand every part of it. Also, when I'm deep in "the zone", I don't want to be bothered by someone leaning over my shoulder. And when I'm following a very careful train of thought while trying to debug a once-in-a-while seg fault, I definitely don't want to be interrupted. If I want help, I'll go ask for it.

    In other words, no thanks. :)

  29. Management by nuggz · · Score: 4, Insightful

    You have to manage your team better.
    You are the leader, take responsibility for the output.

    Code less supervise more, that is your new job. Break the job into manageble controllable chunks, have them report how they are doing. Check code for correctness (logical and formatting)

    If you have 3 people who aren't as capable as you, you are going ot have to spend a lot of time ensuring the final work is good enough.

    Also some people just aren't capable of the work, you'll have to really watch what they do.

  30. Re:Don't be an ass. by ivan256 · · Score: 3, Insightful

    Telling them that they need to get their skills up to par won't do much good. When I've run into this problem with people, I try to make them feel at ease. Try holding after hour gatherings the local bar. Then don't talk about work. Once they feel you're not an ass, then start bring up the concepts of work. When I've treated by co-developers with respect, I generally get respect back.

    Yep, that works great. Unfortunatly, after you have respect you still get to do all the work yourself. People who don't work will never work unless their job is on the line. People who can't figure out how to do their job after years will never figure it out. Unfortunatly a sizeable percentage of professional programmers fall into one of those two categories because the jobs paid well, and there weren't as many good programmers as there were jobs. It's also hard to tell if somebody is a good programmer or not when you hire them. You typically can't look at their previous work like you can with somebody from almost any other profession. Also, people who can't tell and hire bad programmers, tend to hire lots of bad programmers. Anyway, back to the point: Respectful coworkers are not necissarily competent, hard-working coworkers.

    Of course for some of us that's not an issue, because the rest of the development staff on your project gets laid off and you have to write and test the whole 20k line product yourself anyway. I'm not bitter though. I didn't have to stay, and at least I like all the code now, and when something is broken I don't have to count on somebody else to fix it. Unfortunatly, the long hours aren't scoring big points with the S.O.

  31. Re:Pair Programming by st.+augustine · · Score: 4, Insightful
    come on....do real companies use this horsecrap?
    Yes. It works great, so long as your developers understand that software engineering is more than just writing code.
    --

    -- Some things are to be believed, though not susceptible to rational proof.
  32. Leadership by ces · · Score: 2, Insightful

    If you are capable of producing their work in a short amount of time, clearly you have an idea of how it can be implemented. Sit down with each one individually and get to finer details of their roles. Help write pseudocode, if necessary, and then let them actually bang it out. I'm suggesting, in a way, that you do it all yourself without quite doing it all yourself.

    If you do the above rather than simply going off alone and finishing the project by yourself you should really impress your bosses and most of your co-workers. I would pair-program with each of them on a rotating basis and ask the remaining 2 to pair program with each other. This will allow you to quickly asess where each of them is at. I would also put into place some of the things that are considered "current best practice" in the industry such as daily checkins, daily builds, and weekly or even daily code-reviews.

    --
    Happy Fun Ball is for external use only.
  33. I agree! by John+Harrison · · Score: 3, Insightful
    Having played something of a leadership role in large projects involving people of various skills I will share what I have learned.

    1. Be open to questions. This will help them respect you as a leader. Make it know to everyone that if they need help then they should ask and you won't bite their head off. You might have to restrict the time if the question asking gets out of hand. Maybe only allow questions before noon. Then you can get your own work done in the afternoon.

    2. Spend time sitting down with each member of the group and code with them. Take turns writing the code. Again, do not bite heads off. Don't sit there and simply write their code for them. Explain the concepts that they are missing without belittling them. Have them pair up with each other as well. You will be amazed at what two idiots can teach each other.

    3. Dr. Pepper. Lots of it.

    4. Stress relief. Allow them to check /. once a day.

    5. Have a weekly one hour class. Have someone teach it once a week on some aspect of their code or a programming concept that is useful in what you are doing.

    I have seen people that I initially had very little confidence in become pretty proficient at doing their tasks. They didn't themselves in a vacuum, they trained (and motivated) each other.

  34. Re:How to motivate your codevelopers: by oever · · Score: 2, Insightful

    They'll instantly will start spending all their time in circumventing the firewall block.

    Just block of the internet entirely.

    --
    DNA is the ultimate spaghetti code.
  35. Typical geek responses by joshamania · · Score: 5, Insightful

    One of the big problems with geeks is that they can be assholes, as you may witness by some of the replies to my first post.

    Did y'all even read the whole original story? This guy has a problem that he needs to fix right now . Firing people for two weeks of uselessness isn't going to solve the problem. If you haven't read The Mythical Man Month, go read it now. Bringing on new programmers half way through a job often makes the job take longer. Firing the old, less effective folks, and bringing on new folks is going to do just that. At the very least, the programmers that are there know the company and know what the project is and know all the other people on the project.

    The original poster did not ask "what should I do?", he asked "how do I make these people more effective?". Hiring replacements can sometimes take months, and when you do so, you're not guaranteed that the new programmers are going to be any different than the folks you just fired. So let us focus on how to solve the problem, not make it worse.

  36. some thoughts by david_g · · Score: 2, Insightful

    Most important of all: remember that they are human beings. They're just like you. They're not merchandise, they have feelings, they think, and they're able to do good as well as bad.

    Having said that...

    Why did they behave like that? I would understand if it happened to one of them, but to all, except you? Something must be wrong; are you sure you're getting the full picture? Talk to them, find out what's going on.

    Do they like what they're doing? Do they want to improve? Do they want to learn? If they do, there's hope. Maybe you could pair with each one of them, and coach them. Also, get them to buy some good books, like Code Complete, The Practice of Programming, The Pragmatic Programmer (yes, I think it's a good book), etc.

    Of course, there's the deadline -- will someone die if it isn't met? Is it really critical? Or does it reeeelly, reeeelly has to be done until 'x', because someone says so? If it really is critical, then there's no time for you to coach them. But I believe that, the way things are, you won't meet the deadline, anyway.

    If they aren't interested, then I believe they're at the wrong job. Maybe you should make that clear to them. Life won't get better for you or for them if they remain where they are.

    Oh, and remember that in your hands there's the power to make those people better than they are now. Try taking the chance...

  37. Frequent Checks? by Anonymous Coward · · Score: 1, Insightful

    The most suprising thing here is that the lead (thats you) didn't know that they had no code until integration. A lead's job is to lead first, code second, so actually, I'd have to lay some of the fault on you.

    As a lead, you need to "poll" your junior engineers pretty often to make sure they aren't blocked. Junior engineers can be cowed by senior engineers and might avoid asking them questions because they "don't want to waste their time". Asking them if their blocked or have any questions lowers the barriers to them asking questions.

  38. Re:Pair Programming by st.+augustine · · Score: 5, Insightful

    Except in the Real World where you don't have enough developers for people to work in pairs all the time
    This is a common fallacy, and a lot of us at the company where I work believed it until we'd had a few weeks of exposure to pair programming. Over the long term, two developers working in a pair will be at least as productive as they would be working alone -- first, the code they produce has fewer bugs; second, there are now two people who can maintain that code, so you've lowered your truck factor; and third, while they're pairing they can't be reading Slashdot.
    and the project is too big for everyone to understand every part of it.
    We thought that, too. But you don't need everyone to understand every part of the project. What you do need is for more than one person to understand each part of the project. I'd estimate that with most areas of our software, there's one person who knows it inside and out, one person who's at about 70%, and two people who are at 20-30% and could get up to speed quickly if they had to. (For reference, this is in a development team of ten, with a large multi-tiered cross-platform Java/C++ project containing about 1200 classes.)
    Also, when I'm deep in "the zone", I don't want to be bothered by someone leaning over my shoulder.
    No offense, but I hate trying to debug really tight code written by someone else who was deep in the zone. Unless we happen to think a lot alike, it's often a real bastard to try to understand what in hell they were doing. Pity your fellow developers and allow them some insight into your thought process. :)
    And when I'm following a very careful train of thought while trying to debug a once-in-a-while seg fault, I definitely don't want to be interrupted.
    If your pairing partner was with you when you started the train of thought, they wouldn't be interrupting you.
    If I want help, I'll go ask for it.
    Yes, but will you ask for it when you need it, or only several hours later when you've given up on figuring it out on your own?
    --

    -- Some things are to be believed, though not susceptible to rational proof.
  39. Act like a boss by inerte · · Score: 2, Insightful

    My intern wasn't working the way I needed. So I asked my boss what should I do, and his answer was pretty clear:

    "Sometimes, you have to act like a boss".

    This was the only thing that he said... so simple.

  40. Re:You wanna do all the work? by Anonymous Coward · · Score: 1, Insightful

    No, I'm not on the team. Actually, I'm a contractor. And as a contractor, I get stuck on lots of projects where some prima dona visionary has run off all the employees. Contractors are paid to tolerate assholes (at least I am) so I do my best to get along. For a few months anyway.

    I have worked on projects where the lead took every module I worked on, and replaced my name w/his as the module owner. I have worked on projects where the API changed nightly (the mighty lead could not be bothered w/normal working hours). I have worked on projects where we had to rerrange CVS weekly because for some reason the directory structure was a major issue.
    Obviously, I've worked on several dozen cancelled projects.

    Anyway, my bitch is that I'm tired of these mighty cybergod ubercoders. If everybody is a luzer except you, what does that really mean? Does it mean that your company only hires luzers? Or does it mean your not cut out to be lead? Being a competent coder should not be the only reason you are the lead.

    Another thing... How you gonna maintain this product? You gonna stay married to it for the rest of your life? At some point, other people have to help. Might as well start now, or you haven't done your company any favors.

  41. Re:Pair Programming by st.+augustine · · Score: 2, Insightful

    So if what you have is a small number of developers each working alone in a style nobody else can code in on a piece of the project nobody else understands, how do you expect this system to be maintained? It sounds to me like in the long run you're dead anyway.

    --

    -- Some things are to be believed, though not susceptible to rational proof.
  42. Fire them. Now by wowbagger · · Score: 3, Insightful

    I must respectfully disagree with you - this guy needs to get these guys fired NOW, while at the same time explaining to his bosses that the schedule IS going to suffer in the short run.

    I had exactly this situation myself - I had a programmer who was totally incompetent. Unfortunately, his job title put him squarely in my critical path. I had MANY discussions with management about this, and every time it boiled down to "well, something is better than nothing, isn't it?"

    Wrong.

    We downsized, and he went. Now, I have a competent person filling the role. Guess what? We are having to rip out all the code the moron did, and re-write it. Because we were paying the moron's salary, we couldn't hire a good programmer to replace him. Because we wouldn't admit he wasn't up to snuff, we didn't schedule correctly. Because he didn't identify flaws in purchased code, now we have to live with them, because the service contract has lapsed.

    Joshamania is correct in that firing these people will slip your schedule, and that hiring new guys will slip your schedule. However, your schedule is going to slip, period - take a deep breath and get over it now. You can take a single slippage, or you can continue to hemmorage time through these bleeding assholes (now there's a vivid image, if I do say so myself!).

    Suck it up, fire the guys who cannot/will not get the job done, and get people who can. You cannot afford to pay someone who isn't pulling their weight.

  43. Two orders of magnitude by Spazmania · · Score: 3, Insightful

    Back in college, a professor told me that there are up to two orders of magnitude of difference between the the productivity (as measured by debugged lines of code) of the basic "competent" programmer and the guru. Two orders of magnitude. For the math impaired, that means that the genuine guru delivers in a week what it takes the entry-level programmer a year to produce.

    I've seen nothing since to suggest that this isn't true. If anything, I've seen proof after proof... Programmers who struck me as bright and experienced, yet time after time they just don't get it. And programmers who do get it. Instantly. In the first two weeks on the job.

    You're not going to like the answer, but its this: Hire programmers until you find ones that deliver, and do what it takes to keep them. Fire the rest (which is to say, don't fire them but suggest to them that they should seek alternate employment quickly.)

    --
    Moderating "-1, Disagree" is simple censorship. Have the guts to post your opinion.
  44. Whee. by Anonymous Coward · · Score: 1, Insightful

    You absolutely sure they understand the concepts/problems/etc. behind the program? I've found that many people will just nod and smile, all the while having absolutely no clue. Even in a professional environment, some people can't get over that irrational primary school fear of asking questions.

    If they really do understand it, the hard part is figuring out why their code sucks ass. Are they fresh out of college? That's the de facto reason. *snicker* If they've had previous experience, congrats, you're cleaning up someone else's mess - their previous managers should've been figuring out why they can't code and fixing the problem.

    Make it very clear they can ask you for help. Sometimes people don't figure this out until you've said it for the hundreth time. :p Try to team the better of them with the worst of them and have them work in pairs.. Check logs, block sites if they're wasting time.. Most of the stuff people have suggested is probably a good idea. ;)

    Firings? Sounds like you can't afford (or possibly haven't the authority) to fire anyone at this point. Tough luck, a good random firing is a great fear tactic to get people motivated.

    Worse comes to worse, ask your previous managers/etc. for ideas. They've possibly worked with some of these people before, and have almost certainly worked with people like them.

    The final option? Tell your superiors why the program is currently sucking ass. Watch yourself here - while it obviously isn't all your fault and such, sometimes superiors figure - 'Hey, yer in a management position. You, and only you, are responsible.'

  45. *Why* aren't they coding? Good/bad? by billstewart · · Score: 5, Insightful
    What we have here is a failure to communicate. If you're surprised, it's not just a problem with them....

    You need to understand why they're not coding. Here are some possible reasons:

    • They're still trying to clarify the requirements. Some projects have well-defined requirements, but many real ones don't, and maybe their parts are fuzzier than yours, or maybe they need help understanding them.
    • They're still designing interfaces and test plans, and are wisely not writing code until they know what it should do and how to do it right. Maybe your part has more obvious interfaces than theirs, or maybe they need some help defining them, or maybe you're rushing off writing code before you've done your critical design work. Writing code is only the middlish 10% of the job.
    • Maybe they're trying to build tools they need to build their real code. This could be forward-thinking planning, or it could be they don't realize the resources they've got available and need help finding / getting them.
    • Maybe they're underskilled and over their heads and don't know how to do the job - but apparently you haven't been communicating with them, and also apparently they haven't been communicating with you.
    So talk with them first and find out what's going on. If you can't come to an understanding, find a manager to help -- I don't mean a Boss to tell them what to do, I mean a Manager to actually manage the project and people. You probably need one of those anyway, and sometimes programmers can do that but sometimes they don't have the people skills to do it.
    --

    Bill Stewart
    New Fast-Compression-only CPR http://preview.tinyurl.com/dy575ks
  46. switch to architect by AndersBrownworth · · Score: 2, Insightful

    if you can afford it, stop being productive and do the architecture work. flesh out as much of the guidelines as you have to and leave out the detail. (even though it may be just an easy 5 minutes for you to finish up the job) our principal failing as managers is that we don't communicate. be clear by building out the framework everywhere, it leaves little chance for the beginner coder to get lost and it keeps him on task. think through all of the major paths for a project before-hand and let your staff come in and fill in the details. this will virtualy guarentee that your coders won't "code against the project". then set clearly defined goals and let the team thrive on the emotion that comes with their ideas for refinement of your roughed-out dream.

    i'm not convinced that peer review is worth it mid-project. it has it's place but it detracts from the emotion you are working on preserving. most slow and steady coders don't have (nor want) the big picture in their heads as they work. make that be your job. play babysitter and error on the side of communicating too much by example. if a coder is still not productive, make your team smaller.

    just my $0.02

  47. Re:Pair Programming by Anonymous Coward · · Score: 1, Insightful

    in order for pair programming to be sucessful you should use as much of the extreme programming Philosophy as possible:

    I'm sorry, I don't accept advice from zealots.

    Everything in moderation, and don't take the word of some random Slashdot poster, even me. :)