Life as an impatient programmer

Gavin Belson insults my spirit animal — “the insolent and cocksure hare.”

I have to admit — patience has never been one of my strengths. My parents tell me over and over, “Try to be more patient!”

It’s never quite stuck.

I get why they harp on me. Impatience is by definition pretty negative sounding:

1. having or showing a tendency to be quickly irritated or provoked.

But is being impatient always such a bad thing? Consider the alternate definition:

2. restlessly eager

“Restlessly eager”. I love that!

Said a different way, it means you’re enthusiastic, dedicated, and ambitious. You just have a little trouble directing all that energy.

But what if you could harness all that enthusiasm?

The positive results of impatience

It may sound strange, but being impatient has helped shape my programming career in a positive way.

If you’re like me, being impatient can help you become…

  • A better programmer. You won’t wait for someone else to fix a bug or an annoyance. You’ll create that app you need because it doesn’t exist yet. You’ll build systems and shortcuts for your daily work. This process of constantly building, learning, and tweaking keeps you sharp.
  • A well rounded professional. You won’t stay in dead end jobs that don’t challenge you. You’ll want to learn new things. You’ll want to improve stuff as fast as you can. This builds an arsenal of rich experiences that you can carry forward forever.
  • A better student. You’ll be an efficient learner. You’ll learn the stuff that matters and ignore the fluff. You’ll develop systems to learn faster and smarter. You’ll focus and work hard because there’s nothing worse than wasting time.
  • A better teacher. You’ll have spent so much time learning, you’ll already be a great teacher. You know what matters and what doesn’t. You’ve experienced success and failure in a wide variety of situations. You’ll want to pass on these experiences onto others.

Hey, being impatient doesn’t sound so bad after all!

Harness your impatience

I know, I’m making it sound like being impatient is all roses and it’s the key to success.

Of course it’s not that simple. Harnessing your impatience into positive energy is easier said than done. I’ve fucked up plenty because of my impatience.

Over the years I’ve found that, like many things, balance is the key. Not everything can be the ire of your impatience.

Try to pick your battles. Try not to get worked up about minor bullshit. Try to direct that energy at the important stuff.

Ask yourself lots of questions. When do you get impatient? When did you turn that energy into a success? When did you fail? What’s worth spending that valuable energy on? Who on your team can help keep you in check?

If you can answer those questions, you’ll be on your way toward harnessing your impatience.

You’re lucky. Not everyone is blessed with impatience. It’s a powerful motivator and a great source of energy. Use it to your advantage!

If you liked this article, I’d really appreciate if you click the heart button down below. Thank you!

We’ve been hard at work making Basecamp 3 and its Android app the best way to run your projects and small business. Won’t you give them a try?

How I became (and stayed) a successful programmer

3 strategies that have been crucial to the longevity of my programming career

For a while now, interest in programming has been skyrocketing. So there are a lot of beginners out there starting their careers — and that’s a wonderful thing!

If you’re one of those beginners, eventually you may start thinking about the long-term prospects of your new skills: How do I take a new skill like programming, grow it, shape it, and tune it over time so I can achieve longevity in the industry?

I asked myself that same question early on in my career. Now, a mere 15 years into it, I’m hoping I can give you some answers.

Below are a few general strategies that have helped me become (and stay) a successful programmer over the long haul.

1. I surround myself with programmers who are way better than me

Over the course of my career, I’ve always tried to pick work where the people I’d be working with are exceptionally talented. To put it more bluntly, I put myself in the company of programmers who were way better than me.

This is crucial, because the best way to improve (at anything) is to learn from people better than you. It might be a nice ego boost if you know more than everyone around you, but you’re otherwise just flat lining your actual progress.

When I’m around these talented programmers, I constantly keep my eyes and ears open for nuggets of wisdom. I watch how my fellow programmers carry themselves, how they breakdown a problem, how they talk to each other. I look at their code for patterns and style choices that I can mimic. I remind myself to talk less and to listen more.

Unless you’re the Michael Jordan (or dare I say the LeBron) of your respective field, there should always be someone better than you — this is a good thing!

You have nothing to lose and everything to gain in such a situation. Take advantage of it. 🚀

2. I occasionally leave my comfort zone

I’ve found it beneficial to leave my programming comfort zone once in a while. It helps me think differently by challenging a bunch of established ideas I already have.

For sure, you don’t want to do this constantly because it can be hard to get into a rhythm with your normal area of work. But in moderation it can really open your mind to new ways of thinking.

For example, my comfort zone is Java and Android. But over the last year, I’ve taken on stuff well outside that zone:

  • I helped build an open-source framework. Turbolinks Android was the first time I’d ever worked seriously with Turbolinks (new tech to me), it was my first open-source project ever (new process for me), and it was a cornerstone for Basecamp 3 for Android (a new product for the company). It was one of the hardest projects of my career!
  • I started writing Kotlin instead of Java. I’d been writing Java for over a decade, so picking up a new langauge was no trivial task. Not to mention I’d never written a single line of Kotlin previously! But before I knew it I jumped in head first and am now writing Kotlin most of the time. (Incidentally, I’m completely in love with the language!)
  • I’m learning the underpinnings of our open source rich text editor. By learning the ins and outs of Trix, our Android team will be able to better utilize its capabilities now and in the future. But as someone who isn’t totally up to speed on advanced Coffeescript and DOM manipulation, this has more or less melted my brain. But I shall prevail!

Here’s what’s important to remember — none of this stuff was particularly easy or comfortable for me. In fact much of it was downright uncomfortable, nerve-wracking, and filled with doubt. At times I literally felt like I had no idea what I was doing.

But as challenging as they were, I did them anyway because I knew how valuable those experiences would be . They gave me the opportunity to work with a variety of the programmers, let me reacquaint myself with technologies I’d fallen behind with, and let me learn brand new stuff that few others in the company got to. All of that made me a better programmer.

So find a programming task that takes you out of your comfort zone and make it your next project. Then watch it pay off in spades. 💰

3. I value being independent

When you’re just starting out, you’re going to have a lot of questions. That’s OK!

What’s most important is how you choose to find the answers to your questions.

One philosophy that’s always served me well is to be independent. Usually this means that I’ll try to do most things myself first, and only when I really get stuck, I’ll ask for help.

Being independent has tons of benefits, but to name just a few…

  • You learn how to be resourceful. Finding answers may just be one Google result away, or it might take a dozen different queries. You might have to patch together 5 different solutions that you’ve found to work together. Who knows. Finding the answers you need on your own is a skill that’ll serve you well for years.
  • You earn respect by being courteous of other people’s time and work. When you prioritize your independence, working with other programmers is easier. They’ll appreciate that you’ve done a lot on your own and have taken it as far as you can before asking for help. By respecting other people’s time and work, you’ll earn respect back. And mutual respect is the cornerstone for trust and solid teamwork.
  • You start developing your creativity. When you need to come up with answers, you’ll find yourself coming up with creative solutions you hadn’t considered. You’ll try things that seem crazy and out of the realm of possibility. Some will work and some won’t, but you’ll begin to develop a palette of creative solutions that you can draw from many times down the road.

The next time you have a burning question, see if you can answer it yourself, even if it takes a little longer than asking someone. It’ll be worth it.🔥❓✔️

Becoming a successful programmer is, like anything worthwhile, hard work. But these strategies have always served me well in the long run — after all, I ended up getting my dream job working at Basecamp. I hope they can help you get to where you want to be, too. 😀

I hope this article was helpful to you! If so, please do hit the heart button below and let me know on Twitter.

We’ve been working really hard to make the all-new Basecamp 3 and its Android app as great as they can be. Check ’em out, we hope you love them.

Hiring a programmer? Ditch the coding interview and get back to basics

10 articles from the Basecamp archives focused on common sense hiring practices

This week was going great…until I saw yet another article coaching programmers on how to prepare for a coding interview. Imagine, the secrets to “winning” a coding interview and getting your dream job, all unlocked in one article! 🤔

I suppose I shouldn’t really blame people for writing articles and books claiming to teach you how to beat coding interviews. They’re just trying to help other people and maybe make a quick buck. They aren’t really the source of the problem.

The real problem is that this entire cottage industry is built on the false pretense that coding interviews have any value whatsoever.

So before we go any further, let’s establish one very simple truth: coding interviews are worthless.

The Practical Developer nails it. (Original Tweet)

I won’t bother going into detail as to why coding interviews are so worthless. Many have already hit the nail on the head — the reasons are varied, numerous, and already well-documented.

It is interesting, though, that nobody really seems to know when, where, or who started them. My guess is because no single person or organization wants to be blamed for so much industry wide suffering. (If you do happen to know the origin story, I’d love to read it).

Regardless of how it all got started, a growing number of tech companies seem to use coding interviews regularly (as evidenced by all those amazing how-to articles and book). And therein lies the danger.

If more and more companies start to believe in coding interviews, the trend will gain frightening momentum. Pretty soon nobody will ask why they’re even doing them. People will start to assume that if a lot of companies are interviewing like this, then they must be valuable, right?

No! We need to kill this virus before it spreads too far. There are much better ways to find a good programmer.

Over the years Basecamp has published a handful of articles about hiring. It’s something we rarely do (the company is 17 years old and has just 49 employees), so we’re very considerate with each hire.

Instead of following a silly interviewing trend that’s flawed to its core, we just follow some common sense practices.

Below are 10 articles we’ve written from the past decade or so with tried and true ideas to help you find a great programmer.

Every one of them holds up today, and we still rely on these ideas ourselves. And no, not a single one involves you watching someone sweat through a pointless whiteboard exercise. 😓

As a business focused on the long-term, these ideas have paid off in spades for us. I hope you’ll consider these ideas, and join me in giving a big 🖕 to the coding interview trend!

Stop whining and start hiring remote workers

There’s so much untapped tech talent that does not live near your office, but would work for you if you allowed them to.

The person they’ll become

I love betting on people with potential. When they finally get that chance to do their best work, they blossom in such a special way.

Why we don’t hire programmers based on puzzles, API quizzes, math riddles, or other parlor tricks

The only reliable gauge I’ve found for future programmer success is looking at real code they’ve written, talking through bigger picture issues, and, if all that is swell, trying them out for size.

Kick the tires

Before we hire anyone we give them a small project to chew on first. We see how they handle the project, how they communicate, how they work, etc. Working with someone as they design or code a few screens will give you a ton of insight.

Effort in the application: sites that got our attention and got Basecampers their jobs

Hiring is hard. Likewise, landing a great job is hard. In a sea of resumes, effort rises to the top.

“We hire only the best”

The best are generally the best because they aren’t typical. Because they came at things from a different angle that gave them a unique perspective, which happens to provide more insights than the widely-distributed approaches


If you are trying to decide between a few people to fill a position, always hire the better writer. It doesn’t matter if that person is a designer, programmer, marketer, salesperson, or whatever, the writing skills will pay off.

Hire managers of one

A manager of one is someone who comes up with their own goals and executes them. They don’t need heavy direction. They don’t need daily check-ins. They do what a manager would do — set the tone, assign items, determine what needs to get done, etc. — but they do it by themselves and for themselves.

How to hire a programmer when you’re not a programmer

Find out how they manage their work. Software often slips — find out how they avoid this. Find out when they shipped something on time and ask why that project was successful.

Actions, not words

Programing is all about decisions. Lots and lots of them. Decisions are guided by your cultural vantage point, values, and ideals. Look at the specific decisions made by a candidate in coding, testing, and community arguments to see whether you’ve got a cultural match.

Hiring is so important to us because we care a lot about our customers, our product, and our company.

If this was helpful to you, please hit the heart button below or let me know on Twitter!

“Eat, sleep, code, repeat” is such bullshit

Despite the hype, programming is not an all or nothing endeavor

I’m on my way back home from Google I/O 2016. It was a fantastic conference — I met some great people and learned a lot.

But while I was there, I saw something horrifying, something I couldn’t shake from the moment I saw it…

Eat. Sleep. Code. Repeat. Bullshit!

“Eat. Sleep. Code. Repeat.” was printed on everything. I’d seen the phrase before, but this time it burned into my brain, probably because it was being so actively marketed at a large conference. I literally let out an “ugh” when I saw it.

What’s the big deal? It’s just a shirt.

Look, I get it — Google I/O is a developer conference, and the “eat, sleep, code, repeat” phrase is intended to be a clever way (albeit a completely unoriginal one) of saying “coding is awesome and we want to do it all the time!” I appreciate the enthusiasm, I do.

But there’s a damaging subtext, and that’s what bothers me. The phrase promotes an unhealthy perspective that programming is an all or nothing endeavor — that to excel at it, you have to go all in. It must be all consuming and the focus of your life.

Such bullshit. In fact it’s the exact opposite.

At Basecamp I work with some of the best programmers in the world. It’s no coincidence that they all have numerous interests and talents far outside of their programming capabilities.

Whether it’s racing cars, loving art, reading, hiking, spending time in nature, playing with their dog, running, gardening, or just hanging out with their family, these top-notch programmers love life outside of code.

That’s because they know that a truly balanced lifestyle — one that gives your brain and your soul some space to breathe non-programming air — actually makes you a better programmer.

Life outside of code helps nurture important qualities: inspiration, creative thinking, patience, flexibility, empathy, and many more. All of these skills make you a better programmer, and you can’t fully realize them by just coding.

Don’t believe the hype

It’s no secret that the tech industry loves hyperbole. How will you ever reach the coveted title of ninja, rock star, or wizard if you don’t spend all your waking, non-eating hours programming?!

I’ll give my standard advice: ignore the hype.

It’s wonderful to be so dedicated to your craft that programming is all you ever want to do. I love that enthusiasm. It can carry you to great heights.

But if you want to become the very best programmer you can be, make space for some non-programming activities. Let your brain stretch its legs and you might find a whole new level of flow. 🤘

When I’m not programming, I love being a dad. I also enjoy donuts and pizza.

And when I’m not thinking about kids, donuts, or pizza, I do my best programming for Basecamp 3 and its companion Android app.

If you liked this post, please do hit the heart button below or let me know on Twitter!