General Question

samusaran's avatar

How to make better software developers out of less-than-average ones?

Asked by samusaran (14points) March 26th, 2012

First, some background information: I’m a software project manager; I’m in no way the best that’s out there. Most important (or so I believe) is that I am just as good as my team is. I’ve been at it for the last 3 years. I’ve worked with a large number of people, both skilled and unskilled.

However, my question is regarding the other 90%. Specifically, I want to know what ways are there to make developers more responsible regarding their work. At this point, i see that my question relates to these types of developer:
1. some, literally, don’t take their work serious enough and don’t invest the proper amount of attention into their tasks; These guys are the ones who’s minds slowly drift away from their work, usually finding themselves unable to explain the delays when we’re nearing the deadline.
2. some, are simple minded, investing way too much time in a dead-end solution, without even considering that there are usually “more than one ways to skin a cat”
3. some are just the oposite, they take a vast number of solutions into consideration, most of the times disregarding a good solution simply because they were unable to make it work the first time they tried it.

Although I’ve met with other situations, It’s usually these 3 types of problems that I’m confronted with. What is worse still, most of the times, some people never actually bother to let me know that they are stuck. I usually have to ask them myself if i want to find out what are they doing.

I don’t consider myself a bad person. Most of the times i try to appreciate even the smallest amount of determination shown by anyone. Even if a guy is late – due to the above – I’m always trying to see past this and get a better look at the reasons. Most of the time (with the exception of the guys at #1) i find that the guy has invested a good ammount of time and work into it, only to fall short of the end-result.

However, I’m often wondering, is there not a better way? Is there anything that I could do so they get their bearings right the next time when they do something? When I started out as a developer, a very good friend of mine recommended me a book “Pragmatic Programmer” that trully enlightened me and i honestly believe that if it were not for that book, I would still be one of the types above. I would gladly buy this book for each one of the guys, but I’m pretty sure that they would never have the determination of going through it. So I’m wondering, what can be done about them? Are there any courses for them to take? Something to drill into their minds so that they start acting like true developers instead of monkey-coders?

Observing members: 0 Composing members: 0

20 Answers

funkdaddy's avatar

Have you tried peer code review?

Every couple of days go through and review all the new code publicly with everyone in the group. Have the person who wrote it explain what they did and then talk about what could have been done better and possibly even how they could have to gotten to the solution more quickly.

It can be humbling for everyone involved, but I think it has a lot of benefits.

1) If you know something is going to be reviewed, you’re going to do a better job initially
2) You know you’ll be able to ask questions if you aren’t sure about something, or better yet ask questions before you fall into category 2 or 3 above.
3) Things end up more uniform between coders and since you eventually have to interact with other folk’s work, this makes that process easier
4) Each person gets to develop their skills based on the knowledge of others in the group

It’s a time investment but you end up with much better code and programmers who are able to develop their skills rather than keeping the same habits.

geeky_mama's avatar

You don’t mention what methodology your development team uses.
Also, it’s hard to provide targeted advice without knowing the sort of end deliverable you’re working on (e.g. is it one integrated solution or a series of stand alone micro-apps..or web pages?)...

I come from a development environment where, while we might parse out functional deliverables to an individual on a team, no one works totally independently because our solution is completely dependent on everyone following rigid coding and testing standards and we use an iterative waterfall variant to do a lot of testing (and automated testing) long before our hand-off to QA (our deadline).

As a PM your greatest influence can be in the structure of the project and many interim deadlines. It’s up to you to build team work and assign teams for peer review (as suggested by @funkdaddy – and I agree heartily. I haven’t ever worked in an environment where peer review or partnering junior & more senior developers was absent..)..

Have you ever heard of SCRUM(development)?
I would highly recommend considering some aspects of SCRUM to improve your interactions with your development team members.

ragingloli's avatar

You could divide the team into smaller groups each with their own controller/manager to keep an eye on them. Also more milestone meetings.

tom_g's avatar

I second SCRUM.

samusaran's avatar

Thank you all for the answers. I realize now that i have previously left some important things out of the question’s text, for fear it will be too hard to read.
So:
1. Code reviews are indeed useful, and as you have already suspected, I’m making heavy use of them these days. However, this project will end in a few months (like all the others), the team members will get reassigned to other projects/tasks/teams and most likely they will revert to their “wild” behavior.
2. Additionally, we (my employer) are using waterfall, agile, RUP and also SCRUM methodologies – even though we (project managers) get to say our point in what methodology will the project be done with, it’s usually not our call.

I can see that your advice to me is to constantly keep an eye out for trouble, and do constant monitoring (via reports/reviews) however, all this will most likely amount to nothing once the guys get reassigned to other project managers that don’t take the time to constantly check on their team.
Believe me when I say it: OLD HABITS REALLY DO DIE HARD!!

What I’m looking for is a way to get the developer into a better attitude, one that will allow him to truly be able to work better by himself. To make him think more; to “force” him into considering multiple solutions without getting himself stuck in an obscure situation.

samusaran's avatar

Alright, so i get it: one way or another, you are all suggesting better control alternatives.
But besides checking/double-checking/triple-checking everyone and everything, is there really no other way?

LostInParadise's avatar

Do you have weekly meetings? They should be brief. Everyone tells how they are progressing and what has been completed. The purpose of these meetings is not to embarrass people, but to assess where things stand. If someone is falling behind, you could suggest getting together with someone else to see what can be done. Ideally, each person should be able to divide assignments into different pieces and estimate the time required to complete each part. Regardless of whether you are using Agile development, completion of a piece of code should include a unit test that can be reviewed. The idea is to catch people who are falling behind long before the deadline approaches.

ragingloli's avatar

The thing is, changing people on a mental level is really hard and you need psychiatrists for that. Take what you can get, and steer them effectively. That is what project management is all about.

ro_in_motion's avatar

If 90% are bad, might I suggest a review of your hiring practices. One company I know leaves legos in the meeting room. The interviewer alway arrives late. If they haven’t touched the legos or merely moved them to one side, they are not hired.

Here’s a gentler way, perhaps. Post a ‘Great Code of the Week’ based on whomever did something really smart and clever. Hopefully, this will help bad coders to see what they’re lacking. Alternatively, post a ‘Quick Code Challenge’ every week and the winner gets recognition.

As for the book idea, do it. Tell them they have a month to read it and that there’s a test at the end. Fail the test (which proves comprehension) and they’re gone. Of course, your labor laws might preclude it.

Alternatively, get the 90% to put in an hour after work a couple of times a week and go through the book with them.

You can’t easily teach ‘clever’ but you can teach efficiency.

samusaran's avatar

Thank you all for the great answers!

@LostInParadise, we are holding weekly meetings, and these are short, but i cannot help the feeling that these are somehow falling short of their intended target. You are saying that ideally everyone should be able to make a guesstimate and work division. That is absolutely true but unfortunately not applicable. See below the reason why;

@ragingloli this is also true, but no matter, this is exactly what I am trying to achieve here :). I want them to be able to (mentally) handle the day-to-day work tasks.

@ro_in_motion Unfortunately I don’t get to say who is getting hired and who is getting fired. Eventually, I figured out that the current hiring policy is letting some unskilled (i would rather say dangerously unskilled) people work here, however, as said, there is nothing i can do about it, except for giving my best to somehow get proper developers out of them.

I also figured out, just as you said, that for some you just have to teach “efficiency” due to a lack of “cleverness”. I’m thinking very seriously of forcing them to read the book mentioned earlier. Perhaps one chapter a week, and then get them in a meeting room and discuss what they’ve learned so far from the chapter. Something within these lines, anyway.

But do you guys know of any other resources, other than the “Pragmatic Programmer” book? Are there any online materials courses/presentations or something like this?

ro_in_motion's avatar

@samusaran Ouch! You get no say yet you have to manage them? Double Ouch. My condolences.

I remember Martin Gardner had a book entitled ‘Aha!’. It might be one source. There’s a fairly nifty very English-like programming language made by runrev.com. I believe they still have a version that’s free. Using that, perhaps you can isolate where they’re weak.

I assume all of them come out of Uni with deep backgrounds in maths?

If all else fails, I am available for extremely reasonable rates. ;)

gorillapaws's avatar

I suggest you read Clean Code: A Handbook of Agile Software Craftsmanship, and possibly have everyone in your team read it as well. It also sounds like you might want a few of your employees go if they’re not motivated. I would talk to them about WHY they aren’t motivated; it’s also possible that there are problems with their environment that makes it difficult for them to be productive. Ask them what could change to make their lives better at work.

RocketGuy's avatar

Maybe you can offer rewards for exactly the style of code that you want. Good, fast (on time), cheap – they need to accomplish your desired two.

I have a similar problem with getting my kids to practice piano. I wanted to reward them for practices that are mistake-free. My wife rewards them for doing all required practice sessions. They do the required quantity, but play like crap. Gotta us the right metric.

gorillapaws's avatar

@RocketGuy rewards are typically poor motivators for highly creative and mentally involved activities such as creating code. This is a great TED talk about motivation by Dan Pink—his conclusion is that fostering intrinsic motivation via autonomy, mastery and purpose is the best way to motivate people doing these types of tasks. He acknowledges that money works well for mechanical tasks such as assembly line work, but Coding is a very different mental activity.

dabbler's avatar

@gorillapaws That’s an insightful talk. But it assumes you’ve hired only people who are ready for autonomy, mastery, and purpose. Also for some people their purpose is rewards and no amount of pep talks will re-direct them. For them, use the carrots and sticks.

From what I can tell rewards are a necessary but not complete/sufficient motivator.
If folks are not sufficiently compensated, as soon as you grant them autonomy they’ll just screw around. ...in fact some folks aren’t ready for the 21st century and they’ll screw around whether they’re compensated or not.

RocketGuy's avatar

Yeah, monetary rewards wouldn’t motivate me, but recognition or time would. Gotta tailor the reward to the person.

phaedryx's avatar

Sounds like you should have the #2 types pair program with the #3 types for a while.

samusaran's avatar

Everyone, thanks again for answering.
Although I do agree that myself not being able to choose the people i work with is a big inconvenience, I have to say that over the years I’ve learned to work with what I’m given. This was the trigger for my question in the first place.

Even so: if I’d have the power to hire/fire people, I would only reserve to this for the most extreme cases! Basically everyone working here is at least Grad level or more. I believe they’re all intelligent people, that have somehow never made some important conclusion/decisions within their career.

Regarding the motivation factor, I’m pretty sure that they are motivated properly at least in several aspects: financial (we are currently the highest payer in town :D), work environment (we’ve just moved into a brand new, state-of-the-art building, the company organizes all-inclusive team buildings each year, everyone is having free yearly medical-checkups, health insurance, etc).
What else would work?

At this point (from what you guys said so far), I think I need articles, books, online courses that I can study together with the team, in hopes this will get them on the right set of mind for coding. So far this is the inventory of what has been mentioned here:
1. Make them read “Adison Wesley – Pragmatic Programmer” and “Clean Code: A Handbook of Agile Software Craftsmanship” – hold weekly meetings for each chapter to discuss what they have learned so far (@gorillapaws and everyone else – do you think this would work?);
2. runrev.com – I’ll look into this (I’m thinking we could hold some sort of Quick&Great Code of the Week competition, using this language for the implementation) – given that this would be a new language for everyone, this should give us an idea over who is missing what – @ro_in_motion please let me know if you believe this would work and what should be the rewards for the winers?;
3.Get the rest of the management team to analyze “a great TED talk about motivation by Dan Pink” and see if we find anything that works for further motivating them.

Well, what else is there? :)

samusaran's avatar

Ups, forgot to mention at point 1:
Aha! – the 2 volume collection by Martin Gardner (http://tierneylab.blogs.nytimes.com/2009/10/19/martin-gardners-aha-moments/)

So, anything else besides the suggestions ones above that i should be aware of?

ro_in_motion's avatar

@samusaran Sounds good to me. There are companies that specialise in employee incentives where you can buy, say, a weekend in Disneyland for 2 for about a third of the price of normal. Hand one out quarterly? I knew a nasty company that had a grand prize of a week for 2 in Hawaii. They told the employees about it … The contacted their wives/husbands about it as well. The spouses provided extra incentive. (This was a long time ago)

Some years ago, someone on the RunRev boards posted a routine that drew an analog clock and displayed the time. It became a ‘thing’ to see who could write the smallest code. It was fun. As it’s in an English-like language, even ‘gnarly’ code is readable.

Answer this question

Login

or

Join

to answer.

This question is in the General Section. Responses must be helpful and on-topic.

Your answer will be saved while you login or join.

Have a question? Ask Fluther!

What do you know more about?
or
Knowledge Networking @ Fluther