My company is having troubles finding good canidates 'off the streets' so we are looking to pull great programmers from other companies. My question is: What do you look for in a company to decide if you want to take the risk and change jobs?

I'm really looking for specifics. I know most programmers look at the environment, culture, and people. But what specifically about those areas are you looking for in a company?


First of all, I give the company the Joel Test. I didn't, and I'm kind of angry at myself for not. If you want to hire people, I would give yourselves the Joel Test and work toward passing it.


I'm in the middle of my job search right now so here is my feedback.

1) I want to see that the company is aggressively pursuing great candidates. One company I'm talking to is half-heartedly pursuing me and that makes me wonder if that's how they have pursued others.

2) Only one company has seriously asked me what I'm looking for in a job. The others just talked about their needs and didn't make room for trying to find a good mutual fit. If they don't take the time to ask me what I'm looking for it's an indicator that they aren't going to listen well later on in the job. There needs to be good two way communication in any good job.

3) They need to make it clear that they equip their developers with a great toolset. A question I always ask a potential employer now is if I would be able to get xyz tool to help do my job better. Only one company has unequivocally answered "yes, if it lets you be more productive."

4) I like to meet the developer team and managers to see that they are good at what they do, can communicate well and are friendly.

5) Last of all, is there good and meaningful work to keep me occupied? I think everyone at some level wants work that actually makes a real difference. It needs to be communicated that this company is doing work that makes things better.


I'd definitely agree with the Joel test criteria, however I'd certainly put a strong emphasis on interesting problems, I think great developers are interested in their work being as interesting as possible.

I'd also say using a lesser known language would pull people in believe-it-or-not; a company who actually uses something like F#, OCaml or Scheme will definitely stand out from the crowd.

I also think developers like the kind of Google-type perks - free drinks, meals, fun atmosphere, etc. - that sort of thing will pay dividends compared to the cost of implementing them.

Buying good equipment for the developers is just a no-brainer, as Jeff wrote about: http://www.codinghorror.com/blog/archives/000666.html.

That combined with the excellent points made by others on this post should be sufficient I think!!

  1. Good communication within the team and with the management. This includes clear definition of the goals and expectations.
  2. Management has clear goals of what they want to do for each project
  3. Engineering is allowed to do their jobs and interferences are eliminated. This may mean separate offices or it may be setting clear rules on who and how can bother engineering. While it is important for engineers to speak with users, customers, product managers, etc. there should be time alloted for that and not have everyone interrupt an engineer when he/she is trying to get something done.
  4. The tools needed to get the job done are available. This may include test equipment, servers, personal, etc.
  5. There is a culture on getting the product out there that is made well. Everyone is concerned with doing all the steps before the product ships to ensure that you're shipping something good. This includes writing documentation, doing testing, etc.
  6. Telling people what is going on and where things are going.
  7. Trusting your employees to get the job done. This means no micro-management, mushroom-management, etc. Believe in your employees and they will reward you with good work. Tell them the big picture and what the steps are to accomplish that big picture.
  1. I need to work at a company that values new technology and isn't afraid to, specifically, upgrade their infrastructure (development tools, servers, etc). The worst code seems to be written when companies allow themselves to get stuck with older stuff, particularly since good developers upgrade their own environments every chance they get, and either are unable to implement solutions easily with older software, or resent using older software and won't work there.
  2. I need to be able to present ideas, have them listened to, and have a chance of having them implemented.
  3. Good computers are a must. Not necessarily top-of-the-line, but if I have to work on an old garbagey laptop (and you can usually tell if this is the case when you ask about their infrastructure and development environments during the interview), that's a big hit against taking that job.

Quick list of the biggies:

  • Competitive salary/benefits
  • Interesting technology
  • Path for career advancement
  • Casual work environment (flex time, ability to work from home on occassion)
  • Decent commute
  • Stable company

Typically if people aren't already looking to switch jobs, it's going to take something amazing to get them to jump ship. Switching jobs is not a trivial thing to do - interviewing, starting over with seniority, coming up to speed on things in a new place, etc. Then there's always the risk that the new company might suck to work for or may get into financial trouble down the road.


I agree on the Joel Test as a set of criteria to know the development aspect of the company.

I would also take into account how the work appeals to me. For instance, if I was offered a job at Travelers Insurance writing some Claims application but had a chance to work on the next Twitter or Facebook then I might be more interested in the latter.

My philosophy is that you will do a good job and enjoy it if you are passionate about the work. It is pretty easy to take a job for more money but it rarely means much once you get used to the paycheck but the work is boring.


People. It's all about the people. The Joel test rocks for figuring out the potential success of the company. But I've been places that pass almost every piece of the Joel test and even have a good amount of brilliant people but simply don't work together well.

I've also been in a place where not everyone is a programming rockstar, but everyone worked well together and trusted each other. The engineers were proud of their team and took initiatives without the mis-management getting involved.

With the former team, we always shipped buggy and late. With the latter we usually shipped on time, with fewer bugs and with seemingly less stress. I think it had to do with a good team that was comfortable communicating with each other, knew each others' strengths and weaknesses and just generally enjoyed each others' company.

When I walk into an interview, I don't really care for the technical side of things -- most interviews consist of the same recycled questions on code, some problem solving stuff, etc. Having been through a few, it's usually not a challenge. I am interested in meeting the developers and asking them if they're proud of the team they are a part of. If they are, it's a good place. If they barely speak and everyone is heads down in their own trench, this place is not for me.


I think I'd have to start with the conditions at my current place of employment. There is a certain amount of inertia involved when you're talking about changing jobs, even if it's to a direct competitor located in the same building. The amount of force required to overcome the inertia can have two components: internal and external.

If I'm currently happy with my employment, then I am not capable of producing the internal force necessary to overcome the inertia. That means the external force has to overcome it all by itself. That's probably the most likely situation you find yourself in. That's hard, because the things you will have to do to make up for my lack of internal drive for leaving is high; as a typical example, you might have to offer at least a 50% salary increase, have a non-monetary draw (wow! it would be cool to work for XYZ!), have a location advantage, offer creative and unique benefits, or have a special work environment somehow (the smartest programmers in the world, all the admins are former playboy bunnies, etc, etc) - you might even need all the above. Different people will be attracted to different things.

If I'm currently unhappy with my employment, then it's much easier for you, because I'm supplying some of the force required to overcome the inertia. In this case, a 10% salary bump, or even a sizeable ($10K-$20K?) signing bonus might be enough. Telecommuting might be a plus for someone who is currently pulling out $1000 each month and torching it because of an hour-long commute. Some kind of assurance that things at XYZ company will be better than things at my current company, or that XYZ will be better for my career will help.

For me, specifically:

  • 20% salary bump (one of the reasons I would leave is that I think I'm underpaid for my qualifications and market)
  • small company (would like 12-16. I might consider a bigger company)
  • no long daily commute (a couple days a week with telecommuting is good)
  • talented co-workers
  • product oriented company

There are other more subtle things, but these are the things off the top of my head.


All programming tasks have the capacity to be just as dull. All IT managers are likely to be equally crap and annoying.

What I look for in a company, then, is the market they operate in - if I can interest myself in the goal at company level (and of course, I'm interested in coding at a base level) then I've got double the interest in my working day.

It's the difference between working as: 1) a programmer for the insurance industry (boooring but technical) 2) a cleaner in a sailing magazine company (yukky but interesting to look around) 3) a programmer in a sailing magazine company (yay x 2)


I run through these Q's and others when I do a target & evaluation:

  • Well run company - Do I understand the point of the business, how they've been successful, and what I can do to contribute to continuing and future success?
  • Well run IT division (if not the companies main business) - Is IT appreciated, organized, and forward looking?
  • Good people - Are potential coworkers talented, accomplished, articulate, friendly, team oriented?
  • Career progression opportunities - Can I ladder up in a timely fashion? Does the laddering process make sense? Is it heavily merit based?
  • Modern technologies - Will I be working with an in demand skill set that has growth prospects and is still evolving?
  • Interesting technologies - Am I actually interested in the technologies being used here? If not, why should I be?
  • Interesting application domain - Do I care about what the company is delivering? Why should I?
  • Good tools - Am I going to have a nice tool set, so I can focus on inherently interesting work, and not tedious, mundane, thoroughly been solved/automated work?
  • Continuing education support - Of course health and retirement benefits are necessary, but I want to keep growing, staying current w/ my disciplines body of knowledge so I can contribute here or elsewhere
  • Location - Do I like the area, is it family friendly, is it entertaining, is it walkable, is it mixed use? How often can I telework? How flexible is the work schedule?
  • Salary - Can I provide well for my family? Am I getting back what I've invested in myself?


and some extra vacation days don't hurt either!

Beyond those two obvious things, interesting work and good conditions.
I like to know that the company respects the job that I do and the team I work for.


Different things for different people. Perks, equity, higher salary, freedom, etc.

For me personally? It depends. If somebody wants to offer me equity, I had better be IN LOVE with what they are doing or they are wasting my time. If a job is boring as heck but the money or perks are right I'm willing to give it a chance.


In rough order.

  1. Feeling comfortable with the people I'll be working with. If I don't click with them, nothing else can override it.
  2. Do the employees seem happy? Do I get to meet the people I'll be working with?
  3. Is there a lot of turnover? Not just in development, everywhere in the company.
  4. Location and commute distance.
  5. Are the money and benefits good enough?

The things that really matter, like listening to the programmers, lack of micromanagement, etc., are really hard for candidates to assess during an interview. What candidates can do is look for things that, while they may not matter quite as much in and of themselves, can be a sign of whether or not this company values programmers (and other tech types). The aforementioned Joel Test is a great place to start. In addition I'd ask:

  • Do programmers get a good work environment? Private offices are best, of course, but failing that they should at least have cubes in a quiet part of the office, not right next to the sales guy who's on the phone all day. Can the programmers come in early or late to get hacking done without distractions or are they stuck in the 9 to 5?
  • Do the programmers get good hardware? A modern box with a fast processor and either a big screen (24" or better) or dual monitors (bonus points for getting both).
  • Do you use good tools. Using the latest cool thing may be a bonus (see The Python Paradox) but even fairly standard tools like .net or Java are ok. If you're trying to attract programmers to work in FORTRAN or COBOL, well, good luck with that.

Who would vote down Dana for that?

Anyway. . .I love where I live, so the only jobs I've considered over the past 5 years or so are ones that are closer to my house.

So, location gets a company in the door.

After that, it would have to be a combination of compensation, and my impression of the work environment, both of which are above satisfactory where I work now.


I'd look for something that is probably not possible to see, unless you work there for a while - professional, engaged and highly skilled employees, that are easy to get along with.

In no way have my places of employment lacked people like this, but there's always something that isn't right, some process that is lacking, someone that isn't pulling their weight, someone who's difficult to work with, and so on.

Given a place that has this type of employees, it is implied by the fact that they work there that the work is engaging and that the salary is above the pain threshold - otherwise they probably wouldn't work there.

Or perhaps I'm just rambling. In any case, I'm pretty happy right now. ;)


The most important factor for me is always the base salary. Everything else is subjective. The technology and work environment might be talked up in the interview. When I was interviewing for my last position I had two offers on the table. They both had the same salary but the job I took offered a sign-on bonus.

Guess which one I picked. I stayed with them for 8 years and worked on many different projects and technologies on several teams and at different locations. The project that we talked about in the interview only covered the first 12 months.


If you go through The Daily WTF you'll find many good lessons on how bad management causes you pain, and in many cases they end with, "Now I know to ask about X during the interview..."


Thanks for all the great input! I know this wasn't a specific programming question (sorry Jeff!). But there is definitely some useful information for me. We currently sit at 9/12 on the Joel test. It looks like we just need to do a better job of promoting this (and fixing the areas we are lacking).


I'd look in part for the "vibe" of the company while I am in their offices. Do people seem happy to be there, so-so, or are there scowls and yelling commonly heard? Is the development environment equal or better to what I have now? What changes are there that would make the new place better? What methodology is used? What cool stuff would I be using/learning/mastering?

Now for a few examples from former bosses or co-workers:

One of my former bosses left the company to go start his own company as this is what he wanted to do. Another left because the opportunity to work with someone specific to his former field was the big reason. A co-worker of mine left to go where the money was better. These are a few concrete examples rather than the theoretical, "What would I need for me?" sort of things