I worked for a couple large companies doing development early in my career. There main frustrations I felt were:
1. Raises were based more on how the company was doing rather than individual contribution. I remember one year my entire department was given a 4% raise. Everyone got the same regardless of how hard they worked.
2. Risk taking was only rewarded if things worked out for the best. Trying a new technology that ended up not working (even the failure didn’t impact delivery schedules or business goals) would result in a negative at review time. It encouraged people to not suggest new approaches or technologies in case they didn’t work. It was great for people who played it safe and didn’t try new things.
3. Management was always working to reduce development cost — meaning they worked to outsource our work if they could. I was in a meeting once where the CIO told my team he could probably outsource our work to a 3rd world country for 10-20% of what he paid us. What an ass.
On the flip side, many of the people I worked with are still there and have had stable salaries and good benefits in a job where they didn’t have to work that hard for years at a stretch.
I guess what’s best depends on what you want from your career and how driven you are to create new things and work on the edge of technology. Personally, I work now with startups and love that I’m always on the edge of what’s new.