Recently I have been working with a wide range of software engineers on a new project. The experience with various engineers inspires me that there could be at least 3 levels of software engineers, when looking at what they are actually talking to.
The first level engineers talk to code. They focus on writing good code that works, easy to understand and maintain. When a task is assigned to them, the engineers will start immediately designing and implementing the code; when a bug is reported, they step in the code with a debugger to find out which line of the code goes wrong. Many of us starts from this level.
The second level engineers write good code, but they talk to machines. Their focus is on the signals that get in and out of the target machines. They understand the machines don't talk in C++, not even a 1-and-0 language: some will talk to you at 3.5 volt while some would only listen to you and reply back when you raise your 'voice' to 5 volt. The engineers would expect noises like ESD when talking to the machines and would prepare signals not to be buried by the noises. They make sure the code written gets translated to the machines and vice versa.
The third level engineers are able to write good code and they know how code would turn into signals that interact with the machine, but they talk to people. There is no considerable size of project that could be accomplished by one engineer. The last type engineers, while capable of detailed design and implementation, could look at a project from a higher view point: How much cost would be added to the product with this new feature? How would the new code be tested? Can we fit this change request into the current schedule? Are there some clients that would interact with this new component? and so on. With the questions in mind, the engineers will work with the hardware, finance and marketing teams on on the return of investment; they will work with the test team on the test plan; they will work with the management and manufacturing on release plans and factory details; they will work with other team members across firmware and software on inter component communication and synchronization...
What is more, the third level engineers usually play as leads of a group or a team. They make sure every team member gets the opportunity to learn and grow. They get things done with simplicity and efficiency. They are accountable for planed delivery. Many times you will see them talking to people, but not coding in the cube. But when they code, they do it right: they lead by example.
After I realize the three levels, I find it interesting to observe and categorize the engineers that I work with: not to say being a first level engineer is not good, it is just that understanding the differences between the levels helps me learn and work better.
Hope it helps you, too.