|Motivating a programmer|
want to avoid recently hired becoming recently fired
I recently hired a fulltime PHP programmer. Things seem okay, apart from the fact that the work takes far longer than it should. I program in PHP myself so I know how long it should take, and this isn't just half the speed, it is closer to a tenth of the speed.
A simple task such as getting information from the database, outputting it and allowing the user to select given rows takes days instead of hours.
I'm looking for advice on how to get her to program faster.
I've tried subtly reminding her that every command typed is one fewer command left to type (my personal top motivation).
I've told her it's always important to find the fastest reliable route and not the fanciest over-engineered route.
I've tried letting her get on with things at her own pace - but things will drag for days.
I've tried micromanaging programming, bit by bit, as much as it pains me and wastes my time.
I've set her deadlines and they are just not met.
I've spent time discussing and explaining the logic and methods which should be used in each task.
...all to no avail. Nothing seems to improve the all-important project progress per minute.
I might add that the work is nothing particularly taxing. I've had to hold back the taxing work pending this simple stuff actually being done reliably. It's all basic PHP & MySQL inserts, selects, outputs and updates with HTML output - nothing which you don't get from the first chapter of any given PHP book.
Do you know for a fact that she's actually competant enough to meet your expectations? If not, no amount of motivation will overcome inability.
When I ask what method she will use, she suggests the right method. When I tested her previously on parts of the language, she came back with the right answers. Her completed work is of the right quality...
...it's just really slow. It can't be just that she doesn't drink coffee!
I have hired and fired some editors in the last years but this time, before we sign:
- their tasks will be clearly defined
- the measurement method is perfectly described
- the performance rates are written black over white
It's a time consuming task (define parameters, measures and so on) but I hope it ends with lazy (too perfectionist) editors.
Lexur - that sounds great for someone on a per-task basis, but I can't see it working for a permenant full-time appointment on a monthly salary.
If you're already locked-in to a monthly salary and that salary is near your practical limit, then this suggestion may not help, but a bonus paid only for on-time work may be a solution.
Instead of giving the next (or next two) raises, increase the bonus, so that your total expense is the same either way with 99% on-time delivery.
Other than that, an honest performance appraisal would seem to be in order. That "it doesn't take twice as long, but rather ten times as long" bit seems like a powerful point to make... The rest of your evaluation posted here seems like a good way to soften the blow if she's the sensitive type, but really, "Your implementation methods are correct, your code is good, but you're far too slow and we need to fix it right away" is certainly better than "You're fired!"
Be honest, be firm, ask for feedback on possible causes/problems. That's fair.
Not clear from the post... Is this employee in your office, or working remotely?
jdMorgan, I already have provision for a bonus, but at this rate she won't last long enough to get it. My suspicion is that she finds it hard to give 100% attention to writing code. Either that or she is finding it hard to conceptualise the entire logic she wants to build and is wasting time thinking things through more than once.
I keep my attention up by listening to the right type of music, drinking strong black coffee with coca-cola, and keeping my hours short (i.e. 40h / week programming). Unfortunately, with the exception of short hours which I already enforce for her, the other things aren't something an employer can influence.
At present she is working from home but I've got the contractural right to require her to work from here. However, I don't fancy making the space and other provisions for that on a regular basis as I don't have proper offices until two months time.
I would actually say it sounds like you have to get rid of them. You can't afford to carry someone who doesn't produce the standard of work you require in the time you require it.
I've gone through this, I had a ASP developer who was taking days doing the most simple of tasks and it simply was starting to take the business down. Best thing was to cut the cord.
bateman_ap, that's the answer I was thinking of, but I was hoping that someone here might have some better ideas to shake things up first.
I sent out new job adverts today, but I'm in the position to hire more programmers anyway so it doesn't necessarily mean she's being replaced.
do you know that she's competent to work from home?
maybe there are distractions etc.
I would suggest bringing her to the office for a month.. If that doesn't help you may need to let her go.
oziman, good point, I have not visited her home so the situation may not be entirely suited to maximum concentration. I'll see what I can do on that front, maybe try to move the proper offices forward.
Vincevince, I told you it was a time consuming task.
I don't konw the tasks your programmer should develop (and, belive me, I don't really care) but I think you should take a pen and write
- what is the task this employee must do
- what is the reasonable amount of work she must do
- what is the method to measure these amount of product; this is the main point. Let's supose you can't be on your business for two weeks and someone must do your job for a few days (at least be over the employee/s). There's no any way to measure the work? Maybe lines of code, maybe blocks or tasks or funtions you defined, maybe HTML output pages...
You should think like a company (you are becoming one). If you don't develop any kind of method you will find yourself firing people that could give you better results with clear objectives.
And, of course, do not forget that no one will take care of your business like you do.
[edited by: Lexur at 10:22 am (utc) on June 21, 2007]
Lexur, I'm very interested in your suggestions but I find them very hard to apply to a junior position like this where the basic task is to do all PHP and HTML work which is given to you during your working hours. You say there should be a minimum but to my mind, the question isn't one of beating a minimum but of aiming at the maximum amount of work which can be handled during that day by that programmer.
How do you handle the case where work doesn't meet your measurable specification? Also, do you have any problems with employees feeling that once they've met their target they can slack off for the rest of the day?
get her to the office for a week.
will work like a charm.
+1 to getting her in the office for a month. I use to work from home and it can get quite distracting when you are not use to. TV, video games, longer lunches, working on something else, checking emails and ebay ...
I find myself a lot more productive when I work from the office.
Well, devil's advocate . . . as someone who contracts from home the environment *should* be customized to enhance productivity, not hinder it. In an office situation, she may or may not have the programs or operating environment that is conductive to work, and will have to re-learn ways of doing things.
IMO it's as simple as setting down the law, as you say you know how long it should take. I would simply express it like this: you do good work, but unfortunately I need it in the specified timeframe. If you can't meet deadlines we're going to have to work something else out. Let me know if I need to seek out another programmer.
When you put the decision in their hands, you'd be surprised how much it motivates them.
As a Contractor who's heard and seen it all, I suspect your being taken for a ride. If she's working from home and not meeating deadlines the only solution is to bring her into the office. If she still can't meet deadlines then she needs to be replaced.
One other solution if she is a Junior member of the team is to have a senior developer assist her for a short time, hopfully someone who understands the importance of deadlines and that you trust. This may impress upon her the reasons deadlines are set and need to be kept. It will also give you greater understanding as to why she is so slow.
A technique I used when I was a manager for a restaurant was I started accepting applications/resumes. After I got "quite a few of them", I wrote down names and a brief experience of each one, and their requested salary. Then I held a meeting with the crew I had some "problems with" and allowed them to recommend their replacement. Within a month or so, I ended with a an awesome crew (whether the crew was motivated or replaced ). I did upset a few people, but if your employee is not considerate enough to help you, why would you be considerate towards him/her? You have a business to run, and if you can't run it due to employee's not working, how are you going to make a living?
Do you owe this programmer a favour?
Is she a member of your family, or a really close friend?
If not why are you going so easy? You don't owe this person a living. She isn't programming for you out of the goodness of her heart, she is getting PAID. If she can't do the job you've asked her to do in the time you'd expect it to be done (assuming you are being reasonable), then she can't do her job. End of story. Personally I would not be willing to employ someone who can't so their job.
There are thousands of computer science students out there who could do the kind of programming you want, probably for half the price, AND be grateful for the experience that they can put on their CV. If I was you, I'd remind your programmer of that fact and tell her to get it together. Either she's a professional programmer or she's not.
Whether she can programme or not is irrelevant. As long as she gets the job done well and on time, that's all that should concern you. HOW she does that is her business. I think it's quite simple. She shows you the goods, or you show her the door. I don't think that's harsh, I think that's real life and shielding her from that fact is not helping her. She needs to realise she has to raise her game.
...i think you just need to crack the whip a bit. don't go soft on her either. the worst thing you can is nag at her in drips and drabs. then she'll just think you moan all the time. it's best to get it all over with in one go. call her into a one-on-one meeting and be super firm about it, so it's obvious you're not happy. if her work duly improves then just switch back to your normal relationship, like nothing ever happened, and don't mention it again.
in my experience that is the quickest way of sorting it out and getting them back into a good mood.
|At present she is working from home but I've got the contractural right to require her to work from here. |
That is one thing you should do immediately. You are paying a per-week salary, rather than a per-project fee. Therefore there is nothing that motivates her at home.
Secondly, are your expectations about the work progress realistic? How many lines of correct code does she actually produce per day? I am a professional programmer myself and able to produce between 300 and 800 lines of correct code per day. This rate is nearly independent of the programming language used. What is her current programming lines/day rate?
|I am a professional programmer myself and able to produce between 300 and 800 lines of correct code per day. |
you must be among the most prolific programmers on the planet!
according to your calculations you would have a 10kloc project completed in a month, give or take, with weekends off.
according to cocomoII that would take 3 or 4 people the better part of a year.
even if only one of the three is actually writing code, you're still off by an order of magnitude.
i don't think i could type 800 lines in a day and correct typos, let alone syntax and logic errors.
Hate to be disagreeable . . . but . . . I could meet that demand. Every day would be pretty tiring though. Take into account that a good programmer will have a lot of that saved in reusable subroutines that can be copied and pasted.
I learned to play accordion when I was six. When playing music you directly hear your "typos" and it's a very good training to type error free on a keyboard. Call it typing with rhythm. In the company where I worked fifteen years ago they used to call me the machine gun, because of the continuous noise generated by my keyboard.
And rocknbil is right, if you have programmed long enough you either know almost directly how to attack a specific problem, or there is some piece of reusable code from a former project which fits nicely in.
Inexperienced programmers can lose their time on many places:
- Thinking about how to solve the problem
- Fixing typos
- Deleting and rewriting blocks of code because the previous attempt didn't work out
- Staring out of the window and thinking about other things than the project
The only way to reliably say where the problem with a slow programmer is, is to have here at close distance.
by that logic i produced some dozens or hundreds of KLOC the day i figured out how to install and run (i.e. reuse) wordpress, for example.
before you confuse "reuse" and "produce", think about beer...
"reuse" is using MY code in one way or the other, not the code from some other programmer. I don't trust code from others in my projects general, mainly because there is no guarantee of future support. And often reusing means rewriting to get it fit for the specific application. Routines for sorting/searching/optimizing data are often equal in design, but hardly portable to a new application without changes.
By the way, I don't drink beer, it influences my keyboard rhythm too much ;)
But back to the topic, we are discussing a situation where a programmer is working at a far lower speed than expected. But without a real figure how fast she is producing correct code now, it is difficult to determine if the problem is either with the programmer herself, or with the expectations of who she is working for.
what about the designers who dont have any creative sense at all
what about programmers that count lines of code as if it meant anything?
to me it's like counting an artist's brush strokes.
the only thing that matters is how it works/looks in the end and if it was worth the time it took to get the results you wanted.
If someone's ability to produce is slower than molasses, there's nothing in the world that can motivate them to work faster than they're capable of.
One thing to consider is that meeting goals and production requirements is fine, but depending on the jurisdiction, there's a line drawn legally and tax-wise between independent contractors and employees. Once someone is required to work certain times at a certain location, it's getting into a grey area and might require withholding taxes as for an employee.
Simply having someone in for "training sessions" shouldn't be a problem in either case, and IMHO should be able to show whether it's an actual capability problem or a case of someone just goofing off - or maybe, just maybe, taking and getting paid for more than one job at a time even though supposedly full time for one company (or person).
If it's lack of ability it's one thing, but lack of motivation to get required work done isn't actually lack of motivation, it's lack of being responsible. Someone whose time is distracted by things like family obligations and interruptions should know that they can't agree to put in full time if that's what they're getting paid for and they're not able to be doing the work.