Mine may be a special case, so I may learn more from the readers here than advice some!
== Background (Combination of breadth and depth across EE and CS) ==
Electrical engineer by education, I am a full-stack "technologist" covering everything from semiconductor device physics to analog/digital circuit design to software (C/C++/Java/Python) to specific application domains (electronic displays, natural language understanding, MEMS/sensors, digital image processing and computer vision, augmented reality, thin-film optics, etc.) I also have experience as a team-lead, project and people manager and lead technology architect. Thanks to Coursera, I feel comfortable with more domains including machine learning, databases, etc., though have limited experience with them.
Needless to say I cannot be an expert with all of the above with just 13 years of experience, but have generally impressed folks in their respective domains who see me as an expert in their domain sometimes without realizing that I am doing the same across several domains. An optics guy with more years of experience than me once asked me thrice about my background in the very same meeting as he could not digest the fact that I was barely an optics guy at all.
== Result ==
Within any given job, it does not take people long to recognize the combination of breadth and depth that I have. But this is still a few months for recognition within the team (scale of 5-10 people) and a few years for within the company/department (scale of 100-300+ people).
Moving to a new job brings its own challenges. While everyone who knows me tells me that I should be in high demand, most of the jobs do not demand that broad an expertise, which often means (1) they are not ready to pay :-) for it, and (2) the job does not excite me enough. There are architect-level jobs which are an ideal fit but they are not most of the jobs statistically.
My salary levels (including cash bonus/stocks) have gone well above 200K per year consistently for my last job in the bay area as they recognized me as indispensable for the project that I was leading (~70 people) due to (1) inability to find people with the needed breadth (generalization), and (2) my being on the specific project for several years (specialization). Note that while I was leading a big team, I was still doing a lot of technical work including coding on a weekly basis.
== Advice ==
Some comments here have advised on generalizing / specializing. In my opinion though they are both bets you are place on your career. If you become industry expert in a specific domain and that domain ends up expanding over the next decade, you end up expanding too. Like everywhere else, you have to anticipate the future and be in the game. So generalize to keep your mind open and prepared for new challenges future can bring, but also specialize in an area that you expect to be in demand in the future.
Two, in my experience, high salaries do not come by themselves (i.e., just by you having the skills and experience). You have to create a path for it consciously by constantly figuring your own potential and (asking for) moving towards roles of higher responsibility. You need to time job switches according to your situation -- becoming specialized in skill needed by one company makes you highly valuable for them (= potential for higher salaries), but also fall in trouble if your project/company does not do good in the future.
Specializations that many companies need that also pay highly would not generally remain specializations for long as more people should pour in -- unless there is some barrier to entry like years of education / experience, them failing to recognize the value of this specialization, or simply aptitude or intelligence. The latter does not show up on your CV and so requires using your network and recommendations, which by itself takes several years to build.
Next to generalizing across a wide set of domains is gaining mild levels of familiarity with them just enough for you to become comfortable with the terminology and trends in several domains. One of the things I have found helpful is to read the otherwise often ignored first two chapters of books in multiple domains. I now find MOOCs much better though. My latest has been a course in human physiology, which turned out to be quite a challenge though I passed. Phew! :-)
Lastly, you have to constantly strive to keep your brain sharp, challenge yourself and take risks as others have noted.
== Background (Combination of breadth and depth across EE and CS) ==
Electrical engineer by education, I am a full-stack "technologist" covering everything from semiconductor device physics to analog/digital circuit design to software (C/C++/Java/Python) to specific application domains (electronic displays, natural language understanding, MEMS/sensors, digital image processing and computer vision, augmented reality, thin-film optics, etc.) I also have experience as a team-lead, project and people manager and lead technology architect. Thanks to Coursera, I feel comfortable with more domains including machine learning, databases, etc., though have limited experience with them.
Needless to say I cannot be an expert with all of the above with just 13 years of experience, but have generally impressed folks in their respective domains who see me as an expert in their domain sometimes without realizing that I am doing the same across several domains. An optics guy with more years of experience than me once asked me thrice about my background in the very same meeting as he could not digest the fact that I was barely an optics guy at all.
== Result ==
Within any given job, it does not take people long to recognize the combination of breadth and depth that I have. But this is still a few months for recognition within the team (scale of 5-10 people) and a few years for within the company/department (scale of 100-300+ people).
Moving to a new job brings its own challenges. While everyone who knows me tells me that I should be in high demand, most of the jobs do not demand that broad an expertise, which often means (1) they are not ready to pay :-) for it, and (2) the job does not excite me enough. There are architect-level jobs which are an ideal fit but they are not most of the jobs statistically.
My salary levels (including cash bonus/stocks) have gone well above 200K per year consistently for my last job in the bay area as they recognized me as indispensable for the project that I was leading (~70 people) due to (1) inability to find people with the needed breadth (generalization), and (2) my being on the specific project for several years (specialization). Note that while I was leading a big team, I was still doing a lot of technical work including coding on a weekly basis.
== Advice ==
Some comments here have advised on generalizing / specializing. In my opinion though they are both bets you are place on your career. If you become industry expert in a specific domain and that domain ends up expanding over the next decade, you end up expanding too. Like everywhere else, you have to anticipate the future and be in the game. So generalize to keep your mind open and prepared for new challenges future can bring, but also specialize in an area that you expect to be in demand in the future.
Two, in my experience, high salaries do not come by themselves (i.e., just by you having the skills and experience). You have to create a path for it consciously by constantly figuring your own potential and (asking for) moving towards roles of higher responsibility. You need to time job switches according to your situation -- becoming specialized in skill needed by one company makes you highly valuable for them (= potential for higher salaries), but also fall in trouble if your project/company does not do good in the future.
Specializations that many companies need that also pay highly would not generally remain specializations for long as more people should pour in -- unless there is some barrier to entry like years of education / experience, them failing to recognize the value of this specialization, or simply aptitude or intelligence. The latter does not show up on your CV and so requires using your network and recommendations, which by itself takes several years to build.
Next to generalizing across a wide set of domains is gaining mild levels of familiarity with them just enough for you to become comfortable with the terminology and trends in several domains. One of the things I have found helpful is to read the otherwise often ignored first two chapters of books in multiple domains. I now find MOOCs much better though. My latest has been a course in human physiology, which turned out to be quite a challenge though I passed. Phew! :-)
Lastly, you have to constantly strive to keep your brain sharp, challenge yourself and take risks as others have noted.