I'm interested in really understanding this phenomenon. The reason is that businesses seem to be acting irrationally. That may indeed be the case, but I have found that when you dig deeper, you often will discover at least some rationality to how firms behave in market environments.

Here's what I find irrational: companies often wait until valuable employees generate an outside offer of employment before they hand over substantial wage and/or title increases. This process requires that an employee become dissatisfied enough to go through the process of interviewing, and in software development, that isn't necessarily trivial (it requires, in many cases, re-studying for a data structures and algorithms exam, often taken at a whiteboard in front of a group of people, which is quite stressful for many people). It sends your valuable employees out into the market where recruiters and hiring managers have a chance to pitch a job switch to them, potentially getting them excited about a new opportunity. And it forces the employee to put him or herself in a potentially vulnerable position with the original employer. I have read articles saying you should never take a counter-offer, because you be forever viewed as a flight risk. I think this is way too extreme, and that the process is understood and tolerated, but the effects of threatening to leave do sometimes persist in a more moderate form.

I'm trying to think of the reasons for this custom, why it may not be as irrational as it seems. One possibility is that employers actually don't entirely know who their top performers are, at least in software development. They don't fully understand it, and they don't have numbers to point to like in sales. It could be that for some firms, generating an offer is the only way to a software developer can signal his or her value in a way that the employer can understand.

Another factor, I think, is the difference in extroversion and comfort with negotiating between many software developers and managers/entrepreneurs. I do think that many people who hire software developers have trouble understanding the reluctance to negotiate. To them, negotiating or asking for something is such a normal, easy, run of the mill event, that they have trouble believing someone would go through dozens of hours of interview prep and days of white boarding exams rather than just saying "gimme".

Lastly, this could be one of those downsides to a heuristic that is more optimal for other reasons. Perhaps there are enough people who just sorta don't look for new jobs, and can be paid less, that it's worth losing some of the workforce this way. Some of them will stay with counter offers, and if you follow this process, you may save more overall by not paying many developers actual market pay. This is more common than you'd think - many people in SF, for instance, who bought property a long time ago or who have very strong rent control locked in don't really think of maximizing their pay, and may not even really know what others are getting paid out there.

Just for the record, though... I'm skeptical about the above argument. It seems like that would explain why businesses tolerate a little bit of job hopping, but not an epidemic.

Anyone want to take a crack at it, come up with a reason why the current practices may be more rational than they seem? Not saying they are, just interested in what I may have overlooked.