Skip to content

Instantly share code, notes, and snippets.

@fasiha

fasiha/job.md Secret

Last active May 17, 2019 03:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fasiha/dd8e564e70ec70c14b4d46bb6b570d4a to your computer and use it in GitHub Desktop.
Save fasiha/dd8e564e70ec70c14b4d46bb6b570d4a to your computer and use it in GitHub Desktop.

The Job post

Introduction

My job hunt began mid-February 2018 and ended December 2018. I was in an unusual situation—seeking to transition from one industry and technical niche to another—so this missive might not be relevant to you. On the other hand, I kept detailed records, so if it is relevant, hopefully it’ll be useful.

The job hunt in numbers

I sent roughly fifty-five resumés and cover letters.

Thirteen led to at least one human interview.

Five offers, from four companies.

Me in a nutshell

I fell in love with programming at the end of high school. I then fell in love with digital signal processing in mid-undergrad, and studied the intersection of statistics and electrical engineering for five years in graduate school. I had been working as a research engineer in the aero/defense industry for almost seven years when I began my job search. That meant I was good at three things:

  • applied math, probability and statistics, machine learning, linear algebra, Fourier methods, quantitative stuff,
  • numerical programming and scientific computing in C++, CUDA, Python, Julia, and Matlab, and
  • full-stack web programming—this I learned on my own, building and shipping personal projects (eventually work projects too) with JavaScript, TypeScript, Elm, and ClojureScript on the front end; Node.js and Clojure on the backend; and Leveldb, CouchDB/PouchDB, RethinkDB, and SQLite for persistence.

(I’m also pretty good at the usual software carpentry things like Git, shell scripting, Unix administration, etc.)

What I was looking for: more development, less math, and a totally different industry. I’d been interested in finance and trading since reading Fooled By Randomness early in college, which influenced my statistics studies. Throughout 2017 I read Aaron Brown’s books including Poker Face of Wall Street and his columns and Quora answers. These definitely primed me for contemplating a career change.

Brief timeline

The trigger

I almost forgot about this—how foolish, I momentarily believed that I could have gone from “I’m happy with my job” to “let’s spend half a year sending resumes and doing interviews” without some sudden and unexpected event to shake me out of my complacence.

But in late January 2018, an off-hand remark by a long-time friend and Linux guru at Apple led to me applying for a site reliability engineer (SRE, basically, a Linux/devops guru) role. SRE was not one of my strengths, but I was sufficiently enticed by the prospect of working with an old friend that I dove into the application, the phone interviews, and eventually an onsite.

Mid-February 2018

Then, on a fateful day in February, I read Aaron Brown’s description of trading:

Professional trading is a unique activity. It offers top compensation, on the order of rock stars, top athletes, entrepreneurs, bestselling authors and movie stars; without requiring anywhere near the amount of work or luck to succeed. It does require a moderate degree of talent, but nothing like the other fields. So why isn't everyone a hedge fund billionaire? Or at least making a million a month trading in his bathrobe at home? The traditional barrier to entry, for thousands of years, has always been the willingness to try. No education or license or permission is required, to be a professional trader, you just have to start trading, then live off the income. You don't need sophisticated financial markets, neolithic people trade, prisoners trade, everyone trades. But it takes some (not much) skill to get them to trade with you, and to trade enough with enough advantage to you for you to survive on the profit.

After reverberating through my head for a couple of days, and suddenly more open to a major life change thanks to Apple, I literally opened Wikipedia’s article, “List of investment banks”, which has a list of the “largest full-service investment banks”, and began combing those firms’ job sites for random things, Python, Pandas, Haskell, TypeScript, Kdb, CUDA, PostgreSQL…

I sent roughly twenty-five applications in this period. As listed below in The Big List, I got one offer, and was turned down twice after final-stage interviews.

Late May 2018

After three and a half months, I took a break from job hunting. I went on vacation, got used to summer break, and forgot about applications and video conferences and calendar apps.

Early August 2018

Then something humorous and unexpected happened.

Just as Aaron Brown’s Quora post about trading kicked off a months-long frenzy of applying, the last volume of Miki Yoshikawa’s manga Yamada-kun and the Seven Witches, did the same, in early August. In the manga, a successful grownup Yamada is sad that his brilliant girlfriend Urara makes three times his income at a foreign investment bank. I decided I had to be Urara and also make 3x Yamada’s salary at a bank.

This time I went through Barron’s list of top hedge funds, from the bottom up, looking for company websites and job listings.

I sent another twenty-five or so applications during the autumn. I got four offers, and was turned down by a firm after final-stage interviews.

The takeaways

Search methodology

Besides going through lists of major banks and hedge funds, I also used Indeed and Stack Overflow Jobs throughout my job search. As with corporate job boards, I liked using semi-random keyword searches to find interesting listings, e.g., “trading Pandas” or “bank TypeScript”.

Staying organized

I used Google Docs to keep copies of each resume and cover letter I sent. I tweaked each resume to emphasize different things (e.g., numerical Python vs web vs quantitative). I rewrote the bulk of each cover letter.

Many websites ask you to upload a cover letter as a PDF so I used the standard business letter format—wasting several lines for my name and location, their name and location, the date, the salutation, and the closing.

Many other companies asked me to email resumes, so I typed my cover letter as the body of my email. Similarly if they gave a text box to type in a “cover letter”. I also kept track of each of these non-PDF cover letters.

Because job links disappear, and because I’m forgetful, I saved copies of each company, job title, URL, and the actual contents of the job listing, including skills and duties.

If I hadn’t been this organized, I doubt I could have sustained the pace of applications and phone/video calls and onsite interviews.

Bad: HackerRank/Codility

As soon as I began sending applications, firms began asking me do HackerRanks. I did enough to realize it was a waste of my time: I was not good at sterile, idiot savant-style programming puzzles. (If you’re unfamiliar with HackerRank methodology, see my quick summary of its flaws: Gist.) I also much preferred to spend two hours (per exam) of my personal free time (I’m a parent with young children) improving my existing projects, or starting new ones.

I read Jon Evans’ piece asking (1) employers to evaluate applicants’ work samples, and (2) applicants to refuse to do whiteboard code interviews. I was familiar with tptacek’s famous comments on Hacker News about their unique and outstanding approach to tech interviews, see 1 and 2, and as well as their long blog post on the topic.

So I rather than do any more HackerRanks, I asked firms to establish my basic coding chops based on work samples. You can read one of those emails on this Gist. Of the few companies I asked, none relented.

A recent blog post by Glen McCallum titled “Senior Developers are Getting Rejected for Jobs” cites numerous talented developers that are failing these automated initial screeners, but predicts that they will only get more popular, as companies under a deluge of applicants can afford to ignore some good candidates. Glen recommends developers to practice doing HackerRank puzzles now, before they’re looking for work. (That’s another part of their service: HackerRank et al. get paid by companies hiring you, and they let you solve their puzzles on their website for free.)

Glen’s advice is good. But there’s a quote attributed to GK Chesterton,

I owe my success to having listened respectfully to the very best advice, and then going away and doing the exact opposite.

I currently cannot imagine practicing HackerRanks. Ben Franklin’s Gambit explains how humans excel at finding reasons to explain the decision they’ve already made, so I won’t offer justifications.

Great: CoderPad

Only Goldman Sachs asked me to do CoderPads. More firms should.

An interviewer from London called me on the phone and explained that per company policy, initial screening of experienced programmers involves a test administered by a randomly-selected engineer in the firm, who picks a few firm-wide standardized programming puzzles. They and I share the same web-based screen: a text editor on the left and a command shell on the right; they can see what you type or select, and you can see what they type or select. The problems were somewhat similar to HackerRank, but the presence of a human to discuss with, and technical features of the CoderPad environment (including providing several libraries for JavaScript and Python), made the CoderPad screenings enjoyable and interesting.

I foresee firms switching from HackerRank to asking their engineers to screen candidates, and I expect CoderPad to become a leader for that. Other approaches, like typing code into a Google Doc, or recording a Skype session, are trying to be CoderPad.

Freaking awesome: live coding a real problem with a full developer environment

I had two interviews where a major component was live coding, and I loved this!

  • At one, I’m handed a laptop and a piece of paper. The paper has admin credentials to both the laptop and a Linux virtual machine running on the laptop, as well as instructions for a realistic REST server and client, in stages of increasing complexity. No restrictions: I use search engines, pip-install some dependencies that help, yum install your favorite text editor. The interviewer is also in the room, doing their own work, and I check in with them periodically.
  • At another, I have a desktop and another piece of paper with login credentials to a remote Linux server as well as instructions on a data analysis task. Again, full internet access, a realistic problem and dataset, and plenty of time.

In both cases I had between 2.5 and 3 hours to complete all stages. I left these interviews with a lot of positive feelings towards these companies who invested the time to make a realistic coding exercise.

Very cool: remote interviewing for remote teams

I had the good fortune to complete final-stage interviews for two remote teams, one at Elastic and one at Stack Overflow. Both consisted of six video interviews, almost all of them an hour long, which add up to a pretty big outlay of time, especially if you include coming home half-hour early to change into a nice shirt and prepare your workstation.

Both these firms used the first interview as an initial screener. Stack Overflow asked straightforward FizzBuzz-type questions, but Elastic chose to establish credentials in the domain they were shooting for—geographic information processing—and the very first question was, “what is longitude and latitude?” 💋👌!

There’s a lot to praise in these companies’ well-thought-out interview processes. Both used the first three interviews to establish technical skill. Both used manager and CEO/CTO interviews well.

Be sensible

This is a more personal takeaway.

I knew I was a flamboyant interviewee—I freely expressed my happiness at talking to a fellow tech nerd, I asked them to indulge my curiosity about their work and their team, I enjoyed asking edgy questions (“does your role in making the core platform used by several other teams lead to friction?”), I never studied. (That is, I never studied in the sense of preparing for a test; I usually read a lot about the company itself.)

When a family member gently asked me to consider whether I should stop using interviewers as therapists or confessors, I knew they were right. I got better at shortening my tangents, being more professional and less effusive, being more tactful (no more “your team looks very interesting, but so do these five other teams in your company, I’d love to work for them too”).

Being aware of this spectrum, and dialing your memorableness up or down as the situation demands, may be helpful to you.

Random aside to the one signal processing programmer reading this

Numerical C++ is different than real C++. And Bjarne explains how even real C++ is actually four different C++’s: it’s the C language, the OOP language, the language that uses STL, and the template metaprogramming language.

The big list

I had this list lying around, so hopefully including it won’t hurt. It’s the role(s) at which firm, and the outcome.

  1. Site reliability engineer, at Apple: phone interview, onsite interview, they declined
  2. Client-facing developer, fixed income desk strats, and quantiative strats roles, at Morgan Stanley: no response
  3. Functional programming specialist, at Credit Suisse Labs: no response
  4. Internal reference data engineer, AQR (Aaron Brown’s old firm): I failed the HackerRank
  5. Software engineer at Smarkets (a betting site): one HR interview, then failed HackerRank
  6. Risk technology software engineer, at DRW: no response
  7. Server software developer, at WhatsApp (hey, I want to learn Erlang): no response
  8. Kdb+ developer, at Schonfeld: no response (no surprise, I’ve barely puttered with J)
  9. Junior quantitative trader, at Sun Trading: no response
  10. Enterprise reference data developer, devops engineer roles, and strats software engineer roles, at Goldman Sachs: this led to a CoderPad (a phone+web-based coding session), an onsite interview, and a video conference, then they declined
  11. Quant infrastructure software developer, at Bloomberg: no response
  12. Functional programming generalist, at Adobe: no response
  13. Data analysis quantitative developer, at Akuna: I declined to do HackerRank
  14. Kibana GIS frontend engineer, at Elastic: six video interviews including final CTO interview, they declined (with much kindness and feedback)
  15. Python quantitative engineer, at JPMorgan Chase: several video interviews, an offer, I declined (it wasn’t you it was me)
  16. Backend engineer, at Robinhood: no response
  17. Quantitative developer, at Aspect: no response
  18. Software engineer, at Numeric: no response
  19. Regulatory data scientist, at CME: no response
  20. Programmer, at Cantab: no response
  21. Software engineer, at Bridgewater: a manager interview, a technical phone interview, they declined
  22. Backend engineer, Indeed Tokyo: their email response asking for a chat was misclassified as spam 🤬
  23. Kensho: no response
  • Then I took a couple of months break
  1. Python backend engineer for pricing and forecasting, at Zalando: I declined to do their Codility (like HackerRank) puzzle
  2. Advanced Python engineer, at Research Affiliates: no response
  3. Data engineer, at IEX: no response
  4. Full-stack software engineer, at Edgestream (they had the most memorable job posting, “Gentoo” lol): one technical video interview, and a HackerRank they assured me would be interesting (it was), then they declined
  5. Quantitative developer, Circular Capital: one technical phone interview, they declined
  6. Hudson River Trading: no response
  7. Quantitative developer, at UBS: no response
  8. Quantitative Python developer, at BP (I was so excited to find this because they mentioned both Pandas and TypeScript!): no response
  9. Full-stack developer, at Chatham: no response
  10. Machine learning JavaScript engineer, at Elastic: they filled the role right after I applied
  11. SecOps frontend engineer, Elastic: they fast-tracked me after the GIS interview, two video interviews, they declined
  12. Geospatial software engineering, at Planet (they had a cool blog post on using satellite imagery to trade agricultural futures): one HR interview, they declined
  13. Software engineer, at Volant: no response
  14. Software application developer, at Aretec: no response
  15. Software developer, at AIG: no response
  16. Jane St: no response
  17. Full-stack developer, at Stack Overflow: six interviews including final CEO interview, they declined (I still wonder whether they confused me for someone else at the last minute)
  18. Goldman Sachs: two CoderPads (phone+web coding session), video conference, onsite, offer
  19. Tooling and data visualization engineer, at TGS: no response
  20. Quantitative researcher, at Marquette Partners: no response
  21. Quanitative developer, and JavaScript developer roles at JPMorgan Chase: no response
  22. Works and iBooks engineering roles, at Apple: no response
  23. Quantitative developer, at Koch Supply and Trading: no response
  24. Quantitative developer, at Teza: no response
  25. Software engineer, at Quantex: no response
  26. Scientific programmer, at SIG: technical phone interview, onsite interview, offer from another team as a front-end developer
  27. Core infrastructure engineer and front-end engineer roles, White Bay Group: technical phone interview, two onsite interviews with different teams, two offers
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment