Matt Robenolt

Stalk me:

Things I Learned About Being a Software Engineer

Since I started working at Disqus a year ago, I feel that I've grown more as an engineer than I have the rest of my career combined.

For the first time in my career, I've been spending some time to reflect and look back on what has changed and how I got to this place. There is one critical point that has stood out to me that has changed my perspective on how I tackle problems and interact with our team.

I don't actually know what I'm doing

I like to think that I'm a relatively accomplished individual. I've been writing code in some shape or form for the past almost 18 years. The one thing that I've learned is that I actually suck at this programming thing and I have literally no idea how anything actually works.

What?

When I was a young kid and everything was new to me, learning all this shit was an amazing experience. Honestly, nothing in my life has given me the same joy or the same feeling. As I got older, that started to wear off. The foundation of my skills had been laid and I began to hone my skills more and more. Sure, I was still learning a lot, but the pace had slowed down. I sorta figured out what all this code stuff was and things started to actually make sense. I could build new things from scratch and all of that good stuff.

From this point, my confidence started to grow and grow. Up until a few years ago, I was feeling like I was at a pretty high point in my skillset and grew overconfident.

As a result of being overconfident, I started making critical and sloppy mistakes. I stopped asking questions. I knew how to do this, it's easy! This lead to several critical mistakes and lots of lessons learned.

Since then, I've begun to realize that the more I learn, the less I actually know about all of this. And that's ok. Every time I learn something new, I feel like I've opened a door into a brand new world of things I've never dealt with before.

Cool story bro, why are you telling me this?

Understanding this has caused me to tackle problems and work with others differently.

1. Make crazy changes, but be cautious

Since I have no idea how anything works, I've learned more that anything can happen and I'm probably not really going to understand. I've learned enough to be as defensive as possible. Anything that can go wrong, will go wrong and we don't want to bring down the whole service. Sometimes dangerous and radical changes need to happen, and it's safer to assume it's going to fail 100%. So just plan for that, then iterate. Overall my risk assessment skills have skyrocketed as a result of accepting that I know nothing about how anything works.

2. Ask more questions

Other people are smart. Why spend a lot of time trying to figure something out on your own or re-inventing something when someone smarter has done it already? People will gladly help you if you ask enough.

3. Not knowing everything is really fine

I don't need to know everything to do awesome things. Understanding the risks involved is much more important than actually knowing. Make things up. Have fun. But cover your ass. Nobody is going to complain about a broken experiment if that experiment isn't affecting anything. Once your ass is covered, try whatever you want! This is the opportunity to learn if your crazy idea is actually meaningful.

Ending thoughts

In retrospect, this realization seems like common sense to me. It has taken me almost 18 years to figure out that computers are really hard and I've learned how to embrace it. I hope this insight helps someone out. I've been very fortunate in my career so far to have some awesome mentors by my side, and I'm very thankful for having worked alongside them all.