Joel Spolsky on Stack Overflow, Inclusion, and How He Broke IT Recruiting (2018)
thenewstack.io
thenewstack.io
Yes, Spolsky might have created some new hiring practice, but if it wasn't for him, it would be someone else because it is a natural consequence of a large group of people thinking in an algorithmic way for years and years.
If cults can influence poeple to commit mass suicide, surely ten years of math and programming can influence people to become more like machines.
Glitch was acquired by Fastly, so it's not a fully independent mid-sized tech co, but it does seem to be doing well and seems reasonably independent still.
I don't know neither Fog Creek or Glitch, but what you're writing sounds like you're putting a negative spin on it. To me it sounds wonderful that it's not yet another startup/company that basically boils down to "take over the world with VC funding or die trying".
I mean Fog Creek used to be a strong proponent of developer facing decisions like private offices for developers, and (back when it was a novelty) spending time easy onboarding and builds.
People like to rag on MSFT, but when I was there (around mid 2000s), this was very much the norm. Meeting rooms and shared spaces, but generally every engineer had their own office (at least in my BU).
Responsibility is relative to authority, and Spolsky ended up with a very significant amount of authority. Whether or not his behavior was good or bad, it's pretty clear that he had more responsibility than any one person really should. I wouldn't consider that his fault: he didn't really seek it out, or intentionally abuse it. I would, however, consider it what happened.
If we tack a step back, and look at this scenario as a system, we can see that it's the structure of the system itself that lead to these problems, not the intentions of any of its participants.
Now that we have the power of hindsight and objectivity, we can use that to design a better system. The big question is, will we ever get around to implementing it?
The only other option is anarchy. Out of the three, I advocate intentionally designing a system.
Sure, we can't exhaustively find every emergent behavior, but we are not 100% blind to them, either.
The only way to guarantee an emergent behavior continues is to preserve the structure of its system. That means the only strategy that can change emergent behaviors is a strategy that changes systems.
But the options (mechanical devices) of the industrial age were obviously much less flexible than what we have now in software, and you're probably right that that flexibility has had a big effect on how many people think.
software development did not start in the late 90s. The group of people who were building software when it was very much an art were super sharp and analytical. It is beyond arrogance (it is ignorance) to think that we are subjecting ourselves to unreasonable "mathematical rigor" while the earlier generations were apparently clueless cavemen of IT. Utter nonsense. Go see what IBM -- just one example -- did in its heyday and just who were the people who were making and writing software for those machines.
Joel is being Joel -- self satisfied -- and according himself the position of leading light of an entire industry's recruitment dilemma and direction after the internet (doh) exploded demand for software developers. The internet also caused another problem (technical blogs): all of a sudden people who would normally never even cross paths with the elites of their industry (because they were and are not in the same caliber to be quite frank) were reading their whitepaper tealeaves and writing blogs on how everyone had to do x, y and z. Recruitment is just one item. Can we discuss stack and architecture and team structure and methodology as well.
So Joel is right. Blowhards with blogs are quite responsible for the mess that is the profession of software development today.
It's hard to read his guide now with recent eyes and not completely agree with him. [1] . Software had been hiring for a while and never hit it. Plenty of other professions have very technical or algorithmic thinking without it. I'm not convinced it was inevitable as you say.
1. https://www.joelonsoftware.com/2006/10/25/the-guerrilla-guid...
"Humanists often contend that machines tend to dehumanize people by forcing them to have rigid personalities, but really, the contrary is true. Because the machines are rigid, the people who use them must–if they are to be successful–supply more than their share of flexibility."
– Gerald Weinberg, The Psychology of Computer Programming, chapter 11.
If you look at some indigenous cultures who had a more holistic viewpoint without exposure to machinery, they are much more about relationships between all living organisms and the emotionality behind those relationships, rather than using analytic methods to solve things.
So, while I understand where Weinberg is coming from, I do not think his view applies to the greater discussion. Moreover, I think he was confused about what others meant by dehumanization, especially when he talked about personalities. It is not the personalities that become rigid, but the problem-solving approaches.
My 2 cents....
How does he expect this to work? Developers quit their job to "try out" and some percentage just get fired immediately?
Absolutely if you’re hiring new grads, go nuts with whatever this is, but if you’re looking for people with existing careers and responsibilities, this ain’t gonna work.
Any decent submission for this type of exam takes more than two hours, and while the hiring company can view it as reducing the amount of time spent interviewing, it's just as stressful if not more so for the candidate. Throw in the time it takes to review and/or have a followup session to discuss with the candidate, and it's not a useful way to reduce interview time.
As an interviewer/hiring manager, I think you should keep your examination light until you're serious about maybe hiring the person. It's less of a burden for everyone, including you. Most jobs aren't all that glamorous so stop expecting people to bend over backward to show stunning low levels of dignity and respect for their own time.
* newly graduated student
* someone who wants to break into software engineering from an unrelated industry
* someone re-entering the workforce after an extended leave (e.g. caring for a child, parent, or one's own medical issues)
For someone like you who (I assume) is currently employed as a software engineer, it's obviously a worse option than the traditional leetcode-oriented interview.
6 Months is only because that is what contract organizations want - you can buy the good people out sooner, but they need 6 months from people to make their budgets work. 6 months is plenty of time to ensure you know if someone is bad or just slow to get productive, but not too long to pay someone who is not worth it.
I took the job anyways because I was desperate (had just been laid off). But I continued interviewing every chance I got and jumped ship at around the 5 month mark. The CTO was livid that I abandoned ship.
Though in one case I got the job first and the contracting house second. BigCo had approved vendors but was having trouble finding people with the skill sets they needed.
Like CI, onboarding is a process we get better at by doing. If I work some place that hires consistently, I’ll make sure to sit with a new engineer at least once a year to 18 months and observe them going through the documented process. Save them when they get stuck, and rephrase that part of the documentation.
I’ll also prompt them to make changes as well, for one very particular reason: when you encounter a jargon term for the first time maybe the first half dozen times, you still have Beginner’s mind. You can still explain it to someone below you on the ladder. Senior staff can get trapped in circular definitions and unspoken assumptions.
Generally speaking, I find that the people who hate ramping up new engineers have made a mess that they don’t like to think about, and onboarding makes them look at it.
When I’m onboarding people, fixing bugs in the docs is the first task they complete. It helps everybody, and it keeps them from having to jump into fixing bugs in code they don’t understand at all yet for just a little while longer, while they build their 10,000 foot view.
Similar thing happened to a friend who joined a large defense contractor. They had stacks of new computers sitting in a storeroom but the workforce was partially unionized and only union electricians were allowed to plug in new computers. Totally crazy, but he had to wait a couple weeks until they got around to it.
I don’t believe this is “also”. I think it is most of it. Software companies hate rejecting people who are in their club so much that they put all their energy in keeping them out in the first place.
Then there are also the people who believe interns are a waste of time. Theres a very high overlap between these people and the ones that some of us complain about at lunch as being a difficult coworker. If you can’t learn by teaching, then I have some serious doubts about whether you understand “teamwork”.
Especially if you're the kind of company that doesn't need to make many experienced hires, but recruits a lot of people straight off college campuses.
If you’re really honest with yourself, and us, the people who say they can’t afford to quit their job (for financial reasons) we think less of those people. It’s not because we’re petty, it’s because they’re living beyond their means in a profession where that is just so dumb you have to question their judgement on other things.
If they say they have to stay because they need the insurance (for themselves or especially their family) we collectively groan and bitch about the state of medicine.
UBI for devs isn’t to pay rent, it’s to lower your burn rate between jobs.
In other professional areas if you want entry level salaries of 150k that can get you up to 500k you have to take extra education like masters, mbas or whatever, which means time and money. In software engineering you have to spend hours in hackerrank or leetcode and I would personally prefer to spend that time in a big company as an intern, even as a grown professional in the same way you take management programa. I think that time would be more profitable than doing brain teasers and for sure we (the company and I) will get to know each other.
Only a tiny minority of programmers work in Silicon Valley. Those numbers are completely unrealistic everywhere else in the world. Don't act like we make the same as doctors and lawyers.
My experience is that only the ones that give you access to top salaries, wherever you are are, are the ones using this type of recruitment. There are tons of positions you can get without going through this and paying less.
Plus even in America, the median "Software Developer" makes ~$111k, meaning 50% make less.
... if you want to hire a bunch of fresh, young developers.
Everything breaks when you have to hire 20 devs in 6 months. There is no process for hiring at that rate.
Sure, you can always be fired at the drop of a hat, but significantly worrisome to walk away from a stable situation for a new job where firing is more easily performed.
My thesis is that if interviewing was easier, both leaving and sourcing would be easier and everyone would win
Please no.
No offense but I'd be highly suspicious of someone offering contract to hire only 10 hours per week, it doesn't sound like the company has much skin in the game.
Would work just fine for both parties if you're employed and open to changing jobs, for example.
You would get into a job with a small salary, and the expectation you'll have a larger one in an year or so.
But the pieces that recommended live-coding during the interview and dire warnings to never hire a “B player” lest it destroy your company, were incredibly influential and destructive.
Of course the same followers who corrupted Agile (into a straightjacket) and now push leetcode, are even more to blame. But I'd argue he started the largest avalanche.
You may think this is hyperbole, but several years ago, after almost twenty years of experience as the most technical person in multiple industries I was laid off from a downsizing company. I couldn't find work for a year and a half in a booming economy. Our family faced homelessness and my bank account went negative the month I finally found an offer from the (one out of hundreds) company that didn't take the Spolsky Interview seriously.
That org literally saved our lives. How's that for hyperbole?
(I've really enjoyed his work as a whole though.)
My take on interviews is that the company must eventually spend as much time as the hired developer in the process. Eventually, due to the high number of applicants there must be some rough initial filter. We have currently 700 applicants on 20 positions, so all are getting the same online test at the same time (University admission exam style) and the ones with top scores will have an in-person interview, probably similar to the one I got. Again an online test consisting of a coding part then a multiple questions quiz, then the solution and responses are discussed afterwards.
Seems like a great way to winnow down 700 people... to 20 people who are fresh out of college and either desperate enough to put up with a potential employer's arrogance and negging, or who don't know any better, and who probably think a software engineering job is mostly about the Leetcode test to get in.
Let's assume these are 700 _qualified_ applicants and its for a programming role. I.e. their resumes and applications have passed the most basic of filters of "claims they can do a similar job" and "is probably a real person".
How about... * Filter candidates if they have typos in their resumes
* Filter candidates who don't explicitly state that they leverage your tech stack
* Filter candidates who excessively job hop
* Filter candidates who have below some minimum of professional experience
* Filter candidates who live far from the workplace
* Filter candidates, for a remote role, who live in HCOL area
* Filter candidates who put objective statements in their resume
* Filter candidates who don't put objective statements in their resume
* Filter candidates who don't have a link to some online portfolio (Github, personal blog, etc.)
* Filter candidates who don't contribute to open source
* Roll a dice
The imagination is the limit!
A simple fizz-buzz level test will narrow 700 candidates down to like 100, no need for arbitrary nonsense like linking to github profiles, contributing to open source or typos.
* How would you proctor the test to know the candidates aren't cheating?
* How would your test actually test capability to program? (Assuming a legitimate test and not just a blind take-home proving you can code a todo-app...)
* What do you do when your test is leaked online?
* How is your test better than requiring an accredited degree from some institution? (which, for the record, I think is also not a great filter.)
The test is switching the filter from you filtering candidates to the candidates filtering you. Why apply to you when I can apply somewhere else? Interestingly, Canonical keeps coming up as a place to _not_ apply for because their entire process is bonkers: https://news.ycombinator.com/item?id=39750181
I think asking candidates to fill out 18 pages of prose before talking to someone is inhumane.
> How would you proctor the test to know the candidates aren't cheating?
I wouldn't. I would just add a note "if you cannot pass this test without cheating then continuing the application will be a waste of your time; we will do more tests in real life" (but nicely worded). I don't think candidates want to waste their own time either.
> How would your test actually test capability to program?
I'd probably use leetcode.com but with very easy questions (no dynamic programming!).
If you mean "how would I test good programming taste & architectural design skill?" then that is really hard. Take home problem is probably the best way, but I'd just make it a short one (1 hour max).
> What do you do when your test is leaked online?
Change it I guess. But it doesn't really matter anyway. We're talking about people who can't do FizzBuzz.
> How is your test better than requiring an accredited degree from some institution?
Because most programmers don't have a degree in programming, or even in CS. Do degrees in programming even exist?
True, but those are pretty bad filters. Why is all that detailed work (x 700) better than getting people to do a test?
The outcome seems to be a dice roll anyways. All these ceremonies just introduce bias.
Put up some requirements, get applications, roll the dice. Qualified, real person with valid credentials? If not, reroll. Can talk to you inperson for 30 minutes without seeming to want to cut your throat? Give offer.
I agree with part of what the OP said:
> My take on interviews is that the company must eventually spend as much time as the hired developer in the process
In my opinion, making applicants take a test is creating asymmetrical busy work just so the job-poster can feel that they've selected the "best" candidates (whatever that means). If you legitimately have enough great applicants that you cannot possibly hope to interview them all, then just roll a dice!
How do you know they're all great? You know you have 700 of them. What do you do next? Pick one at random, because you don't want to hire unluckly people?
I can't tell if this post is supposed to be sarcastic or not. I'm assuming so? Because these criteria are horrible compared to what's currently done now. "* Filter candidates who put objective statements in their resume". What in the world is that?
If it is just sarcastic then why even post it? Why not post an actual proposal for a better way to interview?
> * Filter candidates who put objective statements in their resume".
> What in the world is that?
Some people, as well as my early education, recommended to put "objective" statements on your resume stating your literal objective in applying for the role. I'm surprised you haven't heard about them! edit: Personally I dislike them as archaic wastes of space.
> Why not post an actual proposal for a better way to interview?
And quoting you above:
> you can select for whatever it is you may or may not want...
Yes a person can do anything they want when interviewing candidates. That was never a question. The topic being discussed is what alternative method that gets you great candidates.
2. (this step is harder)
I tend to agree, and I've moved to an internship model myself for hires.
No, but it's decent for what it does. You're criticising the wrong thing.
When I was hiring for W2, I'd pair program with them using a web based code editor for two hours. We'd split the work and I'd try to get them to relax and give them a chance to show off. Usually within a two hours I'd know if I was talking to quality.
If they hated pairing, they weren't going to work well on my teams anyway, so I'd make it really clear pairing was pretty much the only nonnegotiable. Everything else was on the table as negotiable, but not that. This kept expectations aligned. The ones who could pair and knew what they were doing were really easy to spot after a few hours.
New hires should treated like like pounds on an airplane. I want as few as possible to get the job done and provide resiliency to a team. A team of three always gets more done than a team of six, etc etc. So I'd aim to hire that one good person over just trying to hit some magic number.
Although clearly I got pretty tired of all the W2 games and drama. I got tired of being told to hire X people when X/3 would objectively get more done, then later being told to layoff Y people because we were spending too much. That cycle got real old after a couple loops.
Now I'm just out as a free agent with a lot of contacts who can put together a new product quickly. I've got my squad for bigger projects and they've got me. I like this a lot better. However, if you need stable income, it's not the best, you have to be really disciplined to store up grain in the good years to have it through the lean years.
As a business owner, it's really great because I can capitalize on the desperation of the workforce.
Do you do the internships with the assumption that most won't produce value worth the energy put into mentoring them, before they leave?
Then make great offers to the ones who stand out as most promising, before they leave?
StackOverflow is a good idea, but in the few times I've tried to use it, I have always been slapped down by obscure rules and tyrannical mods. The rules (which can vary by tag, specialty, and are often subjective) are not clear at all to new or casual users. SO needs to refocus on user stories and pain points.
It did, massively, but ended up alienating a lot of loyal, hard working volunteers in the process, because actually a lot of first time interactions were good and patient, and only a few weren't, and SO talked as though they were all bad. And even then, they were mostly just brusque based on culture rather than actually bad.
If you read some of the beginner questions that had no effort put into them, requiring a long patient conversation to tease out the detail, partway through which half the time the beginner would lose patience, say something rude and leave, and then post about toxicity on Reddit, you might also sympathise slightly more with mods and regulars who've dealt patiently with this sort of thing hundreds of times.
Tl;dr: You can't be both a repository of useful, searchable reference content and a human-powered ChatGPT interface for beginners.
Ugh, this is a really painfully uninformative platitude.
First, how do we actually know it's not just personal preference? Obviously other factors are likely to contribute. But with no suggestions as to what those factors are or evidence demonstrating they are likely causes, this claim has no information content.
And then second, what are the concrete steps for change? Is it the internship process he describes? Maybe it's clearer in the full talk than in the quotes pulled for this article.
No studies on hand but having spent a lot of time in academia adjacent to CS you see a lot of departmental surveys and the like where women consistently report feeling pushed out, experiencing sexist harassment, or simply having a hard time connecting with peers when there’s a large gender imbalance. Obviously this doesn’t imply that personal preference plays no role, but I think that so long as these things are being reported it indicates that the discrepancy is not purely the result of preference, and at least partly reflects a systemic pressure away from the field(s).
There's a fair amount of research also demonstrating different distributions of interest in working with "things" vs. "people", with men leaning towards the former and women the latter. It would be interesting to tease apart how much each factors into the lack of women in software, but I imagine very difficult to accomplish.
Anyway, transpiling to a widely deployed scripting language has become awfully popular in the twenty years since FogBugz did theirs. (TypeScript, JSX, etc.) Maybe they were onto something the critics didn’t see at the time.
Walmart cannot be so picky, as they need to maintain a workforce of 2.1 million.
You see the same thing in Google employees from nearer to its start date vs now.
My business is run like Joel's internship model - we nurture and grow people and it's a lot of fun.
Both have merits. One is better for the soul, one is better for getting shit done.
Is that still current? Lately I only see answers from rep farmers that paste paragraphs from the docs...
The moderation encouraging this style of answer doesn't help either.
I have always found stack overflow to be a very toxic environment
Read only for me now...
Funny enough this about sums up my interview experience with SO
Maybe AI can be the mentor/judge for such an "internship-style" recruiting practice, thus make it scalable.