Immediate boss: You step into any pub in bangalore on a weekend or even weekday, after few drinks IT guys invariably start cursing/blaming their immediate boss for not recognizing their work,for pushing them hard, for office politics over, for failed promises regarding onsite or some times just for the sake of it!. In my opinion if a software engineer is unhappy in most cases it is directly/indirectly related to his immediate boss. So the "BOSS" ranks number one in the reasons for making a guy to shift his job or at least triggering the process :).
Money: CTC is what all about for a SE,it is the only benchmark he can use to rank himself. Any offer with even a slight higher money can make us to think about the shift. It is RAT RACE out there and everyone wants to win it, Invariably there is always somebody getting more than you and somebody getting paid less than you, but very few people realize or appreciate this.Apart from hike the only other way u can increase your market value is the "job switch".
Boredom: For people who don't face/ care about above two problems it is boredom with the current job that make them to look for new opportunities. When you spend more than 4 years in one company there is always a part of you screaming for the "CHANGE" , same people,similar projects,similar challenges (how can it be a challenge if it is similar? :P) make you wonder whether you are in a GOVT job.The boredom makes people less efficient and productive.
Job security: The only jobs secure in India today are the one in public sector. No company can provide it's employees an absolute job security yet there is a level of security that people expect. The IT peoples' habit of overspending and relatively above average life style with little to be saved for future make the situation more complex.
Others: There can be other reasons as well for an employee look for change like, preference of place, job satisfaction, domain change etc etc.