In my experience, the best ways to maximize your income as a software engineer are to job hop, study data structures/algorithms, and learn how to market yourself. Companies rarely reward engineers who stay put.
Until you find a good situation and stick with it. A good situation shouldn't be discarded on a whim.
Edit: Furthermore, there's a well-defined career track for job hoppers, it's called being an independent contractor. You know what you're worth and you set your rate, and it's generally assumed that you know how long you're going to stay in a position when you start, and you only accept positions that are the length you want.