this is a second draft of my year in review blogpost.


What you are about to read

In the last 12 months, I went from Hello World in Javascript, to deploying fullstack webapps, to getting a freelance job, to interviewing at top tech firms including Google, and receiving multiple six-figure offers as a professional software engineer. This is my story.

Pre 2017

To some of you reading this may seem like excessive backstory, and if you feel that way skip ahead. I write this for the dozens and hundreds of other square pegs like me out there, for whom the cards just fell slightly off center and before you knew it ten years go by and they realize they are surrounded by round holes with no way out.

I was 30, and in a dead-end job. Since falling in love with finance in high school I had oriented my entire early career around it: getting a business degree and eventually a master’s, fighting my way out from an extremely poor choice of first job out of college to break into the “Front Office”, embarking on a high-flying career trading everything from bonds to currency derivatives to ultimately helping to manage millions in a global hedge fund. This was supposed to be the image of success in my profession. People at Wall Street Oasis pray nightly to have the kind of career I had. Only one problem. I wasn’t great at it (see: Peter Principle), and in the dying hedge fund industry being just average wasn’t good enough. Things came to a head when my boss announced he was leaving for a new start, essentially firing the team he used to manage. With some misplaced optimism I took a job at a finance related startup to figure things out, but it soon proved to be a dead end. I was 30, and lost.

Can you imagine spending >10yrs of your life to get to a certain place in life, only to find out it’s not for you?

I looked around in a funk, messing around with different things but never getting anywhere. If you’re reading this you don’t need to be convinced about why software engineering and in particular web development might be a worthwhile career, so all I will say is I eventually got to that conclusion. I will say Haseeb Qureshi helped.

January

On Jan 1 I decided I would actually finish FreeCodeCamp (FCC). I had done a bunch of research into free learning resources, including The Odin Project, Codecademy, Stanford CS50 and FreeCodeCamp. For whatever reason, even though I still had my day job, I refused to consider paid classes beyond the odd Udemy course, which meant things like Team Treehouse was out. This is of course very myopic - the value of a few tens of dollars a month versus a total career change doesn’t even compare. But when you’re just testing the waters you want it to be as low risk as possible. FreeCodeCamp simply clicked for me. I was attracted by the idea of working on real world projects for nonprofits at the end of FreeCodeCamp rainbow - but I was fully prepared to pivot to the Odin Project if it didn’t work out.

I made one other crucial decision in January. I would blog about my journey. Every day. Being a devoted Redditor I had picked up this idea from /r/nonZeroDay and it made sense. In short, you simply decide to do -something- towards your goal every single day without fail. This sounds tough, but the upside is, that -something- can be the smallest, tiniest, most inconsequential thing. Want to work out more? Decide to put on your shoes and walk into the gym and do just one push up and you’re done. You can walk out. That day will not have been a zero. You have only 36.5 thousand days in a centurylong life. Thousands are already gone. How many more are you going to let go by not doing the thing you want to do?

No. Zero Days.

The beauty of this is of course you’re probably not going to only do one push up. You showed up. You’re going to do more. That’s the NonZeroDay idea.

FreeCodeCamp encourages this with a visual representation of your daily streak with green squares for when you did things and gray squares when you didn’t. This idea was taken from Github, which is something that experienced developers grow to hate. But it was just the thing I needed. I would start my blog on github, and I would keep that thing green come hell or high water. But I was so scared of failing publicly and so scared of admitting failure in my prior career that I didn’t tell anyone. Not my colleagues, my closest friends, or my family. And so I didn’t tell people about my blog; the blog was for past me to talk to future me, for future me to judge my past me, for present me to be encouraged by past me. This little essay is made richer by having my blog to help me relive the blow by blow.

February

By February I had blown past FCC’s Front End Development Certificate, from learning Javascript basics to making a Tic Tac Toe game. A lot of people complete it and want some sort of clap on the back. But I knew that that was merely the easiest part of Free Code Camp. Going by the Gitter chat at least 2/3 of campers never get past the Frontend Cert and I was determined to not have this just be another thing I started but didn’t finish. I kept going.

In case I just lost some of you right there, here are some circumstantial facts as to why you might be having a tougher time than I did. I was not completely new to HTML/CSS, having briefly dabbled as a kid in the 90’s. Enough to put up a crappy Geocities site and then never look at it again. All I knew about Javascript was “it wasn’t a real language” based on my 20 years-out-of-date impression of it. I had picked up some coding experience on the job in VBA, Haskell, and Python, but it was all amateurish cobbling together of copied and pasted snippets from docs and StackOverflow. But it was still something.

Anyway. Right after the FCC Frontend Cert is the “Data Viz” Cert (this is the old FCC syllabus, a major revamp is scheduled for 2018). In this part of the course you are supposed to learn SASS, D3, and React, but the SASS and D3 parts of the curriculum were still nonexistent back then. There were some React projects to do but no content to -teach- you React before you did them. So I turned to Udemy. Steve Grider is pretty much the king of React over there so I simply decided to start and finish his course.

Only problem is, jumping straight to Steve Grider’s course is a pretty piss poor way of learning React. It mixes ES5 and ES6 content and throws in way too much Redux complexity. I believe this is in part because Udemy doesn’t give Steve Grider any way to get quality feedback. He was simply the first credible course on the scene and Udemy has a way of snowballing newbies to whoever seems to be “the course” on the subject and all other instructors can just forget about it. Feedback from newbies isn’t worth much, because frankly they don’t know any better. Today I would recommend Wes Bos’ https://reactforbeginners.com/. Yes it’s more expensive. Get over it.

Anyway, the big step up from everything pre React to learning React is Webpack/Babel setup and the need to create a compiled/transpiled bundle of Javascript from JSX/ES6. People will tell you you don’t need to learn that to learn React. That’s technically true and that’s the worst kind of true. Nobody told me this and I fumbled around for days. On the other hand they could also go overboard and tell you too much, like in this viral article How it feels to learn Javascript in 2016. That’s true, too.

I have only one solution for all this confusion. Can you guess what it is?

No. Zero. Days.

Try A. Doesn’t work? Try B. Doesn’t work? Try C. Feel like you missed something? Try A again. Repeat. Whatever it is, I can virtually guarantee people dumber than you have done the thing you’re struggling to do. Even they figured it out somehow in the pits of their stupidity. What’s your excuse?

No. Zero. Days.

March

The thing about tutorials is they loooove getting you to show things on localhost and then stop there. Deployment is usually left as an “exercise for the reader”. That’s great and all, but web developers should probably put things on the web. FCC guides you towards doing everything on CodePen for the Frontend Cert, but when you hit the other two certs you soon migrate to Cloud9 for a cloud-based IDE and hosting solution. Only problem is, all your localhost-specific knowledge is now kaput. Again with the benefit of hindsight, I don’t know why I was having so much trouble getting things to deploy with Cloud9, but I was. Today I can recommend having a good grasp of Webpack and Babel basics before trying to deploy a React app and screaming at the wind at weird errors.

The other thing about building “real” apps in Javascript is that soon enough you run into some WTF’s of Javascript (immortalized by Gary Bernhardt here) and, less facetiously, things that don’t seem to work like you think they should work, particularly anything to do with the this keyword. You spend DAYS asking basic stuff on stackoverflow not knowing if your problem is a React problem or a Javascript problem. People can’t help you because you can’t ask your question right. When you learn that Javascript was designed in 10 days and is prone to randomly throw unhelpful undefined is not a function errors you might be tempted to conclude it isn’t a real language and just give up.

Or.

Or you could realize that people dumber than you build massively successful webapps despite these limitations. You could realized that maybe, just maybe, they skimmed over some details when you first learned Javascript, just to get you going. You could conclude that You Don’t Know JS and go over your basic Javascript material AGAIN with new eyes, looking for the stuff that trips you up. Book too dense for you? Sign up for Frontend Masters and have Kyle personally explain to you what you still don’t get about Javascript. Yes, again, it’s tens of dollars and you can cancel after a month. If you don’t value your time enough to afford that, you’re doing this wrong. Kyle Simpson isn’t the only advanced Javascript teacher out there. There’s Marijn Haverbeke, Wes Bos, and way more at Egghead.io and Pluralsight. Which is the best? Who knows. Who cares? They’re all “good enough” or I wouldn’t have mentioned them. Pick one, see if it works. If it doesn’t, keep going.

No. Zero. Days.

The hardest challenge in FCC’s React Projects is building an entire Roguelike Dungeon Crawler game in React on Codepen. I could’ve done it on Cloud9 but I had some issues with it so Codepen it was. The difficulty was learning and applying Redux. Although you might not need Redux on small little apps like mine, you probably should practice it on small little apps before you tackle anything bigger.

April

I’m now 31 and I’m about to tackle the Backend Cert on a random free code exercise website no employers really give a crap about. What am I doing with my life? I press on.

Here’s a blog post from that time to give you an idea of my internal monologue:

stuck
i am dealing with severe writers block when it comes to restarting the fcc nightlife app. im not sure what this sudden lack of motivation is coming from. i have plenty of time to code and am not doing it at all.

back to codewars to punch out a couple katas.

That’t it. not the most inspiring writing. Also notice I mentioned CodeWars. On those days that you dont even have an hour to do your FreeCodeCamp stuff you can turn to site like CodeWars and CodeCombat to do a little 10-15 minute Javascript exercise. No Zero Days.

That’s all fine and dandy but you know what? I had my first zero day. Yeah. Me, Mr. No Zero Day guy. What the hell? I just finished the FCC Frontend and Data Viz Certs! I should keep going!

Yeah, no. Backend stuff is where the rubber really meets the road. You have to learn how to set up your own server, both locally and deployed. Heroku is great for that, and tools like Cloud9, Glitch and CodeSandbox are always popping up to help tackle this problem space. You have to figure out how to link to your database (FCC prefers MongoDB, reasonable people disagree) and set up your server to create APIs that query that database, run calculations, and serve files. The more “full stack” you go, the more configuration possibilities exist and the less learning resources are available to you. This is a bad combination for a newbie. I completely hit a wall, and this even after some initial fullstack success with ClementineJS. It just wasn’t clicking.

MeteorJS saved me. A fullstack framework with opinions about everything and, more importantly, deployed without fuss? Sign me up! Even though I had caught a whiff at the time that MeteorJS might not be a thing anymore I was so desperate for anything that would work I just tried things. Along with Meteor I discovered Clever Beagle and VulcanJS and got productive with the help of all these useful fullstack webapp examples that just made sense.

I broke through all but the last two Fullstack (Backend) projects on FreeCodeCamp and the end was in sight.

And then I fell sick.

May

My sickness took me out for a week, and I’m not proud to admit it was a zero week. Pushing my sickness aside I power through to finally finish the Backend Cert, and thereby all the Certificates for FreeCodeCamp! Along the way I had kinda meandered into being a Meteor developer, something I wasn’t fully onboard for, but it had made my backend projects so much easier I didn’t much care.

Excited to get some real world experience I put my details in to request being paired up with to help with a nonprofit.

I didn’t hear back at all. I asked on the forums and tried pinging Quincy Larson on Twitter, and he said he would look into it.

Nothing.

I briefly just lost interest in web development altogether and dabbled with VR frameworks like https://aframe.io, having just gotten a HTC Vive. I learned Vue because I heard good things about it and I liked Evan You’s independence. I fell out of Meteor because it actively fought me when trying to adopt things like Vue (I don’t think this is a fair judgment to Meteor, but is how it felt at the time. Too much magic is good until it is bad.). I tried out Wordpress for my blog and some ideas for a side business. I learned about (and thankfully bought) some bitcoin (not enough, in retrospect).

Basically, bereft of structure, I faffed around for weeks. I realized FreeCodeCamp is never going to get back to me and the cake is a lie. But whatever, I had finished the FCC Frontend, Dataviz, and Backend Certs right? Employers would be lining up around the block for me!

No. I knew better. I had tasted the success of building webapps on my own, but I had only barely limped into the finish with code that was entirely not peer reviewed, with a lot of questions left unanswered. I could work every day to patch holes in my knowledge, but it would be an uphill battle from here, not downhill. It’s harder to work on the fine details of what you don’t know you don’t know, than to learn the broad strokes of what you know you don’t know.

June

I don’t want to give you any illusions about how I finished FreeCodeCamp in a relatively short five months. I had the “fortune” of not having any dependents or family commitments. I didn’t have much of a social life. Where I would normally be active and working for my company during nights and weekends because I was that kind of person, I cut it back to “just” a 9-5 commitment to make room for my personal progress. I took days and weeks off (I did have essentially unlimited vacation, within reason) just to move forward faster on the projects. It was straight up a second fulltime job.

Except it wasn’t. It didn’t pay, and five months and three FCC Certs later, I was still at my dead-end job and had no realistic prospect of improving my lot in life. Yes, I had discovered the famous P1xt guides that began on freecodecamp, among other exhausive resources like the OSSU self taught CS guide but I will frankly say what I don’t normally dare to say when people suggest listicles like this: Are you really going to go through all that?

These resources are great but generally tend towards overwhelming, overlapping and messy jumbles of stuff that works for different people, and depending on how deep you can go through them could take years to complete. You emerge with great general fundamentals but not necessarily anything very much to show for it. It certainly doesn’t help you look for a job. Can’t exactly list “Finished everything on the P1xt guide” on your resume. Not that resumes matter if you just work on super awesome open source projects all the time that employers take notice of you for, but I tend to set my expectations low in that regard. Guides like these are an ideal roadmap, but not a plan.

I also want to mention that I know some people also start doing basic freelancing work to build up a portfolio here, but I was unattracted by the idea of competing with a global market of experienced freelancers for close to minimum wage.

In the meantime, to keep active on my coding, I started applying my new skills to solve problems at work. I made mini internal dashboards to help our sales staff. I created analytics tools to crunch and display our data for my managers. I made marketing minisites for potential clients to play around with to get their attention.

They. LOVED. It.

My colleagues raved about my apps and used them every day at work. I even got called up by a competitor looking to hire me because of it. Me! with my shitty skills and freely gained knowledge! For noncompete reasons it wasn’t going to happen (and I doubt the competitor was 100% serious anyway and was maybe just fishing for info), but I was hooked. I felt like I was nearly there. More importantly, I realized that I should probably spend some money to really “get good”.

And so I decided I should do a bootcamp.

JULY

I didn’t arrive at this decision easily, as you see above. In fact, I pretty much did everything I could and went out of my way to learn on my own, in part because people said it was possible, in part because I had some pride and curiosity to see if I could really do it. Now that I was this side of FreeCodeCamp, I knew enough to know that getting to a point where I was hirable as a fulltime software engineer would either take a lot more time or a lot more money. In fact my goal was not just to be “hirable” but actually “in demand”. I saw Haseeb Qureshi’s success and while I knew I wouldn’t ever be him it was a good enough path to get offers at the likes of Google and Airbnb. In my mind, if you got there, you were good enough anywhere else. I also psyched myself into it with constant content from Breaking Into Startups where you hear bootcamp success stories all the time. Don’t get me wrong: I knew that people fail out of bootcamps. I knew they didn’t have perfect or even great track records of getting their students hired. I knew people complained on Hacker News and Reddit that even after taking a bootcamp they were left in debt and jobless.

I didn’t care because I -knew- that those failures didn’t apply to me.

Obviously you can’t -know- these things for a fact, but I had as much evidence as humanly possible that I would be one of the success cases. I had put myself through FreeCodeCamp, so I knew I could complete projects without a lot of guidance. I had made things for work which got internal usage and external interest, even though they looked basic AF. I had savings and low commitments so I could afford a bootcamp and throw myself wholly into it. I also wanted to gain a company of peers and instructors I could lean on for the rest of my career, instead of pseudonymous usernames from the FreeCodeCamp chat. I had an idea of what I wanted to get out of the bootcamp, which was not so much the job as it was just demystifying all of the problems I had run into.

In particular, one white whale of mine was JQuery. Despite all the work I had done in FreeCodeCamp I still felt like I was leaning on too much “magic” to get things done. As I investigated Hack Reactor one thing that stood out to me was the instructor saying something like “By the time you are done with Hack Reactor you will be able to build JQuery yourself”. I was sold.

I was based in New York so I wanted the top New York based bootcamps. CourseReport helped narrow this down to General Assembly (GA), Hack Reactor (HR), and Full Stack Academy (FSA). There are other good bootcamps in New York, but it didn’t really matter because I got into all three I applied for and applying for more really wouldn’t have helped. I know that applying for bootcamps is something people stress out about, and I was suspicious of “bootcamp prep” classes (who needs a bootcamp to get into a bootcamp? I know now that this is actually a very good thing for complete newbies). But look at it this way - I had basically spent the entire first half of the year doing bootcamp prep. In any case, I picked my bootcamp based on essentially two criteria - how hard were the admissions process and the vibe of the bootcamp when I visited. On the first metric GA failed hard. They were way too easy and set the bar incredibly low. I’m sure they will disagree but that was my impression. The polite industry terminology is that there are bootcamps that take you “from 0 - 60” and “from 20-100”. GA was of the former variety and HR and FSA were of the latter. I eventually went with FSA because the admissions interview was marginally harder than HR, and I disliked the vibe of HR’s then-new campus. FSA also seemed to “care” more about its students although the evidence for that was anecdotal at best.

I kept up with my extracurricular projects. I randomly interviewed Sacha Greif, creator of VulcanJS (which I had used back in April) and the State of Javascript survey, simply because Jeff Meyerson let me do it. I made my own open source boilerplate search project in Meteor and contributed to another in Vue. But as soon as the bootcamp started, I lost all time for anything else outside of the bootcamp. Except one thing.

AUGUST

The bootcamp started off at an impressive pace. After a few weeks of remote precourse work where you cover mostly dry things like function context, you hit the ground running with 30+ new friends also joining in the journey with you. It felt very different from just hacking on FreeCodeCamp on nights and weekends just by myself, because now there were instructors who expected you to do things and imposed deadlines. I of course was no stranger to the daily cadence of programming work but it was certainly an adjustment for some of my classmates, some of whom had been bartenders and cooks just months before.

Just an aside: The diversity of backgrounds was notable in some and absent in others. We did have everyone from CS degrees to English Lit degrees to no degree. We had people with decades of legacy tech experience to someone who wasn’t even alive for two decades. It was really all sorts. At the same time, we had only 10% women and 1 African American person. Make of it what you will. I’m not interested in a social justice debate.

Back to giving you an idea of pace: Day 2 we were doing algorithms and data structures; hardcore circular graph traversal stuff that I would still use in my future interview prep. By Day 3 we were making a small jQuery clone. Day 3! Every day was different, and spent pair programming with a different classmate. This was another thing I didn’t get from FreeCodeCamp. I knew some employers practice extreme programming and pair everything. I knew I had gaps in my knowledge that someone else could probably pick out easily. Unfortunately due to the sheer amount of prep work I was usually ahead of the class and ended up teaching what I knew to my pair partner but even that was worth while experience. You only know if you understand something if you can explain it simply.

By the second week we were deploying fullstack Twitter clone projects, probably closing in on the early parts of what I had done in the FCC Backend Cert. FSA uses SQL instead of MongoDB as its database layer which I didn’t mind, because it opened up a whole other world of databases I wasn’t exposed to in FreeCodeCamp. Beyond learning basic open source libraries like Express and Sequelize, we also just worked on hard problems in raw javascript, from building our own Bootstrap clone, ORM, compiler, and git implementation, to implementing the Javascript Promises Spec from scratch. This is the kind of thing I wanted. In Javascript you use a lot of open source libraries which can lead to a general lack of confidence when it doesnt work the way you expect and you have to look into the source code of the library itself. Having -built- your own, if small, libraries gives you a lot more confidence that you can tackle some of this more challenging code instead of just regarding it as magic.

I mentioned one side project outside of the bootcamp. After guest hosting for Software Engineering Daily, I had been bitten by the bug of podcasting. I was also frustrated with the generally poor state of information about bootcamps. The sources of information are usually either self reported or ancedotal, usually just one paragraph snapshots that are either extremely positive or extremely negative with nothing in between. I knew from college that sometimes the best information gathering is long form, longitudinal studies of a set panel over time. This way we could weed out nasty research problems like selection and survivorship bias. In 2018 there will be more bootcamp grads (30k) than CS graduates (28k) so this is an increasingly important subculture of the tech industry. People will work with, hire, and potentially be bootcamp grads, for better or worse. Again, I am uninterested in vague debates but I am keen on collating data for informed debates. So I asked a panel of 8 classmates to live podcast their journey through and after the bootcamp with me in an audio documentary/podcast called Impostor Syndrome. I still don’t know why they said yes but I am thankful they did as this has now become one of the most successful projects in my life. But enough with the shameless plug, you now know it’s there if you need it.

September

Most bootcamps consist of two 6-week segments called a Junior and Senior phase. Junior phase mostly corresponds to daily workshops learning a lot of material and we soon hit React and Redux, the same wall I hit back in March. Because this was my second time tackling this material I simply picked it all up much better and was even able to lead my own workshop teaching my peers. Teaching-to-learn is a wonderful and scary practice and I was glad to have a small group of classmates willing to have me play teacher. It also helped that we had the benefit of weeks of raw Javascript practice in the leadup to React, with an entire day of ES6 to really drive home the different Javascript syntaxes we were about to use in React-land. Again, even though ES6 is not strictly necessary for React, I highly recommend having a strong knowledge of it so that when you run into trouble you should know if it is a React or a Javascript problem. I cannot overstress how frustrating it is to have an error and not be able to drill down its source because you are taking on multiple new paradigms at the same time.

The other noteworthy realization I had during Junior Phase is the Value of Opinionated Progression. I linked to my blogpost so you can read more if you wish but the gist is that one thing that teachers do for you is decide for you what you should learn. This is the value of a curriculum, and what I liked about FreeCodeCamp. At the same time, because FreeCodeCamp’s curriculum was incomplete, my education was incomplete and I felt frustrated and lost. At a bootcamp I had a curriculum that was proven to get at least some people into the likes of Amazon, Spotify, and Google, based on the graduates list. I felt I had a chance. When you don’t know a field and also have to decide what to learn within the field, you get lost and torn between the strong debates especially within a fast moving field like Javascript. Within Javascript this phenomenon has a name: Javascript Fatigue. The Value of an Opinionated Progression provided to you by a knowledgeable coach who has achieved results is very important in this context.

As you finish the Junior phase you are tasked with a “Senior Project” which is essentially a fullstack webapp with a ton of user stories that you have to take from npm init to deployed within a week. I took the opportunity to put two twists on the project given that I was increasingly comfortable with React - I would incorporate good design and I would also code another frontend in React Native. From my FCC days I had narrowed down a list of good design resources I could lean on, and my favorite was Creative Tim. I used what I had taught in my student-led React workshop to convert Creative Tim’s jQuery driven Bootstrap themes into a React compatible one. I also did a crash Udemy course in React Native and just barely banged out a React Native client (made a lot easier by Expo) for my Senior Project in time for the submission deadline.

In Senior Phase, the pace slows way down and the emphasis is on group projects and self-directed learning. I was placed on a good first project and, due to mutual agreement, led a team of four to produce an ecommerce webapp in a bit over a week, including being able to accept money with Stripe and to send email with Nodemailer. This was the first actual webapp that could actually be launched to make money and it was very exciting. Really getting to grips with agile workflow, git branching and merging and resolving conflicts, setting up CI/CD on the server, doing strict Test Driven Development (even for Authentication, which was tricky), these were also things I signed up to the bootcamp for and got to try out because I had a good team.

This luck would not last.

October

The second project in Senior phase is a 4 day individual hackathon where you can work on whatever you want to work on. I was a user of Buffer.com to promote my podcast and had a bunch of nits to pick with it and always wanted to build a clone of it. I set to it, only to soon run into problems using iOS share extensions with React Native and essentially killing any chance of completing this in 4 days. I pivoted to a podcast app idea and got to building it, only to lose interest when I realized it was pretty easy to build a merely average podcast app, but very very hard to build something like Overcast, which I use. In the early morning hours the day that the hackathon was due, I pivoted a second time to present my project as a React Native boilerplate instead of an unfinshed, unimpressive app. This became CrossBones, which won a Developer award at the hackathon. Yes, an award winning app built in 6 hours after pivoting twice in 4 days. I’m not proud of it but I’m also proud of what I managed, know what I mean?

With the hackathon done, the entire second half of Senior phase is dedicated to career prep and your Capstone project. Career prep at a bootcamp consists of practice technical interviews, and assorted “behavioral” stuff.

Practice Technical Interviews were a pretty straightforward daily morning routine where you basically pick something from Cracking the Coding Interview and roleplay with a partner to do the question on a whiteboard, after which the instructors guide you through the suggested answer. You learn a lot of little tricks which are part IQ tests and part straight memorization. It is easy to criticise this exercise as artificial because you don’t really do this day to day in your real job (which is true), but then again you’re still going to get asked these no matter how you feel about it anyway.

The less cynical justifications I like are:

  1. it is a way to test your knowledge of a language agnostic of a framework like Vue or React, which is way more transferable and applicable to different scenarios
  2. what is really being tested is your ability to think and communicate clearly under pressure
  3. Big O really is something that just sneaks up on you as a professional software engineer, and you want to make sure the person you are working with knows how to think about problems with a view to resource consumption and avoid being featured on accidentally quadratic.

More on Technical Interviews later. The softer stuff is also covered in a bootcamp: Prepping your resume, personal site, linkedin/stackoverflow profile. The “tell me about yourself” pitch. I recorded myself doing a mock behavioral interview, check it out. You can tell I don’t have much to say about this topic but I get that people find it hard.

Last on the list is the Capstone project. I was not so lucky in my grouping and, due to a terminally dysfunctional team, was eventually given permission to pursue a rare solo capstone. I had always liked “training games” like CSS Grid Garden and Flexbox Tower Defense and thought that a gap existed in the market for a GraphQL training game. So I forked Facebook’s GraphiQL, and cloned Codecademy’s User interface with styled components, and brought the two together to create GraphQL of Thrones, furiously writing all the content myself to deliver the whole thing in a week.

And with that, I graduated from the bootcamp, and the job search began.

November

Bootcamps actually do one more thing for you that I haven’t mentioned but will now: They organize a Hiring Day to try to hook you up with potential employers. It’s basically a mini job fair where all the applicants have essentially the exact same portfolio and no direct work experience in the job. You can see why it might not the best value proposition for employers to spend money and people on. But at the same time, if you want “pi-shaped people”, people like myself who have had deep experience in another field AND can code, this is the place to go. It’s also a nightmare to organize and my hat is off to people who have to organize this every six weeks. Anyway, ever the realist, I went to Hiring Day with low expectations. My only goal was to get practice pitching myself to people I would never see again.

Boy was I wrong. Dozens of employers, including Google, showed up. To some of my frustration I was matched with employers I didn’t express interest in and not matched with employers I was super interested in - including Google. I went through my scheduled meetings, having several surprisingly great conversations and some very wince-inducing ones, but never once drummed up the courage to do an unscheduled dropin to speak with Google. Before I knew it the day was over and the bootcamp was over and apart from one actual serious (mutual) interest I had completely wasted the opportunities given to me by my Bootcamp career services.

I’ll be frank and confess that I can’t be as transparent as I have been beyond this point, because this part of the story involves people other than myself and frankly knowing the gory details isn’t going to help you. All I can say is, going from the daily discipline of a bootcamp to the total freedom of self-directed job search and career prep is a big shift. I called it the Cliff, and asked people for advice about it. The best I got was from David Yang, founder of the bootcamp, and I wholeheartedly recommend my whole interview with him here. The key point was to focus on systems, not goals.

Your goal is to “get a great job”? Sure, but what does that tell you about how you’re going to get there? Nothing. Decide on what you are going to do every day to get to that goal. That’s your system. Make the system, stick to your system, tweak it if it needs tweaking but never leave the system. Does that sound familiar? I had been practicing the very most basic, dumbest, version of that since January 1.

No. Zero. Days.

For me, that meant 4-5 hours a day on Cracking the Coding Interview and algo prep sites like http://algoexpert.io/ (highly recommend) and http://leetcode.com. That meant following the bootcamp’s recommended model of putting my job search funnel on Asana. I made my personal portfolio site. Kind of going through the motions like everyone does. I wasn’t desperate for a job so I avoided spamming job apps and only applied to companies I really liked and believed in. With a few jobs under my belt at the age of 31, I knew that it is far more important to find a job that you can grow with and stay in rather than just the soonest or highest offer.

I’m going to skip a lot of detail and just take you to the point where I got my first offer. There were 3 rounds, all very technical, all based on pure Javascript, 1 of which consisted of a “superday” type thing where you have 4 back to back interviews for a whole afternoon. Thanks to my past year of Javascript practice I had fun with it and only really struggled when I was asked a performance/optimization question, which of course at my scale I’ve never really had to deal with. I will say that Wes Bos’ Javascript 30 would come in surprisingly handy for this kind of interview prep and it is a resource most people miss when they focus -too- much on algorithms vs what specifically you can do with Javascript. The recruiter called and basically said that I had an offer, and asked me about my salary expectations.

You read that right. I did all the interviews, got a verbal offer, and THEN was basically asked to name my number. What? Doesn’t make sense to me either. But it happened to me at each of my other offers so this must be some sort of tech industry norm that I am definitely not used to. I think the hope is that you will name a low number because of Impostor Syndrome and then they pretend to struggle a bit before topping your number. I’ll save you some research. In my bootcamp, we were told that the average is $75-80k. CIRR data has it closer to $90k. My last job I made $120k. So that’s what I named, expecting to be negotiated down on.

They called back the next day. $110k + 12k in stock. My first offer! She said that what clinched it was that when I did one of the problems I approached it in a test driven manner, writing the tests first to see how I would use my solution and having it fail, and then writing the solution until it passed. In my bootcamp we were told to do this. Apparently people forget. I didn’t so much “remember” (I have a terrible memory) as just did it out of habit. That was all it took.

Anyway. In 11 months I had gone from not knowing Javascript to paying someone to teach me Javascript to having someone actually want to pay me for my Javascript skills! And a solid offer too, above the 90th percentile of bootcamp students.

I turned it down.

December

I swear to you, I’m confident but I don’t think I’m an ungrateful/arrogant person! It was a struggle to turn down and I actually sought advice from multiple people to double check that I wasn’t crazy. The logic was this:

  1. The secretary problem, itself an optimal search algorithm, indicates you should actually turn down the first of whatever you get as you slowly discover your market value. This despite the very real possibility that your best ever offer could be the first one that shows up. You’d still have to turn that down. You really have to have some faith in algorithms to pull that off.
  2. Being active on Twitter for a year, I had followed and chatted with hundreds of people I respected and they occasionally threw out freelance gigs that they needed help on. After I graduated I picked up a couple gigs that paid $75/hour (a number somewhat plucked from the air but also based on conversations with Dan Luu and Patrick Mckenzie). To annualize an hourly rate you just multiply by 2000 so I knew I should be looking at something in the ballpark of $150k.
  3. Anecdotal evidence that the job market was heating up in New York so the survey data from my bootcamp was possibly out of date and too low.
  4. I had other interesting prospects that were seeming to go well (bird in hand notwithstanding)

And the other prospects ran the gamut from having a random coffee chat with Spotify to having someone at MongoDB basically lie to me that he had referred me in to flying out to interview in Mountain View for the big G. I’ll save you the drama of negotiations because I didn’t really do any. Each time I simply named a price and it went up. I did create a bit of FOMO by mentioning other companies I was working with to recruiters, who can really only do one thing with that information. In the end I got a great offer from that first company I met all the way back at Hiring Day (so I really genuinely do owe my job to the bootcamp!) and signed with them for the highest salary I have ever seen in my life.

No, I’m not going to talk full numbers because frankly I don’t know if I’m allowed to. But equally it doesn’t matter. Just know that it is possible and everything you just read happened, in that order, and in that timeframe.

And that’s how I became a professional software engineer.

FAQs

Here’s where you, dear FCC reader, come in. What questions do you have? I’ll answer and put them here.