We all know and love the Joel Test, Joel Spolsky's quick quiz to determine the quality of a software team. If you're searching for a job, it's a great idea to run potential employers through the Joel Test.
There's a problem with it, though. Well, there are multiple problems. First, who the hell cares about hallway usability testing? Second, you're only checking for the good qualities of a team. What about the horrendously bad qualities that will eventually drive you towards both insanity and a crippling dependency on cough syrup?
We need something like the Joel Test to measure the potential crappiness of a job, or else each of us might stumble into becoming Milton Waddams.
Ladies and gentlemen, I present to you the Codypo Test, aka 8 Questions To Identify A Lame Programming Job. If you are in an interview, you give the company the Codypo test, and the job scores more than a 1 or 2, you need to pull the fire alarm and get the hell out of there.
1. Would I be paid below market rates?
If they're looking for 10 years of hardcore, multithreaded C++ experience and they're offering 48k, these people have lost their minds. Expect this sort of delusional thinking to appear in everything they do.
2. Would I always be on call?
No one likes being on call, because as soon as you're on call, someone is going to page you at 3 AM on a Sunday because the Reset button on the support portal is a different shade of blue than they're expecting. Occasional on call stints are both understandable and tolerable, but 24/7 is for doctors and exorcists.
3. Am I the IT staff?
You are a programmer. You make software. You are happy to support your software.
This does not, however, mean you are a computational master of the universe, and just the guy to ask why the receptionist's laptop got all weird after she installed that Garfield screensaver.
4. Would I work with a single monitor?
It's no longer 1998. We don't have to stare at a single 17" boat anchor all day while rocking out to Smashmouth. You can buy huge, thin LCDs for $100 each. If doubling your productivity isn't worth $200 to this company, then this company may just be a really elaborate practical joke played by an eccentric billionaire.
5. Will I be maintaining any ancient system, and what's it written in?
If you dig deep, you may hear, "Yeah, we're going to get into Ruby on Rails, but first, we'll need you to bust out some VB 4." It is never, ever that easy.
That VB 4 system will refuse to die, just like Rasputin.
6. Would my internet usage filtered or monitored?
Programmers solve problems, and to solve problems effectively, you need resources. The internet is the single greatest usage available. Any company that refuses to accept that and blocks you from Usenet/ Google/Stack Overflow/whatever is treating like you a child/deranged porn fiend.
7. Would I be the only programmer?
More than anything else, I have grown as a programmer thanks to my peers. We answer each others' questions, we review each others' code, we whiteboard together, and we come up with creative insults when somebody breaks the build. If it's just you, you're not going to get any technical feedback and you're not going to get any better. Also, you'll only be able to insult yourself when you break the build, which might get you reported to HR.
8. Am I expected to travel every week?
A bit of travel is necessary from time to time, particularly for face to face meetings with customers or offsite colleagues. However, expecting you to leave your home every farging week is absurd. We have the internet now; it allows us to communicate virtually. Let's use that instead of me becoming BFF with the night receptionist at the Best Western.
I think those 8 questions constitute a good sanity test for a potential job. Sure, there are valid reasons for a job to score a 1 (eg, you might be the IT Staff or on call all the time at a startup). However, once you get past one Yes to these questions, it's time to leave the interview through any means necessary, including faking a heart attack.
No matter how great the potential projects and teammates might be, I don't think you can do truly meaningful work in an environment where you, the developer, aren't empowered to succeed. If a company doesn't get that, then they don't get software.