Ok, so I have to ask. Your Twitter profile name, is it based off the movie Princess Bride?

Haha, yea it actually is. I was actually looking for a twitter profile name at the time, and some friends were making some puns out of my name, and that was one that kind of stuck. It was available and so, yea.

So, How did you get into development?

So I started programming in High School actually. It’s kind of a ridiculous story. My High School had a requirement to take one technology class (something other than typing) that was apparently supposed to prepare you for tech industry. The courses you could pick from were programming, or how to use MS Office (Excell, Word, etc). I picked Microsoft because I’m a slacker and I already knew all that stuff.

After the first day of class, I met with my friend in the hallway and we were talking. He asked me what I did, and I told him we opened Word and wrote a paragraph, it was easy. He looked at me and said, “you’re a complete idiot, and you’re wasting your time. Come take programming.” And the rest is history. I dropped the class and joined programming.

What did you end up doing in your programming class?

We started with Turbo Pascal. I love environments like Turbo Pascal and Q-basic. There is so much to do when you’re trying to build any kind of modern app. There are so many things that distract you. When you try and teach web stuff especially, there is so much to learn. Javascript, server side (which might also be Javascript but it’s different), Git, SQL, DevOpsy stuff to set up environments.

At least back in the day it was a lot simpler. you had these environments that were basically the editor or IDE that was all encompassing. It had a “run” button that would let you watch your program execute. The debugger was built into the whole thing too. You could easily follow the program step by step. For beginners who haven’t the mental model of how programming works, being able to observe it was powerful. I love environments that eliminate stuff that isn’t important to the fundamental task of learning how to logic a computer.

So what did you do after High School?

I went to the university of Michgan and majored in CS. I did a few internships and eventually found my way into the professional world at Twillio. After Twillio, I worked at keen.io for a time and then started ngrok. I’ve been doing ngrok as my full time business for about 2 years now.

So where did the idea for ngrok come from? Why did you come up with it?

Basically it was a project to learn Go. It’s kind of a strange origin for it, but I was interested in Go, it was the new cool language. Actually, at the time I was working on a lot of networked python code with things like twisted and gevent. The twisted model of callbacks is like Node.js, and so it it didn’t feel great.

I also got pretty deep into gevent, but got frustrated with it. It’s a library that patches Python network calls so that instead of blocking, it would run them async. Because it was monkey patched on top of Python there were all sorts of problems.

Around that time I started seeing stuff about Go, and the concurrent model it offered. It was really appealing, so I wanted to give go a try. One of the things that I find the most helpful when learning any new technology (framework, language, etc.), is to take an existing project and just port it into the new language or framework. It eliminates all the decisions about a product itself and really helps you focus on learning. Building from scratch you get into product management questions (should it do this/that). An existing project already does what it’s meant to do, so it’s very much like a homework assignment.

I decided to port an existing tool (local tunnel made by a friend, Jeff) into Go. That’s how that first version got written. After the first prototype, I started using it at work. I was at Twillio at the time and started using it and sharing. I took all the feedback and suggestions I got and started adding them to the project.

Where did the name ngrok come from?

It was original a play on other networking tools like ncat/ngrep, but mostly it was a five letter dot com that was available.

What are some other cool things you’re working on?

Pretty much all my time these days are dedicated to ngrok. There are enough technical questions to keep me busy for a long time. And, it’s more than just a programming projects. There are lots of business challenges as well.

Probably the last project I worked on that wasn’t ngrok, was a tool that allowed you to understand code better. A tool for code and program comprehension. The basic gist is that it’s very difficult for people who are new to any codebase to make changes to it. There is a big time cost to making a chance because you have to learn how the software works. You have to build a mental model before working on anything. A change that could take a seasoned developer 5 min, might take someone else 3 weeks because they have to figure out how the application is structured.

The tool was designed to help ease that transition. The idea was that small programs are easy to understand. Large programs that have all production stuff already built in (edge cases, backwards compatibility, logging, metrics, etc). Stuff that distracts from the code structure. Strip all that away, and it’s much easier to understand a project.

What do you like most/least about programming?

I think one of my favorite things about programming is finding the right API. API design is an extraordinarily difficult balancing act of the competing interests of simplicity, power, and flexibility. Finding the right balance so that others can reuse code later is always a very rewarding experience.

What technology do you currently find exciting?

The latest technology I’ve been interested in is grpc as a way to make RPC more productive. I recently gave a talk on how to get started with it and why I think it’s so exciting.

What advice would you have for new developers, or wisdom to impart to other developers?

You know, I think for people getting into programming, people who are just starting and just learning, I guess the thing I like to tell them the most is that a huge amount of programming is accidental complexity. It’s things we’ve memorized over the years. It’s not an inherent difficulty, there are just so many tools that are broken in weird ways for historical reasons.

Don’t get frustrated by the overwhelming amount of things to learn, and the fact that there is no clean way to do stuff. Especially in web. Where you’re trying to glue together 5 pieces/languages. Learning Javascript, CSS, HTML, backend, Git, ops, to put everything together. So much is changing that things you’re working with are built on top of things that are broken. Sometimes temporary fixes become permanent. Accidental complexity. Keep that in mind.

There is just a lot of stuff that experienced programmers just know because we’ve been doing it for a long time. We’ve memorized this stuff, because we’ve beaten our head against problem enough that we remember how to solve it.