Starting on a new project is an exciting thing. Since, I am in the web/mobile development field this article is more applicable to those in the IT industry.
I've compiled a list of good practices that are very important. I've done some of them and forgotten about others and the results were less than optimal.
These the things that I should always be part of every freelancer's (or business) processes.
Here are 7 Things You Should Always do When Starting a New Project:
- Request an initial deposit before doing any kind of work
- Start with a clearly defined project scope
- Sign a contract & tell the client what to expect
- Block time to work on the project at least 3-5 hours each day
- Provide weekly update
- Setup a test staging / site (on your own server)
- Track your time
Request an initial deposit before doing any kind of work
This one is my favourite ( Canadian spelling, not a typo ;) ). By requesting an initial deposit you save yourself a lot of trouble. This has so many benefits. This is a great test to see if the client is ready to buy/hire you or if they are just shopping around.
When a client pays you the inital deposit you know that that person has some business background and/or will respect your processes.
You want to work with people who respect you and your processes.
Let your competitors have the bad clients.
Start with a clearly defined project scope
This one is very very very important. Ask as many details as possible when you interview client for the project details. Then create a nice itemized list of deliverable so both parties are 100% clear on what to expect at the end of the project.
Related: Checkout this WordCamp presentation by Lisa Sabin-Wilson on Scoping Projects To Reduce Stress, Headaches and Angry Mobs
Sign a contract & tell the client what to expect
Having all the expectations in writing is a great way to have both parties on the same page.
This will reduce the chance of having either party having some assumptions.
Also that way you protect yourself from Scope Creep which almost always shows its ugly head.
Block time to work on the project at least 3-5 hours each day
I noticed that when working on project I would stop and 2-3 days later resume working on.
Sometimes I would look at it in a week.
I was telling myself that I try to avoid being bored e.g. when I solve the hardest piece of the project in most of the time I'd loose some interest.
This turned out to be a very unproductive way to approach projects.
After some time I end up with partially done projects and if you're goal oriented that consumes energy because those tasks are not finished.
David Allen (@gtdguy) calls these tasks open loops.
So go goal is to aim for any daily progress that way the task will stay fresh in your mind and you don't have to put so much effort to try to remember where you left off.
Provide weekly update
Clients don't need to wonder where you at with the project. You have to let them know.
I like to pick Thursdays/Fridays for a status updates because sometimes always comes up in the middle of the week. If you can do it twice a week that's even better.
Nowadays, anybody can respond to emails quickly because we're so connected. It is insulting to ignore a client for more than 24 hours. If you are super busy let them know that you will get back to them but don't ignore them. Later or the next day answer their questions.
If it's a complicated status update consider using a scree recording software such as Camtasia to walk the client through the update.
This is very important especially for programmers because the majority of the work is done under the surface. The client may see one button but he/she must know exactly how much work is happening behind that button.
Setup a test staging / site (on your own server)
Some clients will request that you work from their server so they can see progress.
Don't do it.
Use your own servers. Hosting is so affordable nowadays (Linode, DigitalOcean, WP Engine), 1and1 - contact me for a quote if you need help with this).
The reason is that you know your hosting's specs and have more control over.
That way you can have new software installed a lot quicker than having your client forward your requests to their hosting provider.
If you have to totally put your source code on client's server consider encrypting/obfuscating it (e.g. using ioncube (they have an online version as well) or a different kind of obfuscator).
I admin that the obfuscation approach sounds very untrusting but I have about 10,000 ($) reasons to do it.
Note: if you need to setup a free test/staging WordPress site check qSandbox.com (my product). It allows you to setup a test site in less than 2 seconds. It's free to install plugins and themes from WordPress.org.
Track your time
I have resisted this for a long time. Now, I log my gym time, email replies, calls, facebook, linkedin etc. I use toggl to track my time.
Almost everything you track & measure can be improved.
I primarily do it for myself so I can compare how long a task took vs the estimate.
This also helps me stay focused on one task otherwise it takes me some effort to go and pause the timer and enter a new task. I am able to catch myself within 0.5-2 minutes when I deviating from a given task.
This also helps when you estimate X number of hours and then the client requests more work even though sometimes the you're over the estimated hours.
This also helps you track your actual hourly rate.
You may charge $X but when factor in little questions, meetings, research it adds up.
In conclusion nothing is perfect and sometimes we will forget one or more of these ideas.
I recommend after each project that you take some time to evaluate your decisions to see what you did right and what you should do differently in the future.
Did I miss anything? Please, share your ideas!