best lesson for me was an HR manager explaining it to me, after finally after 3 years i asked pretty please to give a lil raise, i was still trainee after all that time.
he smiled and said he thought id never ask. made me senior on the department matching my input. and told me this exact fact. He said, why should i give you a raise if you seem happy where ur at? never complain, never ask, never get.
its harsh but its good to understand certain hashness. Then you can work around it, step over that bridge, and be more active in tracking your input, their expectations, and showing them the mismatch deservant of a raise or promotion.
its often peoples shyness or false expectations that get them in such a situation where they feel very under valued. they are because they under value themselves or dont know how to translate/express their value to another persons perspective. another harsh truth. Especially if you are neurodivergent, the way you see things and another is further apart, so your words need to do more to reconcile that difference to generate mutual understanding.
in an ideal world this would not happen or be needed, ofcourse. but we dont live in an ideal world, and there is no switch to flip to make it an ideal world.
I don't doubt at all that a lot of software developers have had the experience you describe, but when you describe it as intrinsic to the economics of commercial software development, I think you're bound to end up in some weird places.
But it's common and extremely frustrating for anyone neurodivergent to be told "but everyone feels that way" whenever they discuss any of their issues.
But I've repeatedly told over the years by clever libertarian software engineers that I don't need a union because it's better to just go to the boss with your concerns, instead of making things so adversarial.