- The company's prospects and projects are limited. Shopping comparison was cool in 2003, but it's 2011, and you have an aging flagship product with limited growth and a bunch of half-assed initiatives that never go anywhere because there's too much red tape to actually produce code and the executives are too busy getting fired every six months have any consistency with strategy.
But if you're getting tech talent "poached" in that case, you're probably getting all your talent poached, so let's talk about the other scenario.
- The engineer's prospects are limited. So few technology companies have any sort of individual contributor advancement path. A star performing sales guy goes from junior sales associate, sales associate, senior sales associate, junior manager, senior manager, etc every 6-12 months, with commissions and bonuses for strong performance.
The star engineer goes from "software engineer" to "senior software engineer" after like, 3-5 years, and then what? Either you figure out a way to get kicked into some sort of manager role or you just kind of hang around getting a pat on the back and a 6% raise every year until some company swoops in and "poaches" you with a 20% raise, which naturally seems astronomical by perspective.
Almost every manager I've had, I've had some conversation like this: "You have to give Joe a raise, and a BIG one. I know he started here out of college, but he's been here 3 years now. Because of his talent and domain expertise, he is easily more productive than any theoretical 'senior engineer' we could hire. Even if he's relatively happy, if you don't give him a raise, it's going to be way too easy for some recruiter to throw out salary numbers that will at least pique his interest."
And instead of bumping Joe's pay by 30% (which would still probably be less than market rates), he gets "poached," and now we have to hire some "senior engineer" at 200% the salary who tries to convince us to rewrite everything in Java for six months until he gets fired.