-
A Heck of a Wild Bug Chase
1 August, 2024I just tracked down a bug with more twists, turns, and interconnecting weirdness than I’ve seen in years - maybe ever. I feel like I’m going to be telling the story of Olympic-level Bug-Chase-2024 for years, and I feel compelled to write about it. To be clear, the following is a streamlined retelling. I’m omitting the twists, turns and dead-ends that abounded.
Also, now is a good time to mention that I just coincidentally got laid off in a “Reduction in Force”, want to hire me?!
First, some context. (Commence handwaving) Some time ago, our tech team received a request to create a way of showcasing graduates of our workforce training program on a job board. Because this was scheduled for only a pilot and we were already committed to a lot of other work, I recommended a relatively simple NextJs application thrown up on Vercel and secured by Auth0. As we were outside of our AWS infrastructure and this was meant to be just for a small-scale pilot, I didn’t want to deal with databases. Again, keeping things simple, I recommended simply storing all user/employer/job data in json files and if we ever needed to make an update, we’d simply update the file. The only persisted state on top of this was a favoriting system where jobs/employers/users could “star” each other. This was simply persisted in browser localStorage but - as we wanted to explore some data-driven matchmaking - we wanted access to who starred whom as well. So, my solution was a simple AWS Lambda behind an Api Gateway in our infrastructure that would dump results into a Google Sheet. The NextJS backend could hit it whenever someone was starred, and we’d have some basic data we could do live analysis on directly in the sheet. It worked quite well!
Well, now the project is moving past “pilot phase” and into proper-project status. Heeding my many warnings and caveats from before, the first task for the small team working on this is to move the application to our AWS infrastructure. In our infrastructure we are putting it into a container which we are running on Kubernetes in EKS. It’s a lot, but I’ve already got Terraform templates for all of it so difficulty level: medium, the team gets it done.
And here an odd issue comes up. While the favoriting behavior works perfectly well locally, when deployed into our testing Kubernetes cluster, the UI sees a 401 error. Logging into the container, it’s not the API Gateway or Lambda; we can
curl
these just fine. We manage to recreate the issue when running the Docker container locally, confirming that a difference in network configuration is not in fact the culprit.
-
Get That Coding Job
22 July, 2023Preface
So far during my career, I’ve designed software developer hiring processes at three different companies. I’ve personally conducted a couple hundred interviews, I’ve run teams that have conducted thousands, I’ve written staffing software, and I’ve spoken on hiring at conferences. I have also mentored people for fifteen years, am involved in several online organizations based around helping people progress or move into tech, and while CTO at Operation Spark bootcamp, I spent months helping run the job hunt phase of the program. In one form or another, I think about this stuff every day, and people ask me for job hunt advice a lot.
I’ve been meaning to write this article for a long time and I’ve got 6000 words of notes alone; so before we launch into this tome, let me just say that I very much acknowledge that my own experience is not that of someone trying to break into the industry. At this point, its not even similar to most senior developers. In addition, even expert advice on an activity which is performed relatively infrequently and with long delays for feedback, is precisely the sort flagged by researchers as being not much better than random.
Yet people keep asking me for advice on job hunt. And I do think that over the years I have developed a set of mostly common sense things that I tell people, and they do seem to find helpful.
We’re going to cover the mental model of what I’m arguing for this post, then in subsequent ones we’ll go into thoughts on resumes, interviewing, and job hunt strategy. There’s a lot and there’s a limit to how much you should listen to me, but you probably shouldn’t just have AI summarize it. I tried to have Claude write it, it did not turn out well.
Mindset
Let’s not be shy about this, Job hunt is a Sisyphean task.
Except of course it is not. Sisyphus was the ancient Greek king damned to eternally roll a boulder uphill. A thing can only be Sisyphean if it is impossible to attain your goals. Otherwise, it is just hard. And job hunting is hard. You are best served getting into the right frame of mind.
Fortunately, it is not hard because you have to push a heavy boulder. It is hard because every part of the job hunt will be all about failure. Sure, in the end you suddenly achieve your goals, but right up till then…well it sucks.
But what if job hunt is not primarily about that?
Writing code, doing projects, being a good coworker. These are all important and valuable skills. But it’s not the full set of skills needed to get the job. There is a different set. Your primary goal is to build up these job-hunt skills.
Before we launch into that list though, let’s consider the structure of a job hunt.
The Funnel
At its core, a job hunt is marketing, is it not? You are marketing yourself.
Have you ever heard marketing or sales people talk about “the funnel”? The idea is that sales opportunities pass through a series of stages. At each stage a decision is made and the opportunity either progresses or gets eliminated and falls out of the funnel. From a hiring manager’s point of view, each applicant is an opportunity and - as they move through the process - at each stage the number of remaining applicants gets smaller. From the applicant’s point of view, at each successive stage the chances of them reaching the end, and an offer, increase.
So it is really more of a sieve than a funnel, but I guess marketing folk aren’t known for their nomenclature. (Also feel free to visualize this as a video game…but like, without checkpoints and you never get a chainsaw.)
During the job hunt, with each job application, you enter a funnel. Here is a rough list of stages you have to get through:
- Your resume needs to get looked at. That means someone has to actually be manning the hiring apparatus. You’ll be shocked how often there’s simply not someone on the other side. it’s not usually insidious, but I would wager this is the case with 20-50% of all job postings.
- Alternately, they might have gotten so many resumes that they simply couldn’t review every one. I encourage hiring managers in that position to pick at random a comfortable number of resumes they actually can review and mass-reject the rest. It sucks, but it sucks less than any alternative.
- Next, your resume should stack up well enough against others to be selected for a phone screen.
- Of course you have to be able to carry on a conversation and demonstrate some competence in a phone screen and to be passed through to an interview.
- Then there’s the rounds of interview - each a stage in itself. Let’s be conservative and say there are three rounds. The details don’t matter so much for the purposes of this list. Lets say these include a technical conversation with the hiring manager, a leetcode-style coding test, and a behavioral interview panel. At each point you might get eliminated as your performance always has some chance of not matching expectations.
- Now say that you get to the end of the interview process…well that’s no guarantee you get an offer! There are other people also moving through the process. Ideally, only a couple should reach the end: the offer usually goes to just one.
- Then of course the offer has to be good enough that you’re willing to take it.
- And finally, at every point in time there’s the small, yet real possibility of the job simply disappearing, hiring being frozen, the manager or recruiter leaving, or people just plain dropping the ball.
This list is key to understand and we will revisit it throughout this series. There are things you can do to improve your odds at just about any stage, but you have to prioritize. Time spent improving in one area is time not spent on another. You have to learn how to think about these odds and how they interact. Unless you’re an ace at Bayesian probability, your intuition here is probably wrong.
Which is why, after the 50th time I’ve had a conversation with a mentee about how the odds don’t play out like they think, I created a tool to help! You make a Fermi estimate for your odds representing all the above stages and it interactively runs thousands of simulations to show you how that job hunt might go.
Its crude and purposefully worksheet-esque as I want people to focus on the relative impact of certain variables compared to others, but the math isn’t complex and I think it demonstrates these things well. I’ll be referring to this a lot throughout as well.
Job Hunt Skills
Lets first give a disclaimer: If you have amazing, preexisting marketing and sales skills you probably don’t need to hear any of this. If you are incredible at networking and can cold-call sell a wool coat to a sheep, you don’t need my advice and you should just go do the things you already know how to do far better than I. But for the rest, lets talk about what I mean by “job hunt skills”.
“There’s nothing to applying at all. All I need to do is tailor my resume and click submit, right?” – a mentee
Yeah, it’s not that simple. But fair question, what is this entirely different set of skills anyways? Let’s do another list.
-
Goal setting and sticking to a schedule. Including the ability to set small-yet-achievable short-term goals, set commitments, do regular accountability check-ins, and adjust as needed.
This is the key to improving at most things. Musicians and high-level athletes already know this, but now you’re in on the secret as well!
-
Ability to simply find jobs find apply to.
Ever look at a job board and dejectedly feel like none of these listings are a fit? It’s not just you. This influences the rate at which you can apply for jobs and therefore how many chances to progress through funnel do you get per week.
-
The mere act of applying is hard. You have to deal repeatedly with an emotional roller coaster. You have to put yourself out there, you get hopeful, open up yourself to dejection, and if you are lucky it all comes crashing down on you when you get a rejection (which is still better than no response).
As humans, we try to avoid these situations, yet the only way out is through. There are ways to increase your odds, but there are no magic bullets. You can desensitize yourself so that it doesn’t sting so bad or…well there are no better options. This again influences that application rate, how frequently you will need to take breaks, and the likelihood you end up giving up and walking away from the whole thing entirely. No one wants to apply to 3000 jobs and you very likely won’t have to, but wouldn’t it be nice if such a high number didn’t give you all-night indigestion?
-
You have to get to a point where it is easy to write and talk about yourself.
It’s not a natural thing for most people, yet is what much of the interview and application process consists of. Getting good at this is going to affect much of your experience. Your application, phone screen, interviews are in no small part exactly this!
-
Following up.
This is key to get people to actually pick up and look at your resume where they otherwise might not. There’s several different strategies available, how do you (tastefully) become impossible to ignore?
-
Cold reach-out.
Contacting individuals you do not know, requesting favors of connection or information can often feel socially taboo, yet it is key to several networking approaches. These can improve your odds of applying to jobs where you are likely to be considered, increase your chances of getting past the screen, and improve your ability to talk shop during interviews. It is a very worthwhile tool to have in your pocket
-
Researching companies and industries.
Most people have no idea how to do real research. It’s not ten minutes browsing the company website. Understanding how to take notes, join communities, and how to conduct informational/reverse interviews is key here and takes a decent amount of practice.
-
The ability to have engaging conversation live and asking good questions.
These are of course a must for interview, phone screen, and offer stages, as well as supporting techniques in many others. In these post-COVID pandemic days, we all need some work to improve here.
-
Ability to talk about technology.
It’s great that you know React, C++, and Kubernetes. But can you actually demonstrate that knowledge live in a conversation? Can you make it mutually enjoyable to show what a convivial coworker you would be?
-
Leetcode-style coding. Or live-coding. Or take-home-project coding.
Well you knew this would be on the list as it affects those interview stages, but you are probably surprised how small a proportion of this list these skills really are. They are important, and you should work on them (but keep in mind how many other skills are just as important).
-
Network building and maintenance
This is the core of “networking”. How do you actually “build a network”? What is one? How do you use it? How do you tend it so it doesn’t decay?
This again, affects stages at the front of your funnel directly and all others indirectly. For example in the course of networking, you might hear about un-posted roles, you might get ideas for new places to apply, you might get a referral. You will get lots of practice talking to people in industry; that seems rather useful.
This is a lot - almost an overwhelming amount! Even in this lengthy blog series I don’t think I’ll get to everything. Worse, most of it is well outside most people’s comfort zone. So how do we climb a mountain like this when it is both uncomfortable and emotionally draining?
Habit and organization are key.
You have to get organized
There’s a saying in advertising that half of all money spent on it is wasted, the problem is that you don’t know which half. The same (with some caveats) applies here. And if we’re taking lessons from advertising, then what did the industry do in the late 90s to deal with this conundrum? Well, with adtech, they started to…
Track everything
Yes, that bugbear of the modern internet - tracking - started initially as an attempt to simply understand which advertising worked and which was merely annoying! Which is actually understandable and almost noble.
If your primary goal is to build up job hunting skills, your secondary goal is to gather data that can be used to guide you further in the job hunting process.
I’ve been following recently on a forum of dozens of very high-level software engineers and managers looking for and sharing job hunting tips. Here is an example of the sort of thing they are regularly posting.
Now your numbers will of course be very different, but at a bare minimum this is the sort of thing you should be able to generate at any point in time and with little effort. This does not mean “I can check my email and see where I applied” or “well Indeed has this nice tool to show you who has looked at your resume”. You have access to a lot more data than such tools offer!
Remember those weekly accountability and commitment meetings I mentioned? Well these work best if you can set goals and discuss success in terms of numbers. Ideally, all of the following are things that you should be able to give weekly updates on.
- Exactly how many places you’ve applied, in the past week? Ever?
- To the best of your knowledge, exactly which stage in the process are you with each application.
- What follow-ups have you done? When? Where will you follow-up next?
- Which cover letter and/or resume did you use for every job application? If they have a custom form with essay questions, what exactly did you write in there?
- What industry is every company in and what they do? How large is the company?
- How excited are you about the opportunity? Putting a number to this is great when you are determining how to prioritize follow-ups!
- What is the list of mistakes you have made in interviews? What is the list of feedback you have received?
-
Of the jobs you find yourself applying to, which skills are they demanding? Which are regularly nice-to-haves?
All of this presents an opportunity. If you’re a coder, you should code! Make your data work for you; play with it. Don’t just copy-paste skill lists, standardize things. If you have a category for “Javascript” and they’re asking for “ReactJs” or “Node”, then that still counts as Javascript. Are you making bar charts about this stuff? Are you using it to guide your study? Is this at least the sort of thing you’re organized enough to do in theory?
This is all starting to sound a lot like a spreadsheet, does it not? Probably a good idea to have one. Or use a markdown file. Or design a database! But be consistent and detail-oriented.
So yes, this is a lot. An awful lot. It does take the pressure off though, doesn’t it? You still want a job of course, but there are many shorter-term wins available! You are taking those job applications and converting them into a positive source of much-needed data that in turn you can use to improve your job hunt.
It’s all about cadence
Here is the general shape of the job-hunt I am proposing:
First, you find a schedule that you can stick to.
Next, you find a baseline of what sort of effort you can maintain long-term. In its most basic form, you want to be able to say something like “I have maintained it for a while and I know that I can apply to
X
amount of jobs per week without breaking a sweat.”Now,
X
is going to be different for you than for others, it can be very low or quite high, and it should not be guessed at. You need to have actual numbers on a spreadsheet of your experience that you can point to. And, yes, you absolutely need to know whatX
is; because once you do, you can start tweaking.Remember the aforementioned accountability meetings? You need those. Use a mentor, your school/bootcamp, a friend, a group of others on the job search, an AI assistant, a journal, or even a formal Job Search Council. At each meeting, review your week, go over your numbers blame-free, discuss any adjustments (eg. is
X
actually lower/higher than you previously believed?) and commit to some goals for your next week.This, is where the tweaking comes in. Say your
X
number is 25. You know that using a reasonable amount of effort, in the time available, you could consistently apply to 25 jobs each week, every week. You are working to increase the odds that your resume is actually looked at. What tools are available? Follow-ups are such a tool. However, these can be time intensive, and require their own set of skills to get working effectively; how to get better at these without overloading yourself and burning out on the process?Well, what if for next week you committed to something different? You scale back to only 15 job applications, but you commit to 5 followups to jobs you applied to over the previous two weeks. You should still be able to handle this effort, and as you improve you become more efficient. Once it becomes easy, you can try going back up to 20 job applications but maintaining the follow ups.
A cadence gives you a ratchet to improvement. Be honest with yourself and set your goals well; you will always be getting better.
I should probably stop and address the focus on job applications versus other strategies. It’s not uncommon to hear advice after all that cold-applying is the worst thing to do, it doesn’t work! No one gets a job that way!
I emphasize with the desire to avoid an activity that is, for most, deeply ego-bruising. And yes, there are other techniques of course, you can study industries, join communities, reach out to old coworkers, and these are all things we will cover. But - when you have no process - those can be hard techniques to get started with. It so happens that the process of applying is a workout that builds some very specific and useful skills.
So yes, if you have an uncle’s brother who can get you a job super-easy you of course should do that. Do that before reading another article. But for everyone else…then what? Because ultimately, all roads lead to Rome. There is really only one thing that you must do to get pretty much any job after all: You have to apply.
Applying to jobs is the surest way to make sure that you actually do something measurable, it is an effective backstop when nothing else works, and frankly - it trains you quite well on many of the skills you’ll need to succeed in other areas of the job hunt.
To be continued
Well, we’re over 3500 words already and good lord, we’re nowhere near done. I think we’ll stop here and pick up next time with more on the view from the hiring manager’s side, resumes, interviews, and what on earth it actually means when people tell you to network.
For those who do not want to wait for the next few posts, feel free to grab my raw notes. It is an org file - similar to markdown - which you should be able to open in your text editor of choice.
-
Job Hunt 2022 Retrospective
20 November, 2022I recently took an offer as a Director of Engineering with BlocPower where I will be working on creating the Building Data Collective.
I am writing up my job search because several people have asked me about my experience of landing a job in climate tech. I am also writing it up because its the sort of thing that I just don’t see written about much. I don’t know who is interested in hearing about it, but somebody should be out there being open about their experiences with this stuff and I just happen to be somebody.
My Parameters
I want to state up front where I am coming from as it is not where 99% of job seekers are. This is important to understand for context and hopefully is not so out there as to make the rest completely unrelateable.
- I was employed while looking around. While I feel like the role I was in was a poor fit, I was not miserable and enjoyed my coworkers and the work itself. While I am well aware that I was underpaid by industry standards, I am financially comfortable so there wasn’t a lot of pressure to “make a move”.
- I do not tend to optimize for money. I had taken pay cuts for my last two jobs and I wanted to go up for this one, but my bar is still well below what someone with my experience who optimizes for salary would be getting.
- I am extremely senior and technical. My last 3 roles have been Engineering Director at Surge Consulting, CTO at Operation Spark, and Principal Engineer at findhelp (I was also for a time in an Engineering Manager and Engineering Director here as well).
- I also do not optimize for people I want to work with. While I believe that this (and money) are perfectly legitimate things to optimize for - and I have in my notes a long list of people I would love to work with - it was not my focus in this case. I was aiming largely for the industry, and a role that would use more of my abilities beyond the technical ones to make the biggest impact.
- I am extremely confident in my interviewing skills. I have personally interviewed close to 300 senior developers and led teams that interviewed thousands. I have designed interviewing processes at my last 3 companies. I have presented at conferences on interviewing developers. By now there is no impostor syndrome left; I have a very good idea of where I rank alongside others.
- I believe my resume is very strong. Resumes are a black art and different hiring managers have their own opinions but I’ve been a hiring manager in a wide range of situations and my resume is exactly what I would want to see.
- Once I make it past initial screening I very rarely get eliminated by interviewing. I far from always get the offer, but its almost always after the very last interview in the process. It has been many years since I walked out of an interview feeling like I’ve anything but nailed it.
Summary
- Total time from starting casually looking to getting hired was eight months.
- In my notes I applied to 39 companies. Because I was not always fastidious with tracking things (boo on me!), I estimate the actual number is closer to 60. I rarely one-click apply. I always put some significant effort toward each application.
- Beyond an introductory call, I got into the interviewing process with maybe 15
- I dropped out of the process purposefully of two.
- Three companies dropped me midway through the process due to the role disappearing or changing.
- One company dropped me from consideration for a manager role after the first interview and redirected me to a high level IC role (unfortunately none of those were available at the time).
- I went through 8 full interviewing processes of 4+ rounds (not counting intro calls) and got 1 offer which happened to match up to my skills and ambitions super well.
- I never received what I would consider actionable feedback. Much of the feedback I received was along the lines of “it came down to you and one other person and we just felt like they were a better fit”.
- I mostly applied to companies of 10-200 people. While I did talk to a Big Tech org (Meta), I didn’t enter their interviewing pipeline. I was willing to consider it, but my recruiter contact disappeared and this was not something I was actively pursuing so I let it go.
- I got some good leads from active and engaged recruiters initially after setting my LinkedIn profile to “casually looking”. This lasted for a month or two. Afterwards, the contacts from recruiters I received were all extremely impersonal and not even close to what my profile clearly stated I was interested in.
- Even among all-remote companies, location can still be an issue as hiring from a new state implies a whole new tax regime. Two very promising processes had to drop me early due to not having a foothold in Louisiana (I also have friends this has happened to).
- While getting an internal advocate was the best strategy for landing an interview, it was far from a sure thing. Quite a few times I had passionate advocates (even high-level internal-to-the-company advocates) making connections only to see the ball get dropped for a variety of reasons.
I am reinforced in my belief that for very experienced people (and perhaps most others), the big impediment to getting hired at most companies is not resume, skill, or even ability to demonstrate skill, so much as the fact that the vast majority of companies simply do not have their hiring sh*t together. Positions are far less solid, needs are far less thought through, and hiring processes are simply not welled tuned. I fully believe that somewhere around half of all online job applications go into a queue that no one monitors in a system rarely logged into. I suspect this is often due to turnover or confusion on the part of hiring managers. I realize that sounds like a rationalization but I have been on the other side of the table as well. I have personally taken over a hiring process that had only a trickle of candidates, only to discover a whole tab in Lever bursting with submissions that no one had known to check.
I believe that this is doubly so the case in climate tech. While I think it an incorrect stereotype that most climate tech companies are bootstrapped 5-people shops without a serious product, I do think that as an industry overall they are far less mature on the process side. As one of many indicators, consider that in a good interview process the final round should be largely a double check, not a significant filter. Every moment that you spend talking to a candidate who you do not end up hiring is a waste of both your and the candidate’s time. If a company is having 4, 5, 6 rounds of interview then with each successive round they should be less likely to eliminate someone, a final-round elimination might be necessary but should be considered a failure of process worthy of retrospective and adjustment. This seems to be rarely the way people in climate tech are thinking about things.
Similarly, I consider interviews where a large cross-section of a department/company has to meet you to be a signal of insecurity. When unsure of the effectiveness of the hiring process it is not uncommon for managers to seek consensus from the team. While understandable, and usually an attempt to de-bias, the distribution of responsibility has the opposite effect by granting everyone veto power - a situation where bias is all but guaranteed!
I think far too many people in hiring are unsure of themselves and feel a predisposition to zero-risk. However, hiring ultimately is a risk, there is only so much mitigation possible.
Strategy and Job search evolution
After applying and as I start hearing back from applications, I naturally spend more time engaging with those companies and less applying to new opportunities. Hence my job searches tend to cluster into natural rounds.
Round 1
My initial job search started in early March 2022 as a result of a few particularly despiriting months at work combined with some difficult departures, and no acknowledgment from leadership that they agreed with nor even saw the same problems I was calling out repeatedly. As this was largely about frustration, my efforts were minimal and unserious - consisting largely of asking around in a few Slacks, casually browsing TechJobsForGood listings, and toggling the “show recruiters I’m available” switch on LinkedIn. I also wrote down and made clear my criteria which, at the time, was jobs that could check multiple of the following check boxes.
- In the climate tech industry (using a loose definition)
- Building productivity tooling - especially developer productivity tooling
- Companies doing something non-trivial with AI/ML so I could work adjacent to it and get my toes wet
- Companies committed to functional programming - especially any LISP
For roles I was looking specifically for staff+/principal developer or engineering manager/director positions where I could help set technical and product direction.
This resulted in a round of interviewing that lasted until approximately mid-June. Deep into the process, one company rethought their needs. Another I dropped out of due to misalignment of expectations. Two had my initial contact leave the company and the process get abandoned. Four other companies (2 climate tech, 2 productivity tech) moved me all the way through multiple rounds only to get no offer.
Reading between the lines a bit where they did not tell me explicitly (sometimes they did), the reasons were roughly
- A misalignment when talking to the (final interview) COO between his and my expectations of how much I would work on product direction versus just heads-down coding
- Another hire was a better fit (possibly due to me having no professional experience with Clojure)
- A discomfort with my contracting background due to specific bad previous experiences within a smaller startup. To their credit, they took the time to actually call me up and talk to me about their hesitations and apologized for not previously having this as a filtering criteria.
- A last-minute change in direction for the role, orienting it toward more junior managers and a better fitting candidate for the new direction
This was of course very despiriting as I spent significant time getting to know all these companies and envisioning myself working there. As I geared up for another round I decided a shift in strategy might be appropriate.
Strategy shift
In addition to having spent many years mentoring tech job seekers, I have been a bootcamp CTO where I worked with grads seeking their first job directly. I have built up a long repository of advice for how one should conduct and strategize about a job search. As in my mind I hadn’t been “seriously looking”, I had so far been implementing very little of it.
In a conversation catching my father up on the previous round, he called me out that whatever I was doing wasn’t working. “It’s fine, I don’t think of this as a failure at all” I told him through clenched teeth. That evening I acknowledged quietly to myself that he’s probably right. If I was going to be serious about what I was doing, I should practice what I preach.
So, suggestion #1 (well, not technically #1 on everyone’s list, more the big one I wanted to try out) was to build up a series of internal advocates at companies by focusing on an industry. I would do this by joining an industry-focused community and participating within it. In my case this meant taking a first step of narrowing down my own criteria even further. Fortunately I already had a pretty good idea of what I wanted to do. Earlier that year, and wanting to be more intentional about my charitable giving, I had taken the Effective Altruism introductory course. And, while I find myself disagreeing with much of the ways in which this community construes their arguments (a whole different topic, but Doing Good Better is full of spurious correlation, lazy analysis, and some strangely colonialist thinking), I also agree wholeheartedly with many of their general points. In this particular case, the argument goes that to do the most good, you should either optimize your career for money and donate most of it, or find an important industry in a role that you can do significantly better than others. Well, I really believe that climate change is a society-level threat, I really do think that climate tech will have to be a large part of our way out of the mess, and - not sure if anyone’s noticed here - but I do have a bit of an ego. So toss everything else out the window, I should be focusing explicitly and ruthlessly on climate tech and specifically on roles where I can use my specific blend of contracting, mentoring, business-strategy, community-building, and technical experience to make the biggest impact possible.
The general idea of this join-a-community strategy is that, by becoming an active participant, you build up your visibility. Others in the community - the most active of whom are typically movers and shakers themselves - tend to take notice. You request informational interviews, chat, build up relationships and have them become advocates for you within their extended network. That - as I tell people often - is networking; it’s not just eating crappy pizza in the back of a dev meetup.
Again, in my case I already had a community in mind. In my late-night-kitchen-cleaning sessions I had listened to, and enjoyed, a couple episodes of the MyClimateJourney podcast. In these podcasts they heavily promote their exclusive (and paid) slack community. Well, $10 per month for a slack is a lot sure, but its nothing if the end result is being able to execute better on a strategic roadmap. Just a few leads from there could easily pay off. I signed up and started introducing myself.
I’ll also note that I purposefully did not pick an area of specialization within climate tech. The entire field is somewhat new but highly technical with tremendous amounts of low-hanging fruit many unproven approaches. I figured that - given the little time for research I have available - so long as I avoided the obvious scammers, one guess at what area might be highly impactful would be as good as another. We’re talking about making an impact here, I can get excited about the details later.
Rounds 2 and (spoiler alert) 3
So I joined, having made a point of being active (difficult as I am in, like…15 other slacks and an IRC, and work) and started connecting. I would monitor the Slack’s job listings for postings that seemed interesting (many in the summer, starting to thin out significantly into the fall), answer questions when I could, and just try to engage in general chat for the sake of community presence. (Pro tip for technical communities - make a technical statement that is mildly controversial and watch the engagement roll in.)
I connected with people almost immediately with a couple reaching out directly to me, and myself making the effort to reach out to others for an introductory conversation whenever I saw something that seemed interesting. In the meantime I monitored ClimateBase and - as I was now more focused on getting an insider edge - connecting to people on Slack (MCJ or Rands Leadership Slack) and LinkedIn.
So did all this work?
Well somewhat. I certainly got a great round of initial interest and quickly entered several interview processes.
- One petered out after a very enthusiastic recruiter interview. When following up, the recruiter had left the company and their replacement was unwilling to push me along without the department pulling me in. My contact within the company in the meantime kept telling me the position was open and he had no idea what counted as a “pull”…Ah, big-org problems.
- Another moved me along for about half the process with final rounds scheduled when I got word they filled the role
- A third passed me through their full process with great feedback and multiple rounds of direct engagement from their CTO only to ultimately get a rejection and no feedback whatsoever. Very disappointing for how open they had been earlier in the process.
- A fourth also passed me through their full process and multiple panel interviews with the hiring manager himself as my advocate. He did me the favor of calling me with the rejection. Apparently I had high marks throughout but the members themselves of the team I’d be managing felt like we “didn’t gel”. Yeah, not a lot I can do with that one.
And this put me into the third round. Now by this time things had gotten markedly better at work and - while my Effective Altruism-acquired logic still applied - I was no longer approaching things with the same vigor. Still, even without heavy enthusiasm, by now the process itself was humming along.
- One company I had started conversations with months ago that were slow-walked ended up taking me through the entire process only again to end in a “we found someone else” situation. (Lest I sound bitter, I think this is absolutely legitimate for a startup. For example many need a high-level person who can handle their ops. I, in the meantime, lead with “I really dislike doing ops”. Picking someone else over me here totally makes sense, I simply wish they could realize that sooner.)
- A second company, I ultimately talked to the CTO who basically explained the bulk of their needs were just some UI performance optimization - not a great fit for what I’m looking for.
- A third I was in process and heading into final rounds when I hit pause as…
- I got an offer. This was a company I had started conversations with at the very end of Round 2. It seemed scrappy and disorganized and like it will be a real pain in the ass at least for a while. But also potential for building up some fascinating connections, having some fun, making a real outsized impact, and a task that - on paper at least - I can’t think of anyone else who is more qualified for than me.
And hence where I am now.
Retrospective and Takeaways
To start with, it doesn’t matter how hot the market is. If you have something specific in mind and no pre-existing connections, its going to take longer than you think.
I am also more convinced than ever that if you are targeting high-level non-IC positions at smaller companies your best bet is one of two options:
- Start as an IC - maybe even at the risk of taking a career-step backwards - establish yourself as a power-player, and work to transition
- Build up a network of internal advocates, ideally multiple.
Without the above it is simply too common that you get lost among the shuffle. A company might know they need a Head of Engineering, but they likely have very little idea of how to filter resumes for one. Unless you’re rolling in with a resume that happens to hit their preconceived notions of the role directly on the head it’s going to be hard to even open a conversation.
I also think that I spent more time chasing companies than I needed to. A few places that seemed extremely exciting to me in the digital-twin modeling space, I could never get a hold of anyone either via applying, follow-ups, cold reach-out on LinkedIn, or even occasional referrals. If a place is giving you complete radio silence, there might just not be anyone on the other end to pick up the phone.
I do wish I had identified and focused on what I wanted earlier. I also think I could have taken time to investigate other climate tech communities, participated even more, and reached out to others even more than I did. At another time (read: pre-kids) I might have even done significant research into the area on my own time, doing literature reviews and building up strong opinions on what seemed the most exciting. That said, the process of interviewing was very educational in itself. “What questions do you have for us” usually translated into me learning something about the state of the industry.
Having switched jobs 3 times in 6 years (2 layoffs and this), I hope I’ve found a great long-term home and to be done with it for a while, but if I find myself in the position in the future I might try to apply to enough places so that I can run some hypothesis testing. Does a custom cover letter actually reliably get me the best results? What is the best response rate I can get just by cold-applying with a really strong resume? Do connections made via an individual that vouches for me (even if we met relatively recently) work better than ones I made myself by a cold approach? All interesting stuff that I have opinions on and would love to gather some data on.
-
What is Dependency Injection?
31 January, 2020Recently I was asked in the Operation Code Slack to help someone understand dependency injection. What follows is my answer - as always, editted for clarity and to make me seem like a better writer.
This is also in the context of javascript, though the concepts apply regardless.
So what is Dependency Injection?
This is one of those terms that feels complex but is really so simple it is almost silly there exists a term for it. At it’s core, dependency injection is really just a certain way of having your code use other bits of code. The term exists not as an academic topic, but simply make it easier for developers to talk to each other about how their code is structured.
-
TDD With No More Tears
2 December, 2019This is a writeup of Talk of the same title, exploring what I consider to be an approach to test driven development that is both more practical and easier to apply on a non-toy project.
Let’s begin.
Test driven development (TDD) is important, it is useful, it results in better structured code; and - for experienced practitioners - lower development times with fewer bugs. So of course we want to scream:
As a rapid aside, let’s consider the source of this meme. It comes originally from Hyperbole and a Half - a fantastic, hilarious, and insightful blog largely about the author Allie Brosh’s struggle with depression and mania. The original text was “Clean all the things” and - rather than a call to arms - was in part a statement on the frivolity of fleeting excitation.
The irony of this image as an expression of enthusiasm is…palpable.
So no, I do not actually believe that you should use TDD all of the time and for everything. Of course and definitively not! Test driven development is a technique and - like all techniques - is useful only so long as it is useful and when it is not, it is useless. I have no idea why this is seen as a difficult concept.
OLDER
- 04 Nov Understanding Domino's v Robles
- 23 Sep Announcing Tech Terms for Memorization
- 05 Jun The Problem With Repositories
- 03 Nov Take Home Programming Interviews Suck
- 07 Oct The Absurdly Underestimated Dangers of CSV Injection
- 03 Aug On `this` in Javascript
- 17 Apr On Javascript vs C# and the importance of community
- 25 Nov Understanding the State of Javascript Modules
- 29 Oct Why You Don't Get React
- 07 Aug Predictions: XHTML
- 15 Jul CSS Only Tabs
- 14 Jul You don't need to learn map/reduce
- 14 Feb This can easily be the most important OSS thing I've done
- 18 Oct Why width 50% inline-blocks don't display side-by-side
- 12 Sep Talk Roundup - Be the Es6iest
- 27 Aug Automated Testing Venn Diagram
- 03 Jul Learn reduce
- 08 Jun Color Mixing Demo App
- 06 May Some self-indulgence from the nolatech chat
- 01 May Why Not MsTest
- 20 Apr Stop teaching h tags
- 19 Feb node-gyp won't install on Windows
- 10 Nov Don't Teach Object Oriented Javascript
- 31 Oct Use Simple Modules To Fix Up Your Ugly Brownfield App 1
- 02 Aug Talk Roundup - Be the Javascriptiest
- 29 Apr On this and new
- 09 Oct Open IIS Express to the Network
- 26 Sep Setting Up RequireJs
- 29 Apr Stop that = this'ing
- 16 Jan Error Handling and the Message Repackaging Anti-Pattern
- 12 May QuickTime and a TIFF (Uncompressed) decompressor are needed to see this picture