Agree with all of Marco's suggestions and can add to that: experience. Experience of being on plenty of projects that were successful and less than successful. Some things you just don't know that you need to know until you need to go and find out how to solve a specific problem. And to have the drive to get through the sometimes hard to solve issues, having the passion (fun!) for what you do will help a lot!
Marco Alka
Software Engineer, Technical Consultant & Mentor
Here is a list of 8 things which come to mind: