Guess what this weekend is?? Oh right, I pre-spoiled it in the title there. Well, Joel Spolsky is pretty brilliant and hilarious and had a huge influence on Programmers Of A Certain Age. He’s most of the reason Trello, Stack Overflow, and Glitch all exist (he’s not involved in any of them anymore and in my opinion they’ve all stagnated without him, sadly).
Anyway, I thought it would be fun to revisit The Joel Test 20 years on and see how Beeminder fares, and how the test itself fares. What would a modern version of it look like?
Without further ado…
1. Do you use source control?
Yes, GitHub. It sure is nice living in the future, where it’s hard to even imagine saying no to this question!
Funny story about "backing up your website"
In 2018 we were setting up an ad campaign through a program with Google and they wanted to “make sure our website was backed up” and I was… I guess horrified that that’s a question they even have to ask people? Even for normal people in 2018 it seemed like this would be a total non-question. Keep everything in the cloud and you don’t even need to think about the concept of backups. It’s magic! Unless climate change or World War 3 manage to bring down the whole internet, I guess.
(I mean, with version control like we have with GitHub, it’s not just the website that’s automatically backed up but every version of it that’s ever existed. Programmers are really serious about making sure they never lose any work due to computers, or themselves, flaking out. This is something normal people really need more of. Like it’s not enough to have a document backed up. If you mess it all up somehow you need to be able to go back to any point in time to see how it used to look.)
Anyway, this Google Ads person wanted to make sure our website was backed up. Sometimes we get imposter syndrome and are like “how are we even running a company” or “how does the internet actually work omg i feel so dumb” but apparently there are businesses out there where the only place the code exists is what’s running in production and that makes me feel much better! That was a very long way to say that we definitely have the website backed up oh my goodness can you imagine.
But this reminds me of how my grandma had her entire dissertation destroyed by a bomb in World War 2. True story!
Fortunately Beeminder is on multilpe people’s laptops all over the world, plus all the ways GitHub itself backs up repositories. So losing Beeminder (the code/website) would take a pretty apocalyptic scenario. I’m going to stop tempting fate now!
I think the modern version of the Joel Test doesn’t bother with this question. But in the meantime, we’ll take our free point here.
verdict for Beeminder: 1 point
2. Can you make a build in one step?
By “a build” he’s talking about burning CD-ROMs or whatever but the version of the question for websites is, can you deploy in one step? Yes we can!
Candidate modern version of this: “Can you run a single command to deploy a completely fresh server from scratch?” Answer: No, but we’re working on it!
Or maybe: “Do you have continuous integration and frictionless automated tests?” Answer: Also working on it? We’re maybe above the 50th percentile on this. I’m very proud of what we have for Beebrain (the graphing and road editor – all open source, btw!) with an automated huge test suite that shows us pixel-by-pixel differences of real-world graphs any time we change anything.
verdict for Beeminder: 0.6 points
3. Do you make daily builds?
I guess every time we deploy our daily User-Visible Improvement that’s a build, so, yes.
verdict for Beeminder: 1 point
4. Do you have a bug database?
Yup, thanks again to GitHub. But for full points we need every bug in the database to be a Proper Bug Report. We’re getting there!
verdict for Beeminder: 0.9 points
5. Do you fix bugs before writing new code?
This sounded just impossibly fastidious, even out-of-touch, but I think I’ve figured out what Joel means. In the bad old days before it was easy to make branches in version control and continuous deployment and all that, software teams would commonly accumulate bugs that absolutely couldn’t ship.
We call an issue a Mendoza if you can’t deploy until it’s resolved. Nowadays with feature branches and pull requests and whatnot I think this is a non-issue.
But I think what Joel is saying is that if you suddenly need to deploy but you have a backlog of weeks-old bugs that have to be resolved before you do, you are going to have a bad time.
So I think just the fact that we deploy a new version of Beeminder once a day (on average) means that we get full marks on this.
Another interpretation of this could be “don’t tolerate regressions”. Or our Pareto Dominance Principle. If something you previously fixed manages to unfix itself, drop everything and figure out why. Our UVI commitment I think puts appropriate pressure on us here. If we announced a User-Visible Improvement we feel like cheating cheaters if it becomes false.
We now also beemind regressions (or zombies, as we call them).
verdict for Beeminder: 1 point
6. Do you have an up-to-date schedule?
Um… OK, this might seriously be crucial. I intend to reread Joel’s thoughts on scope creep and evidence-based scheduling.
We do not currently get any points here and I’m pretty embarrassed about that.
verdict for Beeminder: 0 points
7. Do you have a spec?
More and more often we do, and we’re getting better at it.
verdict for Beeminder: 0.9 points
8. Do programmers have quiet working conditions?
Well, we’re all remote and I think we all have pretty fancy headphones at least.
verdict for Beeminder: 0.5 points
9. Do you use the best tools money can buy?
Good question. At least one of us (that’s me) has gone crazy with monitors (two 40-inchers).
verdict for Beeminder: 0.5 points
10. Do you have testers?
Uh oh. We do have @mary who is uncannily good at testing, though it’s not her job.
verdict for Beeminder: 0 points
11. Do new candidates write code during their interview?
I’d say we pass this one, in spirit anyway.
verdict for Beeminder: 1 point
12. Do you do hallway usability testing?
Not enough but this is super important!
verdict for Beeminder: 0.8 points
Total score for Beeminder: 8.2/12 = 68.3%
Eek, that’s like a D+? We either need to up our game or declare this test a dusty dinosaur!