Here are 5 agile tips for completing a successful project, in general and on oDesk.
1) Work from a prioritized list - There are always going to be features that are more important than others. I know clients like to say that it's all important and that they needed it yesterday. But, assure them of the importance of prioritizing. Work with your client to prioritize their list of items. Tell them that it is important because you want to make sure you're working on the most important items first. And, working on the most important things will assure that you are always delivering value to your client.
2) Get feedback early and often - If a project is going to last a month, break it up into deliverable chunks. Establish a delivery schedule e.g. "I will deliver small pieces of the application every Friday evening for you to try out". This does several things: First, it creates trust with your client. Second, it gives you valuable feedback that you need throughout the project instead of finding out you were doing something wrong after it's too late. In the end, you final delivery will be more in line with what they want than if they hadn't seen it until the end.
3) Time-box your work - Do you ever notice that a task that should've taken you an hour to do expands to several hours and sometimes a day? Tasks tend to shrink or expand with the amount of time allotted. Set a realistic, but aggressive goal for each task, then re-evaluate when you hit your deadline. You'll be surprised as to how much more you can get done.
4) Make your work visible - Always make your work transparent to your client by pushing your status instead of making your client query you for it. A mutually agreed upon tool such as a wiki or an agile tool like ScrumNinja can play a great role as a central location for you to keep progress updates.
5) Communicate with your client regularly - There's nothing a client dislikes more than having to check up with you on your progress. Establish check-in times up front when you begin the project and stick to it. For example, "Let's check in once a week by Skype. I will also send you a status update by email daily and will not hesitate to IM you during the week if I need clarification". A client that feels like you're taking care of them is a happy client.