Category Archives: Freelancing

I’ve quit freelancing for the indefinite future

Over the last 8 years I’ve spent a lot of time studying, thinking about, and writing about freelancing. I’ve been a freelancer on and off—mostly on—since 2011. I had had a dream for a long time of building a high-income, low-labor lifestyle as a successful consultant, kind of like what Alan Weiss has done.

Since I’ve written a decent amount about freelancing on this site in the past, I feel it’s appropriate to give the following update: I’ve given up on my freelancing dream. It’s a good thing, though, because the only reason I decided to leave the path I was on is because I found what I believe to be a better path. (Also, I discovered that freelance programming is basically a sham and 99% of “freelance” programmers are just contractors and glorified employees and that the kind of success I was fuzzily envisioning is not really possible, but that’s a different story.)

What’s the new path I’m on? I don’t want to get too much into the details publicly but I’ll say that I’ve found myself in a monogamous relationship with a client who I like more than any other client I’ve worked with. He and I have been working together for just over a year. All the aspects of the working arrangement are good, about as good as one could hope for. It’s basically a job, but a really good job. I expect that my client and I will work together for many years to come and I don’t expect to be working with any other clients on the side during this time. So, no more freelancing. I’m not saying never again, because who knows what will happen 5 or 10 years from now, but no more freelancing for the foreseeable future.

What I’m NOT ready to give up on yet, or probably ever, is my endeavor to build a successful product business. I don’t think that part of me can ever be killed. You can follow my progress in that area in my Entrepreneurship Journal.

My advice to brand new freelance programmers and aspiring freelance programmers

As time goes on I find myself being asked with increasing frequency what advice I have for someone who’s just starting out as a freelance programmer. Here’s my advice.

Freelancing == marketing

My first piece of advice would be to make the realization that successful freelancing is all about marketing. The one skill that matters more than everything else is the skill of finding clients who are enjoyable to work with, who value the work you do, and can afford to pay well.

It’s pretty easy to find freelancing meetups or freelancing books that discuss things like taxes, accounting, contracts, etc. All that stuff matters but it matters way less than the ability to get good clients. Administrative work is pretty easy. The reward for doing it well is not that great. Marketing is super hard. The reward for doing successful marketing can be life-changing.

The key question to ask in freelancing is: how can I constantly be getting more leads for better, more lucrative clients?

Hunting and farming

There are different methods of acquiring clients. I put these methods into “hunting” and “farming” categories.

Hunting tactics include things like responding to job board ads, reaching out to people you know to see if they can help you find a gig, or going to a conference to try to find a new client. Like real hunting, hunting for clients can be fast, but it’s only successful a fraction of the time, and you don’t always get something good.

Farming tactics include things like writing blog posts, writing books, speaking at local meetups, speaking at conferences, guesting on podcasts, hosting podcasts, and other things that demonstrate your technical competence to a (if done successfully) large number of people. Farming can yield much better results than hunting, but there can be quite a long interval between the time you plant the seed and the time you get to reap the harvest. And just like in real farming, not all the seeds you plant will sprout into plants that bear fruit.

In my freelancing career I’ve kind of made a three-part transition from hunting to farming.

  1. Early on I got most of my gigs from job boards
  2. Later, as I developed a network of peers, I was able to rely more on referrals from past co-workers or “co-freelancers” (and by the way, these usually weren’t unsolicited referrals, but referrals I specifically asked for at times when I needed work)
  3. Later, as I got more into speaking and writing, there were a couple occasions when prospective clients came to me who I attracted via my speaking and writing, and these turned out to be the best clients of all

I strongly prefer “farming” methods. If I go knocking on someone’s door to ask them to hire me, the burden is on me to convince them why I’m worthy and why they should hire me. Plus, if I’m responding to a job ad, I’m typically competing with any number of other applicants to that gig. Conversely, if someone comes knocking on my door and they’re asking me if they can hire me, then the burden is on them to convince me why I should allow them to divert my attention from whatever work I was doing when they found me and work for them instead. It’s a MUCH stronger position to be in, and it typically results in much better fees.

When farming is impractical

If you’re just starting out freelancing and you want to get your first client ASAP, it probably doesn’t make much sense to focus on farming tactics to the exclusion of hunting. Luckily there’s no reason hunting and farming can’t be done in parallel.

I would suggest that the very first thing you do as a freelancer is plant a couple certain seeds:

  • Get a non-Gmail email account (e.g. jason@codewithjason.com)
  • At the same domain where your email is hosted (in my case codewithjason.com) put up a very minimal website – it almost doesn’t matter what’s on it because very few people will be visiting it anytime soon

What I would not advise is to fuck around with business cards, logos, business entities or any of that stuff. None of that stuff, not even having a business entity set up, is a prerequisite to getting your first client. Get your first client first, then deal with that stuff.

Then I would suggest hunting for your first client.

How to hunt for your first client

The people who are the most likely to agree to pay you money for programming now are the people who have paid you money for programming in the past. So my first move as a freelancer would be to go back to all my old employers and say, “Hey, I’m available for freelance work now. Want to work together again?” In fact, that’s exactly what I did when I first went freelance and it worked. It’s a super common thing for people to do when they start freelancing. A lot of times people even start freelancing by going to their current employer and pitching their employer to switch from an FTE relationship to a contract relationship. Sometimes it works.

Next I would reach out to some of my past co-workers and see who of those people I might want to reach out to about freelance work. I would start with the co-workers who I’d feel most comfortable asking about it and then gradually reach further out until there are no more past co-workers who I’d feel comfortable reaching out to. I would probably word my outreach something like, “Hey {{friend}}, I’ve decided to go out on my own as an independent contractor. I’m looking for my first client. Do you know anybody I should talk to?” Most of them won’t know anyone, and for any intros you are able to get through your past co-workers, most of them won’t pan out. This is just how it goes.

If I reached the end of my past employers and co-workers without landing my first freelance client (a distinct possibility!) then my next step would be to start hitting up the job boards. The job board I’ve used most successfully in the past for contract gigs is We Work Remotely, although I’ve had some success with craigslist as well. Sometimes the jobs I apply to are specifically contract jobs and sometimes not. I never shy from applying to a full-time job as a contractor unless it specifically says no contractors. I make sure to be upfront from the beginning that I’m looking for a contract relationship, too. No point in wasting either of our time if they’re not open to it.

The sales process

I see freelancers make a lot of mistakes around the sales process. Ironically, programmers tend to be hypersensitive to anything that appears “salesy” and programmers don’t want to be salesy themselves, but probably the most common mistake I see freelance programmers make is to try to sell themselves too hard too early.

Recently I introduced a friend of mine to a potential prospect via email. He committed the classic mistake of emailing his whole life story to the client including a list of past accomplishments. Dude, they were already sold on talking to you. Just give them your phone number and say give me a call.

The job of an email isn’t to sell the prospect on hiring you for the project. The job of an email is to sell the prospect on getting on a call. The job of the call is to sell the prospect on having another call. Then, maybe, the job of that call is to sell the client of hiring you for a project.

And when I say “sell the prospect on…” I’m really not talking about pitching or persuading. All the sales process is is an honest attempt to answer the question: “Are we a good fit to work together?” If so, then not much persuading is necessary. What is necessary is a certain amount of trust-building. Trust-building can be built a few certain ways. Some simple psychological triggers like hearing someone’s voice and seeing their face are ways to build trust. The more times someone has the opportunity to hear your voice and see your face, and the longer period of time over which that happens, the more they’re likely to trust you. Spending time in person also builds trust a lot faster than just interacting online. That’s part of the reason it’s so much easier to get someone to hire you if have an IRL relationship with that person prior to a discussion about working together.

Another way to build trust is by having strong marketing, strong authority pieces that signal to the client that you know what you’re doing without you having to make a single claim yourself about your own abilities. This brings me to my advice on what marketing activities you should engage in (since again, freelancing is all about marketing) after you get your first freelance client.

Seeds to plant after you get your first client

After you get client #1, I would suggest that you spend all your working time outside of working for client #1 on the job of securing client #2.

If you have a client who’s paying the bills, you can afford the luxury of the slow tactic of farming. Like I said earlier, the farming tactics that will attract clients are speaking and writing. What if you don’t like speaking or writing? Then you can’t farm, and you’re at a huge disadvantage. But hopefully you either already enjoy speaking and writing well enough or you’re willing to take your freelancing career sufficiently seriously that you’re willing to get past the fact that you don’t enjoy speaking or writing and do them anyway. Even just doing one is better than doing neither. I personally enjoy writing and feel like I’m pretty good at it. I am NOT good at speaking and I loathe the sound of my own voice most of the time and I’m embarrassed by 80% of the things I say, but I do it anyway because my desire to be successful is stronger than my distaste for speaking.

In your farming activities you can select from a menu of options:

  • Writing blog posts
  • Writing books (self-published or traditionally published)
  • Developing courses
  • Speaking at local user groups
  • Speaking at small regional conferences
  • Speaking at big national conferences
  • Guesting on or hosting podcast

I myself have done every one of the above items. If I hadn’t done any of these things before and I were just starting out, I’d probably start out with writing blog posts and speaking at local user groups, and in fact that’s exactly how I did start out. These activities are relatively low on the ROI scale but they’re also relatively low on the time/effort/expense scale.

Blogging is most successful when it’s done around a specific topic. For example, I currently mostly write about Ruby on Rails testing. (I also have a podcast and give talks on the same topic.) Deciding on a technical focus can be a little bit tricky. I arrived at the focus of Rails testing as a result of enrolling in 30×500, a class that teaches entrepreneurship skills to developers.

For more help

There’s probably a whole bunch of important stuff I’m leaving out. If you’d like to learn more about how to be a freelance programmer, you can my other posts and/or join my freelancer Slack.

2018 Review and 2019 Goals and Plans

Over the last several years I’ve made several attempts at building a product business. Here is a mostly-accurate list of what I’ve tried according to my memory:

2008: Lunch Hub, a web app that helps co-workers decide where to go to lunch. Revenue: $0

2009: “Owl Draw You Anything”, a site where people submit drawing ideas and vote for existing ideas with money. Revenue: $0

2010(?): ToastySites, a website engine for Toastmasters clubs. No club ever used it. Revenue: $0

2010: Food Near You, a site to help people find locally-grown produce and locally-raised meats. Revenue: $0

Early 2011 to late 2015: Snip, a web app for hair salon scheduling. Revenue: about $5,000 total, IIRC. I believe my peak revenue was about $430/mo. This business was doomed from the start and I shut it down after five hard years. You can read about the shutdown here.

Summer 2016 to summer 2017: Angular on Rails, a website to teach developers how to use Angular and Rails together. I actually registered angularonrails.com in 2014 (IIRC) but didn’t start trying to turn it into a business until 2016, at which point I started selling an ebook and some videos. Revenue: about $10,000. Around July 2017 I decided to move on from Angular on Rails. It was good practice but I couldn’t see myself working on it for 10+ years. I write about my reasoning here.

Late summer (August?) 2017: Landing Page Breakdowns, a site where I offer, as you might imagine, landing page breakdowns. The idea was I’d post landing page breakdowns of my own and offer paid breakdowns as a service, kind of like useronboard.com but with a different focus. I quickly realized that I knew very little about landing page optimization and that by venturing into this territory I was throwing away the advantage of my 15+ years of experience in software development. Revenue: $0

Also late summer (September?) 2017: AWS for Rails Developers, a site similar to Angular for Rails developers, just AWS instead of Rails. I think this endeavor was smarter than Landing Page Breakdowns because it utilized some of my existing strengths. It didn’t feel like I was getting a lot of traction though. I think the final nail in the coffin was when I realized that practically the only thing I could help with is initial AWS + Rails setup, meaning I’d be attracting people at the very start of building a business at the time when they didn’t have any money. Later, when they had money, they would have harder AWS + Rails problems that I wouldn’t have any idea how to solve. So I decided to move on. (Incidentally, it turns out I was wrong that my site would only attract larval-stage business. More on this shortly.) Revenue: $0

November 2017: Six Figure Coding, a cringeworthily-stupidly-named site purporting to teach developers how to get their first job or get a better job. I went so far as to write an ebook under this venture and sell it. I don’t want to talk about it though. Revenue: ~$150

So that’s about nine product business attempts in about nine years, four of those attempts in 2017 alone. 2017 was a period of great flailing and vexation for me product-wise. I was almost 10 years into my effort to build a product business and basically back at square one, or so I felt.

2018 is when things finally started to come together. I started yet another product business attempt around March of 2018 and I’ve stuck with it ever since.

My new product venture

2018 is when I started to seriously blur the lines between product entrepreneurship and freelancing. The product-related work I do feeds into my freelancing and vice versa.

This product venture actually isn’t a single thing with a name. It’s more of a professional focus. The subject of that focus is Ruby on Rails testing. If there’s any one umbrella I can put all this stuff under, it’s CodeWithJason.com, where all my Rails testing material goes.

Since the time that I first started dipping my toe into the waters of teaching Rails testing I have:

You can imagine how all these things could both benefit product sales and consulting sales. My podcast can help me sell my book. It can also generate consulting leads for me (which it has). Someone buys my book might later want to buy my course or hire me for a consulting project.

My grand total revenue for CodeWithJason.com in 2018 was $400. That came from 8 sales, $50, of a two-day live workshop I put on in October. While not very directly lucrative, the workshop was good practice and a good demonstration that people will buy things from me related to Rails testing.

Not long after the workshop I decided to hit pause on anything to do with a workshop or course and work on a book instead. I’m not sure that I’m able to explain exactly why. Part of it is that I myself am more of a “book guy” than a “course guy” and I feel like I’ll have an easier time writing a book than I would creating a course. Also part of it is that I feel like writing a book will bring me a greater level of perceived authority than a course would. I’m envisioning the release of my book to go in at least three phases:

  1. Launch a very short and inexpensive initial version of the book in ebook form
  2. Beef up the book, add various packages at different prices and launch again
  3. Assuming I’ve gotten traction with the book, try to find a publisher willing to take up the book and publish it under their name, bringing me maximum perceived authority

I’m kind of playing the long game with this venture. I don’t expect huge direct revenue from the book, at least not anytime soon. I want to use the book to help build my audience and then, once I’ve grown a big audience, sell them other stuff and earn higher revenues than I would have if I had not taken the intermediary step of having written a book first.

2018’s freelancing/consulting work

2018 was probably my simplest year in a long time for freelance work. It’s been the first year in many years that I haven’t had an unexpected gap in income due to the vagaries of freelancing.

From the beginning of the year to the end of September, I worked for a west-coast startup. (I actually started working for them in late summer 2017.)

From the beginning of October to the end of the year, I worked for a different client.

In May/June/July of 2018, I taught 6 weeks of classes for the same client I taught classes for in 2017. We’re planning to work together again in 2019.

All three of these clients were great clients. When I worked for the startup it was basically a job, but it was just about the best job I could imagine at the time. The only challenge was that I ended up working close to Pacific hours a lot of the time and I live in Eastern time. Eventually I found the time difference so disruptive to my lifestyle that I decided to leave.

I was working on finding a regular full-time (remote) W2 job to transition to. Around this time someone found one of my posts at awsrails.com (which by that time was about a year old and woefully out of date) and hired me for a project based on that. So I guess some of my entrepreneurial flailing paid off. While the application I’m building is new, the business is actually well-established. When I abandoned awsrails.com I wasn’t thinking about the case of an established business adding a new application. This client engagement has been by far my favorite one ever.

2019 goals and plans

Unlike the previous ten or so years, in 2019 I won’t be striving to get away from anything. I find my work situation great the way it is. As long as I don’t screw anything up and unless something unexpectedly changes drastically in a negative way, 2019 will be what I consider a success.

My product goals for 2019 are to a) get my book published by a real publisher and b) to make a total of $50K in product sales. I also have consulting income goals but I don’t want to share those here.

My overall strategy is actually pretty unchanged from what it has been since late summer 2017: keep a “day job” so I can have a steady income, while on the side building up a product business until I can be 100% supported by product income. What has changed is that now I’m actually enjoying the day job part and I’m in no particular hurry to escape it. That doesn’t mean I intend to slow down though. In fact, the traction I’ve gotten with the Rails testing stuff has encouraged me to speed up. I’m looking forward to seeing what I can accomplish.

Why vertical positioning for freelance programmers is hard

Around 2011 or 2012, when I first started out as a freelance programmer, I had what I thought was a brilliant idea Rather than working as a generalist programmer, I should specialize in some industry. For whatever reason, the industry I picked was the real estate industry.

I put a fair amount of effort into the endeavor but it never worked out. I specifically recall having a lunch meeting with some old man who used to work as a real estate agent or something. The meeting felt forced. I didn’t know what we were there to talk about and neither did he. We didn’t uncover any way for us to help each other. I remember having at least a couple interactions like that.

Now, in 2018, I’m noticing as I hang out in various freelancing “watering holes” that a lot of programmers are developing the same idea that I did, that if they specialize in some particular industry (aka vertical specialization), it will lift their freelancing career to a new level of success.

There’s no evidence that this works

Before I move on I just want to say that I’ve never seen any evidence that vertical specialization works. That’s actually a little imprecise. What I mean is that I’ve never seen the following happen:

  1. A programmer (not a designer or copywriter) starts off as a generalist
  2. The programmer decides to develop a vertical specialization
  3. The programmer successfully develops a vertical specialization

What I have seen is non-programmers who have specialized vertically. I’ve also seen one example – only one – of a programmer who inadvertently stumbled into a vertical specialty with success. But there was no reproducible methodology to his case, it was just happenstance.

The reasons why vertical specialization for programmers doesn’t make sense

Reason 1: the bottleneck isn’t domain knowledge, it’s programming skill

It’s of course a very well-known fact that good programmers are hard to find. Not everyone is smart enough to become a good programmer, and even for someone super smart, it takes years to gain enough experience to be really good. Talk to any recruiter and you’ll find that they agree wholeheartedly with the statement that “everybody good is already taken”. The skill of programming is extremely scarce.

The scarcity of the skill of programming means that for any programmer job opening, the bottleneck is in the programming knowledge, not the domain knowledge. I’ve never been turned down for a job by someone saying, “Well, Jason, you look like a great Rails developer but I’m afraid we need someone with more solar power experience.” The employer always assumed the programmer has no domain-specific experience and is always comfortable training the programmer in the domain.

Just to throw things into as stark contrast as possible, imagine the opposite scenario: a solar power company hiring someone as a programmer who knows all about solar power but nothing about programming. Obviously this new hire wouldn’t be able to start being productive nearly as quickly as the programmer who doesn’t know anything about solar power.

Compare this with, say, copywriting. With copywriting, the bottleneck isn’t English composition. The copywriter’s level of knowledge makes a huge difference. If I have a nutritional supplement business and I have the choice between hiring a generalist copywriter and a copywriter who works exclusively with nutritional supplements, I’m going to want to choose the latter. If I’m going to hire a programmer for that nutritional supplement business, the programming skill is so much more important than the nutritional supplement knowledge that I wouldn’t even care about the nutritional supplement knowledge. How much help could that knowledge really be?

Reason 2: automation

The other reason vertical specialization doesn’t make sense is that for the most part programmers don’t provide a repetitive service.

If I’m a designer, it might make sense for me to specialize in designing websites for hotels. All hotels websites probably have roughly the same goal, presumably: to get as many bookings as possible. If I’m a designer, I can get really good at designing websites that serve that business goal of increasing bookings because I apply the same service over and over.

The same is not the case with a programmer. There’s not really a project-based service I could offer to hotels. I could offer the same service as the designer – optimizing the site to increase bookings – but then I’m no longer bringing to bear my years of experience in, say, Ruby on Rails programming. Now I’m working with WordPress sites, and I’m not doing programming, I’m doing design work and marketing work. That’s not necessarily a bad thing but it means I’m starting over with my career. I’m not niching my service down to an industry, I’m staring a whole new career that requires a totally different skillset and throwing out all my valuable prior experience.

There are two programming-related services I know of that are repetitive. Those services are training and code reviews. I myself have been paid to do both. I know others who have made a very good living from training. Maybe it would even make sense to combine training with a vertical positioning (“I train programmers how to build restaurant booking applications”) but I’ve never seen an example of this.

Don’t believe advice without examples

If you’re a freelance programmer, I would advise you: don’t believe advice when there are no examples of others successfully carrying out that advice. If the person suggesting the thing has never done the thing, that’s a red flag. If the person suggesting the thing can’t even produce a single example of success, that’s a really big red flag. Don’t accept advice uncritically. Be empirical.

How I’ve gotten my best freelancing/consulting clients

Good role models are hard to find

I’ve found it very hard to find success as a freelance programmer. One of the things that makes it so hard to be successful is that there are so few freelance programmers out there who have achieved what I would consider success.

What do I consider success? If I’ve managed to create an income or lifestyle that’s substantially better than what I would be able to have at a regular job, then that’s success. (To quantify this, I would not consider $150K/year working 40 hours a week to be freelancing success. You can get that at a regular job. Something like $300K/year for 20 hours a week with a lot of vacations would be more like it.)

Alan Weiss wrote, IIRC, that his ideal client would pay him $5 million a year for 15 minutes of work. Me and Alan Weiss are on the same page as far as what success means.

The sad fate of most freelance programmers

In my observation most freelance programmers end up in one of the following three scenarios:

  1. Give up on freelancing and get a job
  2. “Succeed” by managing to pay the bills but with no lifestyle or income gain over a regular job. (Most technical “freelancers” and “consultants” are just full-time contractors, effectively employees who happen to be paid hourly instead of salary.)
  3. Actually achieve the dream of creating an abundant income and exceptional lifestyle

This list is in order of most common to least common. Scenario 1, “give up”, probably accounts for the ultimate fate of 75% of freelance programmers. Scenario 2, pseudo-success, probably accounts for almost all the rest. If I had to guess, I would guess that fewer than 1% of freelance programmers actually achieve #3.

There’s also the career path of building an agency. I’m personally not interested in that path. My goals are to make a lot of money and have a low level of stress. I judge agency ownership to be a poor bet for both those objectives relative to other available options.

What the successful technical consultants do

Over the years I’ve been able to discover a small handful of technical consultants who seem to have built a good career for themselves. They are:

There might be one or two that I’m forgetting. But in seven years of freelancing, the number of freelance programmers I’ve encountered who I’d gladly switch places with is pretty much fully contained in the above list. I think this is very important to understand. There aren’t a lot of successful freelance programmers out there.

(By the way, I have to mention Matt Inglot because he’s one of my favorite people in the world and gives a lot of great freelancing advice. He personally went the agency route though and I’m focusing on solo consultants in this list.)

Why would I gladly switch places with the people on the above list? Because I understand them to be making a lot of money and to have a decent lifestyle. For example, in a post called The Prosperous Software Consultant, my friend Nader Dabit claims to have made between $200K and $400K for four years straight, from Mississippi. I believe Ryan Waggoner makes no secret of his claim (a claim I believe) that he has earned $250K/year freelancing while working about 20 hours a week. I understand others on the list to be doing similarly well or better, although I don’t want to publicly share numbers without permission.

So, these people earn hundreds of thousands a year. How do they make their money?

Here’s a list. What follows is just my understanding and isn’t necessarily completely accurate.

Person Income source(s)
Reuven Lerner Training
Wes Bos Training, product sales
Todd Motto Training, product sales, development
Ryan Waggoner Development
Jonathan Stark Training, consulting, development
Nader Dabit Training, development
Alain Chautard Training, consulting, development
Mike Julian Consulting
Corey Quinn Consulting

By the way, when I say “consulting”, I mean getting paid purely for providing counsel, not implementation. A lot of people refer to writing code as consulting, but I don’t define that term that way.

The other question, after “how do these people make money?” is “how do they get their work?”

How successful consultants get their work

My understanding is that successful technical consultants get their work via the following marketing tactics:

  • Conference talks
  • Local user group talks
  • Podcast hosting/guesting
  • Blog posts
  • Self-published books/ebooks
  • “Real” technical books with reputable publishers

These tactics have varying degrees of effectiveness. Writing a technical book for a publisher carries with it a lot more weight than just writing a few blog posts on the topic, for example.

How I’ve implemented the tactics I’ve observed in successful people

In the last few years I’ve done the following:

In my experience the benefits from each of these activities come obliquely.

I used to imagine that if I were to speak at a conference, someone in the audience would come up to me afterward and ask me to work for them. I think that happens sometimes but I think a different scenario plays out most of the time.

Last month I spoke at Little Rock Tech Fest in Little Rock, Arkansas. They had a speakers’ dinner where I ran into one of the other speakers who, in a crazy coincidence, I had actually met before in Michigan. He and I had a chance to hang out at the conference and deepen our relationship. One of the other speakers worked for CircleCI. I invited him onto my podcast and he said yes. In another crazy coincidence, I ran into someone at Little Rock Tech Fest who I had met at Double Your Freelancing Conference in Virginia in 2015. She actually had a project lead for me. So I didn’t meet any actual prospects at this conference but I met people who could introduce me to prospects.

Pretty much all my speaking and writing has been on the topic of Rails testing. Just how it happened when I wrote Angular for Rails Developers and became known in my network as “the Angular/Rails guy”, I’m now becoming known as “the Rails testing guy”.

A week or two ago someone in my network approached me about giving a paid talk inside their company on the topic of Rails testing. As far as I know, this person isn’t a subscriber to my email list. I doubt he actually consumes the content I create. I’m guessing he just became kind of peripherally aware of the work I do. Because I put out so much Rails testing material, I’m perceived as a Rails testing expert (whether I claim to be or not) and it generates leads. I understand this happens with book authors as well. Clients hire the author for consulting projects because of the author’s book, even if the client never cracked open the book.

Empiricism is key

I hope you’ve noticed throughout this post that I’ve tried to be ruthlessly empirical. I’m not asking myself, “What do the freelancing gurus saying I should be doing?” I’m asking, “What are successful technical consultants actually doing?”

There’s a lot of bullshit freelancing advice out there. Some freelancing advice is bad simply because the advice-giver is (wittingly or unwittingly) full of shit. The advice-giver means well but he or she sells some untested theory that sounds for all the world to everyone like it’s a great idea, but in practice, doesn’t actually work.

Other freelancing advice is bad not because the advice is actually wrong, but because it’s the right advice applied to the wrong person. For example, I often read advice to go to Chamber of Commerce or BNI meetings. That advice might work plenty well for someone selling auto insurance or even brochureware websites. That tactic will not work for someone like me, trying to sell Ruby on Rails testing services.

I’m a beginner

Speaking of bad advice, I don’t want to add to the problem and give bad advice myself.

So let me be clear that I’m a beginner in the skill of getting good clients. But in the spirit of being empirical, I can share a couple of the successes I’ve had.

A couple years ago a local friend of mine introduced me to a prospective client who needed an instructor for a bootcamp. Me and the prospect made a deal and continue to work together this day. It’s been one of my most enjoyable and most lucrative consulting engagements ever. I attribute this success to the fact that I had developed a reputation in my local community as a speaker. Because I regularly gave tech talks at local user group meetings, I became known as a knowledgeable developer and teacher. I also met a lot of people that way. One of the people I met was the person who introduced me to this client. So the takeaway: speaking works. (Caveat: aside from that one ideal lead, speaking at local user groups has not led to any other client engagements of nearly equal quality.)

About a year ago I wrote a few blog posts on how to get Rails set up on AWS. A couple months ago someone contacted me who was trying to follow my tutorial. He didn’t have a background as a developer. Ultimately he just hired me to build his project for him. This has also turned out to be one of my most enjoyable and lucrative client engagements ever. My takeaway from this: writing works. (Caveat: again, aside from this client, I can’t recall any other clients who have found me this way.)

The last example I’ll give is a recent scenario where I was looking for a job. I announced on my podcast that I was looking for a job. I said the same thing to my email list of a few hundred people. As a result, a number of people wrote to me and invited me to apply to work where they worked. This resulted in a number of actual interviews. I ended up calling off my job search but it was an interesting demonstration of the power of having built an audience. I imagine that if and when I do the same thing saying I’m looking for consulting work, the effect will be similar. Charles Max Wood has told me that on the occasions he has announced on the Ruby Rogues podcast that he was looking for work, people would always respond.

The takeways

I might characterize the takeaways from this post as:

  • When studying what works and what doesn’t for getting new clients, be empirical
  • Speaking and writing are good ways of attracting clients – but not all speaking and writing channels are equally effective
  • Building an audience and getting prospective clients to knock on your door is much better than going around and knocking on prospective clients’ doors. In my experience the prospect conversations are generated obliquely. I don’t attract the clients themselves, I attract people who are connected to the prospects and introduce me later.

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.

2018

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.

*November 2018 update: I now understand that I had been mistaken. I now understand market rates through training companies to be more like $1500/day plus expenses.

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.