A Retrospective On My First Decade as a Software Engineer
I've been working in the software industry as an Engineer since 2011. Over that time I've learned a ton about software and people. I thought I'd take a little time to reflect on my career and the things I've learned, so here's a little breakdown of what my first decade in the industry has looked like.
Beginnings (2004 - 2010)
My introduction to making websites was in around 2004 making personal blogs and fan sites. Making websites, at least for me, was a crude process of slapping together HTML and CSS. I remember playing around with Dreamweaver because it let me lay things out without really knowing what I was doing. I could drag and drop elements and it would generate HTML for me. A couple of years after that I experimented with Apple's iWeb (remember that thing!?) which was fun and convenient to use as I was traveling abroad and needed something that was fast and required zero setup.
This didn't last long as I soon discovered Wordpress and became an instant convert. I explored building my own plugins for it and customizing it as much as I could. It was a blast! I would say that Wordpress was really my window into web development. It was easy to set up, had a large community, and not too difficult to tweak.
Hatchling (2010 - 2015)
Oh, how I wish code schools were a thing when I started learning to code...
The first five years of anyone's engineering career are incredibly formative years. _Everything_ is new; the technologies you're exposed to, the ways in which people work and communicate, the tools the industry uses, how to collaborate with people, etc. As I think back on this time I think the biggest lesson I learned is that you need to surround yourself with people smarter than yourself, but they need to be empathetic and enthusiastic about sharing their knowledge. This will greatly shape the way _you_ work in the future when you become the Senior Engineer and mentor to others.
One of my biggest regrets of my early career days is not being very open to new languages. I was obsessed with frontend development and wanted to learn it all, but this focus blinded me to some of the amazing benefits that exposing yourself to other languages can have. Having focus isn't bad, but shutting yourself out from things outside of your comfort zone is a missed opportunity.
At this point my family and I made the move to Portland, OR. Remote work wasn't as ubiquitous as it is today so I had to make another career move. A friend of mine, who happened to be my manager at my first job, had started his own agency. He brought me on as a remote employee allowing us to make the move. During my short ~5 month stint there I got to learn quite a bit about Node.js, Hapi.js, and really just how to work as a contractor and how to work remotely. There's a lot of nuance in time-keeping, tax reporting, etc, which I wasn't particularly fond of. Working from home was also something that was so new to me that I had no idea how to do effectively. At this point I decided to start looking for work again and found my place at Nike on a short-term contract where I was W-2'd 🎉. As an added bonus, I was brought on at a rate of $130k/yr (though of course I didn't work there for a full year).
At Nike I worked on an internal Backbone platform used by the company to plan out their global initiatives. I was still very much learning how to effectively use Backbone, and since I hadn't used it for about a year or so it was certainly interesting having to pick it back up in this environment. The platform had recently been quickly re-written in Backbone and the responsible engineers no longer worked for the company. They were also using SVN instead of Git at that point, which I had used a couple of times in the past, but really didn't care for. The biggest lesson I learned during that year is that I *really* don't like contract work, especially when managed by a third party contracting company. Health insurance and taxes are a pain, time off is difficult to request and isn't paid... there's just too many things that for me I just try to stay away.
Somehwere in the middle (2015 - 2017)
In 2015 I started working at Opal as a Frontend Engineer. At that point my experience was largely in Backbone which suited me well for this new role.
The first few years at Opal were instrumental in shaping my career. Being a smaller start-up allowed us engineers to have a great deal of ownership in the software we wrote and in the processes we implemented. Working for a startup can very much be a double-edged sword. It would be difficult for me to quantify how much I learned during this time; Communication with peers, talking to customers, building software fast, seeing real, monetary impact from your failures, learning tech you never thought you would. But you also could end up working late nights, be paid much less than you deserve, or work under stress. Case in point, I was brought on at $90k which was a significant pay cut from my contracting gig at Nike. But I _really_ wanted to work there.
We made a couple of attempts at modernizing the frontend codebase over the years. First was Ember. We didn't get very far with that, mostly building out a single feature. In 2017 we decided to adopt React and I fell in love. The challenge with this was that we couldn't hit pause on feature development while we converted a massive frontend codebase to React. So we had to upgrade the car while we were driving it. This was incredibly challenging for a number of reasons (performance, state management, etc) but I learned a _ton_.
More recently (2017 - 2020)
In 2017, still at Opal, I was promoted to Engineering Manager to lead a team of four engineers. This was a turning point for my career. I learned so much about a wide range of skills; technical planning & identifying KPIs/ROIs, prioritization, risk management, platform stability monitoring, cross-functional team collaboration, resource management, recruiting, on-boarding, and mentoring just to name a few.
This has been said a million times but I'll say it again; being good at coding doesn't mean you'll be a good people manager. It is a completely different beast and set of responsibilities. I'd like to think that there were many key aspects about being an EM that I was good at; mentoring and protecting my team being a couple of the highlights. I was doing the best I could with limited resources, but I had so much to learn. I will also concede that I tripped a lot. And why is that? Communication. This is likely the most valuable lesson I learned during my tenure as an EM. Being open and honest when communicating about your employees and the work your team is doing sets the right expectations. In many cases I failed at this.
In early 2020 the pandemic hit. Many people were laid off and I was faced with the question of how I could make the most impact based of our company's needs, my expertise, and how all of that could align with my own interests. I decided to step back into engineering full time as a Senior Software Engineer. I focused largely on frontend performance, continuing to convert our legacy codebase to React, mentoring junior engineers, and helping onboard new ones. At this point I was making $135k, which is great, but I _knew_ that I was still being underpaid. This was something the was becoming painfully obvious as I looked around to my peers in the industry.
2021 and looking to the future
Late in 2021 I began looking for other opportunities. It was a hard decision to commit to having been at Opal for 5.5yrs. It was all I knew! But the company had changed and so many of my friends no longer worked there. Many of them had gone on to places like Amazon or Coinbase to make insane amounts of money. It was my turn!
I interviewed _hard_ for about a month, roughly 15 companies. One of those was Twitter. I landed a role as a Senior Full Stack Engineer.
And so here it is. The hard work pays off. There will be a lot of ups and downs. But all of it ends up being invaluable experience and a list of lessons learned to lean on at your next role.
So, where do I go from here? What do the next ten years hold for me in this industry? For the foreseeable future I'm staying at Twitter. It's an amazing company to work for with great pay and great benefits. But one of the things that eats away at me is, how do I keep up with everyone else in this ever-changing landscape that is web development? Perhaps I'll try people management again, taking those hard learned lessons which hopefully help me be a strong leader. Or maybe I continue to focus on engineering and attempt to climb that ladder. Who knows for sure?
What I'll leave you with is this. Be kind, be humble, help lift up those around you, and be open to learning new things. Teach what you know, learn what you don't. You're awesome, and I hope you found this retrospective useful.