The Joel Test for 2017
myers.io
myers.io
>Do new candidates write code during their interview?
The author suggests removing these two rules because they're ubiquitous, that everyone does them.
I hate to inform the author, but he's sadly mistaken. There are plenty of companies still out there that aren't doing these things, especially with interviews. Also, I think the ubiquity of them is a reason to include them, because it helps draw attention to those companies that are deficient in some way.
They didn't have to understand in advance. They just had to be smart enough to know they needed help.
Probably the better thing to ask a candidate as a follow-up question is why is version control important.
The tools have got better in some ways and also worse (e.g. complexity of git). But before subversion there was cvs, rcs and visual source safe.
One of my most frequent freelance clients was a web developer who farmed some modules out to me to be implemented. From what I could tell, he used FTP for deploying changes, and did not use any kind of version control. I kept him on as a client because I needed the work, but this lack of proper tooling caused numerous headaches. In retrospect, it probably would have benefitted both of us to condition any work for him on his adopting source control for that project.
Further: I don't think Spolsky missed CI so much as that he predicted it. So, maybe, if you wanted to 2017-ize the Joel Test, you could say you should have hourly instead of daily builds, or something like that.
Spolsky was, I think, pretty far off the mark about hiring. I'm fine with keeping a bullet in the list about carefully-designed hiring processes, though; striking that, because "everyone does this right", would be lunacy. Virtually nobody hires right.
The Hallway Usability Testing thing always seemed to strike me as Spolsky promoting an idea he'd been talking about with CityDesk, putting it on par with "having a bug tracker" and "using source control". Losing the rule altogether would be fine with me. Suggesting that every team have dedicated UI/UX people is silly: many good teams don't, and even the teams that I work with that do don't engage those people on every (or even most) UI/UX changes.
The one step build is far more impactful.
There has been an ongoing debate on the benefits of having developers in separate offices for many years versus have developers in an open plan office. There are arguments in favour of both sides. Joel, however, has plumped for having developers in their own offices.
So in this case I believe that Joel's (opinionated) views remain as valid now as they did when he wrote them. After all, even though there have been improvements in noise cancelling headsets (and office etiquette now allows wearing them), it doesn't stop interruptions from other developers.
Have you ever considered that the management types arguing in favor or open workspaces-- usually work in an office themselves? The last VP I worked for, bought the engineering team a fucking table to work at -- stuck it at the end of a hallway, and literally spent hundreds of thousands of dollars on his office.
The engineering team heard the message pretty loud and clear.
People with high functioning autism, especially those that fit what has been known as the Asperger's subset, are very prone to oversensitivity to external stimulation. In people with this oversensitivity, sounds seem louder, lights seem brighter, and everything is more distracting and more nerve-wracking than for the average person.
I think ADHD and distraction is mostly self-explanatory. In addition, it can take even longer after a distraction to get back into the deep concentration needed for complex tasks. However, these folks often if not distracted can stay in that deep concentration zone a very long time.
So when research shows (and it does) that a quiet workplace is more conducive to work that needs long periods of concentration and we're as a community pretty certain that we have a large portion of our group who are more easily distracted and has higher costs for being distracted, how is there any argument against giving a low-distraction workspace?
My employer values offices. Most aren't very big, but most of the company works in offices.
Also, to favor the team dynamic and lower contention on conference rooms, offices for a team surround a conference room for that team in a "pod" architecture. You enter each team's office suite from a hallway into the conference room, and then go to the individual offices from there. You only need to book a conference room elsewhere in the building if there are enough guests from outside the team to overflow your own pod room.
It's helped a great deal over having offices right off the hallway for purposes of avoiding distraction and also for getting the team meeting and hack session space with no waiting.
Seems a bit harsh. None of the companies I've worked for has scored 11 or 12, but the only thing that stands out in my mind as "terrible" was at one company where we had to integrate with SAP. And that company could have easily scored a 12 and still been terrible simply because that SAP interface was remarkably bad. In fact, the only ones that I would consider dealbreakers (source control and quiet working conditions) are no longer on the list.
Hallelujah!
At Cygnus in 1991 an employee named Rich Pixley tried to convince us to adopt source control (CVS was the state of the art at the time). John Gilmore and I were staunchly opposed, and I think Michael Tiemann was neutral. I don't remember what the employees thought. In any case John and I finally acquiesced in ill humor and only under the conditions of a number of absurd and nonsensical requirements (e.g. "must integrated transparently with emacs"). IIRC Rich simply ignored our bullshit and set things up and John and I realized we had been idiots.
Eventually we had to write the client/server CVS implementation because of a source control horror story. And I think as a result the FSF ended up adopting source control too.
I don't think I would work with anyone who doesn't use it any more, at least for software. On the CAD side (Cadence, Solidworks etc) the situation is still dire.
The first is as allwein says below: Just because I made an assumption that source control is ubiquitous, it doesn't mean that it actually is, and it probably shouldn't be removed from the list.
The second is with regards to quiet working conditions. I've seen here, and on Reddit, that most people seem to vehemently disagree with me. I didn't imagine that there would be this level of disagreement. The popular opinion is that everyone should have quiet working conditions. My statement was that working conditions are tied to open office vs closed office, and it was a personal preference. So, my question to HN is: Am I wrong in thinking that this is a personal preference and that it benefits everyone to have private offices?
Some people like having lots of noise/people around them (all the noise blends together at some point) or they just put headphones on anyway so they don't care. Others want their own office, or could do a shared office. It's such a personal choice these days.
Anyway, the baffling contemporary move towards open offices only increases the importance of the rule.
Anecdotal: At a previous job, I found a coworker quite furstrating, and he found me frustrating. The CTO told me the two of us were loud enough to be distracting the others, so I immediately tried to moderate myself… but the fact we were still aggravating each other was a contributing factor to me deciding to leave. I had enough respect for everyone else there that I was embarrassed to be noticeable in that way.
The same applies to the "Do you use the best tools money can buy?" and "Do you have testers?" questions.
Furthermore, I would suggest that five years ago people were arguing about whether open plans were better. Seems to me like that argument is over, with the resolution being "nope, but they're cheaper!"
I personally often like to work in public areas. Having an office doesn't keep me from doing that, but it does let me retreat when I want to.
My answer would be - open office is the best, as long as you can have quiet time when you need to focus (headphones, protectors, whatever suits you.)
vs
> Are all builds handled automatically by a Continuous Integration server?Are two very different indicators. And both are, least in my mind, equally important. One measure the holistic approach to source code including everything necessary to produce a functional system. Checkout, build, use.
The other is a measure of how much care is given to the overall process of software engineering. How much automation the tests receive, how much attention is given to deployment etc.
Software construction must be tied intimately with the software code itself for thousands of good reasons. Too many times have I seen a team jump onto the CI bandwagon; abandoning all notions of build scripts to let this new shiny thing perform it's magical incantations to build and package the system. A checkout alone is no longer sufficient to gain a fully functional system one can test locally, the CI becomes in an integral part of the software code but without the process the rest of the code receives (reviews, versioning, source control etc).
With the multiplication of commercial tools flaunting how easy it is to automate all this that one does not even need a programmer anymore, I fear software construction will become harder and harder to do without the help of these external systems.
So yes, do team have a single operation to build (that is construct) a workable system is still very much relevant.
And yes, do team use continuous integration to automate their test and delivery process is also important.
There is no world in which this is true, it's just interiorised worse conditions of working at this point.
What you're really trying to get at is that you'll get a decent computer, not a hand-me-down laptop from a salesman who couldn't sell anything.
These days a 3 year old computer really doesn't make that much difference.
I saw an Ultra/1 (170MHz) for about $15K in 1996, and a Ultra 60 (360 MHz, 1GB RAM) for $19.8K in 1998. It's gotten a lot cheaper.
Also I never understood asking this question:
> Do new candidates write code during their interview?
If you're there for an interview, you're about to find out first hand.
I've been at plenty of jobs where either new candidates (or existing employees) have talked a good game but when they finally show up to work, can't code their way out of a paper bag. The hope is that writing code during an interview helps prevent those situations.
The other thing this questions tends to tell you is that you'll have a technical employee likely involved in the interview, which is good for all sorts of things from finding out about general work environment to getting details on the answers of the rest of the Joel questions like "what VCS?" and "build system?".
Especially "Do new candidates write code during their interview?" seems to run contrary to the much decried whiteboarding (not taking sides right now, also it's not about paper vs whiteboard etc)
I still think the questions are a useful data point, just never agreed with the "10 and less is a failure", because it's just too broad and some of the points the teams I worked fulfilled 100% in spirit, but never to the letter of the test - but then you're in wishy washy gray area again. (One of my main gripes is that if you compare Excel (iirc that was his team) probably has "a single build" with dozens? of developers - so I'd rephrase it as "all your projects have a releasable HEAD/master branch" but I had people disagree on that premise.
Whiteboards are for design, computers are for code.
I find that a good chunk of it doesn't apply in my job, where I'm one guy working on a large number of simple web applications.
Overall I have to say I'm really impressed with how the list has held up. The questions are pretty specific, and reasonably diagnostic of common issues that create spirit destroying dysfunction.
His list (with its diff):
-1. Do you use source control?
+1. Is your source control effective for the disconnected programmer?
2. Can you make a build in one step?
-3. Do you make daily builds?
+3. Do you build, test, and deploy (somewhere) on every commit?
4. Do you have a bug database?
5. Do you fix bugs before writing new code?
-6. Do you have an up-to-date schedule?
+6. Does your source have a stable trunk from which releases can be cut at any time?
-7. Do you have a spec?
+7. Can all of a product's features be verified in one step?
-8. Do programmers have quiet working conditions?
+8. Do programmers have access to a door that can be closed for uninterrupted work?
-9. Do you use the best tools money can buy?
+9. Do programmers have the freedom to choose the best tools for the job?
-10. Do you have testers?
+10. Is testing the team's responsibility?
11. Do new candidates write code during their interview?
12. Do you do hallway usability testing?If you're spending a month or two making a throwaway bit on analysis, for example, maybe it doesn't need hallway usability testing and plugging into a CI system (although I'd argue for a makefile, which maybe does the same job).
Similarly, if you're not collaborating on a thing, maybe you don't need a schedule. You can do the job with an ordered list of tasks and a future date when you'll revisit that list to see if you need to ditch some things to stay within the budget.
And if your company only has a couple of developers to support the business, then you're probably not going to hire dedicated testers or UX specialists (how much longer before that gets replaced with some other buzzword anyway?).
And actually, all these things can be changed. If you go to a company that doesn't do something that you think is important, then make your case. If you're in a position where your case won't be listened to, that's a much worse indicator.
I wouldn't work without version control though. If I have to be responsible for some text then it's going in Git, be it code, configuration or notes.
On a different tack, I think the idea that a spec isn't useful any more because of agile is definitely a wrong one.
Your spec doesn't have to be absolutely rigorous, set in stone, or meet some standard. Writing down in detail what you intend to do and how it will meet your aims is really useful for non-trivial tasks.