Home / Find programming work by increasing luck surface area edit
Try Documentalist, my app that offers fast, offline access to 190+ programmer API docs.

I wrote a response centered around increasing luck surface area.
This essay expands on it because I’ve seen this a few times now: good developers asking how to find work while botching the basics.
First a caveat: it only works if you are a good programmer.
I’ve looked at Antonio’s GitHub account and his website and I’m convinced he is a good programmer.
He created 3 non-trivial Mac OS apps, written in web technologies / React and packaged with Electron.
He wrote non-trivial open-source React libraries.
His code looks good.
He made good looking personal website and websites for this apps.
A developer writing good code with proven ability to ship products should be in high demand.
So why isn’t there a line of companies waiting to hire him?

It’s the basics stupid

I believe that many capable people don’t succeed as much as they could not because they fail to do something brilliant but because they fail the basics.
The basics they are not aware of. The unknown (to them) unknowns.

Basics for programmers looking for freelance / consulting jobs

If you’re a programmer looking for a freelance or consulting job, what are the absolute basics?
A potential employer should be able to learn about what you offer, at what price and why you’re the right person for their job.
Therefore you should have a decent website with a page that describes what work you can do, how much you charge and a proof that you’re good at what you do.
I’m no longer looking for work, because I’m currently working on Filerion, a web-based file manager for online storage like Dropbox and S3.
When I was looking for a job, I was promoting I’m a Go consultant for hire page.
I’m not claiming it’s the best self-promoting page ever.
I’m claiming that you get 80% of value from having a decent page in the first place. The remaining 20% would be in refining your pitch.
The important basics of such page:
  • it should be short and concise; this is a decent business proposal not a novella
  • a way to contact you i.e. your e-mail address
  • describe what you can do. In my case it was programming in Go
  • provide proof that you’re good at it. In my case I linked to my past writing about Go, my open source Go libraries and a Go contract I successfully completed
  • social proof (list of well-known companies I worked at)
  • my time zone because it’s important in remote work
  • and a photo for that human connection
Antonio created more than enough stuff to show that he is a capable developer. He should create a similar web page pitching himself as a web or React or Mac developer.
Here are other people’s pages:

Increasing luck surface area

You went to a React meetup, started a conversation with a random person. You talked about your React project, that random person needed a React developer and you got a contract gig out of that conversation.
That’s luck.
I wouldn’t recommend striking conversations with random people at meetups as the best way for finding programming jobs.
You can’t control luck but you can increase your luck surface area.
Did you notice how few paragraphs above I mentioned Filerion, a web-based file manager for online storage like Dropbox and S3?
It’s an example of increasing my luck surface area of promoting Filerion.
Oops, I did it again. It’s getting recursive in here.
This post started as a comment on HN and I decided to turn it into a blog post. I believe it’s useful for people so I’ll promote it on HN when completed. It might or might not get upvoted but I’ll increase my luck surface area by posting it there.
Most of the things will not lead to job offers but all you need is one job to make this worthwhile.
Listen to Wayne Gretzky: you miss 100% of the shots you don't take.
Here are few ideas for increasing luck surface area or programmers looking for a freelance job:
  • make a link to your “hire me” page very visible on your website. Don’t be afraid to make it “in your face” big. It should be on every page of your website and it should not be missed
  • put your pitch in every place that allows it. Just a short “Hire me for X. <link to hire me web page>”. Where to put it?
    • your Hacker News profile
    • your Twitter profile
    • your GitHub profile
    • your linkedin profile
    • your reddit profile
    • a footnote on every page on your website
    • readme of every open source project you publish
  • if appropriate, in your social comments. Every week there’s a HN discussion about terrible hiring practices in software. I’m sure you could make non-spammy comments that includes “BTW: if you’re looking for a expert X programmer, I’m available <link to your hire me web page>”
    • all that is low probability but also low effort and it does increase your luck surface area
  • research or freelancing / remote jobs platforms and if they fit your desired job, create an account and start applying for jobs:
    • upwork
    • fiverr
    • remoteok.com
    • codementor
    • every jobs site and forum
    • sub-reddits like https://www.reddit.com/r/javascriptjobs/
    • craigslist has a jobs section
    • use google to find more freelancing / contracting websites

Have a process

So you did all the low effort stuff described above. What’s next?
One of the things that separates professionals form amateurs is having a process.
Marketing yourself as a contractor is no different that marketing anything else:
  • create leads
  • convert leads into clients
The “hire me” web page is how you convert leads into clients.
How do you get more leads?
Professional marketers have a process.
A set of known techniques for generating leads: buy tv ads, but newspaper ads, buy online ads, pay influencers to promote your stuff, throw a conference, publish a white paper, promote on social media.
Professional marketers are not paid because only they know how to buy ads on Google.
They are paid for knowing wide array of techniques, knowing which technique applies in a given context and simply spending hours doing the work and being better at it that someone who isn’t doing it full time.
Here’s how programmers looking for a programming jobs can generate leads.

Publish technical articles

Write articles on technologies you’re an expert on and promote them on relevant social media.
The process is:
  • write an article and publish on your website (or medium or dev.to or all the above)
  • the article must create value. Self promotion can only be a cherry on top, not the sundae
  • tweet about it
  • promote on relevant forums and websites
I used to write articles about Go and promote them on r/golang. Some of them would end up on Hacker News even without me submitting them.

Publish open source packages

More time consuming that writing an article but if you’re a full time programmer, especially in JavaScript / React ecosystem, you can often extract bits and pieces of functionality as open source packages.
In package readme link to your “hire me” web page.
Provide value, increase your luck surface area.
Don’t forget to promote the packages the same way you promote articles (tweet about it, post in relevant reddit groups etc.).

Build online tools

Build a tool / program that provides value and link to your “hire me” web page.
This takes more effort than writing an article but if it provides value, it will be a constant source of new leads.
See this linear interpolator for an example of a tool that wasn’t hard to build and has a good call to action.

Turn experience into lead generating artifacts

All this seems like a lot of work.
If you’re a full-time programmer you’re doing a lot of programming.
That work is experience.
You can sometimes cheaply turn that experience into artifacts.
Here are examples of how I turned experience into lead generating artifacts:
  • I did a contract job porting a large Java library to Go. I spent 600 hours on it. After the contract was finished I spend a few hours more to write Lessons learned porting 50k loc from Java to Go article. It was very popular on both Reddit and Hacker News. I spent 600 hours doing work and gaining valuable experience. The cost to writing article was, comparatively speaking, very low. Just a few hours to get thousands of people to read it. You can see that majority of my recent articles follows this pattern of turning experience into articles
  • I had an idea of using Notion as CMS for my blog. Notion at the time didn’t offer the API so I reverse engineered their protocol and wrote Go code to build a blog out of content in Notion. It took many, many hours. I spent a fraction of that time to generate lead generation artifacts from that experience
Look back at your own past programming work.
Can you write an article about something your did?
Can you extract part of the code as an open-source library?
Can you summarize your experience and provide insight?

Goto 1

Notice that this is now a process: a set of actions you can repeat over and over again.
There’s an infinite number of useful articles, open source packages or online tools that you can create.
The only limit to how many leads you can generate using this process is the number of hours you’re willing to spend.
Don’t do it just once.
Set aside a certain number of hours per week dedicated to marketing yourself.
A decent goal would be to write and promote one article per week.

Stay focused

If you’re selling yourself as a Go programmer, all your articles, open source packages and tools should be related to Go.
Not Java, not Rust. Until you have more job offers than you can handle, everything you write should plausibly generate leads for your Go software contracting.
I’m sure many people will look at the above suggestions and say: that sounds like a lot of work, I don’t have that kind of time.
Many of those people browse Twitter for hours, write Hacker News comments that will be forgotten in a day etc.
Just recently a gentleman posted their super busy schedule of a working programmer and a father as a comment on Hacker News. He was trying to show how it would be impossible for him to do a take home coding assignment when looking for a job due to lack of time.
I’m not defending take home assignments but somehow his schedule didn’t include the time he wasted reading and commenting on Hacker News. And I’m pretty sure there’s a little bit of Twitter or Reddit or Facebook usage in there as well. Not to mention the 3 hours of tv watching of an average American adult.
A lot of people could wrangle a few hours a week by cutting down on social media or tv and use those hours for a focused self promotion activities.

Job search as a problem to be solved

We, the developers, are a problem solving machine.
We encounter problems daily and we solve them.
How do we solve them? Mostly by formulating the right question and entering it, verbatim, into a search engine.
For Filerion, my web-based file manager for online storage like Dropbox and S3 I needed to implement file upload via drag & drop.
I knew it’s possible because I’ve used many websites that are doing it but I had no clue how to do it.
How did I figure it out? I asked Google: “javascript drag and drop file”.
What do you know: plenty of people have already solved that problem and wrote tutorials. All I had to do is to follow them and do the work.

A simple matter of asking the right question

This is my foolproof system of solving any problem:
  • formulate a question
  • enter it into a search engine
I’m only half joking. 80% of the work is asking the right question.
Antonio did the first step by formulating the question and asking on Hacker News.
He got a bunch of good suggestions, but he would get even more simply by entering similar questions into a search engine.
“How to get a freelance job”. “successful freelancer”. “successful contracting”. “increase contracting rates”. “successful upwork freelancing”.
This is just a sampling of possible questions related to getting a job as a freelancer / contractor / consultant.

Specialize

It’s counter-intuitive but you should specialize.
When you’re looking for a programming contract it’s better to narrow down your pitch.
“Backend developer” is better than “Developer” or “Full-stack developer”
“Go backend developer” is better than “Backend Developer” or “Go developer”.
“MySQL query optimization expert” is better than “Go backend developer”.
It’s counter-intuitive because why would you want to appeal to less potential employers?
If there is a million jobs for Java and a million jobs for JavaScript, isn’t it better to pitch yourself as a Java OR JavaScript developer?
No, it isn’t.
You only need one job. One employer.
Someone looking for a Java developer will likely pick someone who pitches themselves as expert in Java, not a Java / JavaScript expert.
Same for someone looking for a JavaScript developer.
Your pitch targets less potential employers but it has a much greater chance of appealing to that particular employer.
Furthermore, if you have 10 hours to invest, it’s better to invest 10 hours into showcasing you JavaScript skills than split into 5 hours of showing Java skills and 5 hours of showing JavaScript skills.

Level up

There’s an abundance of free or cheap advice on improving your freelancing game.
Blog posts, books, YouTube videos, Udemy courses, podcasts.
Just today on HN there’s a link to an interview with successful consultant.
You don’t have to wait for material like this to serendipitously show up on HN.
Formulate a question and enter it into a search engine or YouTube or Amazon website (for books) or podcast search engine.

Kaizen

The Japanese have the best words. One of those words is kaizen. The idea of continuous improvement.
The above suggestions might be overwhelming and seem like too much work to do at once.
Start with the basics: a “hire me” web page linked from your Twitter / GitHub etc. profiles.
Then gradually create more lead generation artifacts.
Write one blog post. Then another one. And another one. Kaizen, my friend.

I will coup whoever I want

This is my website so I can shill whatever I want.
I’m working on Filerion, a web-based file manager for online storage services like Dropbox and S3.
I’m working in the open and documenting the process of creating a software product from scratch on a day to day basis.
Follow along if you want to know what does it take to build a software product. Technologies used, marketing activities and general musing related to programming and productivity.

Feedback about page:

Feedback:
Optional: your email if you want me to get back to you:

Need fast, offline access to 190+ programmer API docs? Try my app Documentalist for Windows