Classic Mistakes in Software Development
stevemcconnell.com.nyud.net
stevemcconnell.com.nyud.net
The problem with private offices for developers, which is how I read #6 as advocating, is that it separates developers and cuts down communication. If you're a developer you're generally working with a team, and this has no team component. Joel got it right IMO: http://www.joelonsoftware.com/items/2008/12/29.html
EDIT: Something came up and I didn't get to finish my thoughts on this topic. You need to be able to strike a compromise between privacy and for focus, and openness for communication and making sure that the team has a single, unified vision. Joel does that well by giving each developer an office with glass walls. Everyone is approachable, and you can see what they are doing, pop in and ask a question, etc... But the distractions of office noise and chatter are cut out.
The proper way to use IM at work is to set it up so that you notice you have queued messages, but this doesn't distract you enough to leave the zone.
This needs to be coupled with a policy that truly urgent AND important requests or questions come via phone or in person, and that there should be no expectation of an immediate response to an IM even if the person's status is "available".
But, as usual, the good programmers have already figured this out for themselves. The rest of your programmers (the ones you need to worry about), aren't going to figure this out for themselves and probably won't follow the policy when no one is looking.
I'm not saying "down with IM", but it can be a REAL time-waster.
The word that first popped into my mind was "flexible". Developers should be free to utilize open, collaborative spaces when necessary (by communication with each other about that), as well as take time in the office or elsewhere to dig deep into a focused design or implementation project.
It depends on the work, of course.
I did find #16: Contractor Failure to be relevant in HN land. I have personally dealt with several startups started by business types who contracted all of the product development offshore, only to receive a product that just didn't quite make it, particularly in infrastructure. If you are going to do offshore work, you need a resident expert to manage it.