Going for a promotion in software engineering is difficult work, particularly in technical organizations.
You certainly have to work very hard in order to get a good rating for performance reviews. But just hard work is not enough by itself. An important requirement for promotions and salary raises is a critical contribution to projects with high impact. High impact means the project has to succeed and preferably make the company a lot of money, or at least enable other departments and teams in the company to work better and make more money. (Projects that improve the company infrastructure would count in the latter category.) Critical contribution means you have had a critical role in the success of the project, that the project could not have succeeded without you. If you have had a leadership role that brought together a lot of different cross-functional teams, that is even better, and your contribution is regarded as even more critical.
Sounds kind of reasonable so far, although one can still have some criticisms for this process. If you are a perfectly capable and skilled engineer who ends up on a dead-end project through no fault of your own, your career opportunities would be severely stunted.
In many technical organizations, the criteria for promotions get even more difficult and, in my opinion, a lot more harmful ultimately to the organization’s health.