I've been recruited in a small team of seven developers about 4 months ago on a small scale Java project involving a basic game development, where each programmer has to do a certain part. For example programmers 1,2 and 3 have high experience in Java and they get harder tasks, while programmers 4 and 5 handle the small details of the project. (They also program, but they get the boring stuff)

We are relatively well organised, we all live in different countries and communicate by skype and share the source by Dropbox, where we keep a log of updates, a task list and whatnot, but in general a problem always occurs in the project development.

Basically everyone gets motivated for a day or two and works on some fast code that does it's job (Although not always 100% efficient, but clean and maintainable) then stops working and becomes un-motivated because he thinks he's the only one doing his job. Very little work gets done and their programming knowledge could lead the project sky-high if they used it properly. There's always a de-motivating factor in project development, such as "I don't like this feature, I think we should go back" or "Nobody works so I won't either" and in the end, it all turns out messy.

My question is - what could be done to motivate them? How could I manage them in a way to constantly have them working on the project?

EDIT:
I forgot to add that all the programmers on the project are doing this mostly for experience, they work for free and they do not get paid. I personally work because I wish to gain experience in working with a team.

Questions on Programmers Stack Exchange are expected to relate to software development within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here.
If this question can be reworded to fit the rules in the help center, please edit the question.

1

How completed work is compensated? and who manages the team?
–
YusubovAug 1 '12 at 20:08

Maybe you need to move this project to be an open-source and hosted in well-known open source project hosting places like (codeplex, code.google, GitHub, etc.) , so that better motivated people would contribute ?
–
YusubovAug 1 '12 at 20:21

5 Answers
5

I agree with ElYusubov that communication is probably the most important factor to improve things. However, if you are geographically and time-wise separated, there is little chance to find time for regular team meetings.

It sounds like you have (at least) the following issues:

team members don't see each others' contributions and overall project development

there are disagreements over requirement and design issues

The first one can be tackled the following ways:

Move the source under a public SCM like Github, which automatically manages update logs and history, so commits are more visible to everyone. (And it has tons more advantages over Dropbox, which is very useful in general, but is not meant for hosting software projects.)

Moreover, you may want to start sending out regular (e.g. weekly) updates via email to keep team members up to date about how the project's going, who delivered what, what important features have been delivered or milestones reached etc.

For this, you may want to set up a developer mailing list too - I believe this is automatically handled by Github and the likes, which gives one more reason to migrate there.

To improve motivation even more, arrange regular demo sessions where developers can demonstrate important features developed by them, or nasty bugs fixed.

Try to rotate unpleasant tasks between team members, at least to some extent - make sure they understand that everyone needs to take his/her share in handling even the not so glamorous tasks, in order for the team as a whole to succeed. Getting only boring tasks for a long time kills motivation. If the person in question is unable to do anything else, at least make sure that his/her contributions are appreciated publicly and honestly, ideally by the whole team.

To deal with disagreement over design, arrange discussions / chats between the persons involved. Try to ensure that everyone knows at least the rough architecture / design and agrees with it. Once this is achieved, the whole team can pull into the same direction. It is perfectly fine to debate over technical details every now and then, as long as there is a prospect of getting to a satisfying compromise. However, if someone is unable or unwilling to accept team decisions, (s)he may become a estabilizing factor. It is not clear which is the case here.

One sidenote: you wrote "the highest-knowledge programmer manages the team". I assume you mean technical / development knowledge here. Note though that managing people requires communication / people skills much more than technical expertise (although the latter of course never hurts on a software project). So the most experienced software developer and the most experienced communicator can very well be two different persons in a team.

This is a pretty good idea, but there is no time where every member of the team is online at the same time since we have very different timezones, and not all of us can speak english fluently.
–
BugsterAug 1 '12 at 20:10

still, i would suggest to get everyone on a call at least twice a week (preferably every other day). That may really increase productivity and accountability.
–
YusubovAug 1 '12 at 20:12

I'd add another suggestion to what ElYusubov said. Keep clear and presice track of who and what is doing. You could introduce some principles of agile programming: user stories divided into smaller tasks, estimates of time required and specifications. This will clear up all the questions about what and by whom is done.

Keep this schedule up-to-date. Update it after every day of work or more frequently.
This will also help you have a clear picture of what is left and what is done.

And, of course, whatever strategy you choose, first of all follow it by yourself, show the others that it isn't so difficult. Be their role-model in some sense. This is the best motivation I can think of.

P.S. I think there was no need for mentioning that you all work on the project for free. It was already quite clear from the rest of your question ))

then stops working and becomes un-motivated because he thinks he's the
only one doing his job.

You say you are using Dropbox for source control. If you are using a proper VCS like git (or something else) it's easy to keep track of what everyone are doing. You can view a message and see all code changes for each update ('commit/push'). This may give all of you the feeling of progress and cooperation you need.