Category Archives: Freelancing

The Freelancer-Consultant Spectrum

In the freelance programming world you’ll often hear terms like “freelancer”, “contractor”, “consultant” and even “freelance consultant”. I’d like to help put some clarity around a) what these terms mean to different people and b) what the real work is that most freelance programmers are doing.

First let me say that there’s basically no consensus as to what “freelancer” or “consultant” mean. People have abused these terms (especially “consultant”) to the point where they have no real meaning.

I want to share my personal definitions of these terms. I consider a freelancer and a consultant to exist at opposite ends of a Freelancer-Consultant Spectrum, or more precisely what I’d call an Employee-Consultant Spectrum.

I don’t necessarily see any particular self-employed programmer as being either a freelancer or consultant. There exists a large gray area in between the two.

At one end of the spectrum you have an employee: order-taker, implementer. At the other end you have a consultant: trusted expert. Probably about 95% programmers who call themselves “consultants” are really just contractors.

A contractor has much in common with an employee:

  • Work at client’s office
  • Attend client’s meetings
  • Work right alongside client’s other programmers
  • Seen as basically interchangeable with W2 employees
  • Get paid about the same as client’s employees (but hourly 1099 instead of W2 salary)

I see Freelancer/Contractor as being just one small notch from Employee. Here’s how I’d compare Employee, Freelancer/Contractor with Consultant.

Employee Freelancer/Contractor Consultant
Status Implementer/order-taker/peon Implementer/order-taker/peon Trusted expert
Perceived value provided Bandwidth (more features/bugs addressed) Bandwidth (more features/bugs addressed) Counsel (save/make money for business)
Pay Market rate Market rate Proportionate to value delivered
Labor intensity Large quantity of difficult work Large quantity of difficult work Small quantity of easy work
Presence Onsite or remote, ~40 hours Onsite or remote, ~40 hours Infinitely flexible

Notice how the Employee and Freelancer/Contractor columns match 1:1. That’s because a contractor is, for all intents and purposes, an employee. And when you hear all these stories about freelance programmers and imagine their kick-ass lifestyle, 95% of these people are really just glorified employees.

There are of course exceptions. Not all contractors are seen as peons. At the same time, not all employees are seen as peons, either.

I mention all this because when I first started freelancing I had some vague idea of what freelancing was like for other programmers and what freelancing would be like for me. Slowly, over the years, it was revealed to me that almost nobody has a great lifestyle as a freelancer. The people who really have it figured out are few and far between.

The way to move away from the Employee end of the spectrum toward the Consultant end of the spectrum is very difficult, especially for programmers (as opposed to e.g. marketers). The successful model I’ve seen is when a programmer becomes known as an expert in one narrow area of technology. Here are some examples:

As far as I understand, these guys make my by selling services other than programming. Instead, they transfer know-how from their brains to yours. The way they get clients is that they have books, courses, podcasts, blog posts, etc. that attract prospective clients to them. They don’t troll craigslist for contract job postings.

I don’t have all this stuff figured out yet but I wanted to help share step zero of getting from freelancer to consultant: realizing that most programmer consultants really aren’t, and knowing what the very few who became successful consultants are and what they did.

2017 Review and 2018 Goals and Plans

2017 was an interesting year for me. One of the biggest differences between 2017 and my previous years of freelancing is that for about five months of the year I did very little development work and instead did corporate training as my main source of income. I had decided to get into training because I’ve never enjoyed sitting in front of a screen all day and training seemed like a good opportunity to try a different kind of work. Unfortunately, I had a hard time making training work out business-wise. I’ll recount my year in chunks.

January and February

In September 2016 started working with a long-term development client. The people involved with the project were good but the codebase was ghastly. Around December 2016 I told my client that I would only be available through the end of February 2017 because I wanted to stop doing development work and start doing training work. The reasons why I was motivated to start doing training work mainly revolve around the fact that in my experience software projects are generally high-stress affairs where everything is always “behind” and nobody’s happy. I heard a podcast episode about how training work is different and thought it sounded like a good fit for my personality.

In February I did my first corporate training gig. It was a 5-day Ruby on Rails class that took place in Vancouver, Washington. Due to a number of factors the class was a total disaster. I think the biggest factor was my own inexperience. These kinds of classes tend to receive numerical evaluations at the end. This one got something like a 3.3/5. It may not be obvious but 3.3/5 is very bad by corporate training standards.

I had also been working on Angular on Rails at this point, a business I started in the spring of 2016. In January and February Angular on Rails made $371 and $449, respectively. You can see the full income report here.

March, April and May

About a week or two after I taught the Vancouver class I was sent to Sofia, Bulgaria by the same training company that had sent me to Vancouver. This time it was a 3-day Angular 2 class. I had spent the time between the Vancouver class and the Sofia class frantically preparing for the Sofia class because I didn’t feel like I could afford to get another bad evaluation. I barely slept at all during the 3-day period when I taught the class. Fortunately, all my hard work paid off and I got (IIRC) a 4.5/5 eval for the Sofia class. I celebrated this success by getting drunk at a bar with a bunch of European strangers.

I returned from Bulgaria on March 11th. I don’t recall having done much work in the month of March. My wife and I went on a vacation to Savannah, Georgia later in March. In mid-April I went to MicroConf. I believe this was the first year that MicroConf was split into two parts, “Starter” and “Growth”. I understand Growth is for people who are already full-time on their business and Starter is for people who haven’t yet gotten to that point. I went to Starter because at that time Angular on Rails was only making a few hundred bucks a month (and, as of December 2017, still is). Starter was okay but it lacked the magic I experienced at MicroConf 2016. For 2018 I bought a ticket to Growth.

I think I spent the rest of April working on Angular on Rails and preparing for a class I was due to teach mid-May.

In early May I taught a one-day corporate class in Phoenix. It went great but I learned that one-day classes aren’t really worth it. From May 15-19 I taught a 5-day class in Detroit. This class was one of the funnest ones I had done so far, and everything went great as far as I could tell. Teaching this class really helped cement how different teaching is from programming. Teaching this class was way more fulfilling than any software project I had ever worked on. At the same time this class had been pretty draining. I remember thinking on Friday afternoon, “I don’t want to do this again for a LOOONG time!” Unfortunately I had to get on a plane the next morning to fly to Amsterdam to teach another class.

The Amsterdam class was good but weird. I was sent there by a shady Indian company who lied to the students about my background. (They said I had 15 years of experience with JavaScript frameworks like Angular, despite the fact that JavaScript frameworks have not existed that long. They also said that the “original” instructor could not make it due to a family emergency, also untrue.) Content-wise, the Amsterdam class went well and I got good evals. By this time I felt like I had pretty much gotten a handle on how to teach a good class.

While I was in Amsterdam I had a conversation with a new (US-based) development client. My memory is that this whole time I had been looking for another development client, but out of the several strong-looking prospects I had had, nothing had came through. It was actually really surprising. I had been getting nervous because I wasn’t earning anything between classes, and I was only teaching an average of maybe two classes per month. I think my income was less than half of what it normally would have been had I just been doing hourly coding work. Luckily, things worked out with this new prospect. I got back from Amsterdam on May 25th and started working with my new client the following Monday.

Angular on Rails was still going this whole time. In March, April and May it made $352, $735 and $480, respectively. I had thought I was on the upswing in April when I made $735. I thought my pricing changes and some other things I did were what had made my revenue go up. But apparently it was just luck. Revenue has never reached that level since. It was around this time that I did an interview on Indie Hackers.

Around April or May I decided to make one of the dumbest financial decisions I’ve ever made and buy an almost-new car. I bought a 2015 Subaru Outback. I don’t even know why I bought it because I don’t even like it that much. Whoops.

June and July

For the five weeks spanning June 12th to July 14th I taught a coding bootcamp in Detroit. This was a pretty stressful time. I was away from my family. I was continuing to run out of money. I was fairly consumed by teaching the class but I was also trying to work for my new development client nights and weekends to get some income coming in again. But as far as I can tell, the class went great. This is a class that happens every year and I was invited to teach it again in 2018.

This was also around the time I started considering pumping the brakes on the training work and going back to coding. Most of the training gigs I was doing were through training companies. Actually, most of my gigs were through just one single training company. The rates a person can get through a training company are not nearly as good as what you can get for direct gigs. The 5-day classes were lucrative enough to make the travel worth it but the 1-day, 2-day and 3-day classes pretty much weren’t. The travel was also hard on my family. I remember one Sunday when I told my four year-old son it was time for me to leave and spend another week in Detroit, he started bawling. Not just crying but bawling. That really tugged at the heartstrings. Experiences like that helped me realize that if I were going to do training for a career, I’d have to figure out a way to make my income from just one or two classes a month so I could make up for my absence during the time I was home. Unfortunately, when I looked at the numbers from the training I did in 2017, the math didn’t really work out. I think it was in late July when I decided to go back to contracting full-time.

Then, on Monday, July 17, the first business day after my five-week bootcamp ended, I got a call from my new development client saying he had decided to shut down his business. I thought I was going to have a somewhat steady income but now that was gone. My financial prospects at this point were comically dismal.

Luckily, I had lined up one last training gig. This was a two-day class in Palo Alto. I actually got on the plane the day after my main development client went out of business. I decided that I’d take advantage of the fact that I was in Silicon Valley and try to line up some in-person meetings with prospects. I shook the trees and was in fact able to line up two in-person meetings. One of the two prospects said they’d like to work together and we started working together pretty much immediately. I’m still working with them today. It’s full-time contracting which means it’s basically a job. I’m fine with that, though. After the rollercoaster that was February to July 2017 I was ready to just be a pair of hands and earn a steady paycheck for a while.

Sometime in June, I believe, I decided to stop working on Angular on Rails and start something new. Part of the reason was that Angular on Rails only made $185 in June and that was really a kick in the balls. Revenue was going down despite my efforts to make it go up. I also was never a huge fan of Angular. My interest in it was kind of mercenary.

After I back-burnered Angular on Rails I spent a few months trying out different product business ideas and flailing wildly. I was frustrated that after eight years of trying to build a successful product business I was basically back to square one and I didn’t know how to move forward. It was a painful time.

In November I started a new venture called Six Figure Coding. The idea is to teach job search skills to developers. Within nine days of creating Six Figure Coding I made $152 in revenue. Presently I’m working on an ebook which I plan to launch on February 6th, 2018.

August to December

Business-wise, not a lot of noteworthy things happened from August to December. Except for a few hundred bucks of product revenue, all my income has come from my main development client. I expect that it will be this way for quite a while, although I do expect product income to grow over time.

Reflections on the year

I learned a lot in 2017 about what works and what doesn’t work and why. I’m glad I tried training even though it ultimately didn’t work out the way I had hoped. If I hadn’t tried it I would have always wondered if I had left some huge opportunity untapped. Now I know what training is like.

By the way, I did learn how to theoretically make training sufficiently lucrative. I’ve noticed that the trainers who get the direct gigs (as opposed to gigs through a training company) tend to be people who have written published books or who have built a really strong online presence. So if I wanted to write a published book, I understand that I could expect to attract clients who want me to do training for them. I actually started to go down this path. I talked with Prag Prog about writing an Angular book and they were interested. Unfortunately, I decided that I really just didn’t have it in me to write an Angular book. I frankly think most of this single-page application stuff is a little on the bonkers side and I would have a hard time writing a whole book about something I believe to be crazy and unnecessary. Plus, if I’m going to spend a whole bunch of time putting effort into some extra thing, I think I’d rather put that effort into building  a product business since my ultimate goal is not to be a trainer, it’s to be a product entrepreneur.

2017 was my second-best year ever for product revenue and best year ever for service revenue. In 2016 I made about $4,800 from Angular on Rails. In 2017 it was about $4,300. This might sound crazy but my goal is to earn $100K in product income in 2018. I honestly think this goal is realistic given everything I’ve learned about entrepreneurship over the last eight years or so.


I’m going to ask myself a couple questions that I’m borrowing from my friend Kai Davis (thanks, Kai) as well as a couple questions of my own.

What went well this year in my personal life? In 2017 I honestly didn’t have much of a personal life. I spent too much time working. But there are a few things that did go well. I took my wife on a vacation to Savannah, Georgia (with no kids!) which is a place she had wanted to visit for a long time. We took a family vacation to Asheville, North Carolina which was really fun. I got my wife a dog. I got to visit two new countries, Bulgaria and the Netherlands. I met some cool and interesting people in the course of teaching classes. I recorded a couple new songs that I’m pretty happy with, although they’re not finished yet.

What went well this year in my professional life? Like I mentioned above, it was my overall highest-income year ever and my second-best year for product revenue. I learned a lot about what works and doesn’t work in freelancing/consulting. I appeared on two podcasts. I started a new product business which only took nine days to earn over $100 in revenue.

What didn’t go well this year in my personal life? I didn’t spend nearly as much time with family and friends as I would have liked. My personal life was almost nonexistent. I also would like to have spent more time on hobbies, especially playing music and reading.

What didn’t go well this year in my professional life? 2017 was too much of a financial rollercoaster. I started the year with a lot of money, then gradually ran out of money as my spending exceeded my income. I spent about five months focused on training (March to July) and seven months doing contracting (January, February and August-December). Gluing myself to the desk all day every day has always been a struggle for me, and so the months I’ve spent contracting have been really unenjoyable. So something that didn’t go well is that I spent a lot of time doing things I didn’t want to do.


My top goal for 2018 is to escape contracting and go full-time on my new product business, Six Figure Coding. This has in fact been a career goal of mine since around 2008. I finally feel like it’s realistic. I’ve learned a lot about entrepreneurship in the last ten years and I think I learned more in 2016-2017 than any previous period. I truly believe that if I apply everything I’ve learned to Six Figure Coding, it will be successful.

Financially, my goal is to earn $100K from Six Figure Coding in 2018. I can imagine it going something like this: $1,000 in revenue for Q1, $9,000 in Q2, $25,000 in Q3, $65,000 in Q4. I can quit contracting when Six Figure Coding reaches a steady ~$10K/month. My dream is to be able to quit contracting in July 2018. My goal is to quit contracting sometime by December 31st, 2018.

I don’t intend to pursue any new training work in 2018. I will be teaching just two classes, one in May and one in June-July, because those two classes still make business sense for me. The rest of the time I plan to just do regular old contracting. 2017 was a year of stumbling and flailing and experimenting. I intend 2018 to be a year of executing on what I know works.

These are my two professional goals for 2018:

I honestly think that’s it for professional goals. If I can hit those two, I don’t give a fuck about anything else (professionally, that is).

Quitting consulting is also as much a personal goal as it is a professional one. Quitting consulting will ostensibly allow me to finally have a social life again as well as pursue various hobbies that I’ve neglected for years.

I do also have some vague personal goals which I need to think about more. Right now my plans for the year look something like this:

January, February, March: contracting
April: Vacation (April 1-8?), contracting
May: MicroConf (April 29-May 2), contracting, training (May 21-25)
June and July: contracting, training (June 11-July 6), contracting
August-December: contracting

Lastly, something else I like to do from time to time is compare where I am now to where I was at this time in previous years.

In December 2016 I was working on a miserable, excruciating contract project. That sucked a bunch although at this point I knew I was going to make the leap to training soon, so I was optimistic. I’m feeling better about life in December 2017 than I was in December 2016 though. Product-wise, Angular on Rails’ revenue had started to peter out in December 2016.

In December 2015 I was working at a miserable full-time job with no end in sight. I actually quit that job in early 2016 with no other work lined up just because I hated it so much. At this time I don’t believe I had any product business going at all. I had recently shut down Snip after five years of effort. This was a pretty dark time professionally.

In December 2014 I was working for Andela and about to go to Nigeria. Andela was only part-time and I had way less work than I needed to make a “normal” income.

In December 2013 I had recently been fired from a job which ended at the end of September 2013. I had tried and failed to get my first substantial freelancing client. I was running out of money but also unwilling to go back to a job. This was one of the worst times ever in my professional history.

People often compare where they are now to where they could potentially be if all their dreams came true. This is often a demoralizing exercise because you’ll never be where you could potentially be. It’s often much more gratifying to compare where you are now with where you were at this time in previous years. As I look back at 2013-2016, I realize that I’ve come an incredible distance since when I started freelancing. I’m looking forward to seeing how December 2018 compares with December 2017.

Watch me try to get my first Shopify client

For the last 6 years I’ve done mostly the same kind of freelancing work: web development at $X/hour. When I first started freelancing in 2011 I had some vague idea of the exciting life I was going to live, but I slowly realized that being a freelancer programmer is basically just a glorified job. Or more accurately, that’s true for most freelance programmers most of the time.

Because I intend to eventually to become a millionaire, I’ve been working for years on trying to build a product business. Those efforts date back to about 2008. My first five attempts didn’t make any money. My sixth attempt made something like $5,000 over the course of five years. My seventh attempt made about $8,000 over the course of a year. My entrepreneurial skills have been improving over time.

You could kind of say that my first five entrepreneurial attempts made an average of $0/year each, then my next one made an average of $1,000/year, then my next one made an average of $8,000/year. Now that I’ve gotten some decent entrepreneurial practice, I’m ready to build the business that will make $100,000/year. I’m not yet experienced enough to make a $100,000/year idea appear out of nowhere but I do believe I’m now experienced enough not to mistake a $1,000/year idea for a $100,000/year idea.

I’ve also come to understand that successful product businesses aren’t brainstormed but stumbled upon. So the question I’ve been asking myself has gone from, “How can I come up with a good product idea?” to “How can I put myself in a situation that will cause me to stumble upon a good product opportunity?”

I’ve cycled through a lot of different potential answers to that question. My current idea is that maybe I can get involved in the Shopify world and try to get a product idea to emerge there. How did I pick Shopify? I really don’t know. I just kind of randomly picked it.

My thought is that if I want to stumble upon a good Shopify-related product idea, maybe I can do some Shopify consulting for a while to give me some visibility into that world. In fact, maybe that Shopify consulting can even replace my freelance programming income and provide me with a better lifestyle during the time I’m working on my ultimate goal of build a product business.

The kind of Shopify consulting I’m thinking of doing is to help Shopify store owners build their email lists and make more sales to their existing email subscribers.

I’ve run out of time to write this post (gotta get back to the hourly programming work!) but I plan to share more as I go.

Why most freelancing advice doesn’t apply to programmers most of the time

In the business advice I encounter, I’ve noticed certain ideas coming up again and again:

  • It’s better to sell more stuff to existing clients than to go find new clients
  • Repeat business is a great thing and you should try to get it
  • Referrals are very important
  • Testimonials are very important
  • Charge more

I would consider all this very good advice when applied under certain circumstances. However, it seems to me that the vast majority of freelance programmers are not in the right circumstances to apply most of this advice. Let me explain what I mean.

Consulting vs. contracting

A lot of freelance programmers, including myself, call themselves “consultants”. The word “freelancer” has bad connotations, like somebody who’s between jobs or not fully committed. The word “consultant” sounds more professional. But that doesn’t make a difference in the work that’s being done.

Most “consultants” are really contractors. Specifically, most consultants do staff-augmentation contacting. A business has an employee-shaped hole and I fill that employee-shaped hole. I get plugged into the client’s GitHub account and the client’s issue tracker. I attend all the client’s regular meetings. I work roughly the same schedule as the rest of the client’s development team which consists of full-time employees. I’m paid by the hour. Maybe I’m even required to work exactly 40 hours a week. Maybe the only thing that differentiates me from the client’s employees is that the employees have W-2 paperwork and I have 1099 paperwork.

Hopefully I have more flexibility than that, like maybe I work 20ish hours a week instead of 40 and I have a little schedule autonomy. Maybe I’m paid by the day or week instead of by the hour. But the nature of the relationship is still staff augmentation.

So that’s contracting. Now here’s my definition of consulting. The way I define consulting is that the client has a desired outcome of an engagement and you’re hired to help achieve that outcome. In this case the client doesn’t really care how many hours you spend to achieve the outcome (to an extent of course) or what technologies you use (within certain constraints) or any of the stuff that’s so rigidly dictated within staff-aug-style contracting. In this case hourly billing wouldn’t make sense. The compensation goes by the project.

Now let’s talk about why most freelancing advice doesn’t apply to contract programming.

Why “sell more to existing clients” doesn’t work for contracting

If I’m in a staff-aug relationship with a client, I’ve been strongly pigeonholed into a narrow role. I’m seen as a “coder” and a “geek”. I might even be seen as a “wizard” or a “genius” but, in my opinion, in a negative way because programmers have acquired (perhaps deservedly) a reputation for being interpersonally inept geeks who are myopically focused on technical matters to the exclusion of the more pertinent and important business realities. In my experience this is a very hard perception to shake.

In my experience, business owners and other stakeholders aren’t interested at all in getting business-related input from developers. They’ll almost certainly claim to be interested, and even take time to solicit superficial feedback (“Do you guys like the version of the marketing site design with the blue background or gray background better?”) but they aren’t genuinely interested in the developers’ input on these matters. And frankly, they’re probably right 95% of the time not to be interested, because most developers aren’t qualified to comment on business matters. Programmers have a reputation for not being knowledgeable on business because, most of the time, they really aren’t.

So that’s one problem: there’s a perception that I’m a coding machine and that they should use the coding machine to write code. There’s another problem, too, which is that I’ve already arranged with the client that for $X/hr, the client can give me stuff to do and I’ll do it. Let’s say a client is paying me $100/hr or $4000/week for 40 hours a week. It’s going to be pretty tough then to pitch the client on, for example, flying me to their office to train their staff for a fee of $10,000/week. I’ve already demonstrated to the client that my time is worth $100/hr. Now I want them to pay me $250/hr? It’s a pretty tough sell. And it’s weird to come out of nowhere and offer some additional service. Nobody ever does this (in my experience) and on the few occasions that I’ve tried, it hasn’t worked, and only made me feel stupid for trying.

Now let me explain why selling more to existing clients can work much more easily in a true consulting relationship. Let’s a say a client hires me to deliver a training engagement and, during the training, I notice that a couple students are so inept that they shouldn’t really have been allowed to participate in the class in the first place. I can mention this to the client and offer the additional service (for an additional fee) of helping process the applicants. In this case the “upsell” is very welcome because the amount of additional value I’m proposing to provide probably well exceeds the additional fee I’d require. Plus the client already sees me as someone who’s totally qualified to perform the service and naturally fitting in this role. (By the way, the example I just gave isn’t hypothetical. It’s from a real experience I had.)

Why “repeat business” doesn’t work for contracting

When I’m working in a staff-aug relationship, the work doesn’t really consist of discrete projects for the most part. It’s just a continuous stream of features and bugs, some big and some small. And my performance probably isn’t evaluated on a per-project basis but just the general impression of how I’m doing with this continuous stream of features and bugs. If the client likes me, my reward is more work. My reward is I don’t get fired and I get to keep working with the client for another week or month. The “best” scenario is that the client likes me so much that they never fire me and I get to work there for the rest of my life. A thoughtful person might ask how that’s freelancing and my answer would be that it’s fucking not. It’s a fucking bummer is what it is.

I’ve experience the other kind of repeat business and it’s great. When I’m not doing contracting, I’m doing corporate training or some other kind of teaching. A few weeks ago I went and taught a class for a very large company for whom technical training is a new thing. (I taught this class under a training company I’ll call Company A.) After I taught this class, the end client called Company A and told them they’d like to make them their “premier training partner” and the training company told me they want to use me for future classes. When I heard this, it was such a great feeling. It felt like a big win. I’ve also had other teaching clients use me multiple times and it felt like a huge win in those cases as well. I don’t think I’ve ever felt like I’ve “won” by having a staff-aug client simply not fire me. Again, the idea of “repeat business” for staff-aug clients just doesn’t even really apply.

Why referrals don’t work (very well) for contracting

If I teach a one-week class for a client and the client likes it, that client may refer me to other prospective clients. This in fact has happened to me. The situation is a little different with contracting clients.

Let’s say I’m working with a contracting client and the client absolutely loves me. What the client will want to do, of course, is hang onto me for as long as possible. The client won’t refer me to somebody else. Why would they? They want as much of my bandwidth as they can possibly get. What if we stop working together? Well, if I mention to my now former client that I have some availability again, they’ll probably want to hire me again. Why would they send me to somebody else if they can have me themselves? And of course if we parted ways on bad terms, they probably won’t be singing my praises around the neighborhood. So whether the client liked me or didn’t, I’m probably not getting many referrals from them.

When I get a contracting referral, it’s usually not from a past client but a “co-worker” from a previous client engagement. That’s fine, and in you could even say it’s necessary, but there’s a key weakness to these types of referrals in that it’s not a buyer-to-buyer referral. I’ll explain what I mean shortly.

I’m going to keep using examples from my teaching experience because that’s what I know. If I teach a class for a client, that client probably won’t need/want 100% of my available time extending into the indefinite future, which is what a contracting client would want. The client probably just wants somewhere between a few days and a few weeks of my time. So there’s plenty of room for multiple clients to use me without those clients competing too much for my time. And it’s entirely possible for these referrals to be buyer-to-buyer referrals. This is significant because buyers (that is, the people with the decision-making and check-writing authority to hire me), I believe, trust recommendations from other buyers more than they trust recommendations from their subordinates.

It’s also much more natural for me to ask a training client for referrals than a contracting client. At what point, exactly, would I ask a contracting client for referrals? Again, if the contracting client likes me, they’ll want to keep using me, and if not, they probably won’t want to refer me anyway. I guess the only “referrable” scenario I can think of is if the client likes you but goes out of business or gets a new job.

Why testimonials don’t work that well for contracting

As I mentioned earlier, contracting usually doesn’t consist of a series of distinct projects with measurable outcomes but of a steady stream of features and bugs. Not only is the work typically not of a measurable nature, but the work of any one programmer is often blended together with the work of all the other programmers on the team, making it pretty thoroughly impossible to measure the value of any particular programmer’s contribution. Even if the client loves the shit out of you, the kinds of testimonials the client could provide don’t really match up with the kinds of testimonials a freelancer would want. The kind of testimonials you want are “Jason helped us double the conversion rate on our sales page which immediately doubled revenues.” But the kind of testimonials you can get from contracting clients are more like, “Jason is a rock-solid communicator and I knew I could absolutely trust him to run our development team.” The latter kind of testimonial might make me feel good, and it might even help me get more clients in the future, but it’s more of a “character” testimonial, not a “results” testimonial. And in my experience, contracting testimonials are kind of awkward to get, because when do you get them? The only purpose of a testimonial is to help get a new client. So if I try to get the testimonial while you’re still working with a client, it’s kind of weird because from the client’s perspective what am I doing, am I trying to leave? The other option is I can ask for a client’s testimonial after I tell them I don’t want to work together anymore, which is also weird for obvious reasons. And the last scenario is that the client is the one who ends the relationship, in which case a asking for a testimonial would be weirdest of all. I know I might be overthinking it but that’s the way I look at it.

Testimonials for project-based work, on the other hard, are much more natural. Projects pretty much by definition have a beginning and end. If I teach a one-week class for a client, it’s totally natural for me to have a conversation with the client afterward which includes the solicitation of a testimonial.

Why “charge more” can be hard with contracting

Lastly, it’s very common to hear the advice “charge more”. It’s absolutely true that no matter how much you’re charging, you could be charging more. The reason this is true is that no matter how valuable your services are, you could always make them more valuable. There’s a very important nuance to this truth, though: market rates are real. I’ll explain what I mean.

If you’re charging $25/hr for programming, you absolutely can (and should!) raise your rates to $50/hr. You can even double that again to $100/hr and still get work. But good luck charging $900/hr for programming. There’s a line somewhere. I’ve charged $100/hr for plenty of work in the past, and I’ve even charged as much as $150/hr for emergency work or highly specialized work. But I’ve found that if I want to charge a client something like $150/hr or even $120/hr for regular old staff-aug development work, they’re going to tell me that it’s substantially more than they’re paying any of their other team members and they’re going to want me to explain to them, quite understandably, why they should pay me so much more than anyone else. “Because I’m really good” is not a compelling answer.

I’ve discovered that there seem to be a few particular ways to charge better-than-market rates: 1) do very specialized work that’s not readily available anywhere else, 2) charge a “rush rate” for an emergency, 3) charge by the project and offer a service other than programming. That last point is so important that I made it bold and underlined.

There’s a perception in my experience that coding is coding and that good programmers cost between $50 and $120 per hour. This perception is totally wrong (programmer productivity varies not by a factor of 2X or 3X but by a factor of infinity*X because some programmers are so bad that they provide zero or negative value), but that doesn’t mean that the perception doesn’t have real power with real effects. So I’ve come to believe that if I want to escape market rates for programming, I have to offer a service other than programming. Let me talk about what that has meant for me.

The solution

I’m eternally and intensely interested in how to make more money in less time. I raised my freelance rate over time from $50/hr up to $100/hr and, like I’ve said, even up to $120/hr or $150/hr at times. But I’ve discovered a ceiling just above $100/hr that seems really hard to break through. That’s where that force of the market rate perception comes in. Most clients perceive the top of the range to be around $100/hr. I first bumped up against this ceiling in 2014 when I first started trying, unsuccessfully, to make $150/hr my new “official” rate.

For a couple years I desperately wanted to understand how to break through this ceiling that seemed to exist somewhere between $100/hr and $150/hr. Then, in 2016, I heard a podcast episode about technical training and saw it as the potential answer to my question. I didn’t realize that companies regularly pay up to $5,000 a day or $25,000 a week (or more, apparently!) for technical training. So I made it my business to break into training, and I did it. Technical training has made up most of my income so far in 2017. (I’m writing this is June 2017.) I’ve made roughly as much from training in the first five months of 2017 as I did in the whole year of 2016.

So I wouldn’t say that training is the answer but it’s an least an answer. It has worked pretty well for me so far so my plan at this point is to apply the principle of “double down on what works” and just take the training stuff as far as it will go. I’m not charging $5,000 a day yet but I intend to get there. I understand that some consultants charge thousands or even ten thousands for a single one-hour speech, and since training is a form of speaking I imagine that it might be a good stepping stone to even higher fees. But like I said, my plan for now is just to double down on training and see how far I can take it.

How I got started in training

As is so often the case, I have very little time to write this so I will dash it off as quickly as possible.

I got an email today asking a few questions about training. I’ll answer the questions here in case anyone else asks the same questions in the future.

The first question was about training companies. I wasn’t aware of this situation before, but there exist a ton of technical training companies who act as brokers between technical trainers and the end clients. I heard an episode about training on the Freelancers Show where Reuven Lerner recommended to work through training companies first, then go out on your own later. I would second this recommendation.

Here’s how I identified training companies to work with: I made a list of technologies I thought I could teach, then I googled “[technology name] training” or “[technology name] training company”. My list included Angular, Ruby on Rails, Ruby, JavaScript, HTML, CSS, PHP, MySQL, PostgreSQL…you get the picture.

I checked each training company’s website to make sure they offered a least one class I thought I was qualified to teach. Then I emailed the training company and said (roughly), “Hey, I’m an instructor. I teach X and I see you offer X. Want to talk?” The response rate was insane. I think more than half the companies I reach out to respond.

I also keep an Excel spreadsheet where I keep track of who I’ve contacted, when I contacted them, whether they responded, etc.

It seems that most training companies want to have you do something called a test teach before you’re an officially-vetted instructor with them. I found this process to be surprisingly time-consuming, but if you want the rewards, I guess you have to put in some effort.

Some training companies will provide the actual training material for you and some will expect you to provide your own. They usually use the term “courseware” for the material. Some training companies want your fee in the form of an all-inclusive rate. Other training companies just want your day rate exclusive of expenses. I understand market rate for working with training companies in the US to be about $1000/day plus expenses. I understand market rate for working directly with clients in the US to be $3000/day or $5000/day or more. Training companies tend to have big-name clients. I’ve worked for clients like HP, VMware and Deloitte through training companies.

I’ve noticed a commonality among trainers: they seem to have written a book or at least have a lot of technical writing available online. Some trainers get leads directly via their book or blog posts. This is a great situation but it’s a long-term strategy and the lead flow isn’t very easy to control. It’s a little easier to make your own destiny by proactively reaching out to training companies for gigs, although they of course take a hefty cut. Best of all is probably to proactively reach out directly to end clients, although that’s much easier said than done. If I had to guess, I would guess that training companies have sales teams that directly reach out to Fortune 500 companies and pitch the training companies’ services. They have a lot of overhead so they’re probably not waiting around for someone to call them.

How to meet other freelancers

I saw a question on /r/freelance the other day about how to meet other freelancers. Here’s how I’ve met other freelancers.

Local tech meetups. Grand Rapids has a number of tech meetups including a Ruby meetup, a general web development meetup, and a few others. I only go to the Ruby one and the web development one. At both those meetups I’ve met a number of freelancers.

National conferences. I’ve been to Windy City Rails in Chicago a couple times and met freelancers there. Last September I went to Double Your Freelancing Conference (DYFC) where I met a ton of freelancers. The people I met at DYFC are some of my favorite people I’ve ever met. One thing about national conferences is that due to their cost they tend to filter out people who aren’t very serious about what they’re doing, meaning every single person you meet there is probably pretty serious about what they’re doing.

Jobs and freelance gigs. In the past I’ve tried to keep in touch with my former employers and co-workers after I’ve left jobs. Sometimes these people go freelance later. I’ve also found that the kind of clients who will hire me as a freelancer will also hire other freelance developers. I like to reach out to these people and make it a point to form relationships with them because these relationships can be mutually helpful as time goes on.

Online communities. When I bought Double Your Freelancing Rate I was given access to something called The Freelancer’s Guild, on online forum. This forum has been a good place to ask and answer questions with other freelancers. The other day I reached out to someone I found on /r/freelance and had a Skype with him. Now we have each other in our network. I also run a Slack organization full of freelance developers.

By following influencers. I listen to a number of freelancing podcasts, follow freelancers on Twitter, and occasionally read freelancing blogs. Sometimes I comment on what these people are saying. Sometimes a conversation emerges, and sometimes out of those conversations a relationship develops.

This blog. Just like I sometimes engage with people I follow, there are some people who follow me (inexplicably) and engage with me. This is another way I’ve met people. If you’d like to meet me this way, send me an email at I’d love to talk with you.

Million Dollar Consulting

I believe I first read Million Dollar Consulting by Alan Weiss in 2011. I thought it sucked, and I thought most of it didn’t apply to me. I thought it only applied to fancy consultants who worked exclusively for huge companies.

Over the course of the next five years I kept hearing about it, so I decided to give it another look. This time around it seemed like an entirely different book. I was clearly just not ready for its advice the first time I read it. This is a wonderful example of the fact that what you get out of a book depends on more than just what’s in the book. A book’s value equals the book’s information multiplied by who you are at the time. If you gain knowledge or have additional experiences between two readings of the same book, you might see the book in a totally different light. You might grow “hooks” that catch parts of the book you didn’t catch the first time around.

One of the things that stuck out most for me on this reading of Million Dollar Consulting was the importance of relationships as it pertains to getting clients. The author said people don’t go googling for consultants and I think for the most part he’s right. There’s too much trust necessary in hiring a consultant to just find one online and hire him. My understanding is that people like this are usually sought out via referrals. This got me thinking about how to develop good relationships with high-caliber people. One way that I’m doing this now is through my BNI group. I’ve gotten one client via BNI so far, a really good one. Another way I’ve found to form good relationships is by attending conferences.

Another takeaway from the book was the idea of getting strong “conceptual agreement” to a project before presenting the proposal. My understanding of Alan’s sales process is that by the time they get to the proposal/contract, it’s just a formality. They’ve already talked enough about the project by that time that the client is already totally onboard with the project.

I also gained a new term from reading this book that I don’t know how I lived without before, and I don’t know how I missed it the first time. The term is market gravity which in my understanding is how easy it is for you to attract clients. I used to think that the way to smooth out the boom-and-bust cycle of freelancing was to work for a number of clients at a time. I tried working that way for a while and it’s fucking horrible. What I believe now is that it’s best to have one client at a time and to cultivate the ability to quickly and easily spin up a new client engagement at the time your current engagement ends.

I would definitely recommend this book to any freelancer. If it doesn’t seem good the first time around, maybe give it some time and read it again.

How to build a network as a freelance programmer

Relationships are the foundation of business, especially freelancing

Success in most business endeavors is largely dependent on the owner’s ability to build and maintain relationships. Some businesses are more relationship-oriented than others.

Freelance programming is one of those particularly relationship-oriented kinds of businesses. An individual freelance programmer is an owner of a professional services business, similar to how a solo lawyer or solo bookkeeper is the owner of a professional service business.

A professional service business is especially relationship-oriented for two reasons.

The first reason is that a large amount of trust is necessary in order for a client to hire a service professional. My client engagements often cost many tens of thousands of dollars and can last many months or even years. If you’re going to spend that kind of time and money with someone, you’re going to want some very good reasons to believe you can trust the person. It’s obviously a whole different ballgame from buying, say, a bottle of shampoo, which requires very little trust and not much money (unless it’s some of that really good million-dollar-a-bottle shampoo). A person has to trust you in order to hire you.

The second reason a professional service business is particularly relationship-oriented is that the service provider and the client spend so much time interacting. The client and vendor have to like each other, or at least they have to like each other enough not to want to fire each other. If you act like a weirdo idiot dipshit toward your client, they’re probably not going to refer you to many other clients. It’s not enough to hit your deadlines and “do great work” and all that stuff. You have to be a good communicator as well in order to maintain the relationship. In fact, many people have told me that they’d prefer a developer who’s a good communicator and just an okay developer over someone who’s an awesome developer but shitty communicator.  A person has to like working with you in order to refer you.

How jobs get filled

The way jobs get filled and the way freelancing gig get filled is pretty much the same. I’ll just use the word “job” to mean either actual job or freelancing gig.

I think most people are aware that most jobs are filled via referral. This goes back to the trust thing. When a company has a need for, say, a Rails developer, the first thing the boss might do is to think of anyone he personally knows who does Rails work. Then he might ask his employees if they have any friends who do Rails who might want to work there. Then he’ll probably reach out to people outside the company to ask the same question. Only if those things don’t produce satisfactory results will he put up a job posting. So the priority list goes like this:

  1. Developers I know
  2. Developers my employees/co-workers know
  3. Developers who anyone I know knows
  4. Strangers from job boards

Obviously, the amount of “trust juice” is highest at the top of the list and lowest at the bottom. That’s why job board applicants often have to jump through a ton of hoops, but developers who are referred from trusted sources might not even have an interview, not even as a formality.

If you think of groups 1 through 4 above as concentric circles expanding outward from the hiring manager, the aim of your networking is to be in the “developers I know” circle for as many people as possible.

The Networking Snowball

“The Networking Snowball” is something I made up just now. It’s how you can build a network if you’re starting from nothing.

I started freelancing in 2011. I was living in West Michigan after having bounced around the country for a number of years, meaning I didn’t have deep roots anywhere. In addition, I was working on transitioning from PHP to Rails (I move I’ve never regretted), so a lot of my old contacts weren’t terribly valuable because they mostly led to work that wasn’t very interesting to me anymore.

Here’s what I did when I started freelancing, which is what I would recommend to anyone who’s starting out or thinking about making the leap:

  1. See if your current or most recent employer will be your first client
  2. Reach out to all your past employers (at least the ones you liked) and see if they’d want to be your client
  3. Reach out to all your contacts and see if they know anyone who could use your services
  4. Start hitting up the job boards for work

You’ll notice that, like the list of hiring steps from earlier, these steps are in descending order from “highest amount of trust juice” to “lowest amount of trust juice”. Who would be more likely to pay you money to do work for them than the people who are paying you money to do work for them right now? And the next best bet is people who aren’t paying you know, but have happily paid you before.

Going through this list of four steps will provide you with your first paying client which will be the nucleus of your snowball. Even if your current employer wants to be your first client, it’s still a good idea to carry out steps two and three and just let people know what you’re doing. If you announce that you’re now self-employed, but also mention that you’re not available at the moment because your services are so in demand, it will make you all that much more desirable in their eyes.

(By the way, notice how I didn’t say it might provide you with your first paying client. It will. If steps 1 to 3 don’t work, you’ll eventually get work if you diligently the job boards and contact a large number of prospects. It might seem like your efforts are futile and you’re wasting your time, but then at some point everything will hit at once and you’ll get some work. You just have to put in the time and effort.)

As part of building your snowball you should always have a mind for “collecting” people. When you start freelancing, you should spin up a CRM account if you don’t already have one. Begin by putting every professional contact you can think of into your CRM. Then, each time you get a client, put everyone at your client’s company into your CRM who you think could be useful to you in the future. This also goes for people you meet at tech meetups, conferences, and whatever other kinds of networking events you might go to.

If you come across a particularly interesting person while working with a client, especially if it’s a fellow freelancer, ask that person to an off-the-clock one-on-one meeting to get to know each other a little better. If the other person is business-savvy, and especially if the other person is a freelancer, he or she will get what you’re talking about and usually be glad to get together compare notes with you. If the other person is a freelancer, you should ask him or her what would be a good referral, and just how you can help in general. Usually the other person will naturally reciprocate the question.

Here’s the next step of building your Networking Snowball: go through your CRM periodically, maybe once a month, and reach out to everyone who you think it makes sense to reach out to. A question that might come to your mind is, “What do I say?” Good question. I like to reach out only to business owners or salespeople and ask, “Is there any way I can be helpful to you right now? Are there any intros or referrals you’re looking for at the moment?” People will usually appreciate this offer for help and reciprocate the question. This tactic is a good one to use periodically, but it’s also a good one to use on the occasions when you’re looking for work. You can elicit referrals from people in this way without looking desperate and without looking like you’re only contacting them because you want something out of them.

How to continue your networking self-education

I’ll leave you with a list of good networking books, in no particular oder:

  • Get Clients Now! by C.J. Hayden
  • Endless Referrals by Bog Burg
  • The Go-Giver by Bob Burg
  • Dig Your Well Before You’re Thirsty by Harvey Mackay
  • The Little Black Book of Connections by Jeffrey Gitomer
  • How to Win Friends and Influence People by Dale Carnegie

What to do when the client doesn’t pay

It’s a really bad feeling to put a bunch of time into a project for a client and then get stiffed for the bill. This happens to a lot of freelancers. It has certainly happened to me. It doesn’t happen to me anymore. I’ll tell you why it doesn’t happen to me anymore in a bit, but first let’s talk about what to do when you’ve already been stiffed.

What everyone wants to know is how to recover the money. The unpleasant fact is that if you got stiffed by your client, there’s a really good chance you’re never getting your money. I’m guessing that that’s not the advice you were hoping for. The good news is that you can do something even BETTER than getting your money back (at least over the long run), which is to make sure you never get stiffed again.

In order to understand how to avoid getting stiffed, let’s take a look at the reasons a client might not pay. Here are some:

  • They don’t have the money
  • They’re dicks
  • They’re insane
  • They think you didn’t do what you agreed to do (even though you did)
  • You genuinely didn’t do what you agreed to do, and you actually don’t deserve the money
  • Some combination of the reasons above

Let’s look more closely at each reason and what you can do to combat it.

They don’t have the money

It’s better to work with clients who have a lot of money than clients who don’t have very much money. This statement sounds like a no-brainer but I’m embarrassed to admit how many times I’ve chased after prospects who ultimately turned out not to have very much money.

There are two tactics I use now to avoid working with clients who don’t have much money.

The first tactic is that I require a deposit. The amount doesn’t matter too much; a few hundred bucks is fine. The point is to see how the prospect reacts to the idea of a deposit. If they push back for any reason, that’s a negative signal. I recently “lost” a prospect because when I asked for a deposit he got all in a huff and said he’s NEVER worked with a developer who has required a deposit, and as a result he thought I was “too inexperienced”. How’s that for backwards? Every serious freelancer I know requires a deposit. It’s noobs who don’t require a deposit. I was of course very happy to let my prospect out himself as a bad apple before I invested more time into the conversation.

The second tactic I use is what Perry Marshall calls “racking the shotgun”. In my very first meeting with a prospect, I’ll often say something like this: “I like to start with a small five-thousand dollar project, and then as long as we’re both good after that, we’ll do more work together.” The key here is that the client needs to agree with me that $5,000 is small. If they don’t consider $5,000 to be small, that’s a signal that they probably don’t have very much money.

They’re dicks/they’re insane

I’m lumping these two problems together because they mostly have the same solution, and the solution is simple: the more you work with clients who come from referrals from trusted friends in your network, and the less you work with random weirdos from the internet, the smaller your chances of ending up working with crazies/assholes. This isn’t a 100% fool-proof tactic but it’s something.

You also sometimes end up with crazy clients because you get desperate. This can be solved by having a healthy lead flow, which is a whole other topic unto itself.

And by the way, here are some things I’ve found that are signals of a crazy person:

  • Extremely long emails
  • Talking way too much
  • Extreme frequency of emails/calls/texts
  • Unrealistic expecations
  • Showing up to meetings naked

They think you didn’t do what you agreed to do (even though you did)

If this is the case, I might invite you to abandon your own consciousness for a minute and look at the world through your client’s eyes. Did you lay out your agreement in a way that was 100% clear and complete with absolutely no room for misinterpretation? Did you create some tangible representation of what you were going to do, be it a document, a series of wireframes or mockups, some user stories, or some combination of those?

If the client thinks you didn’t do what you agreed to do, I think there are only two possibilities: a) the client misunderstood because there was too much room for interpretation in your agreement, or b) the client is just not the kind of person who understands plain and simple things. (People like that do exist! The world is full of fucked up weirdos!)

The corresponding solutions to these problems are a) be less ambiguous in your agreements and b) don’t work with clients who are dumb or crazy or whatever.

One of favorite ways to be less ambiguous is to go through a usability testing process with my clients. If you’re unfamiliar with usability testing, I’d recommend the book User Interface Design by Soren Lauesen. Basically the idea is that you let the client help you design what you’re going to build. If the client helps design the work, it’s much less likely that they’ll expect anything much different from what you intend to build.

And as for not working with dumb/crazy clients, it again comes back to having a strong network of people who will refer you good clients, and having good lead flow.

You genuinely didn’t do what you agreed to do, and you actually don’t deserve the money

I don’t think this one requires much explanation. If you fucked up, you shouldn’t take your client’s money.

The take-away

If you’re having problems collecting payments from clients, that’s a symptom of a problem you have further upstream. To avoid getting stiffed by clients, you should:

  • Require a deposit (or even require 100% upfront payment, making it physically impossible to get ripped off)
  • Filter out broke clients by “racking the shotgun”. Toss out a number in early conversations (“projects start at $5K”).
  • Filter out crazy/stupid/mean/whatever clients by building a strong network so you don’t have to resort to job boards
  • Lower the chances of misunderstandings by communicating agreements in a very clear, crisp manner, preferably by allowing the client to be involved in the design process

By the way, I said earlier that if a client doesn’t pay you, your money is probably gone forever. Before you hold a funeral for your invoice you might want to contact Julie Elster who specializes in helping freelancers collect outstanding fees.

The optimal number of clients to have at once

My freelancing boom-and-bust cycle used to look like this: I would get a client, usually one who wanted 40 hours a week, and work with that client for some number of months. During the time we were working together I would be too busy with client work to market myself, so when the client engagement inevitably ended, I would have to scramble to find my next gig. Since I would be desperate, I would often compromise on things like rate, payment terms, weekly workload, “coolness” of the client and other things. So I would end up with a client who was in one or more ways not a very good fit, but I had painted myself into such a corner that I didn’t have much of a choice. The worst compromise is for me to work with a shitty client who I want to get away from as fast as possible, meaning that the client engagement doesn’t result in a permanent relationship (meaning referrals), but that it ends in a “thanks for the business, have a nice life” kind of way.

I used to think that a good way to smooth out this boom-and-bust cycle might be to work for more than one client at a time. Working 20 hours a week for two clients is better than working 40 hours a week for one, right? If one goes away, it’s not the end of the world. I did in fact try out this way of working. At one point I found myself working for eight different clients at once! That was a nightmare.

What I found in practice was that two 20-hour clients adds up to more total work than one 40-hour client. Each client has a certain amount of overhead in terms of both time and in terms of space in your brain. If I juggle multiple clients, I have to make weird decisions about whose work I work on when. I rob Peter to pay Paul. I usually have a “favorite” or a “main” client, with the other client being more of an obligation than a privilege.

What I’ve come to believe is that working for multiple clients at once is not the solution to the boom-and-bust cycle.

What I think is the solution to the boom-and-bust cycle is having what Alan Weiss calls market gravity. I’ve spent the last few years building up a healthy professional network of ever higher quality. Because of this, the last time I wanted to find a new gig (and this time it was not a need but a want, which is of course always preferable), all I had to do was ping my network and I suddenly had a bunch of leads available to me.

So my strategy for security now is not to try to have multiple client engagements in parallel, but to always be forming more and more relationships with people of higher and higher caliber. If a person has enough strong relationships with the right kind of people, I think it’s unlikely that that person will find him- or herself short of work for very long.

If you’re interested in learning more about how to form more and better relationships, you can sign up to get notified of the release of my new book, Business Networking for Freelance Programmers.