The biggest issues are always soft stuff.<p>Salary isn't a big deal -- once you have a senior dev salary, a few grand extra doesn't make a difference in lifestyle. A good developer can always leave and go to work for the big guys (Google/Facebook/NetFlix/Amazon). The reason they don't is that it's hard to make an impact at a big company.<p>Company size doesn't matter. Some big companies have small groups that do cutting edge stuff, and some startups are run like big companies and/or have bad managers. People don't leave companies, they leave bad bosses or bad cultures.<p>Company reputation matters when trying to find a place to work. But once you work there, the outside perception doesn't matter as much (because you're working to change it, in theory.)<p>The 'rules' really matter. If a company has a dress code, a punch clock, or requires a specific college degree, they are cargo culting. You can assume that they have no idea how to treat knowledge workers.<p>The best piece of advice I ever got was "don't be the smartest person at your company". If you aren't surrounded by awesome people, then you will be brought down to their average. (See also "the Dead Sea Effect" for IT.)
I'd say almost always it's the soft stuff: Respect, stress, suitable challenges etc. I know very few Senior Devs who've left a great place to work just for more money.
Here in South America, usually is more money, devs aren't paid that high.<p>Another factor is boring projects, but as you grow older, you start realizing that boring projects pays the bills.