I taught myself code for 2 years! This is what happened…

One Does Not Simply

It was in July 2018 when my journey began. I was two years into my job as a Starbucks barista when an algorithm or two started sending numerous coding bootcamp ads and videos on Reddit and YouTube. Needless to say, the algorithms had the right idea because I certainly got hooked after a month of pushing through the complex unknown. The process was intimidating, but each lesson finished granted me immediate gratification after witnessing my code work! It was comparable to playing video games and solving easy to difficult puzzles then to be rewarded with a sense of great accomplishment and a new skill.

Although I enjoyed teaching myself, my coding journey was a bit of a lonely one — as most of you can probably relate to when coming from a simple job. I completely relied on myself to seek motivation. Devoid of anyone easily accessible that could help me in real life, I would continue to browse YouTube, Reddit, and FreeCodeCamp in search of any content that would help push me in the right direction. YouTubers like Joshua Fluke, Andy Sterkowitz, Brad Traversy, and Chris Hawkes offered countless words of wisdom which encouraged me to strive for more. Their videos proved useful when I struggled to enter a bootcamp-esque school. Listening to their stories and the stories of other self-taught programmers they featured in their channels helped to keep me from straying from my path. For you, instead of YouTube or Reddit, it could be Twitter or some other medium. Whatever it takes to give yourself motivation, I would follow it — as long as it’s legal.

Throughout the two years of my part-time self-teaching, I realized mental endurance and consistency were key. I must have averaged about two hours per day, some days being more and some being less — but in those days I would still manage roughly twenty minutes of coding or watching a course. Furthermore, I spent most of my days off coding for more than four to six hours at a time. To bolster my studies, I commented on my code for notes. (It might not be good practice once you’re experienced, but as a beginner, I think it’s very useful to dumb down your comments on difficult parts and explain it step by step to yourself as if you were five.) I also refrained from moving forward in a course if I didn’t understand three quarters of what was being taught. If a concept wouldn’t stick, such as Node.js, I took another course in order to cement it in my head. Should you feel like you can’t look at another line of code — which will happen — then it’s time for a break. Breaks are fine as long as you put an effort to come back stronger than before!

Applications Speed Run

In June 9, 2020, I finally started my job hunt. Some could say I waited too long — but I honestly wasn’t in that much of a hurry. I told myself I would enjoy the ride for as much as it suited me (and partially the better offers I could gather if I truly knew what I was doing as opposed to half-a**ed.) It was after truly grasping the backend concepts with Node.js and dynamic frontend concepts with Angular and creating a few apps that I felt comfortable enough to apply. For two weeks I applied to at least 10 jobs a day but didn’t receive much of a response… Until a recruiting scam landed in my email.

Yes, I was naive. I didn’t believe that scammers would go through such great lengths. They made me wait in between phone interviews (even feigning possible rejection,) compiled documents with the logo of a real company, used their real names, and bought a domain similarly named to their careers page. And all this I had to confess on Twitter after my tweet of the fake offer letter went viral. I’ve made a fool of myself, but the experience brought about more support than I could ever ask for. And at least, I didn’t expose any information that wasn’t already public. Plus, now you know about it too! Be hungry for more in life but don’t let it cloud your judgment!

Anyway, two weeks after that hiccup, I’ve managed about 300 applications with about 60 known rejections… But still no real progress, only a few phone calls or emails with recruiters (without much back and forth,) a couple of initial messages with very small startup CEOs that didn’t amount to anything, and a few coding tests that I didn’t impress with. Each rejected application would beat me up inside a little bit but I knew this was my path and I told myself that if I hit 500 applications and failed them all — I would take a break for as long as I needed to but then try again and create even better apps.

Fortunately, not much later on July 1st (a month from when I started) I received my first promising prospect. It was for an application I made in June 19th on Stack Overflow and they (company #1) wanted to schedule an interview. Not a day later, another two prospects (companies #2 & #3) came as well! To my awe, they both wished to schedule interviews too! I will never forget that Thursday with which I had four applications that could be going somewhere (an additional company, #0, gave me a coding test which I was hoping I could pass and didn’t have an initial interview.) As an agnostic atheist, it was the truest moment where I somehow felt as if someone had my back. It was a great feeling.

This is the Way

After that weekend, I managed to move on to the next step with two (#1 and #3.) The initial interview with #2 didn’t last very long since the hiring manager seemed to be in a rush and doing interviews quickly. It was no surprise they didn’t move forward with me as I figured competition must’ve been very tough and perhaps the base salary I mentioned was not in their range. #1 had a very kind CTO, who entrusted a coding challenge with me which required technologies I’ve never quite used before (C#, .NET, and Angular.js.) Meanwhile, I had the initial conference call with the CEO of #3 and subsequently, they offered me an online coding test and short coding challenge.

I finished the coding challenge for #1 first (which took about 4 days) and submitted it Monday night. Following Tuesday night, I also submitted the coding challenge for #3. As you can imagine, the coming week was definitely crucial and nerve-wracking. I had two real chances and felt good about both while also being aware that both could very well reject me simultaneously. On July 10th and July 14th, I received corresponding emails from #1 and #3 telling me that I passed and will be moving on to the last interviews… (I was moving on to the last interviews?!!! For both???) I told my mom and my little siblings, questioned myself with audio whether this was really happening multiple times that day, then remembered to schedule the interviews for July 15th and 16th respectively in an email.

The moment of truths… My final interview with #1 which was with their software architect and one of their senior software engineers went as well as it could. The interview was mostly about the backend (SQL) since they wished to gauge my knowledge of it (or lack thereof.) The software architect was stern yet nice and did mention many things that I would mull over and google quite a bit later on. I didn’t know very much and it showed — so I was a bit skeptical whether I still had a chance or not. #3’s final interview started pretty badly. It was supposed to be a video interview (which I did not prepare for) and my webcam was acting funky (ffs.) Midway, Zoom was also acting up and I had to restart my computer in order to ensure that the bug went away. Despite all that… I must’ve managed to impress the tech lead that interviewed me because immediately ten hours later, their (#3) CTO emailed me for a call the next day at noon which included the CEO! And right before noon, the #1 CTO also emailed me for a call at 1pm! Calls with CTOs and one CEO??? What else was there to suspect???

Multiple Heartbreaks

Thinking through it now, the calls were a blur as they seemed surreal as they were happening. #3 gave me an offer for the exact amount I asked for and, in my utter shock and ecstasy, I immediately accepted verbally — despite planning ahead of time that I would say I would think about, in order to give #1 a chance. In hindsight, I should’ve stuck to the plan since #1 also gave me an offer for the same exact amount I had also asked #3! Those 2 hours of my life were such a wild ride as I found myself apologizing to #1’s CTO and admitting my guilt of having instantly accepted another offer verbally… And honestly — what were the odds??? I should’ve had more faith in myself to be able to receive two offers and more faith that #1 would give me an offer of the same amount! It hurt even more as #1 CTO assured that I could reach out to them should I ever change my mind or anything… I wrote lengthy emails for all involved with #1, saying my sorries and deepest thanks for believing in and spending their valuable time on me — if only to soothe my own heartbreak.

However happy and grateful I was to be filling out paperwork in order to start work with #3, it was still a very bittersweet following week. Being an over-thinker, I constantly questioned myself whether I made the right choice. Both were very appealing in their own ways but there was definitely one factor in #1 that I should’ve paid more attention to… (Which will come later.) To cope with whatever doubts I still had lingering, I focused on learning the tech stack I was missing with #3 (namely Vue.js/Nuxt.js.)

After finally passing the background check (phew~) I started work with #3 on July 27th, working remote (at least for the duration of the pandemic.) The first week was very much still onboarding — acquiring multiple logins, installing applications, taking compliance tests, and setting my dev environment. It wasn’t that difficult, except for a localhost hiccup (having only messed with the localhost file once or twice before this) which took longer to solve than it should’ve been. Thankfully, a helpful dev (who was also new to the company but with more experience than I) assisted me in a call that lasted about 30 to 40 minutes.

The next week, I was assigned two simple tickets that were small cosmetic changes. I was also given time to study the repositories and related documents further. Looking at all the code, it was easy for impostor syndrome to seep in. After all, it was my very first time working with a project of a scale ten times larger than anything I’ve ever written. But knowing what I know now, it shouldn’t have scared me as much as it did. All you have to remember is that most (if not everything) in a large application has the same concepts of a smaller, more basic application. It’s traversing all those files’ tiny nuances and your perception of how everything is truly connected together that mainly needs improvement. And the more you look at the code, the more everything eventually makes a lot of sense.

On my third Tuesday with #3, I was assigned a larger ticket which had a 10 or so page document attached to it. I was a bit puzzled at the files as I seemed to lack some context, but I was nonetheless set on accomplishing the task that was given to me. All the while, I have asked all the questions I could ask our tech lead and my teammates. What came the day after, however, completely came out of left field. It pains me to think and write about, but it did happen… I was let go…

Coming in Clutch

August 12th was my last day with #3. I wish I could tell you why that is, but unfortunately, I wasn’t given much feedback. I was just about finished with the 14 hour ticket when around 2pm, their CTO scheduled an ad-hoc meeting with me. Perhaps I asked too many stupid questions. Perhaps I didn’t ask the right questions. Perhaps I wasn’t a good culture fit. At the end of the day, I know that I tried my best and it wasn’t good enough. I was thankful for having had the opportunity — but I couldn’t help but be crestfallen. I wished to and knew I could offer more.

I rubbed my temples furiously, dumbfounded. I must’ve stared blankly at my computer screen for moments on end, unsure of what happened and what to do next. It was a complete 180 from the feeling of utter joy I had just experienced three or so weeks ago. I was completely vulnerable in that following hour, but as soon as I remembered — I didn’t hesitate — I opened up my email and started writing to #1’s CTO.

Like some miracle, he responded almost immediately and asked me to call him. It didn’t come straightaway as I spoke to him on the phone as calm as I could, explaining how I was just fired from my first real dev job. It was only after he asked why I believe it happened that I began to tear up. Yet he was very understanding, reiterating that they knew that I was completely new to the field and will not know certain things from the get-go. That was the one factor that I should’ve paid attention to with #1 — their careful and more detailed approach. While #3 was quite quick to bring me in (which gave me a false sense of security) #1 was more mindful. And ultimately, #1 was more in tune of the ceiling I could reach with them.

A week after that somewhat embarrassing phone call with #1’s CTO and in spite of my failure with #3, #1 still wanted me and for the full price I had asked for in the very beginning. I had expected that perhaps there would be a cut to their initial offer and I was going to be fine with it. Wow! I was speechless for the most part and could only express how this was all just my roundabout way of accepting the offer from the team I belonged to from the very start.

Couldn’t Ask for More

From the moment I started work on August 31st, #1 was very welcoming. I was encouraged to ask questions and even fail. IT was the first to give me an amiable impression. Their director didn’t judge me at all for not precisely knowing every step on how to connect to a remote desktop. By the end of our call, we were talking about how I might try World of Warcraft for the first time and join his guild. The good vibes didn’t end there. I felt very comfortable and at ease to ask one of my seniors for directions on how to set up my C# environment. (I think that in most cases, such as this one, the issue would be a missing or altered connection string or other config.) Their QA was very patient and helpful as well, walking me through all the modules of the main app within my first week. All the while, I would get messaged by our CFO, SVP, CTO, and CEO on how I was doing.

Despite their wonderful sense of accommodation, I should point out that my hand wasn’t exactly held — nor should I expect it to. It was more that I wasn’t pressured to be an expert at everything straightaway. It was more that I was given all the time that was necessary to learn for myself. (After all, I was completely self-taught before this point wasn’t I? And they knew this.) I was given freedom to choose which stories I could do or attempt to do and when I was ready. If there were no compatible stories, I was free to keep studying on Pluralsight. If there was a seemingly compatible story that turned out to be more complicated than it looked, I was able to get assistance and finish on time.

Not to Flex

Three months and a few pair programming sessions later, I felt quite comfortable with C#. I was able to traverse multiple levels of APIs, services, core libraries, etc. Another month after, I was writing SQL scripts to create tables, insert and update rows, etc. Starting out, I barely had any Visual Studio experience — now, I can F12 through and pinpoint where a bug originated from. I also have never used the SQL Server Management Studio before, but now I can create stored procedures in SQL with relative ease.

While all this backend knowledge caused my brain to grow bigger than ever, my frontend capabilities increased as well. One thing, I believe, was an insurance for my team was that I had some design talents (or so they called it) to offer too. I not only helped with tidying up the look of bits and pieces of our apps, I assisted with our UI/UX design. Around thirty percent of my time, I worked in Figma and/or Balsamiq. This was my expertise, as they said, and I would sometimes be the help to a few of my teammates in this regard.

So… Not to flex — but in order to increase your chances of being hired, I highly recommend having another skill to bolster your resume. It doesn’t have to be design… It could be leadership or other. Unless you’re very confident you will get hired by a FAANG or other large company, most smaller companies will (in my opinion) consider all aspects of what you have to offer when hiring you. That is — they often wear multiple hats.

TLDR;

For two years, I spent at least twenty minutes each day studying code. It didn’t have to be two years, it could’ve taken more — but I was determined. I had faith this was for me and that I would become a software engineer no matter how long it took. In the end, with that mentality, I managed to achieve my dream job at a time when most of everyone around me were being laid off. Could you picture yourself doing what I did? Perhaps even better? If so, the only person stopping you — is you. :)

Note: For anyone who would like to see the time line, please visit my other medium story.

software developer est 7.2020 lvled up from ⭐bucks barista 100% self-taught part-time est 7.2018