I've done a whole lot of engineer recruiting and interviewing (while working as a very senior-level IC) for a number of big tech companies, including a large Seattle-based one.
It's weirdly bimodal - if you've got a "standard" resume and credentials, your inbox is already filled with recruiters spamming you. If you have a different history (and the awesome but unusual position of founder/enterpreneur is an example), the standard recruiters won't know how to deal with you, and the senior talent recruiters (those seeking Staff and Principal engineers) won't let you into their filters without some effort.
Everyone will assume you like doing what you've been doing - so somewhat hardware/firmware focused, which is more niche than you may actually be looking for. Don't put too much thought into your resume, but do be clear in the intro paragraph what your range of desired domains looks like, and highlight your non-tech-keyword strengths (success in product solving, technical product direction, etc.).
After that, hit up LinkedIn pretty hard (OMG it's an embarrassing site, but it is where a whole lot of hiring happens) - it should be easy to connect with recruiters at big and small companies, and just ask if they've got a few minutes to talk about what their company/team does and how you might fit. Some of them will give much better feedback before a formal application and interview, some will just say "here's the link to apply", but you probably won't be ghosted very often.
Also, browse the big company job sites (almost always jobs.whateversite.com) to see if you can distinguish at all among their thousands of twisty little job postings, all alike. Pick 1-3 (at random if necessary), and apply. Your goal here is to just get to an interview, just to see what it's like and practice. If you get an offer, and the salary/title is anywhere close to reasonable, take it (it's easier to look for a job when you have one), but don't sweat that until you've done a number of interviews and talked to a few recruiters to hear what they claim their company is like.
Tactically, for a self-taught programmer (which describes me, too, but it was before software ate the world, so a different set of challenges and expectations), focus on your speed and smoothness of understanding and thinking through options to approach the leetcode/hackerrank excercises, not on quantity (edit: literally say out loud what you're considering before you start, and verbally identify what seems to be the "hard part" of the problem, and online include some inline comments about approach and any options considered and not taken. pretend you're pair-programming with an invisible friend who CAN'T read your mind). If the medium ones are generally easy for you, and you can tackle some hard ones without spoilers, you're fine. Be prepared to talk about how you ensure that code is maintainable, tested, well-factored and why - that's a topic they'll look for in interviews if you haven't worked on big multi-developer products before.
First question - are you any good at it? Lots of people wants jobs in software (it pays well) but aren't much good at it. (Google "fizzbuzz test".)
Think about how you can show potential employers you're good at it. You have a portfolio - that's good. Can you show off some source code you're proud of? Have you contributed to open-source projects? (If so, point at your repositories.)
Assuming you're good at it, and don't have some killer personality problem (you're posting on LessWrong, after all), you're already 2/3 of the way there.
The main red flag for many potential employers is "self-taught". That's both good (it shows you can learn on your own) and potentially bad (you may have terrible habits or gaping holes in your knowledge).
If you have written and shipped largish-scale working code, probably whatever bad habits you have aren't too bad, or you'd have gotten tangled in your own shoelaces.
If I had an opening right now, I'd consider hiring you; solely because I've seen your nym on LessWrong, don't associate it with "stupid posts", and people on LessWrong tend to be very bright.
It has been 30 years since I got a software engineering job (I do other things now but still code for personal projects). Back then nobody asked for Leetcode problems; I've seen them and I think they don't reflect real-world problems and doing well on them relies too much on working well under a microscope - not reflective of the real world. But FWIW I have no degree at all, yet had a very successful software engineering career - most of my colleagues assumed I had a PhD (as most of them did).
I'm also a self-taught programmer, and have never worked in the field (I spent ten years as a piano teacher, and now am earning an MS degree in wet lab biomedical engineering). I'm curious -- I looked at the fizz buzz test, and it says it filters out the "99.5%" of programming applicants who "can't program their way out of a wet paper bag."
I was expecting something challenging, but it's a ludicrously simple problem. Is the "99.5%" figure massively hyperbolic, or are a pretty large fraction of programming applicants really that incompetent? It would be nice to gauge the competition if I ever wanted to get a job in the area.
I would recommend:
For the resume, I'd recommend hiring someone to help, since you can get direct feedback from people with recruiting/hiring experience in the field. I found the resume review service from levels.fyi to be useful, but I didn't really shop around and I'm sure there's plenty of other good ones. The important thing here is that you want to talk to someone who knows what a software engineer resume should look like.
Note that even if your resume isn't very good, if you have someone who can vouch for you at a company, that will usually get you past the initial resume filter. You'll still need to pass the rest of the interviews but it can be really helpful with big companies, and at smaller companies a reference might lower the bar for the rest of the interview process too.
For the interviewing/feedback piece, I've found that the biggest companies are generally pretty unhelpful (hope you like form rejection letters telling you to consider going to school or something), but I'd say most of the companies I've applied at that aren't huge will give some sort of feedback. Sometimes it's vague but still somewhat useful ("we don't think your experience is a good match for this job") and sometimes it's surprisingly specific (Stripe gave me feedback on each of my interviews seperately, and told me exactly why they didn't hire me).
I haven't talked about leetcode questions much since if you've already done dozens of them, it's probably not the weak point for you anyway. One thing to do here is that if you can technically do the questions, it's worth also putting in some effort to do them as nicely as possible (simple code, non-wasteful performance, good variable/function names, etc.). Pretty much any professional software engineer should be able to review this for you since it's the same as reviewing a pull request, and you could try the Code Review Stack Exchange too (although I think the average Stack Exchange users is relatively junior and they sometimes give strange advice).
Here's my general advice to you based on what I know.
I'd encourage you to focus on applying to jobs at earlier stage startups (think B-stage or earlier). They tend to have more tolerance for non-traditional backgrounds and will like that you have startup experience. Plus based on what I know about you it will be a better culture fit. As startups hit C-stage and later they start to become "big companies" with middle management and highly specialized roles and thus prize legibility. Their general way of dealing with someone with a non-traditional background is to either not hire them or underlevel them because they don't trust they can do the job (which, maybe they can't because although they have the basic skills needed they might not have the skills of operating in a large org which are necessary to get things done at such places once you get to more senior levels).
If you can get recruiters to email you those will be your best leeds. Otherwise, just reach out. I've personally found great jobs using AngelList.
As for the interviews, seems like you should be fine on coding and system design. Behavior interviews are trying to figure out if you're an asshole and if you can work as part of a team. If you can do those things you'll probably be fine. You might screw up the first few times, though, so be prepared to have to grind some experience on interviews because you figure out how to answer. There is some art to answering how interviewers expect, but I don't know an easy way to explain that. There are courses you can take, though, that will teach you this stuff. Might be worth it if you can't afford to grind interview experience the natural way.
When I was trying to break into a new field, I targeted applying for jobs I was certain would be bad, in places with high turnover. Try staffing agencies, eventually a recruiter will slap you against an interview with someone desperate to hire 'someone' for a role they can be sure you wouldn't screw up too badly.
There, that's your first job, do it for 6mo - 1 year, now your resume looks normal and you can apply for others.
Also, you may or may not want to consider changing your resume job title for your startups to something like 'Senior Engineer'. Technically not a lie--they can call the former CEO and ask him about your role.
What is a good way to find staffing agencies?
Also, you may or may not want to consider changing your resume job title for your startups to something like 'Senior Engineer'.
That's clever.
I did something similar once: after having a few suspicious years on my resume, I took a shitty job and 1 year later started interviewing seriously. It seemed to me that the one year made a big difference (or maybe just the market changed, I will never know for certain).
The fact that someone else hired you, and you survived the probationary period, is way more costly signal than e.g. giving you a homework at a job interview.
I was in a similar-ish situation and can empathize. First I'll tell my story, and then offer some thoughts. The story is long and not really an answer to your question, but I figure that concrete experiences like this are helpful to hear about as a complement to more general stuff.
Story
https://www.linkedin.com/in/adam-zerner-55564490/
I taught myself to code when I was a sophomore in college. I wanted to start startups. It was a big struggle. I learned some HTML, CSS, JS and Rails. I was terrible. I graduated in 2013.
Starting junior year I started this startup. It totally flopped. I worked on it a bit after college. After a few months I decided to quit. Then I figured I'd get a job as a programmer. I need to learn more first. But I was struggling with it. Eventually I went to a coding bootcamp called Fullstack Academy. That got me over a hump.
Getting a job after Fullstack wasn't too hard actually. I applied to tons of places. I got a job after about a month IIRC. There were a few other places that I was late in the interview process with too. OTOH, I don't think that this is representative. The actual rates of getting a job within 90 days of graduating are something like 30-40%. I complained about this on HN years ago because they told us all that those rates are in the upper 90s.
I made $60k/year at that company. It was in Gainesville, FL though. It was a terrible company and I basically forced my way out after a year (rocked the boat and got fired) and got a job at a startup in LA called Clutter. I remember doing pretty good with the job search. I had offers from Fitbit and Zappos as well. Clutter offered me $80k and I negotiated up to $95k. Zappos was $100k. Fitbit was something like $75k + various benefits IIRC. I applied to 81 places (Google Doc).
Clutter sucked too though. It was one of those companies that wants you to work for 12 hours a day, plus various other unhealthy cultural stuff. Ie. they told us to go write good GlassDoor reviews and that they'd be checking to see if we did. I got fired after about five months after they decided to "double down on people who are truly committed to the company" or something.
At that point I was feeling burnt out. And I had about $80k saved up. So I took a year off to self-study computer science stuff. I figured it was worth investing in myself.
Then I ended up spending three years working on a startup called Premium Poker Tools. That also flopped (I make about $200/month on it).
Then I went to get a job as a programmer. It was rough! A lot rougher than the previous times I applied. I figured that I had spent that year learning computer science, learned so much working on Premium Poker Tools, have about six years of experience at that point, and so finding a job wouldn't be very hard given that I'm a good amount more skilled than I had been. Nope. That didn't happen.
I applied to about 165 places and ended up with two offers (Google Doc). I forget how long it took. Something like 4-6 months I think. Whereas my first job search was one month and second one maybe 1-2 months.
Anyway, this one company that made me an offer, I remember talking to the engineering manager. He made an offer as a junior engineer for $80k/year IIRC saying I had 1-2 years of experience. That didn't count the 1 year of self-study + 3 years working on a startup. To him, that didn't count.
The other company Elite HRV offered me $80k too I think + stock options, but I negotiated to get $100k with no stock options. It was a contract-to-hire role, but the CEO Jason said that that's basically a formality. That they just wanted to make sure I can code and he's very confident (he might have said like 90%+) I'll become full time after the three month contract. He also was very clear that money wouldn't be a reason I don't get kept on. I drilled him on this, and he went through their budget with me, explaining that they 100% have budget for 12 months, and really it's more like 24-36 months. But then I along with the other people who were contract-to-hire didn't get the "hire" part because of budget reasons.
But the angel investors for Elite HRV contacted me and wanted me to work on a freelance project for them. So I worked on that while also doing LeetCode stuff to try to get a job at Google (seven months). The freelancing was fine, until it wasn't. We agreed on a fixed price to get an MVP out. Scope creep happened. I was too passive and I let it happen. Similar with Google. I studied hard for maybe four months. I did well on the interviews. The first technical interviewer recommended me for level 4, second one level 3, behavioral level 4, and then I think 2-3 other technical interviewers recommended me as a close call between level 3 and level 4. I was open to level 3 or level 4, so I figured I'd get an offer, it just depends if it'll be level 3 or 4. But I didn't get an offer at all. The recruiter I spoke with seemed confused as well but assured me that they are in fact hiring for and were open to me being level 3. They just decided to not offer me a job for even level 3.
So I started applying elsewhere again. This time was even harder to find a job. You'd think that someone with seven years of experience and inches from getting a job at Google would have an easy enough time at finding a job somewhere, say, a rung or two down from Google, but nope. I didn't keep a Google Doc this time, but I'm pretty sure I applied to a little over 200 places and it took maybe six months to get a job. I was anxious about it and worried that I was seen as damaged goods. I ended up with three offers. One was for like $40k at a sketchy place that doesn't really count. Another was for a less sketchy but still sketchy place.
The third, Springbig, which I accepted, was shitty, but the best I could do. It paid $95k/year which isn't the worst, but the culture was the worst. Hostile, aggressive, cursing. So after a few months I realized that I want to leave. I wanted to stay there at least a year though, to make my resume look a little less bad.
But I had a friend who worked at Facebook who got me an interview there. That seemed worth it even if it meant staying at Springbig for less than a year. I studied some more Leetcode stuff. Something similar to what happened at Google happened though. The recruiter said he got good feedback on my interviews. And I took notes on how I did on those interviews and ran through it with that friend of mine who worked there. He had a lot of experience running interviews and said it sounded like I did very well. But I didn't get an offer, nor any explanation.
So, I stuck it out at Springbig until the year mark even though I hated it. I was going to stay on a little longer actually, but there was a straw that broke the camels back moment, so I started applying elsewhere. This really blew my mind. Applying had been getting harder and harder and harder throughout my career. But this time it was super easy! I had a job offer in less than a week! And tons of other promising interviews too. Wow! I still don't understand this.
But then that job turned out to suck as well. Unhealthy and unprofessional work environment. So again, I left. And again, the job search process was pretty smooth. I was selective in the places I applied to, instead of spam-applying like I had in the past. Maybe I applied to 15 places or so. I still got a good amount of interviews and ended up with two offers within a month or so. And I took an offer from Indeed. Which has been incredible. It's a great place to work. And it's made me realize that I'm not crazy. That the cursing and hostility I experienced elsewhere really isn't normal or ok.
And that brings us to the present day. I've been at Indeed for a little over four months now.
Thoughts
Based off of my own experience and the people I've talked to, it seems to me that years of experience is the big thing. Your impressiveness as a candidate is pretty proportionate to how many years of experience you have.
People also care a good amount about which technologies you've used. Ie. if you've used Vue instead of React, people might take a pass on you. But that's a YMMV type of thing. Some don't really care about it.
I don't have a lot of data points on how non-traditional career paths like my own where there's a startup in the middle influence things. Really, I just have myself as a data point, and it didn't go very well for me. OTOH my sense of what conventional wisdom is for a community like Hacker News, it'd be that starting a startup and failing is ok and won't hurt your career. Maybe that only applies if you are sufficiently impressive though. Like if you have a CS degree from MIT, work for Google for four years, go on to start and fail at a startup, and then go apply for jobs after that, yeah, you'll be fine. That's an extreme example of course. I'm not sure where the threshold of impressiveness is.
Another thought I have is that spam-applying is often a good idea. On places like LinkedIn with "Easy Apply" functionality, you can often apply to a job in less than 120 seconds. Which is often less time it takes to read through the description and think about whether or not it makes sense for you to apply. But even if it takes 10 minutes, I'd bet that applying to 6 places in one hour with shotty applications would be better than applying to one place in one hour with a good application. So I'd recommend quantity over quality. Except for the handful of companies you really like. For those handful I'd recommend taking your time and crafting a good application.
If you're a good programmer and you interview well (i.e. you think fast and sound sharp) you will likely have little difficulty, so don't sweat the details. There's a huge volume of "how to get hired as a programmer" prescriptive advice, and it's mostly aimed at newbies who have median or below-median skill, because those are the majority of people looking for jobs. If you know yourself to be in the top percentiles of this stuff, it doesn't apply. The fundamental truth of this labor market is that demand greatly exceeds supply.
I suggest doing a couple practice interviews with someone in your network. You can try https://interviewing.io/ if you don't have anyone handy, although I am sure a bunch of people reading this post would be willing to practice interview you for free. I would do it. The environment of a typical real-time interview is very different from the "I am doing Leetcode problems on my computer" environment, so I think it's much better practice.
The most common problem I observe with interviewees is that they are very nervous, so figure out whatever will make you not very nervous and do that.
I recommend hitting up your network to find companies that you think you would enjoy working at. This also means you will probably have someone who can help you get past the screening stage, so your resume will matter even less. If you don't have any good candidate companies in your pocket, I would consult the recent Hacker News "who's hiring" threads; since you are a good writer with credible merits, corresponding directly with the poster there might similarly bypass any kind of "bozo recruiter screening out illegible resumes" filter.
This is a bit left field but I just talked to people who are doing biofeedback to help people achieve the Jhanas. They have Leigh Brasington advising and are quite serious. The founder is an engineer but needs help. If you're interested I'm John dot v dot McDonnell at Gmail.
I don't have strong preferences about what the company does. I mostly care about working with a team that has a good culture.
This is pretty subjective, and I would find it helpful to know what sort of culture you're looking for.
That's a fair question, but beware filtering too hard until you've experienced a few different cultures to find the shape of the probabilistic multidimensional fields that we call "culture".
To paraphrase a common truth - all company cultures are bad, some are tolerable for some purposes.
The Manager Tools Interview Series would teach you everything you need to know about putting together a résumé, answering behavioural questions etc.: https://www.manager-tools.com/products/interview-series I used it for my last job search and it worked very well. Their guidance is based on a lot of data and experience, also on the other side (the one doing the hiring).
Wait. As . . . a software developer? Not as a Data Scientist, even though you have experience with ML?
At least as far as I know, Data work is better paid, uses more LessWrong-ish skills, and (crucially) is more of a frontier situation: Software ate the world a while ago, but Data is still chewing, so there's been much less time for credentialism to seep in.
(I'm from the UK, and it's been a few years since I did a 'normal' jobhunt, so I could be wrong about this as it applies today and on your side of the Atlantic. But even taking that into account, I notice I'm still surprised.)
I would love to be a Data Scientist even more than a software developer but I even more confused about how to find a job as a Data Scientist compared to working as a software developer.
But you make a good point. Maybe I should be aiming to become a Machine Learning Engineer instead.
I am currently looking for work as a software developer. The problem is…I don't really know how to do so. I have run a startup for most of my adult life. So while I have lots of experience writing software and shipping products, I don't know how to get a foot in the door. I don't know how to answer behavioral questions. I don't know how to write a good resume.
About me:
If you know how to get a job in the software industry I would love to talk to you via video call (or I can buy you lunch if you live in Seattle). I respond to both Less Wrong private messages and to email. Just send me the date and time that works best for you (along with your timezone).
PS: Thank you everyone who replied to my previous Want to Hire Me? post. You helped me figure out that what I really want right now is a regular job.