You're free to turn down all the consulting jobs that don't pass the Joel Test.
You're also free to starve.
Pick one.
EDIT
I thought of a good way of illustrating the choice. Don't get me wrong, I think the Joel Test is a great metric for trying to achieve the ideal work place. It is just that Fog Creek is only a very small vertical portion in the very horizontally wide software market.
So here is what I would imagine is a typical support call to Fog Creek. (I've never worked there; I don't mean to imply that they are not extremely hard workers and don't have stress. Clearly, they have some talented people there. This is for illustrating a point, nothing more.)
RING - RING
Support: Fog Creek support, how can I help you?
Developer: Hey-o, our bug tracking system is down for some reason. Can you help?
Support: Sure, try this, this, that, maybe this, then that other thing. Does it work?
Developer: No, but this widget here displays "Stack Overflow in call to write()" when I click it.
Support: Oh, I see. Well I'll have to escalate this to our developers. They should have it fixed in a few days.
Developer: Sigh...ok, I guess we'll just file reports with Earl and he can manually key them in when the system is back up.
Then the Fog Creek developers get together, discuss the approach to fixing the bug in the hallway (item 12), discuss how it fits in with the spec (item 7), then tell the project manager that the new features need to stop so that a bug can be fixed (item 5) and
that the schedule must be slipped (item 6). They then put the bug in the bug database (item 4) from the comfort of their sound-proofed offices (item 8). They then fix the bug using the latest and best tools (item 9), check it into source control (item 1), check that the system still builds from typing "make" from the code root (item 2) and the build system picks it up during the next build (item 3). The QA department tests it (item 10) and releases it to the customer ONLY if it passes.
That works great and I only wish I could work somewhere like that one day. But change the business to a software company that makes software responsible for companies collecting money. It could be anything from the e-commerce shopping cart, their portal CMS, payment processing software, etc. Then the rules of the game change. Here is a typical support call in that situation.
RING - RING
Support: Financial software creating kompany (FSCK) support, how can I help you.
Analyst: Hi I am an A/R analyst from Megacorp and OMFG, OUR WEBSITE THAT SELLS OUR WIDGETS CAN'T ACCEPT PAYMENTS!!!! FIRE!!!! FIRE!!!
ARRRRGGGHHHH!! HACK *COUGH* SPIT
Support: Er, um, well what is it doing exactly?
Analyst: ARRGGH!!!! I DON'T HAVE TIME FOR THIS JUST MAKE IT WORK!!! I DEMAND THAT YOU MAKE IT WORK NOW!!!!! I AM GOING TO CALL
YOUR CEO AND RAT YOU OUT IF YOU DON'T MAKE IT WORK NOW!!!!!
[cue developers scurrying in looking disheveled because they just woke up after sleeping under their desks all night trying to deal with Initech's problem from last night.]
Developer: What seems to be the problem?
Analyst: We made a change in our system last night and nothing seems to be working anymore.
Developer: What did you change? Do you think it had anything to do with what is occuring now?
Analyst: HOW DARE YOU SUGGEST THIS IS OUR FLAW!!!! WE TEST THINGS OVER AND OVER AND HAVE A COMPREHENSIVE CHANGE MANAGEMENT PROCESS!!! IT COULDN'T POSSIBLY BE OUR STUFF BECAUSE WE JUST SPENT 3 MONTHS ROLLING OUT THIS NEW THING TO OUR ENTERPRISEY SYSTEM!!!! I DEMAND IT WORK NOW OR I WILL CALL YOUR CEO!!!
[developers scurry off to look at the code to see if there were any recent changes that might exhibit the behavior described by the less-than-cooperative analyst. it takes too much time, so....]
RING - RING
CEO: Hi this is Jerry, the CEO of FSCK what seems to be the problem?
Analyst: Your developers and support won't help me. My widget selling system has been down for an hour and I haven't even heard about the fix.
CEO: I'll get to the bottom of this.
[cue CEO jogging down the hall to the developers offices]
CEO: WHAT SEEMS TO BE THE PROBLEM? WHY AREN'T YOU TAKING CARE OF OUR CUSTOMERS!!!!! FIX IT NOW!!!
[ceo jogs off sipping a soy latte that magically appeared in his hand when he snapped his fingers]
[developers look at each other, look at the screen, look at each other, then run for their keyboards and frantically start typing in code]
Developer 1: THIS CODE HAS THE POTENTIAL FOR A BUFFER OVERRUN!!!! THIS OTHER PIECE HAS LOGIC THAT WILL NEVER WORK!!!! YOU INCOMPETENT FOOL, SEE WHAT YOU HAVE DONE!!!!
Developer 2: SCREW YOU!!! I HAD TO PUT THAT IN THERE TO HACK OUT THE 16-LEVEL DEEP NESTED LOOP YOU HAD IN THERE THAT CAUSED INITECH'S PROBLEM LAST NIGHT!!!
Developer 3: Too bad they didn't buy that code analysis tool. The CFO couldn't justify a $5k tool that does the same thing as having developers read the code. We would have found those things pre-release if we could have had some analysis done on the code....
Developer 1 & 2: SHUT UP AND START CODING!!!
(so much for Agile's mantra of practicing group ownership of the code eh?)
[developers hack a while, check the code in, get a build (items 1 and 2...because those are the easiest)]
Support and CEO: NO TIME FOR TESTING, THE CUSTOMER IS PISSED!!! TELL THEM WE'LL GIVE THEM THE BUILD AND THEY CAN TEST IT IN PARALLEL WITH OUR QA DEPARTMENT.
[cut to view of QA department playing darts and joking about how they'll get right on that parallel testing for Megacorp's patch]
Analyst: OMFG!!!! THE PATCH DIDN'T DO ANYTHING!!!! WTF BBQ!!!!!! ARRGGGHHHH!!!!! I HAVE AN ULCER NOW FROM OUR ENTERPRISEY SYSTEM GOING DOWN EVERY DAY FOR THE LAST 5 YEARS, AND NOW YOUR SYSTEM IS RESPONSIBLE FOR ALL MY PROBLEMS!!!! AND I EAT TOO MANY SONIC JALAPENO BURGERS FOR LUNCH TOO!!!
[switch to developers running out into the dark parking lot. they keep shoving each other out of the way as they dash for their cars]
Developer 1: Out of my way! I need to get in my car and get the hell out of here before the CEO catches us and makes us stay all night again.
Developer 2: Last one out of the parking lot is the CEO's slave tonight!
[switch to view of CEO sitting in a strip club with a bunch of other CEO look-alikes, smoking a cigar while holding a glass of Jack Daniels]
CEO: HAR HAR! When I left them, they were madly hacking away to fix the problem. They should be finished sometime this week but I told them they weren't allowed to leave until it was fixed! Suckers!
[switch to morning view outside FSCK. all looks normal, birds are chirping, people walking their dogs past FSCK's front lawn. they don't pick up after their dogs do their business on FSCK's front lawn. respect! one of the new developers is sleeping on the front lawn using a copy of Code Complete as a pillow]
[switch to inside view of tech support representative. blood-shot eyes, steam coming out of the ear that isn't covered with the headset's ear cup]
Analyst: Everything seems to be ok now. It turns out that one of our outsourced partners updated a line of code that caused an exception to be thrown every time someone tried to buy a widget. We couldn't see the exception because IT had also made a change
to some of the switches between our production server and our syslog aggregator. It turns out the syslog traffic was being routed to the firewall where it was being blocked rather than routed to the syslog aggregator. Thanks for your help. CLICK
[ceo jogs in]
CEO: Did we patch Megacorp last night? Are they working now?
Support: Yes, they are working now.
CEO: Excellent!
[ceo snaps his fingers and another soy latte appears in his hand as he turns around a jogs out. The support representative's head slumps over and hits his keyboard as he passes out in exhaustion. fade to black]
Unfortunately, it is like this in every company I've worked at in the past dozen years or so. I believe this is close to reality in most companies. Had they started out passing Joel's test, I believe it would eventually deteriorate to this when it came to keeping paying customers happy. I've worked in a company that was chaos when I started, it moved to a more ordered development process and probably was within a year of passing most of Joel's test points. It then went back to chaos as someone decided to change the revenue goals. Non-developers usually do not care about process nor do they see value in keeping developers comfortable and productive.
This clearly has to change. I'm hoping one of these top-tier MBA schools decides to offer classes on how to run a profitable software company. Maybe then it will catch on that making software and being profitable requires more than just adding people to the sales and
marketing teams. Until that time, I don't expect much will change. Software companies will continue to come and go and everyone will still believe it was mostly based on the failure to pump out code fast enough to beat the competition.
Meanwhile, you need to make money consulting. There are many more FSCKs out there than there are Fog Creeks. Finding the FSCKs are easy; just drive by in the morning and see if there are developers sleeping on the front lawn. Finding the Fog Creeks is not so easy. Holding out for the hard to find companies just doesn't pay the bills.