Author Archives: Jason

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.

March 2019 Product Revenue Report

For a period spanning August 2016 to June 2017 I put up what I called an income report post showing how much product revenue I had earned that month. My source of revenue during that time was a website called AngularOnRails.com which I eventually decided to give up on, partly because I didn’t actually like the stuff I was teaching.

Then there was a period where I flailed around from idea to idea and didn’t earn any meaningful product revenue from anything. Then in January 2018 I joined 30×500 and got on the right track toward starting a new product business that would actually be successful.

January 2018 to February 2019 was basically a long incubation period that led to my March 2019 launch of Rails Testing for Beginners, an ebook that hopefully has a self-explanatory title.

During my launch I earned $988. During the whole month of March 2019 I earned $1037, making it my best product revenue month since October 2016 and my third-best product revenue month ever. I’m very happy now to have a reason to continue posting these income reports, although now I’m going to call them “product revenue reports” because I think that’s a more accurate way of putting it.

Here’s every meaningful month of product revenue I’ve had since August 2016.

2019 March $1037
2018 October $400
2017 June $185
2017 May $480
2017 April $735
2017 March $352
2017 February $449
2017 January $371
2016 December $428
2016 November $871
2016 October $1580
2016 September $1053
2016 August $868

People I know of who are earning a living from technical info products

Sometimes I hear stories of technical info product entrepreneurs who launch info products and make a few thousand bucks but keep their day jobs and never “escape the rat race” via their technical products.

If I hear a relatively large number of these “ho-hum success” stories and a relatively small number of REAL success stories, it’s easy to draw the conclusion that technical info products just don’t lend themselves that well to earning a full-time living, and that the odds of escaping the day job via technical info products are low due to some inherent flaw of the technical info product model.

However, drawing such a conclusion (that something about technical info products makes it hard/impossible to earn a living from them) is certainly wrong, and probably a symptom of selection bias and perhaps some other logical fallacies.

Maybe I hear 10 stories of “ho-hum success” and 1 story of “real success”. But maybe there are 1000 other real success stories I just haven’t heard about. Maybe out of those 10 ho-hum successes I heard about, 9 of those entrepreneurs just genuinely didn’t put forth enough effort, so the problem doesn’t lie in the technical info product model, it lies in the laziness (for lack of a better word) of the would-be entrepreneurs.

As an antidote to the ho-hum success stories I’ve heard, I want to share a list of real technical info product successes. Below is a list of people who I understand are earning a good full-time living from technical info products.

The list

Chris Oliver, GoRails
Joel Hooks, Egghead
Wes Bos, wesbos.com
Todd Motto, toddmotto.com
Ari Lerner and Nate Murray, fullstack.io

The juicy details of my $988 book launch

As I wrote in my last entrepreneurship journal post, I launched a book the week of March 18th, 2019. The book is called Rails Testing for Beginners. The launch lasted from 8am Eastern on Monday, March 18th to 3pm Eastern on Friday, March 22nd. Here are some stats.

The numbers

Email subscriber count at start of launch: 683
Total number of sales: 32
Total sales dollar amount: $988

Here are the sales broken down by day:

Monday: $388
Tuesday: $165
Wednesday: $232
Thursday: $58
Friday: $145

Here’s a Stripe screenshot. (The totals are slightly off due to test payments.)

Here are the sales attributions, based on discount code:

Email list: 22 (68.8%)
Twitter: 5 (1.6%)
The Ruby Testing Podcast: 2 (6.3%)
Reddit: 1 (3.1%)

Two buyers paid full price. Since both of them bought soon after my first launch email went out, I assume both of them came from my email list, which would put email attribution at 24 or 75%. If 24 of my 683 email subscribers bought the book, that would put my email-to-purchase conversion rate at 3.5%.

The sales page

Here’s what my sales page looked like at the time of the launh.

My plans from here

These days, when I find that I’ve done something that worked, my reaction is to do more of that thing that worked. I’ll explain exactly what that means to me in this case.

At the broadest level, my plan is to launch again, and next time do it bigger and better. “Bigger” meaning more subscribers to launch to and “better” meaning having a higher-priced offer and doing a better job of presenting the offer (for a higher conversion rate).

Since the conversion rate for this launch was what I’d consider in the acceptable range, I don’t intend to focus too much on squeezing every drop of efficiency out of that area the next time I launch. I think my effort is more profitably spent on adding a higher-priced product to my offering and on getting more subscribers.

Of those two things – more expensive offer and more subscribers – I believe I want to prioritize the offer. I know exactly what I plan to do, too. When I launched Angular for Rails Developers in the fall of 2016, my first launch was the book and then my second launch was a video package related to the book. The videos were simply walkthroughs of the book. They were pretty easy to create, and apparently people found them valuable. I plan to do the exact same thing with Rails Testing for Beginners.

Monthly income reports

I plan to pick back up with the monthly income reports I was doing for Angular on Rails, which I stopped when I kind of stopped making money. March 2016 is $988 so far which would make it my third best product income ever after September and October 2016, which were $1053 and $1580, respectively. I hope and expect that I can manage to avoid with CodeWithJason.com what I did not avoid with AngularOnRails.com: a couple great months followed by several shit months. My entrepreneurial skills are stronger now (thanks largely to 30×500!), and I know to anticipate the “trough of sorrow” now, so let’s see what I can do.

Entrepreneurship Journal, 3/18/2019

Here’s what I shared in my last entrepreneurship journal post:

  • I had sold $400 worth of tickets for my workshop
  • I had gotten accepted to my first national-level conference (RubyConf India)
  • I had gotten some big guests on the podcast
  • I had visited my new client in person
  • I had started writing a new book, Rails Testing for Beginners

The reason I haven’t written since my last post—3 months ago—is because no one thing had happened that I felt was worth writing about. I was mostly focused on getting my book written.

My book is now done. Today was the first day of sales. Here’s a list of what has happened since my last update. When I look at the complete list, it actually does seem fairly noteworthy.

In this update I’m going to mainly talk about three things: products, conferences, and podcasts.

Products

I sent out my “open cart” email this morning to my 683 subscribers just before 8am Eastern. I more or less immediately made three sales. Things slowed down for a while after that and I was concerned that I had already made about all the sales I was going to make today. Sales have continued to trickle in though at about one per hour. As of now, 5:47pm Eastern, I’ve made 12 sales for a total of $388. I priced the book at $49 and offered a $20 launch discount. Most people used the discount code but for whatever reason two people paid the full $49.

My launch window lasts from today (Monday, 3/18/2019) to Friday. I’ve heard that about half of a launch’s sales come near the beginning and the other half near the end, or something close to that. So if my first day was $388 it doesn’t seem unreasonable to expect that my entire 5-day launch would be something like $388 * 2 = $776 in sales. I would be very happy with that number.

In late August/early September 2016 I launched an ebook I had written called Angular for Rails Developers (AFRD). According to my records, I made $312 on the first day of that launch and a total of $663 (including the $312) in the first 5 business days of the launch. In the 30 days following the launch I made about $1600. I list how much I made every month from August 2016 to June 2017 on this page.

Earlier today I was kind of bummed because the first day of the Rails Testing for Beginners (RTFB) launch seemed lackluster compared to what I remember the first day of the AFRD launch having been. But no, I looked back and saw that the first day of AFRD was only $312. At the time I checked the AFRD sales numbers, RTFB had already done $330 in sales and it was only mid-afternoon. This was encouraging to me. If day 1 for RTFB was a little better than AFRD’s day 1, maybe RTFB’s first month will be a little better than AFRD’s first month of ~$1600. That would be great.

The one thing I don’t want to repeat, though, is the decline that AFRD experienced after around month 3. I’ll worry about that later though.

My current plan is to do for RTFB exactly what I did for AFRD after launch: record some video walkthroughs of the book and add a second $99 video package in addition to the $49 just-the-book package. I figure if it worked for that, it will probably work for this. By the way, I don’t believe my $99 AFRD package accounted for any of the $1600 of revenue in the 30 days after launch. My memory is that I launched the video package in October 2016 which is what accounts for the fact that October was a relatively good $1580 month. (October 2016 was AFRD’s best calendar month, in fact. The $1600 over 30 days post-launch straddled August 2016 and September 2016, which were $868 and $1053, respectively.)

In addition to adding a video package I plan to take stock of what I could have done better for this launch and do it better next time. Here’s the list I have so far:

  • Better launch ebombs* to share that are more relevant to the launch
  • Videos (on the sales page and in the ebombs)
  • Sample chapters
  • Measure conversion rates
  • Better email broadcast filtering so I only launch to people who have been on the list for a while
  • Testimonials

*”Ebomb” is a term from 30×500 which basically means “educational blog post”.

I haven’t yet decided when exactly my next launch will be. Maybe in about a month, around mid-April. That’s a little tough because I have some speaking and travel coming up. Which brings me to my next topic.

Conferences

I think first set an objective to speak at a conference sometime in early 2018. I submitted a whole bunch of proposals but couldn’t seem to get anything accepted. I actually got one accepted for something like June 2018—RubyConf Kenya—but I couldn’t go because it was in the middle of a class I was teaching for a client. Later in the year the acceptances started flooding in. I ended up scheduling conference talks for September 2018, October 2018, January 2019, February 2019, March 2019, April 2019 and May 2019. Not only were the conference talks high in quantity but high in quality (at least some of the time). These conferences included RubyConf India, RubyHACK, and RailsConf. These will all be great for my credibility, especially RailsConf.

So I’ve gone from “I can’t get a conference talk accepted to save my life!” to “Help, I’m speaking at way too many conferences!” It’s a really nice problem to have, of course. I don’t plan to apply to any more conferences in the near future. All the travel is expensive from both a monetary and an opportunity cost perspective. (I don’t get paid for these talks, nor do most of them cover travel expenses.) It’s good to know though that whenever I feel like starting to speak at conferences again, it’s something I’ve done before and that I can certainly do again.

Podcasts

The Ruby Testing Podcast has continued to go well. The only two measures of success I know of that really mean anything are that I’ve gotten one consulting lead out of the podcast and that I’ve gotten some really “big” guests on the show. I can’t believe Kent Beck came on the show. I’ve also reached 20,000 downloads, but I don’t know exactly how “good” that is. I don’t have a frame of reference.

My experience of hosting The Ruby Testing Podcast has shown me that the answers to the two crucial questions of a) “If I make a podcast, will people actually listen to it?” and b) “Will I be able to get good guests and have compelling things to talk about?” are both yes. With this knowledge, I’ve decided to take what I’ve done with The Ruby Testing Podcast—a relatively narrow podcast—and create a new, broader podcast that’s just about Rails in general. I plan to call this new podcast Rails with Jason. I thought this would be a natural name based on the fact that my main website is CodeWithJason.com. Maybe someday I’ll go even broader and have a Code with Jason podcast. I’m not ready for that yet though.

Bringing it all together

My intention, and expectation, is that the activities of blogging, writing books, speaking at conferences and hosting podcasts will synergize with each other to increase my product sales and increase my quantity and quality of my consulting leads. I think to some extent this is already the case, it’s just hard to tell exactly how much.

See you next time

I plan to write another update at the end of this launch, which again ends on 3/22/2019.

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.

Entrepreneurship Journal, 12/17/2018

It’s been a very long time since my last Entrepreneurship Journal post. Here’s what I was up to last time:

  • I was about to put on my first paid online workshop
  • I had just given my first- and second-ever conference talks within a short period of time
  • My podcast was going well
  • I was continuing to work with my new client

Here’s what has happened since then:

  • I sold $400 worth of tickets for my workshop
  • I got accepted to my first national-level conference
  • I had some big guests on the podcast
  • I visited my new client in person, and realized over time that our project is a bigger and more important project than I had originally thought
  • I started writing a new book

I’ll discuss each one of these items.

Workshop sales

I sold tickets for my October workshop over two launches. On the first launch I sold 3 tickets which were $50. When I did the second launch I wouldn’t have been surprised if I hadn’t sold any more. But I did sell more, 5 more. I was pretty surprised and happy about that.

The workshop itself went pretty well. It took place over a Saturday and Sunday. Given that it took up my whole weekend, $400 of revenue wasn’t a great return on investment time-wise. That’s not the point, though. Putting on the workshop showed me that the answer to the question “Can I get anybody at all to buy tickets to an online workshop I put on?” is yes. It doesn’t matter that the number was small this time. I can do this again and do a better job of everything.

As a mental exercise, if I double the price to $100 and I’m able to sell 16 tickets next time, that would be a revenue of $1600 instead of $400. Maybe I shift the delivery to be more self-serve and less live time, too, making my effective hourly rate higher. Eventually maybe I could get to the point where it’s almost fully automated and revenue is a few thousand bucks each round. We’ll see.

I’m putting my workshops/courses on the back burner for the time being, though, due to certain other things I need/want to work on instead.

Conference talk

On December 5th I got an email saying my talk proposal to RubyConf India had been accepted. So I’m going to India next month. I’m bringing my wife and kids with me and we’re planning to stay for two weeks.

This will be my first time speaking at a “national level” conference as opposed to a regional conference. It will also be my first Ruby-focused conference. I’m excited to be able to add to my bio that I’ve spoken at RubyConf India. Speaking at a conference like this has also been kind of a goal of mine for a long time. The conference itself happens on January 20-21.

I actually got accepted to another conference as well, PyTennessee in Nashville in February. I don’t know much about this conference yet.

Podcast

I had some relatively big guests on the podcast including Michael Hartl and Ben Orenstein. That was pretty cool.

I also had someone reach out for some Rails testing consulting help, a CTO from a Y Combinator startup. We had a call about it. Somewhat surprisingly, after the call, my prospect said he was going to go with a certain gem instead of seeking outside help for the various problems his team was having with the test suite. My suspicion is that the reality is that he just wasn’t that impressed with our call for whatever reason. Oh well. It’s cool to have generated a consulting lead via the podcast anyway. Hopefully I can expect this sort of thing to continue happening.

Having said that, I plan to take a break from the podcast for the next couple months. I’m getting kind of tired of it and I don’t want to burn out. Preparing my RubyConf India talk and preparing for India travel will take most of my available time and mental bandwidth between now and the end of January.

Consulting client

Things continue to go well with my new (relatively new now) consulting client. I had originally thought the project would only last perhaps a weekend. Then I thought it might last a few months. Now I think it may well last 10 years. I visited my client in person just before Thanksgiving and I was very impressed with him as a person. And I’m not just saying that because I know he might be reading this right now.

Book

Some time ago I decided to write a book. Recently I pulled the trigger. The book will be called Rails Testing for Beginners.

All I’ve done so far is set up the plumbing for the book (I’m using a tool called Softcover) and write a few paragraphs. My decision to write the book came right around the same time my RubyConf India talk got accepted, and things have been kind of crazy since then. Getting everything in order for traveling to India is a surprisingly large amount of work, even though I’ve flown internationally three times before (Nigeria, Bulgaria and the Netherlands).

Plans for the next few months

My plans for the next few months are:

  • Prepare and deliver my RubyConf India talk
  • Ditto for my PyTennessee talk
  • Get a good portion of Rails Testing for Beginners done
  • Continue putting out blog posts and videos the whole time at roughly the usual pace
  • Continue working for my consulting client as normal

That all should be enough to keep me fully busy. Then, perhaps sometime in the spring, I’ll start turning my thoughts back to the podcast and paid workshops. I’ll certainly want to start the podcast back up before I launch my book (it will be a good way to get the word out) but I think I want to wait until after the book launch to start the workshops back up again.

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.

For knowledge acquisition, empiricism beats reasoning

In my life I’ve observed people at all different degrees of success. When I think of a person being successful or not, what I’m thinking of is the degree to which they’ve achieved the results they want to achieve, whatever kind of results those may be.

There are a number of factors that lead to a person’s ability to accomplish their goals. There’s one big factor that I think might be more important than most of the others: an accurate mental model of reality.

To paraphrase the example from The 7 Habits of Highly Effective People, if I want to navigate around Chicago but I’m looking at a map of Detroit, I’m not going to be able to navigate very effectively.

Same with everything. If I’m trying to build a successful career as a freelance programmer or trying to build an online product business but I have an inaccurate understanding of how the rules of business operate, my success is going to be hindered to the extent that my mental model is inaccurate. (An exception is if I get lucky. Luck requires no understanding.)

There’s a lot of bullshit advice out there. If I uncritically feed all the world’s business advice into my brain, it will be impossible for me to develop an accurate mental map of reality because the body of advice I’ve loaded into my brain won’t be consistent with itself. Somehow I have to figure out what’s true and what’s not true.

This brings me to my next point. There is a such thing as a single truth and a single reality. Two people might have a different opinion on, say, who the most talented Beatle was and there’s no way to say one of them is objectively right or wrong. A lot of people seem to overly apply this same kind of idea to business. “There’s no one single path to success.” “There’s no one right way to do it.” It’s true that there’s no single right way to do many things in business, but some things really do work and other things don’t work. Business isn’t some hocus-pocus field with rules that apply separately from the rules that apply to everything else in the world. There’s one single reality. Our job is to figure out how that single reality works and get on the winning side of that reality.

Everything I’ve said so far has been to lay the groundwork for this: all the reasoning in the world is no match for a little empirical observation.

Some things are simple and small enough that conclusions can be confidently drawn using reason alone. For example, if I hit my toe with a hammer and then notice that my toe hurts, I can safely conclude that hitting my toe with a hammer makes it hurt.

Other things are sufficiently complex that reasoning alone doesn’t work. For example, I once reasoned that if I were to build a hair salon scheduling program that was superior to any existing salon scheduling program (an extraordinarily low bar, at least at the time) then the result would be that people would buy my product. I was WRONG.

What I should have asked was: is there any empirical evidence that this is going to work? Has there ever been a programmer like me who started a business similar to this who had success?

Better yet, I should have zoomed out even further and came at the matter from a more productive direction: for programmers like me (i.e. a bootstrapper with no VC, very little time or money, and a family to support) who wanted to start a successful product business, what did they do? I would have discovered that they did not try to start a SaaS business serving a customer they knew nothing about in an industry where they had no connections and in an industry that hates computers and has very little money and spends extremely little time online.

So, my advice to people out there trying to figure out what will lead to business success and what won’t: place very little confidence in your powers of reasoning. Turn to empirical evidence instead.

Internet Business Advice Baloney Detection Kit

Who this is for

This article is specifically for programmers who do some sort of business online. Some it applies to both product businesses and freelancing, but mostly I’m writing this article with freelance programming in mind.

Background

In his book The Demon-Haunted World: Science as a Candle in the Dark, Carl Sagan describes something he calls a “baloney detection kit“. The baloney detection kit (BDK) is basically a set of mental tools that can be used to apply skepticism to any particular claim or argument.

To share an example, one item in Carl Sagan’s BDK is the fallacious ad hominem argumentative strategy, i.e. attacking the arguer and not the argument. The example from the book of an ad hominem usage is: “The Reverend Dr. Smith is a known Biblical fundamentalist, so her objections to evolution need not be taken seriously.” (There’s no reason why an argument on evolution from a Biblical fundamentalist should not be taken seriously since it’s the argument itself that needs to be evaluated, not the person producing the argument.)

My BDK takes a slightly different form from Carl Sagan’s but the principle is the same: a checklist that you can go through to help determine whether any particular thing is bullshit.

Motivation

In my endeavor over the last ten years (and counting) to create a successful online business I’ve consumed a lot of business advice from books, blog posts, podcasts, etc. I think I can pretty safely say that more than half of the advice was either unhelpful or actively harmful. Sometimes the advice was good advice but it wasn’t the right advice for my particular situation at the time. Sometimes the advice was just plain bad advice.

In recent years I’ve had a somewhat close-up view of certain colleagues, particularly freelance programmers, falling for what I clearly see to be bad advice that will for the most part only waste their time and lead to disappointment. This makes me sad and I want to try to help stop it.

Sometimes I’m even a firsthand witness to the bad advice being given. On those occasions I desperately want to speak up and say, “Wait! That’s bad advice!” but a) I’m not always one hundred percent sure I’m right and b) it would obviously be super uncool for me to meddle in other people’s affairs that way anyway. What I do feel comfortable doing is to provide a framework for detecting bullshit freelancing advice.

Before I start I want to say that it is not my goal to personally attack anyone. If you read this and say, “I bet he’s talking about so-and-so!” Maybe I am, but saying “So-and-so has given bad advice” is different from saying “I think so-and-so sucks as a person.” We all make mistakes and all advice-givers, including me, have at one time given some really bad advice. In no case is my intention to say “Don’t listen to so-and-so,” but “Listen to so-and-so except when they give bad advice.”

The online business advice baloney detection kit: questions to ask yourself about any piece of business advice you encounter

Has the advice-giver actually done the thing he or she is advising on? This to me is the most important question to ask because if the answer is no then it’s highly likely that the advice is bullshit. There do exist advice-givers who give good advice despite not having direct experience doing what they advice (Ramit Sethi comes to mind) but most advice-givers are not nearly as sharp or as honest (with their audiences or with themselves) as Ramit is. And if the answer seems to be yes that the person as done the thing that they’re advising on, go deeper. Did they do the exact thing they’re advising or some variation on it? How significant is the variation?

Does the advice-giver have examples of success? Is there any empirical evidence that this works? If the advice-giver can’t produce at least a handful of people who have successfully followed their advice, then that’s a big red flag. If the advice-giver can’t even produce a single example of success, not even themselves, then that’s a screaming-loud alarm bell. And beware of examples that seem legit but really aren’t. Are the supposed success stories examples of people who followed a certain methodology to get where they are, or did the successes blindly stumble into the success they achieved and the advice-giver is retroactively laying a narrative on top of the story to make it look like the success was a result of the methodology? Also, if you’re a programmer, it matters whether the subject of the success story was a programmer or not. The laws of nature in the world of freelance design are different from the laws of nature in the world of freelance programming.

Are the testimonials instances of actual results or just anticipated results? Here’s a testimonial I found on a real sales page, paraphrased to protect the identity of the author: “This system is great. I know my business is going to change if I follow it!” This testimonial contains no evidence that the system actually works.

Closing

I want to re-emphasize that just because an advice-giver commits the (virtually unavoidable) sin of occasionally giving bad advice doesn’t automatically mean that that person is generally full of shit nor does it mean that I think you should start ignoring that person forever. It just means that that person gives bad advice once in a while. It’s useful to be able to tell which advice is the good and which is the bad.