Triple Your Programmer Salary by Learning New Skills

I’ve been a professional programmer for 7 years. I’m now an Engineering Manager at a billion-dollar company working on a video streaming platform with millions of unique views per month. I also manage web’s BODGroups implementation, which is like Facebook Groups for coaches, and I manage a team of 2 leads and 19 engineers. How did I get here so fast?

This post is my own and may not represent the postings, strategies, or opinions of my employer. 

Pre-professional

I started building websites in high school (around 1996) on AOL. I searched out new things I could build in HTML or new cgi scripts I could add. JavaScript existed but the use was trivial: generating trailing mouse pointers or similar. I then spent six years in the military not coding. I was unhappy so when my enlistment finished I went to college.

I graduated from the University of Redlands in 2009 with a Bachelor of Science in Computer Science. I grabbed solo time with my professors to learn about PHP and MySQL and Apache so I knew the basics of getting a full-stack site together. At Pepperdine University School of Law I became a fellow at the Palmer Center for Entrepreneurship and the Law which set me up to better understand startups. While I was in law school I worked for a solo lawyer and hated the job, immediately realizing I didn’t want to do it as a career. For a time most interviewers for programming jobs thought I was overqualified to be a programmer and passed on me so I now remove my law degree from my resume and reassure anyone that notices it on LinkedIn that I don’t want to be a lawyer. I love programming and finally found what I want to do with the rest of my life!

Starting Out

My first job was as a web developer at a small agency in Santa Monica. The work focused on HTML, CSS, and Photoshop. I dabbled in CakePHP and looked at Ruby on Rails as well, but did nothing compelling with them.

Shortly one of my law school professors saw that I was working as a programmer and hired me to work at his startup with a life-changing pay raise. The product had a complex API layer that could analyze legal documents. I worked on a CakePHP application that was a view layer to expose that API functionality. We attracted the attention of Bloomberg who acquired the company and put us on contract to integrate our API with their platform. Bloomberg threw away the CakePHP application because they used Ruby on Rails. Their developers built a gem consuming our API layer and I rebuilt the front-end to integrate with the gem. I felt over my head working on an unfamiliar platform for a major corporation but it looked and worked correct in the end.

Touching Scale

On completion I moved on to a lead generation company. I worked on an MVC PHP application that could serve theoretically infinite websites based on the used domain. While I was there we grew from 12 domains to over 50 and I learned a lot about scale. It was an A|B testing framework for finding the best lead funnel templates with the leads sold to interested third parties in real-time. While I worked full-stack I managed a 3-man front-end team that built out hundreds of templates for the A|B tests. I empowered my team to use different frameworks and experimental technologies. Even though the company was making a lot of money I didn’t feel I was being fairly compensated so I left after about 16 months when I found a job on Craigslist that gave me a five-figure raise.

Personal Development

Even though my job at the lead generation company wasn’t using Rails I had continued to use it for my side projects. I leveraged that into a job working in Rails on a platform to help non-profits raise money. I learned even more about working at scale and a lot about good software engineering. I worked full stack but am focusing on my front-end experience for this article. The web app was a Rails server-rendered front-end, but used CoffeeScript, jQuery, and vanilla JavaScript. I started learning React on my own because I felt I needed another tool in my belt. I started a developer group focused on “Design Patterns: Elements of Reusable Object-Oriented Software” to learn architecture. When the time came for a pay raise the offer was less than market salary for the skills I possessed.

At that point I joined an early-stage startup that helped consumers get started with impact investing. The Rails back-end talked to both its own database and third-party APIs and the front-end was built with React and Redux. I got a lot of great experience working on every layer of a feature from back to front. We had high standards and strong engineering principles were paramount in every PR. It was a very collaborative environment with the whole team grooming and pointing stories, interviewing potential new talent, and pair programming regularly. I loved working there but the business bungled an acquisition opportunity. A handful of other companies built competing products and the financial backers decided to shut down.

Current Role

From there I moved on to Beachbody. I started as an Engineering Lead over 3 senior engineers working on a WordPress site with a React front-end and a Java API. I don’t know much Java but I learned what I needed as I went. The product was not getting traction and the company stripped its functionality. The team’s contract expired and was not renewed so I was (and still am) the only engineer left to manage it in “maintenance mode.”

I accepted the opportunity to move to the beachbodyondemand.com front-end team’s React codebase as a Lead Engineer. We launched BODGroups this year, which is a facebook-like experience for our coaches. We also launched an internationalization project that uses AppSync to consume data from a CMS and expose it to our web app. I’ve learned a lot about front-end architecture and GraphQL here. Both initiatives were very successful and Beachbody promoted me to Engineering Manager. I have 2 Lead Engineers under me and a team of 19 senior engineers. And that’s how I got to where I am.

Reflection

Even though this reads like 15 years of experience this is my resume from May 2013 until November 2020, 7 years. I switched jobs often but more than tripled my salary (I started at $50k) and worked with more technologies than people with twice as much longevity. Few companies promote from within or pay comparable raises to what you can get on the open market so it pays to continue expanding your skillset and be willing to step into that next role. Keep learning and go for it. If you stay in the same position for too long you are likely not earning what you are worth.

Advice

Switching jobs in this career field is never fast. Generally it takes me about 3 months of searching and interviewing to find a new job. To find those jobs I reach out to recruiters I’ve worked with in the past on LinkedIn. I accept every recruiter’s connection that reaches out to me. I apply to companies that interested me in past job hunts. I search Craigslist. I look at jobs posted on StackOverflow. And I traverse every other avenue I can think of to find opportunities.

I apply for 3-8 jobs every few days and am ignored by most companies when I submit applications. I receive so many more rejections than offers. That’s normal, and it’s okay. When a company says no you have to think of that as you not being the exact right fit for that company at that moment in time. It might be the team mix, a skill you didn’t convey that you have, or the interviewer might have had a bad morning. You have no real idea what they were looking for, and they have no real idea of what your capabilities are. It’s not a fair or healthy evaluation system, and you have to let it go that you didn’t connect with an interviewer. It’s fine, keep applying to more places and you’ll find the right place for you at that point in your career.

Final Thoughts

That’s my developer journey so far, I hope it was interesting to read for you. It’s been interesting to live and experience, and I still have a long way to go! Connect with me on twitter @davemcg3 or LinkedIn or JavaScriptLA’s Slack (dave) or Discord (davemcg3). Happy to chat about anything, or if you want me to write more details on any topic let me know. Hopefully soon we’ll get to work on a project together and build something awesome!