Derek Sivers

Entrepreneur, programmer, avid student of life. I make useful things, and share what I learn.

How to hire a programmer to make your ideas happen

Do you have an idea for a website, online business, or application, but need a programmer to turn that idea into reality?

Many of my friends have been in the same position, so here's my best advice, below.

But first, a quick request: If you are a programmer, please leave a reply below with YOUR best advice. Feel free to include your URL and email for anyone to contact you. I know my advice is not complete, (and you may totally disagree!), so any further advice is appreciated.


1. Reduce your big idea to “Version 1.0”.

First read my short “Version Infinity” article.

Dream the big dream of everything your site/service/company might be some day, and write it all down.

But then think of the bare minimum that would make you happy, and people would find useful. What are the three most essential features? What is the most essential feature?

Call this Version 1.0. Save the rest for later. No need to even tell people about the rest unless they're really really interested.

A programmer is much more likely to say, “I can do that!” to this simple version.

Your goal here is just to get Version 1.0 built. That, alone, will be a huge accomplishment. Everything below is describing only Version 1.0.

2. Write a simple overview of what it does.

Again, remember: only describe Version 1.0. Stop there. The big version is written down somewhere else.

Leave off all details that the programmer doesn't need to know.

For example: If you want to sell videos, you don't need to say what's in the videos. Just “sell downloadable and streamable video files.” If you want the site to translate ancient Arabic poetry to Spanish to increase global tolerance, just say, “Translate paragraphs from Arabic to Spanish.”

Be succinct. Programmers love that.

Include people in a story, using the terms you use.

For example: “A company creates an account, then creates a new project with a title and description. In the project, they upload multiple documents to be translated. Each document has a from-language, to-language, and a name. The system counts how many words are in each document. When the company marks the project as ready, it is announced to the translators. The announcement shows how many documents, how many words, and a price. The translator rejects or approves. They log in to translate the documents, one at a time, marking each finished when done, which sends the file back to the company for review.”

From this, the programmer will look for nouns and verbs, so start to think in those terms to help you communicate better. (A programmer would see: Company, Project, Document, Translation, Translator, etc.)

3. Write a detailed walk-through of every click.

Close your eyes and imagine yourself using the site.

Describe every thing you can click on the first page.

What happens when you click it? Exactly what did the system do? What happens next?

Start to think in IF-THEN branches. Example: “If it's a new user, it takes them to this welcome page. If they've been here before, it takes them to their account page. If it asks for a number, but they type a word, send them back to the same page but with a message.”

In a text file, write down every thing you know this Version 1.0 needs to do. Every click. Every action. A long list of small simple things.

Start to think of the exact wording of what you want it to say, but save that somewhere else. Don't clutter this list with wording.

The goal is to keep this long list of actions very clear and simple, so that a programmer can see it, and see that each step is easy. For them it should be like eating chips, not an elephant.

4. Break it up into milestones.

We tend to think of other people's work as easier than it is.

So break Version 1.0 up into many “milestone” steps. Think of it as a day's work. (It might take more or less than a day.) The point where they upload their work for you to test. Where you test it and are happy that little piece works.

Don't expect it to look pretty at this stage. Expect it incredibly ugly but functionally working. Like building a house, the paint and decor goes last.

For example: in my translation site story, above, the first milestone might be just a plain ugly web page where a company can create an account, create a new project, then upload named documents into that project. That's it! If that works, that's a good start.

Thinking of your project in milestones makes all the difference. You'll stop and communicate at each, making sure you're happy before continuing. Misunderstandings can't run on too long. You'll estimate time and cost better. And you'll both feel a good sense of momentum.

5. Make your first milestone a stand-alone project.

To find a programmer you like, you need to take just the first milestone, and treat it as a complete project.

Open a new text file, and copy just the parts of the story and walk-through that are included in the first milestone.

If a feature doesn't come until after the first milestone, remove it from this copy of the story. Remove it from this copy of the walk-through.

This text file should contain a start-to-finish project that sounds like a day's work, and mentions nothing else.

Now start to prepare it like a help-wanted ad. Say, “We are hiring a developer to create only the beginning of an application. If this milestone is completed well, there will be more work immediately. The requirements are as follows....” Then paste just the story and walk-through for your first milestone.

Because you don't want them to just say, “I finished. Here's the source code,” make sure you finish with something like, “For completion of this project, please have this up and running on a development webserver I can access to test its functionality as described.”

Because posting this help-wanted ad will bombard you with dozens of offers that sound legitimate but have never read your ad, you should really do this step: At the end of your post, write something like, “VERY IMPORTANT: To separate you from the spammers, please write I AM REAL as the first line of your bid. We will delete all bids that do not start with this phrase, since most bidders never read the requirements. Thank you for being one who does.”

Get this all in a plain-text file, ready to paste.

6. Post it at elance, guru, odesk, vworker.

Go to the following sites to open an account at each: elance.com, guru.com, odesk.com, vworker.com

Post this short project at each site. Use their escrow service. Location of provider doesn't matter - they can work from anywhere. Don't pay for a highlighted listing. Pay by the hour. Set the bidding time limit to 7 days. Most bids will come in the first 3 days.

You'll get many offers, but if they don't have your magic phrase at the top (“I AM REAL” or whatever), delete them. This is very hard to do, since you'll feel thrilled that so many people are offering to help, saying things like, “We have looked at your project and would be glad to complete it immediately,” but trust me and delete those. If they didn't read something marked as VERY IMPORTANT already, you don't want to work with them.

Also important: Only go for providers who have great reviews from many past customers. This shows they are used to working this way through this site. Decline bids from providers without many great reviews.

Don't aim for the lowest bid. Use these sites to find someone that seems great and capable, even if they are twice as much as the lowest bid, they might work 10 times faster and better.

Each of these sites has its quirks, so sorry I can't recommend specifics for everyone. But be considerate and nice, once they've mentioned your VERY IMPORTANT phrase to prove they really read your requirements. That's cold enough. Once they've passed that test, be very responsive and friendly.

7. Hire one from each.

Here's the real reason why you're stopping at a simple milestone: you're going to hire at least two different people to do this first step, expecting that one will go bad, one will be so-so, and one will be great.

Yes it means you're paying multiple times for this first milestone, but it's worth it to find a good one.

I've found it easier to choose one provider from each site, so you can “award this project” to just one, and track their work there. They don't need to know there are others.

Some will definitely go bad. Just expect it and don't let it upset you. They'll say something has come up, that they can't start until next month, that it's harder than they thought, or just disappear and never reply. When this happens, just mark that person's project as cancelled or complete, and say goodbye nicely. Then carry on with the rest.

Lastly, ask each one to send you a zip file of the entire source code after each completed milestone. Even if you don't know what to do with it yet, save it. Unzip it and look through it in any text editor. You might actually understand some of it.

8. Continue with the one you like best.

The goal of this project is to find just one programmer (or team) you really like.

If you don't, then just go back to re-post that first milestone again, but changing it based on any feedback you got. Perhaps set a higher price or describe it better.

Once you do, you can let them in on the whole project. Send them your full “Version 1.0” story and walk-through. Get them involved in the whole thing. Hire them to make the next milestone happen, and the next and the next.

They may ask you to continue working and paying through the website, to boost their reputation there, or they may want to just go direct. Either way is fine.


I left out many things, of course, but if you feel something needs to be mentioned, please leave a reply in the comments, below.

Let me know how it goes!