Breaking Into Tech as a Self-Taught Developer During the Worst Job Market Ever
I’ve been meaning to write this article for awhile. Now, after officially signing my offer letter and having some time to reflect, I wanted to look back and detail my path from freelancer to employed software developer in the hopes of illuminating some shortcuts.
My Background
My credentials would appear to set me as far away from those of a software developer as possible. My undergraduate degree was in General Biology, and then I obtained a law degree. Despite this, I always had a fascination with programming. Since I wasn’t very good at math (which the CompSci curriculum had a lot of), I figured programming was probably only going to be a hobby of mine and I would likely have a better chance at a successful career leaning into other strengths. But the desire to code was always there. In college, I started digging into mobile development for Android, despite not having a firm understanding of Java, IDEs, or pretty much anything that went into the process of developing a mobile application. And, this was before ChatGPT, so all I had at this time was Google, the docs, and good ol’ StackOverflow. Despite having no idea what I was doing, I eventually finished and published my first app on the Play store, and this was the beginning of my freelance career: finding a problem to solve, learning the technology to solve it, and then seeking out people who needed help solving the same problem. Although it’s been quite lucrative for me and I’ve had fun learning how to run my own business and improving on every facet that it entails, once I tried to actually apply for developer jobs, I ran into a lot of problems.
But why?
I had accumulated years of experience, built hundreds of projects, and could go above and beyond when it came to professionalism and articulating and proposing complex strategies to stakeholders. But I had picked up a lot of bad habits as well, and I learned that these weaknesses made me look like a poor candidate to the person interviewing me.
My Advantages
Freelancing
Working as a freelancer put me ahead in a lot of respects. I had real project experience, that were functioning and earning money for my clients, unlike candidates who maybe created projects solely for the purpose of having something to show in a portfolio. I had experience maintaining and updating code bases, and managing my time efficiently. And my portfolio was huge. Not only had I built projects for clients, but I had launched many full scale SaaS, written documentation, and taught other developers with the numerous tutorials I had created. Because of this, I began to realize that my understanding of certain subjects far exceeded that of a typical entry level programmer.
Wide Range of Expertise
I questioned whether I would put this as an advantage or a disadvantage. I’ll probably put it in both and explain why. When applying for jobs, I had several different resumes, highlighting completely different technologies I had worked with over the years and the various skillsets that accompanied them (i.e. Java Developer, React Developer, Solidity Developer, Project Manager, Sales Engineer). Because the job market was so bad, I didn’t really know what technologies were in demand, but I had the flexibility to adjust my resume accordingly.
Working Under Pressure
College students know the pressure that accompanies having to cram for an exam with little time and little sleep. It’s one type of pressure to need the right answer to get a good grade. It’s quite a different pressure to need the right answer or the bills don’t get paid, or dealing with a client that’s asking you to do something that you just don’t know how to do, so you’re scrambling for the answers at 2 a.m. before the deadline and there’s no one you can ask. Or you’re overseeing the launch to ensure everything goes smoothly, and you’re confident because you’ve tested everything, but then the project goes live and all Hell breaks loose and suddenly you’ve found yourself trying to code up a quick solution while live on the phone with your client screaming and panicking. It’s a very different type of pressure.
My Disadvantages
Lack of Fundamentals
I had to go back and learn a lot of stuff I skipped over in favor of just deploying my first apps as quickly as possible. For instance, I had very little understanding of the core concepts of Object Oriented Programming, Data Structures and Algorithms, and other concepts that a CompSci grad would know backwards. This put me at a severe disadvantage when it came time to demonstrate to an interviewer why I was better than another candidate who knew those subjects well. Obviously, I’m not saying that these subjects were useless to me. In fact, had I started with a good foundation in Computer Science, I would’ve struggled a lot less in the beginning of my freelance career.
Weak Leetcoder
Freelancers have no time for Leetcode. Our livelihood is not dependent on our ability to solve a coding challenge. Just like having the ability to demonstrate knowledge of the fundamentals, if other candidates can show superior skill in a coding challenge, that candidate has the advantage over a freelancer who cannot. Furthermore, it undermines one of my advantages as a freelancer: the ability to work and succeed under pressure. I can talk all about my experience working under pressure for a client, but a candidate who can solve a complex coding challenge with an interviewer watching is able to actually show that they can work under pressure.
Oversaturated Tech Stack
I mentioned earlier that I had a wide range of expertise as a freelancer. In the freelance world, it is not uncommon for a client to hire one developer and one developer only. This developer will take ownership of the project from beginning to end, most likely as a full stack developer. Like many self-taught full stack developers, I picked the stack that appeared to be the most popular: MERN. MERN stack or MongoDB-ExpressJS-React-NodeJS is a popular stack for those who want to build web applications fast without really having to understand much about backend development. This is because MERN stack favors NoSQL, where the developer doesn’t have to launch, maintain, or write SQL queries to a database. Instead, there are services that handle all of this for you. MongoDB is the “M” in MERN, but in the past I’ve used Firebase and Supabase, too. Learning MERN put me at a disadvantage for several reasons. First, in this job market, popular likely means oversaturated. Sure, I knew MERN, but so did everybody else. Going for Frontend Developer positions knowing React put me in a huge bucket of other candidates with the exact same skillset. Secondly, I’ve found that while NoSQL is great for finishing projects quickly, it really acts as a crutch. Using NoSQL, much of the business logic that goes into processing requests must occur on the frontend, rather than the backend, and as a result, NoSQL applications are tightly coupled as opposed to loosely coupled, or in other words, when the database has to change, so does the business logic on the frontend, opening the door for mistakes and having to rewrite a lot of code. Thirdly, the MERN stack is all Javascript. The great part about Javascript is that it can be used for the frontend and the backend, which again is great when you’re looking to build a web application fast and have limited skills to do so, but if you’re job hunting in a market saturated with frontend developer applicants, you should know that the chances of getting hired for backend position with just Javascript are probably very slim. Most big enterprise applications are not built on MERN and the backend probably isn’t Javascript for any large company you apply for.
Other Disadvantages
Notorious spaghetti coder here. As a solo developer I lived by the mantra of “just get the thing to work a clean up later.” I used crutches like TailwindCSS that made it easy to just keep adding classes until the frontend looked close enough to the design, no matter how unreadable it made the source code afterwards. I wrote lazy try-catches and non-helpful or non-existent console logs when errors were thrown. I didn’t get the concept of branching in git. Everything just went straight to main and straight to production. Unit testing? What’s that? What I’m trying to explain is that as a freelancer I picked up a lot of bad habits that, while even though I had the experience, undoubtedly exposed me as a novice developer.
Job Search
Like many in this current job market, I struggled to get interviews despite sending out hundreds of applications. Obviously, the market played a factor in this, but I also think that some of the disadvantages I listed definitely played a factor as well. I was ultimately contacted by a recruiter to enter a training program, that upon successful completion, I would get the opportunity to interview with one of the agency’s major clients. The program was for C# and .NET, two things that I had no experience with at all. But I had about 2 months to get proficient enough at it to prove myself in an interview. During this training, all of my weaknesses were exposed. It made me feel like most of the experience I had accumulated during my freelance career were for nothing. At the end of the day, I was an entry level developer, drilling on computer science fundamentals and Leetcode, building ASP.NET web applications with SQL servers, or pretty much everything I disregarded as a freelancer.
Interview Process
The interview that finally got me the job was pretty straightforward, although it did highlight all the weaknesses I detailed earlier. The interviewer didn’t necessarily care how much experience I said I had, they just asked questions: “Talk to me about Dependency Injection and how the injection container functions in .NET”, “Can you explain the different forms of inheritance in OOP”, etc. The coding challenge was a simple whiteboard exercise where I was to create an example of the topic the interviewer was describing. Finally I was asked questions about React, and this was the one place where my expert-level experience in React really shined. I believe the interviewer could tell that while I had definitely studied the other topics, I had lived my experience with React and frontend development. Maybe this was even what separated me from other candidates and got me the offer.
Final Takeaways
I went into the job search mistakenly assuming that my great depth of experience in freelancing would carry over and shine through in an interview process or make my resume stand out amongst others. To be fair, I’m sure it did help me stand out a little bit, but ultimately, my resume’s lack of focus, my emphasis on an oversaturated tech stack, and poor grasp of fundamentals probably hurt my application just as much as it helped. Hopefully, if you are attempting to make that big leap from self-taught freelancer to an employed software developer like I did, you are now aware that your experience freelancing will not be a substitute for the basic expectations your interviewer will have for you when the times comes to demonstrate that you are the one for the job.
TechJD is a Full Stack .NET Developer and also the Founder of Ascendant.Finance, which assists web2 businesses to transition to web3, consulting on all facets including SEC compliance, tokenomics, development, and connecting with angel investors. For more information check out ascendant.finance or join the Discord.
https://twitter.com/ascendantfi