The Joel Test updated for 2013
Many of you have heard of The Joel Test. Joel Spolsky wrote it in 2000 and yet is still eye-opening to many development environments. Here is the Joel test if you haven’t read about it.
The Joel Test (written by Joel Spolsky in 2000)
- Do you use source control?
- Can you make a build in one step?
- Do you make daily builds?
- Do you have a bug database?
- Do you fix bugs before writing new code?
- Do you have an up-to-date schedule?
- Do you have a spec?
- Do programmers have quiet working conditions?
- Do you use the best tools money can buy?
- Do you have testers?
- Do new candidates write code during their interview?
- Do you do hallway usability testing?
This test is a good measuring stick. However, it has been a dozen years since Joel wrote this. Are updates needed? I think so. It is missing some important yet still simple yes/no questions. So here is my updated version. New stuff is in blue.
The Joel Test (Updated for 2013 by me)
Source Control
- Do you use distributed source control?
- Do you have a gated check-in?
- Do you have a branching strategy?
Build and Install
- After checking out source, can a developer build and debug with one click.
- Can you make a build and an installer in one step?
- Do you make daily builds and installers?
- Can a developer add to the build easily?
Coding Practices and Coding Architecture/Design
- Do you have coding best practices?
- Is your code considered decoupled?
- Do you analyse and design before you code?
Bugs and Enhancement Tracking
- Do you have an integrated bug database?
- Can customers/users see status of existing bugs, submit new bugs and enhancement ideas, and vote on them?
- Do you fix bugs before writing new code?
Testing
- Do you write a Unit Test exposing the bug before fixing the bug?
- Do you write Unit Tests and publish code coverage/complexity results buildly?
- Do you have automated tests and testers writing them?
- Do you do hallway usability testing?
Road Map/Development
- Do you have an up-to-date schedule?
- Do you have a spec?
- Are you practicing a successful software development methodology?
Developers
- Do you have a continuous education program for developers?
- Do developers interact with customers once a year?
- Do new candidates write code during their interview?
- Do you have a training program for newly hired developers?
Tools and Workplace
- Do programmers have quiet working conditions?
- Do you use the best software money can buy?
- Do you have the best hardware money can buy?
- Do you have a simple process for developers to request software or hardware?
User Experience
- Do you have a team dedicated to enhancing the user experience?
- Do you send a prototype to customers/users before you start coding?
So I think that the above changes are quite easy to use still. They are simple yes/no questions. The look is quite different, yet it seems much more clear as to why the questions are being asked. Even though there are a lot more questions (more than double), it is still easy and short.
So here is a list (probably not comprehensive) of the changes I made.
- I grouped the questions into categories so the failure areas become clear.
- I enhanced some questions taking into account some software development movements over the past dozen years.
- I added some questions, again taking into account some movements over the past dozen years.
- I added a questions that focus on the customer/user.
- Also, Joel has a lot of paragraphs explaining his questions and some of what he explains could be added to the question in one word, for example, I added “installer” to the build questions.
Well I suppose some people will hate the updates and some will love them.
If you want to add or alter some of these questions, feel free to comment.
1. I wouldn't argue distributed version control is required. There are many cases when it isn't the correct choice: FreeBSD has the perfect choice. Developers can use git if they want, but it doesn't make sense for the project (not to mention the scaling issues of git to any large-sized project).
2. Do you have a gated check-in? - goes with #1
3. Do you have a branching strategy? +1
2. Can customers/users see status of existing bugs, submit new bugs and enhancement ideas, and vote on them?
Strongly discourage voting for most projects or companies.
The rest apply to private companies only so I won't comment much
Thanks for the feedback!
Is it just the voting you discourage? Or the ability for the customers to see and submit bugs and enhancements?
Users should not be able to a) submit bugs directly or b) vote on bugs.
a) Users do not know how to write useful bug reports and won't check to see if the bug already exists before adding a new one. They will simply clutter the bug database with crap. Better that the support people first narrow down the bug's cause, check if it is already reported and submit a proper bug report.
b) Users do not know what bugs are, what is involved in fixing them or how important they might be. Also consider the fundamental rule: users don't know what they want.
How very shortsighted. There are all types of users. You come off sounding like a snobby developer that most users do not want to work with.