Two weeks ago, I said goodbye to a company I really enjoyed working at. I decided to leave because I knew that while I really loved the place, it was time for me to move on.
Quick About Me
I started my career just by reading coding books at Barnes N Noble and freelancing on various web projects almost 10 years ago. You can read more about my story here. One thing led to another, and I started working full time around 2013. There were a few hiccups along the way, but I got into the groove of coding for real (basically feeling less imposter syndrome) by 2015.
(I never had the money to go to a bootcamp, so my solution was to help out as a TA to learn expensive curriculums for free and by doing meetups to learn code with other people at night).
How I Got My Former Job
All of the meetup and teaching experiences led me finally to getting a job at my former employer in 2016, sometime after I had given a live demo on React at General Assembly.
The hiring manager had seen my video on YouTube and told me that I was the "guy for the job". He told me that the company mainly uses Drupal, which is built in PHP but they were looking to go beyond their traditional stack and try out new things as well. I wasn't familiar with Drupal at the time, but I knew PHP and Wordpress, so I told him I could figure it out -- and he agreed because he had liked what he had seen in my video.
At The Start
No Source Control
I was also the only coder on my team for the whole West Coast operation. Initially, I felt pride in saying that -- but over time I felt it was a serious crutch to my own further development. My boss knew some code with Drupal, but it was very "old school" -- think back to the days of early internet when you could FTP changes back and forth to a web server on GoDaddy. He did not really know the inner workings using PHP and JQuery -- so I was expected to pick that up and make adjustments.
We did not have any source control -- so when I talked about using Github and the command line, my boss would essentially say that I could use it on my own, but he wanted to still be able to work on live code directly using friendly GUI tools (he was put off by the complexity of Git and shell commands).
Hence, I'd have to constantly check in with my boss who also coded if things were different on the live site -- then work backwards and sync them to stage and my local environment (and put them into Github for my own sanity if the site were blown away).
So for a lot of my first year, I just spent more time trying to make sure that everything was in sync rather than writing code.
My coworkers were extremely friendly and since we were all in the same office room (think crowded open space pre-COVID -- yuck lol), everyone was always talking about random stuff ranging from favorite foods, to movies (Netflix), to weekend plans, video games, music and what not.
It was easy to lose focus for a while, but then later come back into work (and this was okay). I was really surprised initially, but I guess it was meant to be that way to just encourage everyone to feel more like work was a "second home". So I went with the flow.
"No rush"was the common phrase I'd hear over and over again. So I was like, sure :). As long as work got done, no one had any issues. I always made sure my work got done however..
A Year Goes By...
A year rolled by. I was pretty shocked, because it felt so fast to me.
I was still doing meetups and so I was looking at things coming out of the community and trying to be involved. However, I felt also fear in the back of my head. A lot of the new stuff coming out was stuff we were not doing anything close to at work.
The world of React and Node.js was getting more complicated, and the demands for what a new hire should know to get a coding job were increasing.
😭 I felt like even though I had already gone past the interview phase a couple times in my life -- if I ever got fired, I'd have a tough time finding work. I did my best to try to study and catch up.
The Second Year
In my second year I met another new developer who programmed websites for the East Coast operation of my company, and I was tasked to help him migrate our one-off sites into a global level multi-site to unify everything for corporate.
The new developer was a serious Drupal/PHP/Java engineer. He was extremely smart about Drupal -- but knew nothing about React, Angular, or any other front end technology (other than JQuery). I would talk to him time to time about these technologies, but we were both tasked to work on Drupal, and he pretty much worked solo and would not really entertain any of my ideas to try the new stuff I'd hear at the meetup (lol).
I tried my best to learn whatever he was doing backend, but:
Eventually my job was to just "support" by writing small snippets of code or by making repetitive text and image changes to 30 different sites now on the multi-site.
It got boring fast, but I was getting the work done - and that was what the higher ups wanted. I felt scared however.
Why's that you might ask? Well, a lot of the people who started learning to code I'd met two years at my meetup were now getting jobs based on their knowledge of React/Node.js, and though I initially had some knowledge on React/Node, I was not utilizing it at all -- I felt like I was losing my touch.
Year three came quickly too. By this point, I was really upset with myself. I had already started looking for new work outside of my company, but the interviews for anything my peers were landing roles for were REALLY hard for me. I just did not know React and high end vanilla JS as well as my meetup friends.
Plus, the culture had changed too -- many companies hiring now demanded that the people who'd apply have software engineering backgrounds.
It was NOT enough to just come out of a bootcamp or study some HTML, CSS and JQuery to get a job -- well other than a very junior level job that paid less than I made at my company.
I did NOT want to go backwards.
Yet, I was acting very juniorish in my own job and I hated it. So I used the "no rush" time at my company to "study my ass off", and try to accomplish something so I could show that I too had a software engineering mind at the places I'd apply to.
I didn't really know the engineering side of things, so I took it upon myself to just study Java, C++, and Python as I kept seeing the software engineering people in my group having great backgrounds in that first before going on to use tools like React. I dove deep into the world of Data Structures and Algorithms, doing my best to try "Leetcode" challenges and failing pretty hard (but obviously trying again). I'd get all my "busy work" done ASAP, then spend the rest of the day trying to get deep into these hard to learn concepts. I encouraged people at the meetups to talk more about software engineering, so I could also take pointers and hints at what I needed to learn to get better, then went hard at interview prep and "leet-coding" again.
Becoming A Software Engineer, Not A Developer
The thing about software engineers that they never tell you, but is an obvious "DUH" -- is that they have 4 YEARS OF EXPERIENCE doing computer science leet-code style work. (At least the good ones that come out of any good college do). So I was actually not TWO years behind of my friends who learned React and getting engineering jobs -- I was actually SIX YEARS behind -- because many of those people also knew the foundational stuff in CS.
Hence-- I had a LONG road ahead of me, and even as I type this, I know I'm still due for another 2 years at least with my foundational knowledge in CS. (Thank you Udacity for helping me learn CS).
Like Elon Musk says though, and I'll just paraphrase his quote here -- "You'd be surprised in what you can do in a year if you really push yourself to use the whole year"-- I really studied the last two years day in and day out.
As a result, I was able to catch up to what a lot of the engineering people "generally know" in my group. I know the group has a lot of junior and newbie developers too, but I know there are some really great engineering minds as well, so those are the people I'm actually talking about "catching up to". Maybe at some point, I'll try to explain this difference better in another blog post. (But it's basically the stuff I've been talking about all this time and if you've seen any of our meetups in the last year -- every single developer I've invited to speak has the kind of stellar background I'm striving for myself -- and it'll only get better).
Engineering .. Stuff
With the community insight I had plus my newfound knowledge of software engineering, I worked my third year into convincing my boss to let me architect and move a lot of our non corporate facing legacy code into AWS - because I kept hearing so many good things about it. I figured AWS would give me a chance to learn and build the entire operation from scratch -- so I'd know everything my fellow software engineering peers probably knew as well.
That was an amazing project because I learned how to spin up servers in the cloud with different installations of Linux, write configurations using Apache and NginX, install whatever languages and frameworks I wanted -- including React/Node.js (finally) and test things out and write scripts working with Git to enable CI/CD and unit test integration. My old company for its part was extremely generous for allowing me to learn and utilize all the aspects of AWS (money was not an issue), so I'm extremely thankful.
It was hard, but I worked super hard to make everything "just work". My boss just trusted me, and the other developer didn't really care. So I was the only developer on this project, and I felt a lot of "pressure" to figure it out. But hey, I'm from LA -- so pressure is something we are used to, lol. (Plus now in this generation everything you need to know is online via YouTube or a Google search, so you can learn anything really with time lol). So the good news was I was no longer doing busy work, I was doing work that really mattered -- which was a good thing for the business, and also me.
In that third year, I also got to meet some really great people in my company outside of my West Coast team, especially over the phone. I was introduced to a lot of East Coast IT people who knew a lot about setting up servers and working with different networking architecture plus security protocols -- which helped me as I set up everything on the AWS side. The Java and SQL knowledge really helped me learn the legacy side of things and be able to translate some of those ideas into stuff on the AWS side using Node.js and Python (e.g. Lambda functions, setting up build scripts for Linux/EC2, working with authentication, etc).
Year Four (Senior Level)?
In my fourth and final year, I was maybe the guy that my boss envisioned when he hired me to help change things at my former company. I had migrated all our sites to AWS, made them work without breaking the business as usual flow, plus went beyond and improved things utilizing the new Gatsby/React framework to form headless connections to Drupal. (I was so proud of myself for finally being able to use React like my peers).
I was definitely pushing the business forward, and even our unified corporate site looked extremely stale and boring compared to the stuff we were working on in the West Coast. The boss wanted me to take up a new project to unify all the sites again with the new ideas/frameworks I had chosen over the last two years.
I also felt much better about myself because I could finally talk at the same level as many of the other software engineers coming to my group. I also noticed that more software engineers were joining than before, (I guess previously they felt that this group was too junior for them but now they were engaged).
Two years ago, I was worried about being irrelevant, and yet now I had made a major "comeback in the fourth quarter" -- something like an LA Lakers basketball game. I guess that fourth quarter always counts right?
On the subject of Basketball, I highly recommend looking into Kobe Bryant's life and his daily attitude to getting stuff done. If you want to level up in life, read the book Relentless by Tim S Grover, who was Kobe Bryant's trainer.
I like Tim Grover and the Mamba mentality, because it's what I think makes someone go from just ordinary to awesome to unstoppable -- the third level which Kobe pretty much was in the NBA. If you approach each day in your life as another opportunity to focus on being way better than you were yesterday and never miss an opportunity to practice -- you'll jump to that third level.
Applying this mentality to my own work is what helped me level up so fast.
So I knew in my heart, that the next step for me was to go get a true software engineering job. I had done my best at my company, and even though I could do better-- in order for me to go to the next level I really wanted, I needed to join my peers doing exciting things at that FAANG level (or at least damn close to it). I studied even more, and of course failed interviews -- but I took every bit of feedback I could to improve myself and keep getting better.
Eventually, I landed in my new role at well known fitness company with a strong engineering culture that touches millions of people daily. They had rejected me before in Year Three, but I proved to them I had enough grit and determination to stay focused and hustle to get the engineering role (because I listened to their feedback after the interviews and showed them again my progress a year later).
The same day I landed my new role was also the same day I got a promotion at my old company. (Strange coincidence lol).
The reason I turned down the promotion with my former company and took the new fitness company role was because I wanted the engineering culture.
I felt like I needed and wanted a true software engineering culture -- where everyone was really good. To me the culture had more value than the pay raise at my company; at my company I'd still be by myself -- but at the new company I have an AMAZING once-in-a-lifetime chance to work with other SUPER SMART people and get better. To me it was a no-brainer, it was like a million dollar investment into myself.
Your Time Is Limited
Already, in the first two weeks of work alone -- I feel like I've learned at least 3 more months of what I'd probably have learned at my other job if I had stayed on. That's EXCELLENT, and that's the power and opportunity one has working at a company with strong engineering culture. (Don't dismiss that ever).
It's not about the money for me, (though the pay is definitely better) -- it's the chance to take what I know to a whole new ballgame and build things that touch millions and millions of people. It's the chance to learn something really great and be able to say at the end of the day that I'm someone who pushes stuff forward in this world -- rather than just someone who does busy work day in and day out.
I could have been that busy work guy, I could have been that "no rush" guy - and sure some people want that lifestyle where they just clock in and clock out, talk sports/video games, show off what they bought last week at Best Buy, yada-yada, -- (we all want to not be stressed out), but we also have a limited time on this earth too to do something great.
Hence, the "Steve Jobs" voice in me wants to use my limited time to be productive, to me that's a life worth living for. So for me, this is it -- I want to be the best engineer I can be, and I also feel like in being someone who started a community to help people get better at coding, I owe it to the people who follow and subscribe to this group to give them the best engineering culture they could ask for as well.
Stay engaged, stay focused -- believe in your own "while loop" and iterate forward. Success is just another day of practice.