While normally I do agree with most of your work, observations, suggestions… this is one place I simply can’t both as a career software dev, instructor, and student.
It’s my belief anyone can be anything if they have sufficient drive. That said, not everyone can be anything as they simply lack the drive to accomplish that goal.
The first four years
I believe you can say in the first four years of any career path you can determine if it’s a good fit or not. Not that it’s impossible for someone who is less than a good programmer can’t become one after four years, rather you can usually determine if a person has sufficient drive to become one after four years.
Improvement over time (or regression)
That said typically after the four year mark you can tell if someone will advance in their career in that role or if they’re doomed to regress if they don’t expand. If a person has the drive and the passion they’ll perpetually learn and expand their understanding as a developer (both in technical ability, as well as being better at understanding when technical approaches are perhaps not the right solution) if a person lacks this drive they tend not to expand their knowledge meaningfully and ultimately their knowledge becomes less valuable as the world transitions to newer approaches. Typically there is no pacing change, you’re either getting ahead, or falling behind.
The bad to good and good to bad
In any career path you’ll have people who spend their first years as a bad developer then have that wake up moment where suddenly their work is more meaningful and become a much better developer. Just the same you’ll have an excellent developer who finds their work less meaningful and the quality of their work regresses rapidly.
It’s all about motivation. If your motivated enough you can accomplish what seems super human, but motivation is one of those fickle things that comes and goes. We all have passions we’re motivated about and things that suck the motivation right out of us.
That said, most people don’t change drastically. If someone becomes a developer because it pays realistically the motivation just won’t be enough to drive them to be great. Sadly more Great developers regress than other developers become great. Simply because to few have the drive to be great, and in the wake of ambitious projects failed the great can become disheartened and demotivated.