I think the problem comes from promotion being seen as a linear path, which conflates the two orthogonal values of programming skill and management skill. Getting managers out of programmers is a good thing, that's how you get managers that understand programming, which is important. However, manager is not always strictly an upgrade, or strictly a downgrade, from senior technician, in any sense. Management should be a separate, parallel career advancement path, and technicians (including but not limited to programmers) should have promotions (and raises!) available that recognize skill and add responsibility in the areas that they are best suited to, be that managing, or technicianing, or sales, or whatever.