Getting your first freelance development client

One of the most frequent questions I get from people after I have told them I'm a freelancer is how did you find work at the beginning?.

In the research for my book, I asked that very question to 50 other freelance developers and the results were interesting. Two particular methods stood as as the most popular options for getting initial clients.

Source of first freelancing client

Let's consider these two most popular options a little.

Existing employers

Initially, this might seem a strange option -- why would you freelance for a company that you used to work for? Many reasons...

Companies are increasingly looking to take on freelancers, rather than permanent employees, for one-off projects. It's worth getting in touch with your existing employer(s) and seeing if there are any projects they would like to farm out. By approaching people you've worked with before, you know the level of trust is already there -- there is no need to prove yourself again. This also means it's less risk for the company you are approaching.


Having a good reputation at what you do is essential. If you are good at your job, then people are likely to refer business onto you. For this to work you need to make sure that people know that you are freelancing, and actively seeking work. A simple Tweet to let people know your availability could be all that it takes for somebody to think "ah-ha, I know somebody that is looking for a web developer at the moment".

Want to get more information on how to get freelance clients? My book goes into this in more detail, so sign up to be notified when it is available.

Don't Rest on Your Laurels


I read a great article that describes the great life developers have right now, but raises a warning:

Don’t get too comfortable. Don’t get locked into a language. Don’t burn bridges for short term gain. Keep your tools sharp. Learn soft skills. Build an audience. Save some money. Network. Read.

There’s some excellent advice here, so let’s consider each point:

Don’t get too comfortable

Software development is a huge subject, and it’s a very fast-moving discipline. Web development is a great example of how you cannot afford to stagnate – for example, nobody is using table tags to build out sites any more, and for good reason.

Don’t get locked into a language

Whilst it’s great to master a language and/or a framework, try not to have tunnel vision: there are always alternative solutions so keep open minded about other languages.

Don’t burn bridges

This is especially pertinent when you are freelancing, but it also applies to permanent employees. Don’t tread on other’s toes, and try not to piss people off.

Keep your tools sharp

I wrote about this last time (see Know Thy Editor). The processes and tools that complement your software development are essential for your productivity.

Learn soft skills

Developing communication skills are critical to keep on top of your game. If you are working as part of a team, then you can practice this every day. Learn to actively listen, be courteous to others and don’t be afraid to take the initiative and lead whenever you can.

Build an audience

If you have knowledge, then spread the word and you’ll find yourself building an audience. The easiest way to do this? Teach through your blog.

Save some money

You never know what might happen in the future – tech companies are notoriously volatile. Have savings put away in case of emergencies. If you are out of work, then you will have a cushion to give you time to find something new.


Meetup is a great resource for finding networking events. These may also be “soft” networking events such as co-working or tech talks. Remember that everyone you meet may be a potential client.


Keep learning, but be particular about what you read. Pick one or two blogs to follow, find authors that you like and trust. Continue to learn: Coursera is a great online learning hub.

To sum up, don’t get complacent. Things are great for developers right now, but there are always ways to improve your craft.

photo credit: resting by Michael Cory, on Flickr

Know Thy Editor


I’ve used many editors for programming over the years.

  • 1996 - 1999, Emacs
  • 2000 - 2007, BBEdit
  • 2009 - 2011, Emacs
  • 2012 - Present, Sublime Text 2

This week I was providing some mentoring with somebody that was using Notepad++ as their code editor of choice. What struck me was how few features of the program he was using. Cursor keys to move around. Not using the find function. Clicking rather than using keystrokes.

It was painful to watch!

The thing is, it doesn’t really matter which editor, or indeed IDE, you use. What’s important is how you use it.

As Andrew Hunt noted in The Pragmatic Programmer, use a single editor well.

Watching somebody who really knows their editor is a joy. I remember a few yers back marvelling at a colleague who used vim and he just flew around it. He had mastered it.

The most important thing is that you know your editor inside out. Be efficient. Be effective. It can make a huge difference to your software development productivity.

photo credit: Code by Riebart, on Flickr

Some Documentation is Better than No Documentation

LimeSurvey v2 schema

Ever started work on an existing software project that has NO technical documentation whatsoever?

I have recently, and I immediately felt lost.

No coding standards, no testing guidelines and most importantly, no notes at all about how the existing codebase was designed.

Why is this a problem? Well, for me it meant a lot of time reverse engineering the codebase and subsequently generating new documentation. I had to learn the project from scratch. It added a huge amount of time before I could do any real work on the project.

Every little piece of documentation that you add to your project can help save time later on – either for yourself or for another person working on the project.

What’s the minimum you should have in your project documentation?

  • Database schema in visual form
  • Coding standards
  • Source control branching strategy
  • Deployment instructions for all environments (e.g. staging and/or production)
  • Development environment setup

Wikis are perfect for collecting this kind of documentation. They are free-form, so you have freedom to structure as you wish.

Have no documentation at all? Fear not, it’s easy to get up and running. A few ideas to start with:

  1. Use a database management tool, such as MySQL Workbench, to reverse engineer your database schema and produce a graphical model
  2. Use your unit testing framework to produce agile documentation from your tests – for example, PHPUnit has a –testdox option for generating documentation.
  3. Start using standard inline documentation. For example, use phpDocumentor for PHP code.

Take a look at the documentation you have for the project you are currently working on. If a new developer came onto the project today, would the documentation be enough to get them up to speed? If not, what would you need to add?

image credit: LimeSurvey v2 schema by juhansonin, on Flickr

Premier League transfer rumours -- visualised

This is a visualisation of transfer speculation involving English Premier League teams, and their players. The rumours were taken from various sources, including the BBC, The Guardian and The Daily Mirror. Click on the thumbnail to view the full size image (around 900Kb).

The data was collected and saved as a graph as a set of nodes and edges. These were then visualised using Gephi and exported as a PNG. Thicker lines between players and teams means a greater number of reports (e.g. Wayne Rooney to Chelsea).

6 Books to Improve Your Freelancing Life

Here are the best books I've read recently that have helped to improve aspects of my freelancing career.

E-Myth Revisited

I could have done without the cringeworthy tales of "Sarah's Pies", but there many nuggets of advice in this book about creating processes and systems to grow your business.

The Checklist Manifesto

Related to the above, Atul Gawande gives some real-world examples of where the humble checklist have helped improve many situations -- and this is something that can easily be applied to freelancing.

Winning Without Losing

How to grow a successful business without having to work every hour in the day. I found this book aligned with my philosophy about building a business without impacting on my family life.


Changing behaviour -- for example in your client's businesses -- is difficult, and this book gives a solid framework to ease any transitions.

4-Hour Work Week

More good advice on creating processes and systems in order to free yourself from the more mundane aspects of running a business.

Book Yourself Solid

Describes a system whereby you can become an expert or authority in a particular market, and solve problems experienced within that field. Good advice about building up an audience that trusts you.

What books have you found helpful in your freelancing career?

Fixing Laravel artisan migration timeout issues

A quick tip if you are getting timeout issues when creating new Laravel migrations:

$ php artisan migrate:make create_users_table --table=users --create
Created Migration: 2013_06_25_100053_create_users_table
Generating optimized class loader

The process timed-out.

Open up the vendor/symfony/process/Symfony/Component/Process/Process.php
file within your Laravel application and change the constructor from:

    public function __construct($commandline, $cwd = null, array $env = null, $stdin = null, $timeout = 60, array $options = array())

to this:

    public function __construct($commandline, $cwd = null, array $env = null, $stdin = null, $timeout = null, array $options = array())

This removes the timeout, and will prevent the error from happening.

Looking for reliable hosting for your Laravel projects? I recommend Clook Internet.

Learning Laravel 4 - Essential resources

I'm going to be working on a Laravel 4 project soon, so I've been reading up on it. Here are a few key resources I've used for getting up to speed:

Looking for a reliable host for your Laravel projects? I recommend Clook Internet.