This article explains our bulletproof process for sourcing software engineers and provides concrete examples; this process led us to placing software developers at growing startups as well as enterprise brands such as REMAX, Lever Data, WorkReduce, and Drive Sally.
This article is for leaders at growing companies with job openings for software engineers. This is especially for leaders who may be understandably frustrated by the hiring process when it comes to software engineering talent.
It’s been known since the 1980s that there is a distribution of productivity among computer programmers, and that some are not only “10 x” (ten times) but in fact one hundred times more productive and efficient than the average programmer. 
So it’s clear that good programmers are rare, but the great ones are worth it.
Anyone who reads TechCrunch will know that startups – even those that don’t make it past the Series B stage – are regularly snapped up in “acqui-hire” deals, where the founders are paid a bounty per software engineer in the neighborhood of $5 to $10 million.
So it’s clear that good programmers companies are willing to pay up for top talent.
Companies may be so desperate to find talent that they locate to San Francisco and Silicon Valley, with its enormous rents, passive-aggressive “we’re here to change the world, not to make money” ethos and its startup monoculture, just so they can fish in a talent pool that’s stocked with talent.
But often times, if a leader at a company isn’t technical, they might be afraid that it’s impossible for them to hire a great software engineer. For good reason. The maxim “A players hire A players” is something that resonates with experienced entrepreneurs. And go find a blog article or Quora article addressing the common question – how should? a non-technical person should evaluate potential developers – and see the refrain “God help you” uttered by Silicon Valley luminaries.
So when a company has trouble with its hiring process – and starts making excuses like “all the good software engineers are already working” or “it’s impossible to compete with the massive salary offers and social prestige of Facebook/Apple/Netflix/Google”, it’s in fact entirely understandable.
When I show you the solution, the only reason I am able to convey this to you is because I happen to luck into a very specific background and set of circumstances that enabled me to make this insight. I was born in Palo Alto, into a community of successful entrepreneurs and software developers; I started programming in the ‘90s and was working in Silicon Valley as a professional by the 2000s.
So, here is the simple and straightforward solution: treat the software developer recruitment process like a funnel, and have a great software engineer run the funnel for you.
To understand why this is true, visualize a hiring process that resulted in the hiring of an excellent candidate. Working backwards in the successful hiring process, you have the great candidate. Then you have the interview. Then you have the phone screen. Then you have the resume or initial contact with your firm.
Without making sure that great people see the job listing in the first place, at the top of the funnel, we’re never going to get great candidates out of the end. And without a sufficient volume, we won’t be able to get sufficient throughput due to the drop-off at each stage.
In order to get great candidates to the top of the funnel, you need to ally up with a great software engineer. This software engineer can tell you where all the great candidates hang out (“it takes one to know one”); they can tell them about your job opportunity, and they can sell it in a way that makes it both convincing and credible to a peer.
For example, while a CEO might talk about a culture of transparency and their open office – a snarky engineer might interpret that as a culture of anxiety-inducing mistrust where someone can breathe down your neck, watching you code, while you’re just trying to focus and get the job done. So, tone matters.
One of the major problems that a reader of this article might have is that either they have no amazing software engineers to set the tone and bar for their process or, if they do have the talent, the talent is focused on building features for the product roadmap and therefore doesn’t have the time to commit to running the funnel and process. Both are understandable and both are solvable through Code For Cash’s placement solution.
The Code For Cash proposition is simple: we’ll run your recruiting for you and in exchange, you pay us 20% of each successful hire’s first-year cash salary.
You can continue doing things as usual and perhaps experience death by a thousand paper cuts, or you could delegate to us and pay us once we generate a success.
This process has worked for prestigious firms and entrepreneurs, including WorkReduce, Lever Data, David J. Moore, Johann Schleier-Smith, and Bluedrop Performance Learning.
Here’s how we get the job done.
We find the people who are obviously great.
The first thing we do is go through GitHub and look for people who have had their pull requests accepted into popular open source projects. We then research their contact information and remove anyone from the list who asks not to be contacted by recruiters.
We then look for authors of popular blog posts or paperback books on the relevant topics, and conduct the same research – removing contact info where inappropriate and enriching where appropriate.
We write the screener questions.
The first step in the process is to really review the job description and understand: the psyche and personas of potential high-performing candidates, what the day to day is like in the job, what kind of background that person might have had to led them up to that point, and of course, the fundamentally important “hard skills” that are required. This helps us design questions to help us tease out whether they are the person who is right for the role and confirm that they have the communication skills to share their skills knowledgeably.
Example screener questions include:
- Share the link to your most popular open source project
- Share the link to your best app in Google Play or App Store
- Explain prefetching in Django. Feel free to read from this article: https://hackernoon.com/all-you-need-to-know-about-prefetching-in-django-f9068ebe1e60
- Tell us about your experience with Celery
- Explain JWT
We create a landing page fully instrumented with analytics.
Because most job recruiting processes are not run by default as a funnel, sometimes the “product” and “user experience” aspect of job listings gets ignored. The most important thing is to tell a story about the company and a story about the job, and for the story to be credible (to sound like it was at least approved by the software engineers working in the organization). The more detail-rich and authentic the description is, the better. It’s important to pick the technical skills capriciously either.
We treat this landing page like a product and manage it as closely as any product manager would.
We pay the fees.
We find that it often takes at least three hundred qualified eyeballs to get a placement at a company. A qualified eyeball is when a candidate with the requisite technical skills views the job posting. In order to get the job posting in front of qualified eyeballs, some amount of expenditure is required. This occurs in both time to contact candidates as well as fees incurred with posting on the job boards, podcasts and meetups that are relevant to the role. It’s no matter – we pay the fees because we are confident that our methods are effective.
Example job boards or sourcing locales:
- Hacker News
- MIT Alumni Job Board
- UWaterloo Alumni Job Board
- Tech Hiring Subreddits
- Reddit Ads
- Rands Leadership Slack
- Various domain-specific Slack channels
- Angel.co Source Pro
- LinkedIn groups
- LinkedIn ads
- LinkedIn Recruiter
- Various domain-specific IRC channels
- GitHub Jobs
- StackOverflow Careers
- A recruiter presence at local tech meetups
We get the ball rolling in our network.
When Code For Cash was first founded, we were a network of freelance programmers. Because of this, over 2,000 programmers signed up with us and registered their skills. The tech programming community is extremely tight knit, and we seed our viral referral loop by sharing our jobs and galvanizing our immediate audience of programmers by paying them if they originate successful placements.
Our offer is that we will source and place candidates for you in exchange for 20% of first-year salary.
Our guarantee is that we will get the job done. If for any reason a candidate does not deliver value for you and your organization, you will either get a complete refund or a replacement.
There is a human element to this process, and there are a limited number of software engineers with the requisite traits to succeed in sales (recruiting is fundamentally a sales process). So we can’t work with every company or individual who would like to work with us, but we promise to add value in a big way to each person we contact.
Contact us today and with a 15-minute meeting, get the ball rolling and be confident that you’re about to hire extremely talented software engineers.
 DeMarco, Tom, and Timothy Lister. Peopleware: Productive Projects and Teams. New York, NY: Dorset House Publ., 2003.
For one of our Software as a Service as a Service (SaaSaaS) clients, we built a serverless Lambda service and charged them per successful invocation. Each time the service succeeds, we charge; therefore, we wanted to figure out how many times it was successful in order to calculate their bill. Our service logs the text “Posting response” if the invocation was successful; if you want to get a total invocation count, in the steps below, replace “Posting response” with “END RequestId”.
- Follow these instructions to export your log data to an S3 bucket under your control: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/S3ExportTasksConsole.html
Run this on your local commandline: aws s3 cp s3://bucket-with-the-export/exportedlogs lambda-exported-logs –recursive
- Run this on the local commandline to uncompress all the logs: gunzip -r lambda-exported-logs
- Install The Silver Searcher, a super-fast grep-like tool available on most platforms
Fire up the ruby interpreter (type irb on your local commandline) and run this code:
ag -c "Posting response"`
- You’ll get your total invocation count.
This post explains how the Code For Cash uTask system works, both from the perspective of a developer and from the experience of a manager.
If you want to hire a developer from the Code For Cash network, you have a few options:
- Join the Code For Cash Slack channel, and post a requirement informally in the chat. If you want an invitation to Slack, simply sign up for a Code For Cash account at https://codefor.cash/signup and click the link in the Sidebar to join Slack (https://i.codefor.cash/user/configure_slack).
- Post the requirement formally by clicking the “Manager” menu in the Code For Cash Sidebar and then the “Hiring” tab. Within the Hiring tab, you can choose between hiring for a fixed-scope project at a fixed-price or hiring a developer at an hourly rate for ongoing work.
If you post the requirement through Code For Cash, it will be cross-posted to the Code For Cash twitter account, (https://twitter.com/codeforcashbook), it will be cross-posted to the Code For Cash Slack channel, and it will send an email notification to any Code For Cash user whose skill keywords match the keywords in the job listing.
Some managers also choose to have Code For Cash promote their job listing on social media, which is available for a flat fee of $195. To take advantage of this offer, simply paypal $195 to email@example.com and in the transaction notes, add the link to your job listing. We will promote it using targeted pay per click ads on Facebook, Reddit, LinkedIn and Twitter.
Once you find a candidate you like, you have the option of hiring directly, hiring via the platform (we have a built in contract system, managed by DocuSign, wherein your developer will sign a contract that includes an NDA, a non compete clause specific to your product and industry, assignment of intellectual property rights of the work product, and so forth.
You also have the option of using Code For Cash as your escrow agent, which is a way of providing peace of mind to both the developer and to you. The burden for paying the escrow fee falls entirely on the developer.
However, you always retain the option of circumventing Code For Cash and hiring the developer directly. It’s up to you… we’re here if you need us, but you’re equally welcome to just leverage our hiring tools for your process.
NOTE: There are two types of uTasks. Fixed-price projects with a crystal clear specification, and hourly engagements.
If you’re signed up for the Code For Cash network, you can bid on any Code For Cash uTask.
- Browse the list of open uTasks at any time by navigating to https://i.codefor.cash/utasks
- If you upload a resume or list your keywords at https://i.codefor.cash/user/gig_alerts then you can get email alerts whenever a uTask is posted that has overlap with your skills. Sometimes developers like to disable email alerts, but you can always re-enable them at https://i.codefor.cash/user/account_settings
- If you are hired by the manager for a task, then you have the option of working through the Code For Cash platform (letting us manage the contract and holding the money in escrow) or working directly with the manager. The escrow fee is 30% for non-subscribers and 5% for subscribers.
Subscriptions cost $25/monthly (or $300/year .. subscribing annually also provides you with a Udemy for Business account). In addition to lower escrow fees, you also benefit from instant gig alerts for freelance programming jobs, discovered by our bots from elsewhere on the Internet.
Recently a prospect came to us and asked if we could build an app that would let users preview trying on engagement or wedding rings.
Unfortunately, this isn’t currently inexpensive due to the software limitations of ARKit.
The prospect, still bullish on Augmented Reality, asked us to look into creating an app to simulate wallpapers and drapery on walls.
Unfortunately, this isn’t easy yet either. Code For Cash coder Serge “buildcode” Boinn looked into this and found this (technical explanation to follow).
“Vertical plane detection” is the technical concept here. This has not been added to iOS (iPhone) yet, but conversations with an Apple engineer suggest that it is coming soon. Connect with us on social media to get updates on what is possible using the cutting edge of software technology.
Our coder did add that this may be currently possible, using clever techniques with existing iOS methods, but certainly wouldn’t be cheap – not like the $300 furniture demo that we built.
“SDKs save tons of development time, but there are typically other approaches that involve a ton more work. For rings, for example, there was a video I posted that demonstrated trying on a ring while using a marker on a finger. There might be other ways… Just not a good fit for something quick.”
So: anything is possible! But somethings may be more affordable and accessible and less risky than others. Then again, in software development: if there’s no risk, there’s no point (i.e., no risk? no value… no reward).
It’s a year ago that I launched Code For Cash, the freelance programming jobs market. Those of you who have been following my journey since day 1 know that before we were even “Upwork for programming”, we were just an ebook… originally titled “Code For Cash”, now titled “Software Engineer’s Guide to Freelance Consulting”, and available on Amazon here.
Recap of the book launch:
- I wrote an outline before I did anything else
- My next step was building a landing page, unbouncepages.com/become-a-freelance-software-consultant/
- Then I made an ad campaign targeted to Reddit and Facebook and found that I could acquire signups for $3.50 (reddit) and $7.50 (Facebook).
- Once I had 20 signups, I felt confidence there was enough interest in the book. I spent nearly a month powering through the outline in order to just get the book done, and then I brought in my friend Jay El-Kaake as a coauthor to get us over the line.
In order to promote the book, I relied heavily on Amazon Marketing Services. I tested over 39 different types of campaigns, but ultimately a search-keywords campaign performed best.
Amazon takes 30% of my revenues. Since the campaign is 27% ACoS, it’s immediately profitable.
Something strategic I did was to lower the Kindle price from $9.99 to $2.99. This had a few effects:
- People on Amazon are extremely price sensitive, especially to first time authors. Lowering the price had an immediate effect on sales, and it turns out that this effect has been sustainable. Even accounting for the reduced revenue per sale, since we sell more copies, our total revenue volume in greater (in math class they called it “area under the curve”)
- With the price lower, we move more volumes; through moving more volumes, we get more reviews. Through more reviews, we get more social proof. This in turn leads to more sales. It’s a virtuous cycle.
- Finally, since we didn’t decrease the price for the paperback, the low Kindle price benefits from an anchoring effect– a phenomenon in psychological pricing literature where having something really expensive makes everything else look super affordable by comparison.
The other impactful thing that I did to promote the book was make a list of programming podcasts and send the creators a mass email, super charming of course, where I invited myself onto the show. This had a good hit rate, and I did about 10 podcasts this year. The Software Engineering radio podcast expects 60,000 to 200,000 listens over the lifetime, so this exposure was extremely impactful. Of course, podcast appearances are not good for everyone. But my voice sounds really good on recordings. If I were more telegenic I would probably have played to my strengths and done more video, but it’s really not for me.
Ok, so some stats:
- Amazon Kindle – Sold 2,640 copies this year.
- Draft2Digital (They distribute to iBooks, BN.com, Nook, Scribd, etc. in exchange for 15% of royalties) – 43 copies in total
- Direct – 130 copies
Although the book net proceeds totaled less than $10,000, it’s by far the most fun project I worked on. I loved checking the rankings and seeing where we were – we’ve been in and out of the Top 10 (Programming category) on Amazon all year, which has been fun.
I created a Slack channel for people who read the book and it started growing. I realized that there was probably an opportunity to sell additional services to this community, so I hacked together some scripts (scrapers) and started selling monthly subscriptions to reports of freelance programming jobs that we found around the Internet. This attracted some sales, especially from people who were already thinking of building their own collection of RSS parsers cobbled together with duct tape, but who wanted a more professional and polished version.
Note: today, there are more than 500 people in our Slack channel.
However, time revealed that there were a few issues with this business model:
- Data quality – even after hiring human workers to add meta data to the jobs, let’s face it, data labeling is a tedious task, and it’s hard to balance finding people who will do a good job while still being affordable enough. We do a bit of a geo arbitrage by having our data labelers be programmers from Mexico and Africa, so that brings the costs down, but there’s still the accuracy issue.
- Lead quality – realized that the best way to control this was bringing the jobs onto our own platform. And so, I created uTask… the Upwork for Programming. If you go to www.utask.org you can post a freelance programming job, and then coders from around the world will bid on the opportunity, with full transparency for everyone.
Let’s look at the economics and stats of the uTask business over the past 30 days.
Visits to homepage: 3,221
Task poster signups: 121 (3.75%)
Tasks posted: 42 (34.7%)
GMV (freelance coding sales from binding agreements signed on the platform): $3760
NOTE, if you look at our economics from the previous 30 days, it’s much improved.
Signups: 101 (2.95%)
Gigs posted: 9 (8.91%)
Why the huge improvement? I have to say it’s because of all the usability testing sessions. I did at least 10 usability testing sessions this month where I had people use the site and made notes about where they had issues. If you want to learn how to do a usability sessions, read my article here. Through systematically documenting and addressing the issues, we boosted funnel throughput (conversion rate) … tremendously.
In fact, I still have a backlog of issues to address, for the product roadmap. But once those are shipped, it’s time to recruit more usability study participants, since this seems like a devastatingly effective tack for us.
NOTE: Usability sessions are how I also boosted the conversion rate on codefor.cash/signup which is the developer side of the freelance programming jobs marketplace.
This past 30 days:
1322 visits to codefor.cash/signup
227 signups (17% conversion rate)
Compare to May..
3954 visits to codefor.cash/signup
65 signups (1.64% conversion rate)
Obviously a huge improvement, and it’s completely attributable to *listening* to user feedback and making changes.
So let’s look at the economics of the biz.
A visit to the uTask page is worth $1.16 in GMV (GMV for period / total visits for period). We only capture 1/3rd of the GMV revenue (from non-subscribers)… subscribers pay a 0% commission to us. So in essence, we can expect about 38¢ in commissions from a visit. Traffic in our niche costs around 50¢ to 85¢ per visit, so although with Lifetime Value (repeat orders) we might be able to drive traffic profitably with good ROI, I would like to to tighten the funnel and fix some outstanding issues with the website before we pour gasoline on the fire.
- Including my consulting business and book sales, Code For Cash grossed around $190,000 this year in total
- I have to confess something. In my usability studies, I started to lie. I began saying: “I actually didn’t build the site myself, so feel free to give me honest feedback – I’m here as a buffer between you and the development team” and people started giving me actually honest feedback. Well, I don’t know if it’s a lie.. Technically, I didn’t build the site myself. It’s a product of a team effort.
- If you’re a coder, sign up for Code For Cash at https://codefor.cash/signup – you get a 2 week free trial of the freelance programming job alerts, but apply to a job that’s exclusive to our platform(uTask) is always free (with a 30% commission if you get the job). If you subscribe, the commission goes to $0.
- If you need to hire a coder, post your task at uTask, https://utask.org
- One of my favorite things developed on the uTask platform already is this ARKit (Augmented Reality) demo for a furniture store. https://vimeo.com/244943019 this cost the person who posted the task $300 .. $50 for one coder to convert a furniture picture into a 3d model, and then $250 for an iOS expert to wire it up to ARKit.
Let’s have a great year. See everyone for next month’s report.
One of the easiest ways to improve conversion rate is to do usability testing sessions. Here’s the format.
- Post an ad on craigslist, in the Computer Gigs section. Here is some example text you can use:
- Use a tool like http://www.calendly.com to schedule participants.
- When people arrive, greet them. Tell them “We’re going to be doing a usability study today to discover issues with our website. I’m going to show you our website and then I’m going to ask you to do a few tasks. Don’t worry if it’s difficult – we’re testing the website, not you. In fact, this is probably the one place today where you don’t have to worry about making any mistakes.”
- Warm people up by asking them about their background. What do they do for work. Where do they spend time on the Internet. These are easy questions to warm them up and get them talking.
- Open your website in an incognito browser tab. Ask them: “What is this site? What can you do here? Who and what is it for?” If people have questions, tell them politely that you can’t share any information, because you’re interested in their raw responses. Ask them to narrate their inner monologue as they browse the site…
- Then, have people do the most important key actions to your user experience. For example: creating an account. Posting a task. etc….
- Once they’re done, thank them and pay them.
It’s that simple. You should write down their feedback and problem areas as you go. By the end of each session you should have a few pages of notes. If you consistently changes to address your challenges, your user experience will gradually improve and your conversion rates will climb.