I would say that if you're going to be in software development/engineering, that if you're not the type of person who goes home and learns new software dev tricks, explores current and upcoming tech, and tinkers/codes up your own apps (or sites), then don't even bother thinking you'll get to the upper tiers.
You have to have a strong, almost obsessive, passion for what you do - have to be willing to work long hours to do something you love, and be willing to contribute positively within a team, and above all you have to have an eye for detail and a mind for working out solutions to sometimes highly challenging puzzles. If you think you can just coast or "put in the hours", think again.
Finally, don't let self-doubt prevent you from following your passion, and don't be afraid to push boundaries even when others are saying think small. If I had done so when I started out, I would have never have gotten where I am today and would have likely ended up one of those mediocre devs that just serve to fill up cubicles and churn out below-average work.