Technically Inexperienced

A pseudo-memoir, quasi-rant on my several months of new grad software engineering interviews

I am very privileged when it comes to my education. This winter, I will be wrapping up an undergraduate degree in computer science at the University of Waterloo, a Canadian school that boasts about being a Silicon Valley feeder school. The biggest reason we have this reputation is because of the cooperative (co-op) education program. In summary, a typical four year undergraduate program is extended to five years to include six four-month internships.

Although I am nowhere close to being at the top of my class — having failed and retaken one math and two CS courses (with six fails being the limit before being kicked out), I have managed to land internships at wonderful companies, organizations, and startups in high demand positions in web and mobile development.

Besides my technical work, some of the most important work I do is writing and speaking extensively on the diversity issues that are found at the intersections of being a woman in tech and CS, having chronic mental illness, and coming from a low-income, first-generation immigrant background.

I am beyond grateful that I am in a position to explore my passions in software engineering and to help build more inclusive and empathetic communities for underrepresented people in the field.

I wholeheartedly believe anyone in a position to critique the systems and communities they are a part of have the utmost responsibility to improve it for others. We are humans after all, not self-sufficient computers that can disrupt all of the things while chugging obscene amounts of alcohol and solving P vs. NP. I have an active imagination, ha. You get my point.

As everyone is well-aware of, the technical interview process is woefully broken — the screening process conducted by recruiters, the questions, the rejection email/phone call/no follow-up whatsoever, the negotiation process — the list goes on ad nauseam.

Several months of interviews for new grad software engineering positions has been a roller coaster of emotions. It is not a fun, well-engineered roller coaster either. Many offers (which I am super grateful for) and rejections later, the interviews have left a sour taste. No amount of ping pong tables, beer kegs, and free bagels can make it feel sweet. Even though I have gone through many internship interviews, I experience the same feelings of inadequacy over and over again. It is fucking exhausting, especially given my qualifications.

How do people who do not have the same privileges as me even get through the door? The harsh reality is that they don’t.

You often hear people tell you in an extremely patronizing manner that “practice makes perfect”, and “blah blah, everyone gets a fair shot [insert meritocracy mumble jumble here]”.

“Just study this how-to book the size of your head on algorithms and interviewing and you’ll be set!”
“Just drill yourself with technical problems that you would only, let’s be real, cram for a CS exam and never use elsewhere!”

There is a huge world of difference between not being qualified and not having your qualifications valued. Realistically, most candidates do prepare the best they can, especially underrepresented people. They do everything on that quintessential “how to slay coding interviews in O(1) run time” checklist.

For new grads and others looking for entry level positions, no one gives you the benefit of the doubt, even when it is on paper. Your experiences are never quite “good enough” even though you are not demanding to be in a senior position. You have to go through rings of fire just to prove you have the standard skills for a software engineer.

I shit you not, despite my qualifications, I have been asked from men the following nonsense in interviews:

  • Write a mathematical proof justifying why an algorithm you designed for a graph problem is correct.
  • In a specific language, describe how a data structure (array, hash map, etc.) is implemented underneath the hood.
  • Answer a brain teaser that is essentially a combinatorics problem and be told that it is an “excellent” measure of logical problem solving.
  • Regurgitate classic CS algorithms that no one will ever have to design or implement themselves again.
  • Answer questions about operating systems and networking for a position that only has high-level, application-level programming.
  • Answer an online coding challenge that is timed, auto-compiled, auto-marked, and has unclear instructions on what the output type is.
  • Do a take-home coding challenge using an API that no longer supports a feature that the challenge is asking you to build. Furthermore, have the interviewer not believe you despite not doing the challenge himself.

In most cases, I have sighed, attempted to solve the question disgruntled, failed the interview, and was told later that I did not have “enough experience” or “come back when the experience is there”. People seeking entry level positions do not have the luxury to call out bullshit to the their interviewers. Inquiring about team and company culture (including mental health support) is seen as an addenda, something that cuts into precious interview time. Let’s face it, talking about interview grievances with recruiters rarely fixes anything for you or future candidates.

If you manage to jump through the rings of fire like a rabid puppy, you have to plead on your knees for a competitive offer. You are given extremely tight deadlines to accept it. If you go to a school that does not enforce when students can accept offers, then you are screwed. You will have no time to weigh your options and figure out what you deserve. You will be scrambling at the end of your offer period, feeling burnt out and inadequate, and risking unemployment. This stress is exacerbated for underrepresented people, people who need work visas, and people who have to support families. No one prepares you for any of this.

So with all this negativity, how the hell can things be better? Frankly, no one has all of the answers, but we all can offer ideas. Despite the majority of my interviews being inherently flawed, I have had interviews that were fair, educational, and allowed for more creativity.

These are the types of questions I enjoyed answering:

  • Do a take-home problem within a reasonable time frame and come in for an on-site where you do pair programming to optimize a portion of the code.
  • Based on your experiences being interviewed, what are some skills and qualifications that are overlooked?
  • Here is an existing problem our team is facing, let’s try to tackle that problem together from design to implementation.
(photo by me)

Dear tech companies and people involved in technical interviewing,

I understand the necessity of screening a candidate for standard programming skills, but if that is what the majority of your interview process is comprised of, then you are allowing for so many qualified people (people who you would actually want to work with) to slip through the cracks.

If you are going to throw money at diversity causes, throw it at improving and diversifying the interview process too. Think about the expectations you set for junior vs. senior people. Think about hiring people that you can grow into a leader. Have empathy, because we all know how much interviews can damage a person’s self-esteem and reduce the opportunities they can pursue.

Just because you went through hell to get your comfortable and esteemed position, it does not mean everyone deserves that. You can make things better.

Huge thanks to Stephanie Hurlburt, Jonathan Garnaas-Holmes, Vince Rozario, Georgia Andrews, and Pippin Lee for helping with proofreading!