Category Archives: Marketing

My experience speaking at 7 tech conferences in 9 months including RailsConf, RubyHACK and RubyConf India

Why I wanted to speak at tech conferences

On and off since 2011 I’ve been a freelancer—or, to use the term that I think sounds better, consultant. The vast majority of the work I’ve done as a “consultant” has just been full-time-ish staff-aug contracting. In other words, I worked a lot of contract jobs where I was paid hourly as opposed to salary but by every other measure I was just another developer on my client’s development team, and my client was basically my employer.

Ever since the time I started freelancing it’s been my desire to move on the freelancer-consultant spectrum from the “freelance” end of the spectrum to the “consultant” end of the spectrum. My understanding is that “real” consultants are able to have higher fees, more schedule autonomy, more discretionary time, more fulfilling work, and a better lifestyle overall. After several years of studying successful consultants like Alan Weiss, I discovered that the way to attract clients who would hire me for true consulting is through speaking and writing on my areas of expertise.

Not all speaking and writing is equally effective for the purpose of attracting clients, of course. Before 2018 I had only delivered talks at local user groups and never at a conference. I wanted to start giving talks at conferences as a way to start more effectively attracting more of the types of clients I wanted to work with.

There’s also another reason I was interested in speaking at conferences. At the time I started speaking at conferences I was also starting to think about a certain book I was going to write on the topic of Rails testing. I figured if I could list some conferences I had spoken at in the bio on my sales page it would lend credibility to my book.

How I got accepted to my first conference

At one point in time I only knew of maybe 10 programming conferences, period. I imagined there were maybe a handful more. I find my naïveté funny now. There are certainly hundreds of programming conferences worldwide of various sizes. My challenge early on was that I couldn’t find conferences to apply to speak at.

Then at some point I discovered PaperCall.io, a CFP aggregator. In case you’re not familiar with the term CFP (call for papers) or the CFP process, here’s how the CFP process tends to work:

  1. Conferences announces that their CFP is open
  2. Prospective speakers submit their talk proposals
  3. CFP closes, conference organizers select talks and notify selected speakers
  4. Speaker list is publicly announced

An actual proposal will usually contain things like:

  • Talk title
  • Talk length
  • Target audience level
  • Talk description
  • Speaker bio

My discovery of PaperCall.io allowed me to start sending proposals to a relatively large number of conferences. Ruby conferences were my preference but I didn’t limit myself to that. My initial goal was just to get a talk accepted to any conference that would accept me since I figured that was hard enough.

I’m not sure how many conferences I applied to before I finally got something accepted. It might have been about 30.

According to my PaperCall.io account, it looks like the first proposal I sent was sent March 15th, 2018. The first conference I got accepted to was RubyConf Kenya. I was notified of acceptance on March 22nd, 2018. Unfortunately I had to decline due to a schedule conflict.

The next talk I got accepted was for DevOps Midwest in St. Louis. That talk got accepted on June 29th, 2018 and the conference took place in September. So I guess it took about three and a half months between the time I started submitting proposals (again, about 30 proposals by my guess) and the time I got accepted to a US-based conference.

My speaking experiences

Between the months of September 2018 and April 2019 I spoke at the following seven conferences.

  • DevOps Midwest (St. Louis)
  • Little Rock Tech Fest (Little Rock)
  • RubyConf India (Goa, India)
  • PyTennessee (Nashville)
  • Connectaha (Omaha)
  • RubyHACK (Salt Lake City)
  • RailsConf (Minneapolis)

DevOps Midwest, Little Rock Tech Fest

I feel fortunate that my first talk was at a small regional conference. My audience at DevOps Midwest was perhaps 50 people. I had spoken at meetups with an audience of more like 80 people before. So although the event was maybe a step up in terms of prestige, it wasn’t a new level in terms of audience size.

Little Rock Tech Fest is also a regional conference but it felt a little more like a national conference than DevOps Midwest.

RubyConf India

RubyConf India was my first national-level conference experience. Out of all the seven conference I’ve spoken at now, RubyConf India had the most intimidating setup. The conference was single-track (meaning there was only one stage and one talk at a time) so I was giving my talk in front of the WHOLE group of conference attendees, not just a handful who chose to come to my particular talk. My talk went pretty much fine except for an audio glitch which was out of my control. I also got nervous and talked too fast and ended my talk earlier than intended (which would not be the last time this would happen for me at a conference).

Unlike the first two conferences which I attended without my family, I brought my wife and two kids (5 and 8 at the time) with me to India. I figured my family wouldn’t mind missing out on St. Louis too much but it would be kind of a tough sell to go all the way to India without them, especially since I had already traveled to places like Africa, Amsterdam and Bulgaria without them (all business trips).

I want to briefly mention a few interesting culture surprises I encountered in India.

  • I saw more than a few Indians wearing sweatshirts and wool caps in 90+ degree heat.
  • In India it’s normal for straight men to walk around in public holding hands.
  • There were not only stray cows everywhere but stray dogs everywhere. So many of them.
  • Indians don’t drink coffee. Real (non-instant) coffee was IMPOSSIBLE to find.
  • Despite my pleas, no one would give me spicy food. Too white.
  • Speaking of white: no one suspected us of being American. On one occasion a cab driver asked, “So, are you Swedish or English?” We got Russian a lot. There were a lot of Russians there in Goa, and even signs written in Russian.

A couple neat things about the conference: after my talk someone came up to me and said, “Your talk was good, but not as good as your podcast!” It was cool to meet a podcast listener there. Another attendee asked to take a selfie with me. Apparently he considered me famous. Lastly, I got to meet up with my new friend Swanand, a fellow student in 30×500, an entrepreneurship course I enrolled in in early 2018.

PyTennessee, Connectaha

Because I’m trying to become known as “the Rails testing guy”, my preference is to give testing-related conferences at Ruby/Rails-related conferences. However, not all of my talk proposals were Ruby-related. In fact, I think most of my proposals were technology-agnostic.

The talk of mine that got accepted to the most conferences was a talk called Using Tests as a Tool to Wrangle Legacy Projects. This talk got accepted to RubyConf India, PyTennessee, Connectaha and RubyHACK.

So, interestingly, I found myself speaking at PyTennessee, a Python conference. It was an okay experience although I don’t believe I’ll do it again. I did enjoy Nashville though.

Connectaha, which was in Omaha, was one of my favorite conferences so far. It was a super well-organized conference. I’ll speak more to this in a bit.

RubyHACK

RubyHACK (High Altitude Coding Konference) was another favorite of mine. Both the level of organization and the location (Salt Lake City) were great. There were maybe a few hundred people in attendance.

I got a couple of neat ego strokes at RubyHACK. One, I got to meet one of my email subscribers in person who I had actually helped get his first programming job some months prior. Also, someone came up to me at one point and said, “You must be Jason!” Turns out he was a listener of The Ruby Testing Podcast. Not only was he a listener but he found out about RubyHACK through my podcast, and decided not only to come to the conference but to bring a co-worker as well.

The day after the conference I went up to Park City where a friend of mine lives and we went skiing.

RailsConf

RailsConf was the big one. When I got accepted to RailsConf, I couldn’t believe it. Ironically, the proposal of mine that got accepted to RailsConf was not only not Ruby-related and not testing-related but it wasn’t even all that technical.

Speaking at RailsConf was great for the prestige factor but I’m not sure it was among my favorite conference experiences. It was huge. Like 1600 attendees or something like that. I had never been to a conference that large before. Having now experienced a big conference like that, I think I prefer the smaller, more intimate conferences. Ironically, the smaller the conference, the more people you can meet. At a huge conference you might meet somebody and then never run into them again. I knew I knew perhaps 10+ people who were going to be at RailsConf but I could hardly find them!

What makes a good or bad conference speaking experience

Speaking at seven different conferences exposed me to a decent range of organization quality.

Connectaha, one of the best-organized conferences, pre-emptively emailed me several times leading up to the conference, anticipating and answering any question I possibly could have had: hotel address, speaker dinner, etc. A certain other conference I spoke at had basically zero communication before the conference, leading me to wonder whether we were even really on or not.

I also experienced a range of levels of reception warmth. At RubyHACK, the conference organizers met with us speakers, bought us dinner, and thanked us for coming. This was much appreciated. At a certain other conference, the organizer set up an ad-hoc informal dinner a few hours in advance and I showed up at the restaurant straight from the airport with all my luggage, wasn’t able to find the group, and had to just go straight to my hotel and then go get dinner on my own. At the conference itself I never met the organizer. I left the conference the minute my talk was over and I don’t intend to ever attend again.

When I tell people I speak at conferences, they often ask me about compensation. My experience is that it can vary quite a bit. Out of the seven conferences I’ve spoken at so far, three covered no expenses at all. One conference paid for ALL expenses (plane ticket, hotel, cab fare, etc.) which I was very surprised by, especially since it was just a small regional conference. The other three conferences contributed at least something to travel expenses, usually roughly equivalent to one or two nights in a hotel. I have yet to actually make money directly from speaking at a conference.

My advice to hopeful conference speakers

If you’re a developer who hopes to speak at a conference soon, I have some advice, but first I have some meta-advice.

My meta-advice is to be very skeptical of any conference speaking advice. I’ve seen articles whose authors say things like “Here are what my accepted proposals have in common, so this is what works”. This does not strike me as a logically sound way to draw conclusions about what works and doesn’t work. There are a lot of variables involved in why a particular proposal would get accepted or rejected (fitness of topic for the conference, whether the submitter is from an underrepresented background or not, whether the speaker has an “in” with the conference organizers, what kind of mood the organizer was in at the time of evaluating the proposal, etc.). So be wary of advice that flows from the fallacy that successful tactics can be pinpointed experimentally.

Having said that, there are of course certainly things that work better than others. However, I don’t claim to know what they are. I don’t know whether my later talks got accepted because my proposals were better or if it’s simply a numbers game and I “sprayed and prayed” enough to be successful from a sheer brute force perspective. So instead of pretending to know what works and what doesn’t let me share some articles from some people who seem to know what they’re talking about:

There’s one thing I know for an absolute fact though. All other things being equal, you’ll get accepted to more conferences if you apply to more conferences. There are certain areas of life where dumb brute force is a perfectly effective tactic and I think this is one of them.

What if you don’t have any ideas for talks? I had this problem myself. I didn’t have any good talk ideas. My solution was just to submit bad ideas. Eventually one of my bad ideas got selected. I gave my talk, and in the process of doing so, I realized that I was trying to say too much. My talk was really like three talks squeezed into one. So I took one of those three talks and made it into its own talk. This is the “Using Tests as a Tool to Wrangle Legacy Projects by Jason Swett” talk that got accepted to four conferences (actually more, IIRC). When I gave that talk it gave me ideas for more talks. The more talks ideas I generated, the more talk ideas I was able to generate.

One more piece of advice: I’ve been able to find out about more and more CFPs by following conferences on Twitter. The Twitter accounts I follow are almost exclusively conferences. You can see the list of accounts I follow here.

My plans from here

Seven conference talks in nine months is too much (and that wasn’t even my only business travel during that time). I never intended to do that many. When I got my first two talks accepted, of course I wasn’t going to turn down those opportunities. Then when I got accepted to RubyConf India, of COURSE I wasn’t going to turn down that opportunity. Then when I got accepted to RailsConf, of COURSE I wasn’t going to turn that down. Each opportunity was more un-turn-downable than the one before it. I think the time and money I invested in giving these talks will pay off in the long run, but the investment I made in the last nine months was frankly more than I would like to have made in such a short period of time.

In 2020 I’ll probably speak at much fewer conferences, and I’ll only speak at ones that are some combination of being professionally relevant, geographically close to me, and/or favorable in terms of travel compensation.

Overall, I’m very glad that I’ve dipped my toe (perhaps my whole leg!) into these waters. Now I know what conference speaking is all about. I expect that this tactic will be part of my self-marketing strategy for a long time into the future.

How to get traffic for a technical blog

Have a Focus

Many technical blogs are just a mixed bag of peripheral tips and tricks. A developer will fix a problem, then toss up a short post on how he or she fixed it.

The weakness of this random-topic approach is that it doesn’t lend itself to building an audience. Just because I’m interested in one random tip on your site doesn’t mean I’ll necessarily be interested in any of the other random tips you offer.

What’s better is to build your site around a single focus. When I built AngularOnRails.com I decided to talk about Angular/Rails applications and nothing else. This means that if you’re building an Angular/Rails app you’re likely to find the majority of my AngularOnRails.com posts interesting.

Target Long-Tail Keywords

Long-tail keywords are long, specific queries like white 1995 porsche 911.

The opposite of a long-tail keyword is a “head” keyword. An example of a head keyword would be something like porsche or just car.

Long-tail keywords have two benefits. First, long-tail keywords tend to be easier to rank for because there’s less competition. I imagine that if I were to put up a page with the title of “White 1995 Porsche 911”, I’d have a much higher chance of attracting some search traffic than if I were to put up a page simply titled “Car”.

Second, long-tail keywords are more intent-revealing. If a person googles car, who knows what the searcher is after. Do they want to learn about the history of cars? Do they want to buy a car? What kind of car? On the other hand, if someone googles white 1995 porsche 911, we have a better idea of what the person wants. They probably either want to buy one or they want some desktop wallpaper. At the very least, we would have an idea of what to talk about on our page.

This is why on AngularOnRails.com I would go after very specific keywords like angular rails heroku or angular cli webpack heroku, both of which I managed to rank #1 for.

This brings me to my next suggestion which has to do with coming up with keywords in the first place.

Exploit Intersections

Angular is backed by Google. Google has an incentive to produce documentation for Angular. Ruby on Rails is backed by Basecamp. Basecamp has an incentive to produce documentation for Rails.

But no single entity has a very strong incentive to produce documentation for the Angular + Rails combination. That’s why there’s a gap. That’s why, in 2018, there still aren’t a heck of a lot of great resources out there for Angular + Rails.

This fact—that big companies tend not to have an incentive to document combinations of technologies—translates to an opportunity for someone who wants to build a high-traffic blog. Since there’s very little (for example) Angular + Rails documentation out there, the bar is low to create the best Angular + Rails documentation in the world. This low bar is what allowed little old me to attract a fairly consistent 3,000-5,000 unique visits a month on a site that had just a handful of posts.

There are certainly many more underdocumented combinations of technologies than combinations that are sufficiently covered. And as new technologies emerge, new combinations are possible—combinations that could really benefit from some documentation.

There are a lot of possible intersections to cover. Here are some ideas off the top of my head:

Obviously a person could brainstorm a much bigger list than this. I googled each combination above and discovered that only one of the above combinations has a website 100% dedicated to it: my own AngularOnRails.com. So if you want to take advantage of the document-a-combination idea, the world is your oyster. Just make sure to pick a combination that has a high ratio of popularity to existing documentation. You don’t want to dedicate years of your life documenting a combination of technologies only used by 8 people worldwide.

Don’t Code Your Own Platform

You want to invest your time in building your blog, not building the platform that runs your blog. You shouldn’t build your own blogging platform for the same reason a carpenter shouldn’t forge his own hammers.

I use WordPress for all my blog sites even though I hate WordPress. The advantage with WP is that since 25% of the web uses it all the common features I’ll need are pretty well-worn paths. Themes, contact forms, SEO tools, content management—it’s all available.

I really don’t like the way most things work in WP but it’s less bad than the alternative of building it all myself, which I’ve tried. I’m not optimizing for a good user experience for myself. I’m optimizing for getting a successful blog off the ground in a reasonably short period of time.

Use Analytics Tools

Google Analytics

Obviously it’s nice to know how many people are visiting your blog each day/week/month. Aside from that, one of the main things I use Google Analytics for is to tell me what my most popular posts are:

This tells me what’s working and what’s not. Once I see what’s working I can double down on those topics in order to get more traffic. The topics that don’t get traction I can stop writing about.

Google Search Console

Google Search Console tells me what keywords I’m ranking for, what my rank is, and how many people are clicking. Below is a snapshot of the last 90 days for AngularOnRails.com.

Most of the top keywords are some variation of angular rails. It’s nice to see that those keywords are doing well but it’s not very useful information. The question I want to answer is, “What do I write about next in order to get more traffic?” I’m going for long-tail keywords to minimize the pool of people I’m competing with.

I do see a couple keywords mentioning test coverage, so that’s a candidate. Perhaps more broadly, I could talk about Angular testing and go deep into specific testing topics, topics that would lend themselves well to long-tail keywords.

Studying analytics is just one way to help decide what to write next. In order to make intelligent decisions I also ask myself:

  • What have I personally found to be lacking online? What documentation do I personally wish existed?
  • What have my readers been asking me to write about?

Crazy Egg

Crazy Egg lets me see where people are clicking on any page of my site. Are they clicking where I want them to click or somewhere else? If people aren’t giving attention to the parts of the page I consider important, it means I need to do a better job of structuring the page.

Build an Email List

An email list is a way for you to keep in touch with the people who are interested in the topics you write about.

From the other direction, an email list is a way for people who like you to be able to hear from you every time you have something to say.

Without an email list this type of ongoing relationship would be difficult. Your readers would have to remember to periodically check your site to see if there’s anything new.

Having an email list won’t directly help your search rankings but it’s so important that I wanted to mention it here. Presumably the reason you’re putting a bunch of work into your technical blog is because you eventually want to sell something, either literally or figuratively. You might want to sell:

  • Ebooks
  • Courses
  • Consulting services
  • The idea that the reader should work at your company
  • A philosophical idea (e.g. “pair programming increases productivity”)

Whatever you’re selling, it’s much easier to sell to someone with whom you have a relationship than it is to sell to a stranger. Regularly communicating with someone over email (which, unlike social media, is one-to-one and private) is a very effective way to build that relationship over time.

And again, this isn’t just about advancing your business agenda. It’s also good for readers who want to hear from you every time you have something to say.

Create an Authority Piece

Google’s main ranking factor is the quantity and quality of links pointing at your site.

If you want to get links, create content that people will want to link to. That advice might sound overly obvious but for me it was really helpful to get into that mindset. Whenever I think of writing something I ask myself, “Will this be so good that people will want to share it?” Often the answer is no. In those cases I scrap the idea and move onto a new one.

I’ve noticed that big, long, definitive resources tend to get shared and linked to a lot more than brief, thin posts.

A good example of one of these big long resources would be Michael Hartl’s Ruby on Rails tutorial. I can’t count how many times over the years I’ve pointed people to this tutorial as the best starting point for Ruby on Rails that I know of.

Another resource I’ve personally shared a lot of times is Brennan Dunn’s Double Your Freelancing Rate. This product started out as an ebook and has morphed into a course.

I wouldn’t be sharing these things if they were just 500-word listicles. These are hefty resources that have the potential to seriously help the reader.

This is what I mean when I say “Authority Piece”: some in-depth resource that demonstrates expertise on a particular topic by being incredibly helpful.

An Authority Piece could be an ebook, a print book, a publicly available online tutorial or a paid course. A blog itself can even serve as an Authority Piece. But the technique I’m describing here is that of putting an Authority Piece on your blog.

For me, my biggest authority piece on AngularOnRails.com is my ebook, Angular for Rails Developers. After that it would probably be my Get Started with Angular 4 and Rails 5 tutorial (which I’ve now moved to CodeWithJason.com).

My Authority Pieces aren’t major ones. My ebook started out at fewer than 50 pages. My “Get Started” tutorial isn’t that long. It doesn’t always take a grand effort to put together something worth sharing, especially if you employ the “Exploit an Intersection” tactic to play in an area where very few people are competing.

Plug Into Other People’s Audiences

I’ve learned that one of the fastest ways to build traffic is to plug into someone else’s existing audience.

One of the biggest traffic sources for AngularOnRails.com is GitHub. Someone created an issue on the Angular CLI project asking about deployment. I had written a post about Angular CLI deployment so I wrote a comment on that issue with a link to the post. People appreciated the link since it was helpful and relevant. That and a couple other similar links have been big traffic contributors for me.

I was also able to send traffic to AngularOnRails.com by being a panelist on Ruby Rogues. Ruby Rogues has a large listener base. Listeners got to know who I was and found out about my website. We also did a whole episode just about Angular and Rails which definitely drove a lot of traffic.

Podcasts are probably among the best ways to drive traffic and earn links. Podcast interviews are relatively easy to get. A link is nearly guaranteed. As a bonus, the act of hearing someone’s voice is a much stronger and faster relationship-builder than just seeing someone’s written text. When you hear someone’s voice on a podcast repeatedly over time, you start to feel like you know the person.

If you want to guest on podcasts I would recommend that you find a podcast guest similar to yourself, then find out what podcasts he or she has guested on, then reach out to those podcasts for an interview.

There’s also the tactic of guest posting. I understand that Google doesn’t necessarily view guest posting in the most favorable light, so guest posting might not bring a ton of direct SEO benefit, but in the right circumstances it might help drive substantial traffic.

How to Change Your WordPress Site’s Title Attribute, Site-Wide, Using the Yoast SEO Plugin

  1. If you haven’t already done do, install the Yoast SEO Plugin.
  2. In your website’s admin area, find the SEO menu item on the left. (It should be near the bottom, below Settings.) Hover over the SEO menu item (or click on it) and then click the Titles & Metas submenu item.
  3. Click the Post Types tab. Note that there are three sets of fields here: one for Posts, one for Pages and one for Media. You’re probably interested in Posts and Pages.
  4. Under the Posts section, notice that the Title template field will probably say something like %%title%% %%page%% %%sep%% %%sitename%%. This might look kind of crazy and confusing to you, so I’ll give you an example of what this might work out to. If your company is called Ben Franklin Labs and the visitor is viewing, say, your About page, the title might work out to this: “About | Ben Franklin Labs.” That cryptic %%sep%% stands for separator and the default appears to be “|” (called a pipe character). In the next step we’ll change the title from something like “About | Ben Franklin Labs” to “About | Grand Rapids Web Design and Web Development | Ben Franklin Labs.”
  5. For my example, I chose to add “Grand Rapids Web Design and Web Development” because those are terms I’d like my entire site to rank for in Google, and because Ben Franklin Labs actually is a web design/development company. If you’re, say, a wedding photographer, you might like to use “[Your Town] Wedding Photographer.” Once you’ve decided what phrase you’d like to insert into your title, change the Title template field under the Posts section from %%title%% %%page%% %%sep%% %%sitename%% to %%title%% %%page%% %%sep%% <strong>Your Phrase Here %%sep%%</strong> %%sitename%%. (I made the new part bold.)
  6. Repeat step 5 for the Pages section.
  7. Verify that your changes worked by viewing at least one blog post and at least one page. Your new phrase should appear in the title attribute for both.