Lowering the Barrier

Making programming (everything) more accessible

09 Mar 2021

This Culture

“What is your engineering culture like?”

The short answer: think radically, ship incrementally. What does that mean day-to-day? It’s hard to answer without rambling, which is a sign I need to figure it out by writing it down.

If you’re shipping incrementally you’re shipping often. When faced with the choice of shipping something imperfect soon or something more refined later, we will choose to ship soon. We just did that yesterday, when we opted to ship a small version of a feature by next Monday instead of waiting for all the bells and whistles. We’re doing it again today, opting to announce a change and have it rolled out to everyone by Friday instead of waiting to announce next Monday. We did it a few Fridays ago, when we opted to run a low-risk backfill of a critical database instead of waiting for Monday.

Everyone says they want to move fast. It sounds obvious. Moving fast comes at a cost, though. You will make more mistakes over a shorter period of time than if you move slowly. You want to learn as much as you can from those mistakes. Making a habit of running blame-free postmortems after incidents helps. No amount of process will overcome humans’ tendency to avoid risk or kick the can down the road. This is where culture comes into play: whenever we see someone hesitating or moving too carefully, we push them to ship. Press the button! Asking “what is the bold move here?” can help a lot, mostly by reminding you that there is a bold path.

Hesitancy and timidity creep into life. As you move from creating new businesses to keeping & growing existing businesses, you worry more about screwing up. You also stop pursuing projects that don’t line up with your official priorities. In an ideal universe, management could just say “hack on whatever you want so long as you’re getting your work done.” That approach has never worked out for me, either as an engineer choosing how I’m going to spend my morning or as a leader simultaneously wanting people to build what they’re passionate about while also hitting deadlines.

When you start out on something, you’re computing the odds that it’ll go somewhere. If your team ships frequently, you can feel confident that if you get something working, you’ll be able to get it out into the world. But will people recognize and reward your work? That question lingers in our subconsciences. (Maybe not yours, but it certainly does in mine.) Just as you want to tilt the deck toward people releasing their work, you also want to encourage people to pull interesting threads whenever they find them. We do that at our Weekly Wins meeting on Fridays. We go around the (figurative) room and everyone shares their wins from the week. Can be personal, can be behind the scenes, can be your side hustle. We also do that through strong ownership. If you get excited about a project, write a design doc, share it, and demo whatever you have so far.

The hardest part of encouraging people to pursue their side hustles is judiciously saying no. You have to say no a lot, otherwise you’ll drown. Say no to new ideas enough and people will stop bringing them up at all, no matter how much you celebrate side projects that ship. When “not right now” enters your head, you have to translate that into “what’s the next step to make this real(er)?”

In exchange for people shipping what they’re passionate about, you’re trading away the ability to say with confidence what you’ll ship in the next N months. That’s the right tradeoff for Replit. We know our goal for the year (2021 is all about revenue growth) and what the priorities are for reaching those goals. I just looked at the platform roadmap we wrote in January. We’ve shipped most of our top priorities! It’s taken a little longer to reach the secondary priorities, and we’ve shipped a lot of stuff that wasn’t in the roadmap. We’re well on our way to reaching our revenue goals. An enterprise software business probably wouldn’t want to make the same tradeoffs - having assurance that certain features will ship in a particular timeframe is key to getting people to commit to large contracts.

When I started writing this post I thought I’d have many paragraphs to write about thinking radically. I don’t. Deliberately trying to big thoughts has never panned out for me. If you’re shipping often, it’s worth it to take time to think. What’s nagging at you? What’s important that you don’t seem to have time for? I haven’t seen people have much luck blocking off time in their calendars for thinking, though maybe they just don’t tell me about it. You start cheating on the time blocks for “important” stuff and then it all falls apart. Turning off slack or email, closing your computer, or (back in the time of offices) going somewhere other than the office all seem to work. At first it feels like shirking but trust me, taking time to think means you’ll be able to use the other hours in the day intentionally.

Everything I’ve written about here (shipping frequently even when it’s slightly risky, encouraging side projects, taking time to think) will come under pressure as we grow. We’ll have to tend to our culture daily. But writing it all down so we can know what to watch out for helps a lot.