I've come to realize that the personalities of software engineers fall into three basic types: The Architect, The Engineer, and The Programmer
An Architect takes a need and/or desire and combines it with an environment to produce a solution.
An Engineer takes a solution and creates a detailed and concrete design.
A Programmer takes a design and make it into a reality.
All software engineers I know can more or less handle all of these and produce adequate results, but most shine in one area. Some can excel across two areas. A very rare few are truly wizards at all three.
Its important to know who you are. I've seen projects sunk by Architects who demanded to be Programmers, and I've seen just as many sunk by Programmers who demanded to be Architects. None of these is inherently superior or more important than any of the others. And each requires special abilities and the right mentality to be successful. The best, and usually the happiest, engineers are the ones who honestly know where their strengths and passion lay at the current point in their life and just go with that.