I took my first programming job with the intent of staying 3 years and then getting a new job that would pay me what I was worth.
I got very lucky and they kept pace with what I could have gotten elsewhere for about 5 years. At that point, I stopped getting raises and about a year later, switched jobs for that 40% raise.
It's pretty much the norm for IT until you get to your pay level. It's complex, but I think it's mainly that it's hard to justify pay raises beyond what a job is worth and actual promotions are hard to swallow for management, especially if they don't need someone at that level.
When you left each job, they probably filled it with someone making about what you were when you left, but the new job you got was more demanding and better-paying.
I think for the first part of your career, aiming for pay is the right choice. After a while, the pay is fairly settled and you can look for other compensation instead.
I got very lucky and they kept pace with what I could have gotten elsewhere for about 5 years. At that point, I stopped getting raises and about a year later, switched jobs for that 40% raise.
It's pretty much the norm for IT until you get to your pay level. It's complex, but I think it's mainly that it's hard to justify pay raises beyond what a job is worth and actual promotions are hard to swallow for management, especially if they don't need someone at that level.
When you left each job, they probably filled it with someone making about what you were when you left, but the new job you got was more demanding and better-paying.
I think for the first part of your career, aiming for pay is the right choice. After a while, the pay is fairly settled and you can look for other compensation instead.