I liked this post written by Rob too much. It is very correct.

  1. Being Set Up to Succeed
  2. Having Excellent Management
  3. Learning New Things
  4. Exercising Creativity and Solving the Right Kind of Problems
  5. Having a Voice
  6. Being Recognized for Hard Work
  7. Building Something that Matters
  8. Building Software without an Act of Congress
  9. Having Few Legacy Constraints

You can read it online here