On the (job) road again: Of data and progress
I talk a lot about jobs and careers and such. For the past few weeks, I've talked about how I ended up moving on from a great opportunity, and how I got to my next one, and in the past I've mentioned gathering data on the job search.
Well, this time, I actually have a decent data set to analyze. I'm going to show you how I collected and analyzed the data. If you're like me, you can even use this on your next job search to see how things are going. Or not!
Each entry in my spreadsheet contained a row describing a 'point of contact' as follows:
- Date and time
- Company name
- Channel (e.g. Email, LinkedIn, StackOverflow Careers)
- Type (e.g. Incoming vs Outgoing)
- Status (e.g. Contacted, Interview, Scheduled, Offer)
I definitely made some mistakes in collecting the data though. For starters, I didn't record the time of the point of contact for the first week or so, leaving me with only day granularity.
Also, the flow through the stages is a little unclear. This is what it generally looks like (with all the various states):
|Contacted||In Progress, Scheduled, Interview, Offer, No Opportunity|
|In Progress||Scheduled, Interview, Offer, No Opportunity|
|Scheduled||Interview, Offer, No Opportunity|
|Interview||Offer, Rejected, No Opportunity|
Yes, it probably would be best to show this as some sort of finite state machine diagram, but its not a complicated process. Actually, as I write this, it is a complicated process, and writing out a finite state machine might have actually made things clearer. The process also isn't great because the interview state covers multiple interviews.
Sometimes, I miscategorized things, expecially when a process dropped off. It would have been good to have a state that indicates they stopped getting back to me (as "No Opportunity" reflects a lack of my interest, and "Rejected" is unclear).
As a convention, whenever I have an interview, or a call, I count that as incoming (even though it is incoming and outgoing).
Not much else that I can think of regarding describing the data. I kept everything in a google spreadsheet, exported as CSV, then used a friend's tool, textql, to put the data in a sqlite database. Getting the database setup is as easy as this:
Given the data I had, I wanted to answer a few questions about my job search:
- How often did I make it to each 'stage' of an offer process?
- How long did it take to progress between 'stages' of the offer process?
- In particular, how long (duration, or points of contact) did it take to go from initial contact to the end of the process?
- On average, how long did it take to go from first contact to first response?
- What was the overall average 'first response' rate?
- What was the average response time for each company?
- What companies were 'most disappointing' (i.e. took the longest time before rejecting)?
- Either in terms of duration, or points of contact
- What were the most common reasons for rejection (i.e. what are my areas of weakness)?
- What was the most successful means of reaching out, and how did those methods perform?
- How did recruiters fare?
With that being said, lets dive into the questions!
How do I do?
|No Opportunity||22 / 31 (70.97%)|
|Contacted||26 / 31 (83.87%)|
|In Progress||19 / 31 (61.29%)|
|Scheduled||15 / 31 (48.39%)|
|Interview||12 / 31 (38.71%)|
|Rejected||5 / 31 (16.13%)|
|Offer||5 / 31 (16.13%)|
|Declined||4 / 31 (12.90%)|
One thing that sticks out is that Contacted is less than the total number of companies. This is because there were five companies that reached out to me instead of the other way around.
Otherwise, I think the key takeaways here are:
- I get to an inteview about 38% of the time
- Of times that I interview, I get an offer about 41% (5 / 12) of the time
- Data quality is a bit of an issue (since Scheduled should always lead to Interview, and not all Offers came from Interviews necessarily)
Overall, that seems pretty successful!
How long to progress?
|Stage||Average Duration||Max Duration|
As it turns out, due to the non-linear nature of the interview process, it's not as straightforward to calculate the time to reach each stage. I also thought it would make sense to calculate how much time was spent in each stage, but apparently that gives a weird, skewed number (since you are summing over all companies, and you are pursuing multiple companies at the same time).
However we can calculate the maximum and averages. This yields some neat results (from the table above):
- An offer, from start to finish, takes about 17 days
- First contact to interview takes a calendar week
- It takes between a week and two weeks to hear back about an interview
- People are pretty good about responding within a few days (based on scheduled, in progress, and contacted data)
- Generally, I don't take a long time to decide on an offer
How do they respond?
|Company||First Response Time (days)|
|TribeHR / Netsuite||1.00|
Again, lending to data quality issues, it looks like some of these companies got back to me really quickly (under a day) but it is most likely because either they reached out to me, or because something else happened, such as I decided to reject the opportunity.
Unfortunately, that doesn't tell me a lot about how long it typically takes to get in touch. I had to do a separate query to figure that out:
|Company||Average response time (days)|
|TribeHR / Netsuite||2.64460784314639|
When we look at this data, the picture is a bit clearer, namely, that most companies get back to you within a few days. Demeure is a bit skewed on this list because I received an offer early, but didn't act on it till much later in the month.
Most disappointing companies
|Company||Start to finish (days)||Points of Contact|
I don't like to pick on companies, and I'd like to think that I'm not picking on these companies, but I was curious which companies took the most effort to yield the least. Unfortunately, that will highlight companies where there was a long process.
Etsy is a bit of an outlier on this list as I started interviewing for one position, then pivoted about halfway through. Even if you cut the time in half, it still puts it in the top three.
What can we take away from this? Well, some companies have a longer process to hire. Unsurprisingly, larger companies take a longer time to decide on candidates.
Why did things not work out?
I won't post the raw data here, because my notes are personal, nor will I post the companies. These are some approximations of my notes from companies that either rejected me, there was no opportunity, or I declined:
- "I did not hear back from the company, so I am marking this as a dead lead"
- "I accepted an offer with another company"
- "I thought that the interview went well. I had to be prompted in a few areas, but generally things were positive."
- "Company is holding off on hiring for now"
- "They were hiring remote, but the position was filled"
- "They will only be proceeding with local candidates"
- "They are not interested in continuing; no details were given"
- "They are not interested in having remote developers"
- "They say that I am too junior, couldn't provide examples of my work, and asked for too much compensation"
- "I talked too much in the context of myself as opposed to talking about how I worked as part of a team"
What can I take away from this? Not a lot, actually. The majority of the notes I have indicate that things were out of my control, or I wasn't given any feedback that I can act on. The few that did, the latter points, contradict the feedback I have been given by past managers and teammates.
Competition: Channel versus channel
|Application||No Opportunity||1 / 1 (100%)|
|Application||Contacted||1 / 1 (100%)|
|Application||Interview||1 / 1 (100%)|
|Application||Scheduled||1 / 1 (100%)|
|Stackoverflow Careers||No Opportunity||2 / 2 (50%)|
|Stackoverflow Careers||Contacted||1 / 2 (50%)|
|Stackoverflow Careers||In Progress||1 / 2 (50%)|
|Stackoverflow Careers||Scheduled||1 / 2 (50%)|
|Stackoverflow Careers||Interview||1 / 2 (50%)|
|No Opportunity||1 / 1 (100%)|
|Contacted||1 / 1 (100%)|
|In Progress||1 / 1 (100%)|
|Scheduled||1 / 1 (100%)|
|No Opportunity||18 / 27 (66.6%)|
|Contacted||23 / 27 (85.2%)|
|In Progress||17 / 27 (63.0%)|
|Scheduled||12 / 27 (44.4%)|
|Interview||10 / 27 (37.0%)|
|Rejected||5 / 27 (18.5%)|
|Offer||5 / 27 (18.5%)|
|Declined||4 / 27 (14.8%)|
I fudged the above a bit from the SQL query (because I am not an SQL wizard) to get the relative totals. Unfortunately, there is not a lot of data to work with, so its hard to draw meaningful conclusions.
Me versus recruiters
|Recruiter||No Opportunity||9 / 15 (60%)|
|Me||No Opportunity||13 / 16 (81.3%)|
|Recruiter||Contacted||12 / 15 (80%)|
|Me||Contacted||14 / 16 (87.5%)|
|Recruiter||In Progress||9 / 15 (60%)|
|Me||In Progress||10 / 16 (62.5%)|
|Recruiter||Scheduled||5 / 15 (33.3%)|
|Me||Scheduled||10 / 16 (62.5%)|
|Recruiter||Interview||4 / 15 (26.7%)|
|Me||Interview||8 / 16 (50%)|
|Recruiter||Rejected||3 / 15 (20%)|
|Me||Rejected||2 / 16 (12.5%)|
|Recruiter||Offer||2 / 15 (13.3%)|
|Me||Offer||3 / 16 (18.8%)|
|Recruiter||Declined||2 / 15 (13.3%)|
|Me||Declined||2 / 16 (12.5%)|
Since I didn't declare a "source" for a job, this is a bit trickier. I didn't have a lot of recruiter assistance, so to answer this question I just separated the recruiter responses from the first question. There were about six "recruiters".
I didn't expect the results to turn out like this. Based on this data:
- Recruiters had a better chance of finding good opportunities (comparing No Opportunity entries). My guess is that I take a bit more of a shotgun approach, or recruiters don't bother with opportunities that don't meet my criteria.
- I was more likely to reach an interview on my own than with a recruiter (comparing Interview or Scheduled entries)
- Odds of being offered were pretty similar between the two. This makes sense, as that is more about my own performance than anything else.
Wrapping it up
I learned a lot from this experience. When I started doing the data analysis initially, I was a bit stumped and thought that programming would be easier... it is not. This is exactly what databases are designed for: relational algebra.
Next time I do this, and I don't plan on doing it for a long time, I will probably want to make the flow between states clearer, record all the date information initially, and probably include some additional states to make transitions clearer. I feel like this whole process of collecting data, and the tracking and analysis of it, could be used in some sort of lead management system, but I'm not interested in exploring that at the moment.