Live-streaming yourself developing
Tags: programming, development, developer, twitch
Published: 2020-06-01 05:26:17

## Introduction

Have you ever thought of streaming your own development process? This post covers almost every facet of the streaming process to give you more than enough food for thought.

As for me, I've streamed more than **five thousand** hours of my own development [on Twitch](https://twitch.tv/Adam13531) since 2015. I've had plenty of time to think about what works well and what doesn't.

## Advantages of streaming

Like most things, streaming has its ups and downs. This section will only consider the advantages.

Here's what I think are the pros (in order of decreasing importance):
- Accountability
- Community / networking
- Rapid feedback loop
- Impact
- Fun
- Extra money

### Accountability

This is the biggest reason that I started streaming back in 2015. I had just quit my job, and I was worried that I'd fall into a pattern of playing games and checking social media all day. When you have a live audience, it's *much* easier to avoid those traps.

In addition, most successul streamers stick to a schedule, which means that you'll form a routine around streaming. For years, I woke up at 7:40, showered, ate breakfast, and prepared for the stream. I wouldn't procrastinate or delay since people were waiting for me to start.

### Community / networking

In short: your audience will become your friends and/or co-workers. This has a hidden benefit though: you won't go insane.

Streaming your work almost always implies that you're working from home. If you've never worked remotely before, then you may never have experienced what it's like to be alone for extended periods of time. It's not good. I once had a remote job where I was the only developer, and a series of bad habits led to my work time creeping into my personal time. That, combined with the lack of social contact, twisted my psyche. I've managed to avoid that insanity thanks to streaming.

One other thing regarding the community: don't be afraid or nervous about showing your code for **quality** reasons (you have *other* reasons to be worried about like leaks/security, but we'll discuss that later). For example, you may feel like you're not a "smart enough" developer or that your code isn't up to snuff. Strike those thoughts from your mind immediately and permanently. Anyone who judges you for your code quality isn't someone you want in your stream.

I think that the community as a whole is more than helpful. Make sure you're not misconstruing constructive criticism for judgment, and also be sure to set your boundaries. I've had to say to multiple people that I don't appreciate their comments for various reasons, and they'll usually improve after a warning.

### Rapid feedback loop

By showing your development process to the world, you'll get feedback every step of the way. This manifests in many different ways:

- You don't know about some library/framework/technique and someone recommends it. This has been a massive time-saver for me. In multiple instances, I must have been 5 seconds away from committing to a multiple-hour-long decision that was bypassed entirely thanks to taking a viewer's suggestion.
- You write a bug without realizing it and you're told immediately that there's a problem.
- You make a questionable design decision (e.g. "players should lose money when they fail a mission") and are convinced why it's a bad idea.

All of these cases are examples of course-corrections before you've spent weeks or months in a vacuum. Keep in mind that you'll need to be amenable to feedback in order for people to break through to you.

### Impact

Some people hate the term "influencer" for what it represents, but as an English word, it's just someone who influences. By putting yourself in front of an audience, people seem to immediately assume that you know more than you do. I remember doing my first piano-playing stream and being asked which digital keyboard I'd recommend even though I'd only owned maybe two in my entire life.

This impact can be nice for a couple of reasons. For one, you can use it to market products (e.g. affiliate marketing to earn more money). The nicer reason is that it gives you insight into what you're doing well beyond what your co-workers or boss might notice. For example, I've been told that I have good organizational and note-taking skills. Knowing that others value such skills would allow me to share it with future teams or even students.

Likewise, you may discover that a skill you have is uncommon. Maybe you can explain difficult concepts clearly or come up with algorithms quickly. Knowing your strengths lets you play to them!

### Fun

You never know quite what you're going to get when you start streaming. Will someone else drop by with a huge audience? Will you make a breakthrough and get to celebrate with your viewers? Will you just have a relaxed development day where people are riffing on each other's jokes?

It's nice to spend moments like that with others. It also makes the occasional absurdities of development easier to bear.

### Extra money

I've purposely listed this last. Developers, at least in the US, make great salaries. The money that you earn while streaming will likely come **nowhere** near your salary, but it's still something! If you've already got a comfortable job, then you can at least feel less guilty when you treat yourself to your favorite restaurant or buy a new gadget.

## Disadvantages of streaming

Before we look at the cons, I want you to consider that many of them vary based on the size of your audience:

- If you have no viewers whatsoever, then streaming your development process isn't all that different from *not* streaming at all.
- At 100 viewers, you'll be able to keep up with chat and respond reasonably well.
- At 1000 viewers, you'll need to drastically cut down your interactions if you want to get anything done.

Again, here's a list in order of decreasing importance:

- Productivity hit
- Leaks
- Energy cost
- Security, compliance, and theft
- The rat race
- Internet trolls

### Productivity hit

Developing is hard enough on its own, but once you add people's random thoughts into the mix, you'll find yourself context-switching constantly. Imagine [this comic](https://heeris.id.au/2013/this-is-why-you-shouldnt-interrupt-a-programmer/) ratcheted up by `X`, where `X` is the size of your audience. You **will** lose track and forget things. And yet interactivity is the nature of the platform! If you're not going to interact with people while streaming, then it stands to reason that you could have just recorded yourself programming offline.

There are some mitigations for this:

- Write down what you're working on so that you always have that text to anchor you. Alternatively, you can literally replay the last 2-3 minutes to figure out what you were thinking about (this is sort of like having source control for your thoughts!).
- Ignore chat while tackling particularly difficult problems.

### Leaks

Whether it's personal (like your address) or technical (like passwords), given enough time, you're going to leak *something*. Here are just a few unexpected ways in which I leaked data:

- I was testing an HTML input and Chrome tried autocompleting the whole form with my name, address, email, etc.
- Ansible has a verbose flag (`-v`), then it has a *very* verbose flag (`-vvvv`) that prints **everything** to the console, including the passwords that you're using. I didn't even realize it was doing that for weeks.
- I pasted a password from my password manager into my terminal when it wasn't masking input.
- Many sites and programs assume that you're the only one at your computer screen, so they'll display your data ("you are logged in as *personal@example.com*"). Twitter is especially egregious; they pop up a dialog every once in a while asking "IS XXX-YYY-ZZZZ STILL YOUR PHONE NUMBER?"
- Searching for seemingly innocuous things (e.g. "grocery store") will typically show a map of exactly where you live.
- ...and many more!

Mitigations:

- Don't ever point out that you leaked something. Most people aren't actively watching every little thing that you're doing, so they won't know to screenshot what they're seeing. Depending on the severity, consider ending the stream and deleting the VOD.
- If the leak is technical, fix it as soon as possible. When I leaked my passwords, I wrote a note on exactly which sites and configuration files I had to modify in order to more quickly recover later (if it ever happened again).
- Use multiple scenes in your streaming software and have a special one for when you're about to show sensitive data. Alternatively, use multiple monitors.
- Look into extensions for your editor (like [Cloak for VSCode](https://marketplace.visualstudio.com/items?itemName=johnpapa.vscode-cloak)) that can hide secrets automatically.
- Honestly, just get more comfortable with people knowing relatively common things about you like your full name or the general area where you live.

### Energy cost

I'm introverted, and it can take a lot of energy to stream. You have to be "on" the whole time, handle issues with grace, and change contexts like a champion. That's all *on top of* your normal development, which is already a mentally draining process.

Mitigations:

- Time - your streaming stamina will improve over time.
- Breaks - whether it's a 5-minute break every so often or a proper "streaming vacation", make sure you have work-life balance. Don't be afraid to end streams early if you feel that it's too difficult to continue.

### Security, compliance, and theft

This is similar to leaks except that you're intentionally displaying your code to the world. Doing so leads to three issues:

- Security - suppose you write a bug into some server-side code that you showed while streaming. People may take note of it without telling you only to later exploit the flaw.
- Compliance - did you use a library or code snippet that you weren't licensed to use? Other people can see that and alert the owners of the software that you've done so.
- Theft - your code is copyrighted as soon as you type it, but that doesn't mean that someone can't steal it anyway. It's hard enough to pursue those cases when the thief is in your country, and it's almost impossible if they're in a different country.

In practice, these shouldn't have a major impact unless people have a reason to go after you, so don't make yourself a target.

### The rat race

I've seen many people start out streaming saying things like "if I get 1-2 viewers, I'll be happy!" or "I'm just streaming for fun." That's probably true at first. However, we naturally like seeing progress, yet [we also adapt to our current level of success](https://en.wikipedia.org/wiki/Hedonic_treadmill), so when we hit a plateau, it's easy to start feeling dejected.

The biggest mitigation here is to answer *why* you want to stream before you even start, then try not to lose sight of those reasons. For me, it was just to stay accountable, and even though I was meeting that goal, I still felt the desire to keep growing my audience.

That brings us to the mitigation which actually did help me: hide your view count from yourself. There's no real reason to have it showing in the first place since you should always act like you have a captive audience even if no one's there.

### Internet trolls

Ah, the flip side of the community coin. Trolls generally seek to ruin your day in order to draw attention to themselves. They'll say mean things, spam your chat, or try to get you to say something bannable on-air. The silver lining in this cloud is that for every troll you get, you'll find a hundred nice people.

Mitigations:

- Don't hesitate to perform moderation actions. Is someone annoying you? Time them out. Are they still annoying you after being warned? Ban them. You're not just streaming—you're *developing*—and you can't do either very well if you're in a bad mood.
- As much as possible, try not to give them attention.

## How do I start?

### Set expectations

Before doing anything else, you should envision what success looks like for you as a streamer; why do you want to do it? Your reasons are personal, but there's one that I'll specifically argue *against:* making it big. It's not that you shouldn't try to grow your audience or make money, but streaming development isn't a get-rich-quick scheme. In my experience, it's been a make-less-than-minimum-wage scheme even though I'm usually toward the top of the category.

Granted, I could have made more money if I'd pushed for subscribers, but it doesn't change my point: I think it's always good to set reasonable expectations and sporadically reevaluate. Go to the category you'll be streaming in and see what the numbers are like. At the time of writing this post, there are 158 Science & Technology streams on Twitch. 132 of them have fewer than 10 viewers. 121 of those have ≤5. It's likely that you'll end up in that bucket at first (and it could potentially last for a while).

Finally, be ready to conclude that streaming *isn't* meeting your goals. Streaming has its own overhead associated with it: setting up overlays and scenes, researching gear, rewatching your videos, etc. Streaming *development* adds to that overhead, e.g. the productivity hit that I mentioned. Thus, if it's not actually helping you, then that's fine! It's not like you're throwing in the towel; it was just a tool that didn't meet your needs.

### Set up your stream

There are guides online for setting up your software and hardware, so I won't cover specific steps here.

The bare minimum that you need is streaming software, e.g. [OBS](https://obsproject.com/), which I use. For hardware, given that development work is relatively drab to watch, I advise using both a microphone *and* a camera. With a microphone, you can think aloud to fill some of the dead space, and the camera will add some personality.

In my opinion, the only other hardware to consider getting at first is another monitor if you don't already have two; it's nice to put OBS, chat, and any private windows on it so that you don't distract from the development process while viewing those.

Don't consider investing in an expensive setup until you know that you enjoy streaming. Over the years, I've upgraded lots of my gear. The best piece of advice I have around that is to upgrade the weakest link. For me, it was my webcam; I went from a Logitech C310 to a C922x and felt like it was a huge leap in quality.

Whatever you end up with, make sure to test it out by watching your own videos. How do you sound with no typing or with music? Are you physically obscuring your code with your webcam's output? Is it hard to hear you when you turn your head?

### Choose a platform

I actually don't think there's a choice here; you have to go where the audience is, which is Twitch (as opposed to Mixer, YouTube, etc.). There's a non-obvious reason why I wanted to mention this: depending on how far you progress with a streaming platform, you may eventually end up signing an exclusivity contract. I signed one when I became a Twitch partner, and it now prevents me from streaming on other services.

For now, this isn't important. In the future though, other streaming services may become more appealing for developers.

### Figure out why people should watch you

There are a few primary reasons to watch someone's development stream:

- Personality - are you entertaining? Nice? Positive?
- Skills - are you good at your IDE? Your operating system? The language you're using?
- Community - is chat friendly? Are *they* knowledgeable?
- Project - is it interesting? Easy to jump in to? Note that most people who watch aren't glued to their screen as you type each line of code. As a result, I don't see someone's project being *too* important, but it will attract or repel certain viewers. For example, I had people watch me while I was creating an NES ROM, but they didn't stick around when I did web development.

Here are some general tips on how to make your stream more enjoyable for viewers:

- Make sure your font is readable. You may be able to comfortably see ~70 lines on your monitor, but there's no guarantee that someone watching in 480p on their phone can read them.
- Talk! If there are only a couple of people chatting, then you should probably engage them. What are *they* working on? What suggestions do they have for you? How long have they been coding? If you don't have an audience, then act like you have one and narrate what you're doing and why. At the very least, it'll put you in the habit of doing so when you *do* have an audience.
- Work on your speaking skills. Cut down on verbalized hesitations ("uh", "um"), mumbling, etc.
- Work on your development skills. For one, you'll *be* more competent, so your development itself should benefit. However, you'll also *look* more competent, which will go a long way with new viewers.
- Set a schedule. People want to know when to expect you online.

I wouldn't worry about which part of the development process you're streaming. There's always going to be someone out there who wants to watch! I've streamed myself documenting, designing, testing, refactoring, etc.

## Growth and interaction

As I've touched on, growth isn't necessarily a good thing depending on your goals. If you only want to be held accountable, then having ten active viewers is better than having ten thousand.

There's a site called [SullyGnome](https://sullygnome.com/) that tracks Twitch statistics. You can check out your favorite streamer there or even an entire category's stats.

Growth can come from several sources:

- The platform - either people are looking for streams in your category or the platform specifically recommended you to someone.
- Networking - you bond with another streamer or community and gain viewers through them. This is why you should always host or raid another streamer at the end of your stream. Follow or join their stream/Twitter/Discord, chat in their channel, etc. Essentially, do what you'd want those streamers to do in your channel or with your community.
- Promotion - most people aren't outright buying ads for their channel, but if you're comfortable with a particular community, they'll usually be okay with you posting your stream link. Follow-for-follow schemes are a waste of your time since they don't provide any lasting benefit.

Once a viewer is in your stream, it's your job to captivate them so that they want to come back. Let's say you split your time on-stream so that you're developing for about 80% of the time and interacting with chat for the other 20%. In a 5-hour stream, that would mean that you're spending an hour interacting. When you have a small audience, that hour goes a long way. You can make a real, personal connection with each individual chatter.

As you start to get tens or hundreds of viewers, you'll only be able to say "hi" to each person and maybe remember some basic, broad details about them. This tension between interaction and productivity is core to growth as a development streamer. After all, the biggest difference between a live stream and a prerecorded video is interactivity!

You'll have to discover techniques to maximize your interaction time:

### Make commands

One technique that I use is to have commands for frequently asked questions, that way I'm not answering "which keyboard do you use" twenty times per day. However, when a new viewer asks that question, *they* don't know that it's already been asked repeatedly in the last few minutes, so they may be put-off by not getting a personal answer. This is the give and take of streaming, and you'll have to test different strategies to strike a nice balance.

### Identify dead-ends

Sometimes, a conversation is destined to go nowhere. You'll have to spot patterns in these so that you don't spend too much time on them. The patterns that I've noticed repeatedly are:

- **Conversations that just aren't suited for live-streaming**. For example, if a design discussion spans 6 hours and someone joins halfway through, you likely can't get them up-to-speed without spending 5-10 minutes on them (this is partially because very few people will read any public documents that you share). Without that context, they'll start proposing ideas that you've already discussed, but you also don't want to sound dismissive by saying not to ask questions.
- **People who can't contribute**. Some people mean well but have no realistic way to contribute. For example, they may not even be technical, or maybe they don't know your particular stack very well.
- **Overly opinionated people**. This *seems* like trolling sometimes, but it's actually just someone who has a very strong opinion on something. For example, I had someone say that I shouldn't be using Windows. I asked them why, and they said they hated it. I don't really care if people like or hate the technology that I use, but a personal distaste is not a reason for someone *else* to switch.

### Delegate

By shifting some of the onus onto your community, you'll free yourself up for the work that doesn't scale. Encourage them to welcome new viewers and answer their questions. Elect moderators to help out with this.

## Miscellaneous

Here are some random tips that didn't fit anywhere else:

- Avoid variety streaming (e.g. streaming development *and* gaming) unless you want to brand yourself as a variety streamer from the start. If you *haven't* branded yourself as a variety streamer, then you'll see a tremendous dip in your audience's interest when you switch from your main activity to a secondary one.
- I find it frustrating when I enter a stream and the streamer isn't even present. From my point of view, I don't know if it's a 10-second water break or a 20-minute lunch break. For that reason, I almost always put up a "BRB" screen with an estimated time of when I'll return.

(I know this is a short section for now; I'll likely add links to specific blog posts that I have planned for the future, e.g. making overlays in OBS)

## Conclusion

Streaming is just a tool. If you want it to work for you, then you'll need to know your audience and capitalize on your own strengths. You should expect *very* slow growth unless you're already e-famous, but remember that growth isn't everything! Twitch is and likely always will be a platform primarily associated with playing games.

My own goals with Twitch have changed drastically since I started 5 years ago, so rather than link my stream again, here's something that will help us both: [my Development Efficiency course](https://adamlearns.com/courses/development-efficiency)! Astound your new audience with your impressive efficiency. ⚡