The Midlevel Programmer

I like to think my coding journey officially began September 15th, 2014. I had built a few websites on Word Press before then but I was at the mercy of their GUI and had absolutely no idea how anything worked. That really bothered me. I was using the internet every day, and yet how it worked was a black box to me. On this day, all of that began to change because it was my first day at Dev Bootcamp.

This is one of the best decisions I have ever made in my life. I moved from my Mom’s basement to New York City, met some of my closest friends, and developed a core set of skills to transition from an unfulfilling just-grind-it-out-because-nobody-likes-their-job to an exciting-always-evolving-creative-problem-solving-some-people-think-it’s-magic-career as a Programmer.

It wasn’t a smooth transition. Getting my first programming job was tough. After graduating from the bootcamp I got rejected by 12 different companies in the New York/Philadelphia area. I was able to make ends meet by landing a few freelancing jobs while I continued to learn and hone my craft. In my last freelancing gig, I created the Learn SQL course at Codecademy. This led me to my current job as a Programmer in Boston where I work with SQL Server and Ruby on Rails applications.

I’ve been at my current company for over a year and I’m beginning to wonder if it’s time for a change. My current company is a nice place to work, and I have learned a lot over the past year, but I feel stuck. How do you make the transition from a Junior Programmer to a Midlevel Programmer?

Maybe a better question is, how do you define the difference between a Midlevel Programmer and a Junior Programmer? My current company seems to think years of experience is the most important (or maybe the only) metric that matters, but I reject this idea. The metric that should matter most is how much value do you add to the company?

In baseball, they have a statistic called Wins Above Replacement Player (WARP). This statistic measures a players value to the team relative to the value the average replacement player would provide. If your team’s starting shortstop were to get injured, the team wouldn’t play without a shortstop. A bench player would come in and take his place. This statistic allows you to quantify exactly how much production is lost between the starter and the bench player.

I wonder what a similar statistic would look like for Programmers. I know I’m not nearly as valuable as the Senior Engineers in our company who built most of our applications and understand every detail and design decision (especially the ones that are not documented). At the same time, I believe my skill set is more valuable than co-workers who have been at the company longer and/or in Tech longer than I have.

Experience is one factor to use when measuring a Programmer’s WARP, but what I lack in experience I more than make up for in my tenacity to never give up on a problem, the ability to learn quickly, communication skills, and an unquestionable work ethic. How do you quantify these skills? I am the model employee my boss tells new hires to replicate. In my yearly review, I was told how valuable I was because they can’t just go out and hire someone else like me. But the company still views (and pays) me like every other Junior Programmer.

The dilemma I find myself in is that there does not seem to be a path from where I currently am to a Senior Engineer position. When positions open up, the company hires externally because they are the only people with the experience they feel is necessary to fill these positions. It’s a frustrating situation to be in.

I feel like I have three options moving forward:

  1. Cut back from working 50hrs/week to 40hrs/week at my current job and use the 10hrs (as well as weekends) to work on side projects, participate in open source contributions, and take online classes to gain the experience I am not getting from my day job.
  2. Double down at work and increase from 50hrs/week to 60hrs/week. I have begun taking on more responsibility and creating small projects for myself to work on. The problem is that these projects can’t interfere with my other daily work so I would need to add more time to get everything done.
  3. Be the cliche Junior Programmer who leaves their first company after 1 year.

What choice would you make if you were in my situation? Is there a 4th option I’m not even thinking of right now? Have you made the transition from Junior to Midlevel or Senior Engineer? If so, how did you get there?

I would love to hear from you. Please contact me on Twitter or Email or in the comments below if you have any comments or suggestions.

Thanks for reading.