As someone who used to be an engineering manager, I was always surprised at how inefficient the division of responsibilities seemed to me. I mean, when I was an eng. manager, a substantial portion of my time was just taken up by logistics - like when we did a move to a new office building, a huge time sink was stuff like seating charts. Perhaps a company as big as Google has more folks taking care of stuff like this, but I still think the following breakdown makes sense:
1. A "technical mentorship" role: someone who codes, but is also explicitly responsible for skills growth and technical feedback of ~5 junior engineers. This person would not be responsible for stuff like salary/raise negotiations, promotion decisions (but would obviously feed into that, more on that below), logistics questions, etc.
2. A "directing manager" (obviously that name kind of sucks, but I didn't want to confuse this with other "director" or "manager" terms). This person explicitly does not need any technical skills. They are responsible for all logistics/salary negotiations, etc. They would be responsible for around ~5 technical mentors, so then up to 25 people under that. Promotion decisions, for example, would be made amongst the 5 technical mentors, deciding who on the team is most deserving to move up. But then the actual salary decision would be made by this "directing manager".
I'm sure this could be tweaked, but the overall idea is to separate technical vs. non-technical skill sets more efficiently.