I’ve been reading this book: Smart & Get Things Done by Joel Spolsky and I really think its a great read for anyone having to deal with development teams. One of things Joel Spolsky outlines in this book and on his blog is “The Joel Test“. Its a test for determining the quality of a software development team and its provides a quick assessment, but I don’t think it goes far enough. The test is over 10 years old and the software field changes almost as fast as technology itself.
In today’s software field, many software development teams have basic practices that allow them to pass “The Joel Test”, but these are still not teams that I would want to work on long-term. So, I am going to outline a few changes that I use to judge a software development team. This is my personal list and my list of requirements doesn’t meet the needs of every programmer out there.
These changes just outline some of things I find important for software development:
- Do you use source control? - I would add a sub-question: Do you have a branching and merging strategy? Branching and merging is critical to any team working on future releases while still needing to possibly issue patches. If you’re not branching, you’re either having to roll back changes to issue a production patch or you are not checking in changes for a future release often enough. Either way. Its bad.
- Can you make a build in one step? – I’d add a sub-question: Can you deploy to an environment in one step? Too many teams struggle with manual deployments. Not only are they time consuming, but there are very error prone. Save yourself the hassle and write some scripts!
- Do you make daily builds? – I think I would update this to support continuous integration. If your project builds in under 20 minutes, why not have a CI server execute the build after every check-in? This shortens the feedback cycle dramatically.
- 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? I’d like to add a note here. THIS DOES NOT MEAN JUST VISUAL STUDIO. All developers should be allowed additional tools to help with development such as IDE plugins, profilers, code coverage tools, CI servers, automated testing tools and I could go on forever. Please don’t make your developers beg for these tools. Your developers will thank you.
- Do you have testers? Adding a couple sub-questions: Does your team write unit tests? Do you do regression testing? Do your testers know how to automate testing? First things first, unit testing is extremely important. You may not drink the TDD Kool-aid, but no one can doubt the benefit of unit tests. Developers: write them! Second, regression testing, its simply not enough to just test the feature at hand. You have to ensure you have not broken any existing features. Unit tests help with this as well as automate testing, which brings me to my next point. Lastly, automated testing can be a huge win for your organization. If your not doing it, regression testing will be more difficult and the more features you add, the more of a risk there will be that your QA folks will miss something in a regression test.
- Do new candidates write code during their interview?
- Do you do hallway usability testing?