Originally posted on alicki.me
Alright, you’re unhappy with the job prospects, or you’re not being challenged enough at work? Maybe you’re fresh out of high school or are a veteran programmer, either way, there are some hard learned lessons you’ll need to learn before venturing out on your own. It’s always less costly and better to learn from other people’s mistakes.
I don’t care if you’re my dad or someone I just met last week. If I’m going to be developing something for you, I’m going to require a contract of some sort. Things happen, I could win the lottery next week, you could change everything about the project, or anything in between. An agreement will exist to protect both YOU and the person(s) you’re working for. These don’t always have to be lengthy and legalese speak, but having something signed that outlines the work you’re about to perform and the scope of functionality can go a long way towards reminding the other party what was agreed to should there be any attempts to deviate.
The single most important thing I can tell anyone is to always develop and do your work locally, or on a server that’s under your control (owned/rented/managed by you). Sadly, there are plenty of examples of developing a project on the client’s system and then things going poorly when payments or issues arise. A well-seasoned developer will always wait until final payment is made before turning over the ‘keys’ to the work.
Git and working with it is becoming more and more common among solo developers and small teams. I look forward to the day when everyone uses it, but we’re getting there. By using a system like Git (or SVN if you so desire), you’re keeping a historical log of files and changes across a project. Not only will this come in handy should a server failure happen or a hard drive crash, you can also easily locate these files if your client needs them in the future for whatever reason.
That’s why I maintain a policy of keeping all files and project related things for at least a year. I mainly use Git to store these files, it can come in handy if you’re client decides to rehire you down the road or when things go wrong on their server.
This seems obvious, but getting paid is something many freelancers struggle with. Not because of bad clients or scammers, but because life happens and things change. Having a contract helps in most cases, especially if you have to go to court – but having your money upfront is the most important thing. By charging your clients a deposit and/or a percentage of the fees upfront, you can ensure that at least some of your time and work will be covered. By having this sort of policy, you can also often weed out those less serious about hiring you or those who are unsure and may change things early on and withhold payment.
This will come with time, but something that will help land you your next client is a well displayed and easy to navigate portfolio. Having an online portfolio that showcases your skills, abilities, and experience is a great resume counterpart. You should display images, descriptive texts of projects, and a way for people to contact you. You don’t necessarily need to list your fees or anything dynamic, but giving potential clients insight into your work is a great thing.
Getting paid was a point I made earlier, and I could have put this in the paragraph with it – but seriously, get paid! Do not work for free. Any serious potential client or company should and must pay you for any work you put into their projects. There will come a time when your client base is dry and the money isn’t flowing – that won’t be the time you decide to just get some work coming in for the sake of working. Don’t lower your standards and resort to taking on free work. The best time to take on free work is when you work on something that is yours and you’re passionate about it.
So there you have it. Of course there are a ton of smaller details and very important finer points, but working for yourself is both a big and little picture job. You’re in control now, you decide what hours you work and how far you go.