How I Got a Job in Web Development
January 27, 2015
Why I’m writing this
This post is an attempt to explain how I got a position as a professional web developer with just over a year of experience programming and a degree in psychology. I’m writing in hopes that it will help anyone else along a similar path, or those who don’t know where to start. This is by no means a surefire plan to get anyone a job in a year or ever. But maybe someone aspiring to become a web developer can take a few resources or find something useful here.
If you want to skip to a summarized list of things I did, click here to cut to the chase. But you might want to come back and see the rest of the story to fill in the details.
My first exposure
As far as I knew growing up, the Internet was made out of magic. I had taken apart my family computers out of curiosity a few times but had never heard of HTML, or pondered the concept of what software development really was. Most of the technical experience in my life was my enjoyment of building and breaking things, playing with Knex and Erector sets, and growing up with the Internet. Just after high school I was lucky enough to land a job as a contractor for my neighbor soldering circuit boards and electronics for various products he made.
That was a pretty cool job, but it certainly didn’t make me want to study electrical engineering. I went into psychology thinking it would supplement my intent of going to medical school and becoming a psychiatrist. That dream died fast for numerous reasons, and I ended up rushing to finish my degree ASAP. I then started work at Starbucks in addition to helping out the neighbor with soldering and testing his products after leaving my student job upon graduation.
That same month I learned about Linux and decided to install Ubuntu on an old Dell I inherited from my parents. In order to get things installed and working properly I had to open the command line and actually use Unix commands, some of them often enough to start understanding what they did and remembering them. I was just getting into Minecraft at the time and wanted my girlfriend to play with me, and I figured with a little googling it would be easy enough to setup a local server on that Ubuntu machine. It was, and I consider that my first real and aware exposure to programming.
Finding the time
Over the next few months I dabbled in various tutorials on HTML and CSS recommended by Reddit but struggled finding time and motivation to just sit down and get through them. I attempted to complete the Codecademy courses multiple times but found them boring and purposeless. The idea sort of went to the back burner as I worked full-time, moved into a new place, and wanted to relax and enjoy my time off. I was doing just that at the climbing gym on June 1st when I clumsily stumbled off the mat at the base of the wall and dramatically broke the cartilage in my ankle. Somehow I didn’t need surgery but the doctor said it had to be non-weight bearing for 12 weeks.
So I called my boss and broke the news, she reminded me of one of the benefits of working at Starbucks: Short-term disability insurance. It got signed off no problem. The first couple weeks were mostly spent sleeping away the pain and playing through various video games, pretty much just lazing around. But one day when the Lortab wore off I was feeling very unproductive and lazy, so I decided to set a goal of getting through those HTML and CSS Codecademy courses the next week. At the same time we moved into my girlfriend’s parents’ house while they were abroad so that eliminated rent and some other expenses for the few months I was out. My girlfriend also deserves a lot of credit for working and helping me out during this time. I became acutely aware of how fortunate I was to be in a position where I was essentially getting paid to chill at home and have 3 months of free time to spend however I wanted.
This awareness led me to feel like I owed it to karma or whatever powers that were to spend a good chunk of my time out on productive endeavors and keep setting goals like the Codecademy one. I blew through those courses, still feeling annoyed with their seeming lack of purpose and context, but appreciated the introduction to something I knew I wanted to spend more time on.
Learning front end fundamentals
My next step was to search through my network for advice. I thought of everyone I knew, went through my Facebook friends, and found someone I could contact that was involved in the industry. So I messaged him and told him about my interest and quickly got a response. He happened to be in a senior position at a very well known company but took the time to give me a little project to work on with a loose deadline. Still being in the first third of my confinement to the couch, I was able to spend two weeks working exclusively on this. I learned a lot about modern best practices and got some great career advice.
Rails and a development environment
At this point I felt comfortable enough to tell my friends and family about my pursuit, and let them know that I was looking for work and projects. A good friend gave me the login to a tutorial series called One Month Rails he bought but never found time for. I certainly had time for it, so I did it.
This tutorial introduced me to a vast world that I’d never seen before. It guided me through setting up a development environment that consisted primarily of Sublime Text and the command line, and helped me get a bunch of other tools set up. I learned about version control and git (and by extension, Github) through repetition in the course, and got a grasp on most aspects of the tech stack in Rails. I finished it in about 2 weeks and had a fully functioning app replicating Pintrest, hosted on Heroku.
Starting a freelancing business
I was super excited about programming and my new prospects for income. I decided I wanted to start a freelance business doing this, and my first step was getting some more projects and clients. The first few were not as hard to get as I had been led to believe. My family and friends already knew I was doing this, so I asked some of them if they needed a website.
Then, the neighbor who I worked for offered to pay me to make the website for company. I jumped at the idea and finished it in a few weeks, referring back to the books and tutorials, coming out having learned quite a bit.
After that, I did one for free, one as a trade, and then started charging (not very much). My first three clients were close friends or family, and after that I indiscriminately offered my services to anyone and everyone. One of my first non-family/friend clients was an HVAC contractor that was fixing the furnace in the house I was renting at the time. He saw me working on a different project, asked what I was doing, and told me he needed a website. I gave him a cheap quote, and promptly had another check in my pocket.
It was time to legitimize my business; I had started making enough money to open up a bank account and register a sole proprietorship. I finally got around to making myself a (pretty rudimentary) personal website and got my girlfriend’s help in designing a logo in Illustrator. We designed business cards at the same time and got a cheap bulk order from FedEx. I still use them and they look like this:
Little did I know that these cards would be instrumental in getting me my current job.
Expediting my learning
I continued to get a client here and there after my ankle had fully healed and I started work again part time at Starbucks, and a little for my neighbor. It wasn’t enough to pay the bills though, and at this point I was dedicated to becoming a professional web developer. I looked around for some dev roles in my area and came up short. Most required a level of proficiency that I wasn’t totally confident I had.
I mentioned to the same friend who introduced me to the Rails tutorial that I wanted to somehow expedite my learning to get to a professional skill level. He told me about these code schools that had been popping up around the country taking after the tech company incubator model and their apparent success. He had been working at a venture impact fund, and was tasked to get information about these schools for possible investments. He emailed me a spreadsheet with some basic info about each code school he looked into (which was immensely helpful - something similar can now be found here) and I did my own research on which would be the best for me.
That October, after much deliberation I decided to apply to Code Fellows in Seattle. I chose this particular code school mainly because they guaranteed a job in software development within 9 months or I paid nothing. Another reason was its relatively low price compared to some of the others like Hack Reactor, which at the time I was applying was more expensive than grad school plus the cost and hassle of moving to San Fransisco. Also, I had never been to Seattle and was in great need of an adventure to a place I had heard only good things about.
The application and interview process was pretty intense. After an initial application assessing my skills and aptitude I was moved on to another stage that required a submission of a one-minute video of me explaining “something technical.” I chose jQuery and probably did it 10 times before feeling I had done an adequate job. I soon got another email requesting a time for an interview, and I got on Skype with the CEO at the alloted time.
The interview was absolutely terrible. There were connectivity issues which amplified the fact that I had absolutely no clue what I was talking about. He was asking me questions about data structures and algorithms and how I’d model real life objects and items in code. I found myself literally speechless multiple times during the call. I had a few acceptable answers but mostly it was pretty embarrassing and I was sure I wouldn’t move further. But he must’ve had some faith in me, and said he’d send me a code challenge to complete as soon as possible.
It was a Friday, and I started working on it immediately and through the weekend. It was very challenging. There were three individual challenges - they went something like this:
Make a simple page to manage a todo list where users can input todos and check them off upon completion.
Model a public library with object oriented Ruby including Library, Shelf, and Book objects that has “enshelf” and “unshelf” methods and essentially keeps track of inventory.(The actual description was way more technical for this one.)
Generate and deploy a publicly available Rails app on Heroku that can create, edit, update, and destroy users. First name is required, and email must be valid. Add more features if it was easy.
The first challenge was not too difficult for me, because I’d been doing front end the most up to that point. I recall getting slightly hung up on a piece of the problem, but I think I solved it in the first night after the interview.
I then skipped to the third challenge knowing number 2 would take me much longer. There were a few tricky parts, but I made it work with time to spare for a quick Bootstrap UI and some funny pictures. You can find the code for that app here on my Github.
And finally, the public library. This was by far the most difficult part of the challenge and up to that point the most complicated programming I’d been tasked to do, and it’d be a long time before I did anything that difficult again. This is the point where I realized that I’d been learning Rails without hardly learning any Ruby at all - hence the namesake “on Rails.” I was determined to submit the challenges by Monday, and was sincerely worried that wasn’t going to happen when I read the description of the challenge. So I immediately started looking around for tutorials that would help me with plain Ruby. I did CodeSchool’s Try Ruby which was introductory and ultimately not very helpful when it came to what I was trying to accomplish.
I came across Ruby in 100 Minutes which is quite different now than when I used it as a resource. At the time, it modeled a personal chef that made things for you, and the resulting program looked like this. It still is probably worth reading through, but it doesn’t seem quite as helpful for writing a real Ruby program as it used to be.
After going through that tutorial, I perused Github looking for real world examples I could use to model my program after. I found about 5 or 6 that I looked at several times and sort of made the brain connections I needed to translate into the public library. It took me from Saturday night until Sunday night to do this whole thing, and with minimal to zero sleep (I don’t think this was necessary, I probably would have been fine if I took another day, but I was determined). This is how it turned out.
A bit to my surprise, I got in, and bought a one way ticket to Seattle arriving the day before the start of my cohort on January 6th. Finding a place to stay wasn’t terribly difficult (but it was pretty expensive compared to what I was used to in Utah) and I signed a 3 month lease in a tiny 10 x 10 apartment about a 20 minute walk from their facility.
The first day started out with a little bit of housekeeping/logistics, but then we were immediately thrown into the fire. So many things to configure and download, all in a whirlwind couple hours. Before the end of the day, we started our first assignment on behavior driven development in Rails. It was immediately and continuously super intense.
I learned a lot during my time at Code Fellows. I was spending no less than 100 hours a week totally immersed in code and the community. I would barely have enough time to take off my shoes at the end of each day before immediately passing out from expending all the energy I had.
The curriculum itself was very rigorous (most of my projects and assignments can be found on my Github if you’re interested), but I feel some of the material we were taught was not as impactful to me as what I learned from interacting with my peers and instructors and going to meetups almost every night, brushing elbows with some of the biggest names in the tech community and absorbing everything I could from everyone I could. I also had a great mentor from a local startup that really helped me tie a few loose ends in the directions I was heading.
Another really useful aspect was the increasing of our web presence. I never had a Linkedin account up until then, which I had come to find out is an absolutely essential tool in job searching. There was staff there tasked with helping us maximize the efficacy of our web presence and resumes, and doing mock interviews both technical and general.
During the course I was contacted with a few contract opportunities that I took, even though I really didn’t have the time. One was as a personal tutor for someone with a MS in computer science learning Rails in a certificate program at UW. I had minimal credentials, and I got paid the most money I’d ever charged up to that point to help a comp sci grad student. This put things in an interesting perspective - that the practical knowledge I’d been working on gaining might just be more useful than the expensive and dense theory taught in academia.
I had a few interviews in Seattle, but even though I had made tons of friends the transient nature of my situation was a major barrier in landing a spot right away. A few students got jobs almost immediately after graduation, and others slowly trickled along roughly biweekly. We lost 3 classmates half way through the course, but most of us have jobs now or are making a decent living consulting.
Something I really wanted to do before I left Seattle was participate in a Startup Weekend event. There was only one more before my return to Salt Lake in April and it was unfortunately sold out. I got in contact with an instructor at Code Fellows who I knew was partnering with the event and he pulled a couple strings and got me a ticket as a designer. So I went and pitched my first startup idea which I made up on the spot and failed magnificently at.
I was baffled by how few developers were there when it was time to choose teams. Even though I had a designer ticket, it was clear my coding skills were needed (not to mention my design skills were nowhere near most of the others there). Due to the lack of developers, there were several teams that were asking me to join them, offering one incentive or another, and at least one major altercation between two team leaders over me. It was awkward.
So I chose a team (who has since gone on to be a real company), and had an absolutely great time. I met some really smart, interesting people. I wrote the back end of the app in Rails that connected to an iOS app. I learned so much from the team and working closely with the iOS developer. We stay in contact and I credit him with leading me to much of the interest and knowledge I have now.
Startup Weekend really put my skills to the limit, pushed me in ways I’d never been pushed before, and introduced me to lasting relationships that remain beneficial. I also had a really interesting and legitimate project for my portfolio that would attract future employers.
I got back to Salt Lake the first week of April and immediately started sending applications to companies in SLC and Seattle. The first couple weeks were slow with responses, and I was busy updating my own portfolio site anyway. Things went much quicker once my site was ready and some projects were up. Between both cities, I sent out about 100 resumes and applications. The majority of those did not get any response. I had much better luck when I started to beef up my Linkedin again, posted on the job hunting subreddits, and used social media to expose myself and my interest in finding a job.
I went through roughly 20 phone interviews. The majority of the phone interviews led to the next step, usually either a code challenge of some sort, or an in-person interview.
At first, the code challeneges were pretty tough for me. Usually the at-home ones had something to do with their company. Literally every single at home challenge for a company required consuming data from an API. I was uncomfortable at first with it. It sounds pretty weird to say now, but I really hadn’t been exposed to consuming data from an API until code challenges for jobs. It’s strange that I didn’t learn it before, since it is such an essential skill.
Most of the in person interviews had a white board challenge involved, which is honestly in my opinion not a good or accurate measure of a person’s coding skill. I actually was prepared for this by Code Fellows, and did quite well on most of them.
I got a false alarm offer from a local startup I interviewed with for a Rails job in early May. It was a big disappointment when they went dark on me but I recovered and threw myself out there again by putting my site on Reddit job subs and reaching out to people at attractive companies on Linkedin.
The first job
The first week of June brought me 2 official offers within days of each other. One was for a software development contractor company that contracts people to other companies for long periods of time. I was offered a senior position in ruby, Rails, and front end development. The other offer was for a front end role on a .Net stack. The Rails one was for more money. I chose the other one because I met both teams and liked them more. I don’t regret that decision at all, and I’ve kept a good relationship with the other company.
Interestingly, both companies that gave me an offer reached out to me rather than the other way around. One was a recruiter who found me on Linkedin and the other was the dev manager who saw my post on Reddit. Both asked me lots of technical questions, and even code questions, but neither gave me a white board nor take home code challenge.
I enjoyed my first job as a developer. I was introduced to a lot of technologies I wouldn’t have been otherwise. They worked in a Windows environment, so I had to learn Visual Studio, C#, .Net, Razor, etc. and how to plug Coffeescript and Sass into the stack. It was a great learning experience and I made good friends there, but soon I had a lot of recruiters contacting me and I wasn’t a huge fan of the industry the company was in. It made me curious about opportunities that might have better suited me. I read this article on the benefits of early career job-hopping which eased the feeling of guilt I had while considering new opportunities.
So 4 months after my first job in web development, I accepted another offer at a well known company in the area. Now, 4 months since starting the new job, I am quite content with where I’m at.
Cut to the chase!
Okay, maybe that was too long, so here’s a summarized tl;dr list of the steps I took to get a job as a web developer a year from deciding to do so.
Exposed myself to seemingly complicated tech tasks for the purpose of exploration. This included hacking my Wii, setting up a Minecraft server, and getting familiar with various flavors of Linux. Generally being curious about technology and the internet and how it all works.
Gained a real interest in the idea of web development and programming in general. Money was of course a motivator, but certainly not enough to create the passion I eventually found in the actual craft.
Made some websites. My first was one for a real company which ended up not needing or using it. I did it for free to learn. This is unquestionably (hopefully obviously) the most important step I took. I then started reaching out to my network for people who needed websites and made some for friends and family.
Learned about server side scripting and full stack frameworks. I went through One Month Rails mostly due to a generous friend giving me his login. It was excellent and totally worth whatever they are charging. I then built another full stack web app.
Started a freelancing business. This really helped me legitimize myself, if only for myself, and made me feel official and that I was all-in on my decision to make this my career. I made business cards, a portfolio site, a bank account, and registered my business name. Then I actually found clients and got paid to do what I had decided I wanted to get paid to do.
Created a web presence. Made sure I had accounts on Twitter, Linkedin, Github, Hacker News, Designer News, and a portfolio site, and tried to sharpen them all up. This was vastly beneficial, one of the most important things I did next to actually making websites and roughly equal to networking.
Attended a code school. I chose Code Fellows in Seattle because of it’s job guarantee and location. Learned a ton, made lots of friends, would do it over again in a heartbeat. Absolutely worth the investment. I took advantage of a lot of great career opportunities offered to me because of this, including assisting in teaching a class and being a personal tutor to a CS grad student.
Networked. I asked everyone I knew what they knew about the industry and craft, and went to every meetup that I could. The conversations I had (and still have) at these events are invaluable. You learn shockingly more from talking with people in the community than you would sitting in any combination of classes. It also helped me with social skills, which even as a programmer is surprisingly important.
Applied, interviewed, practiced, repeat. I sent out tons of applications and put myself out there in every way I could think of. Ultimately Linkedin, Reddit, and meetups were the channels that actually got me job offers. I practiced whiteboarding algorithms and solving problems, had a lot of interviews (each better than the previous, for the most part) and continuously kept up to date on current trends and technologies.
A year is a relatively short time to have gotten where I did, and I am certain I wouldn’t have gotten there without the series of fortunate events (yes, I consider the destruction of my ankle as a fortunate event in hindsight) that allowed me to focus obsessively and full time on this pursuit. But passion is a lot stronger then luck and if one has the drive, they shouldn’t need any fortune to make things happen on their own timeline.
Join the discussion here on Hacker News.