if the candidate within is qualified for the position. i wouldn't promote a junior developer (less than 3 years experience) into a senior lead position just because he's a great developer and I don't want him to leave. losing him as a junior developer is far less detrimental to the company than having an unqualified lead...even if a few years down the road he might turn into a great lead. but giving him 2-3 years to develop into that when there's a good chance he won't even still be w/ the company at that time isn't worth it to me.
if i thought JP would be here 10 years from now I'd say this is a great promotion. but these guys come and go so frequently anymore that it's not about promotion anymore in coaching...it's about finding the guy that's best for the position this year, and next year, and maybe the following year. after that it's all bonus.
(software companies in case you can't tell)
People leave companies for a variety of reasons but typically advancement and more money are the usual ones. If you have an outstanding junior developer then why wouldn't you at least consider promoting him or her?
Why not give the junior a reason to stay as opposed to a reason to leave? It sounds like, and this is merely conjecture on my part, that you treat the juniors in your company like they're not worth much and completely expendable. Nothing will foment disloyalty, and leaving at the first chance one gets, than to not be appreciated by upper management or the owner of the company. Now if I'm wrong or off base then I apologize, but that's the way your post comes across.
In relation to college football, any coach worth his salt wants to be a head coach. Very few, in fact probably only a tiny minority, are actually happy with being lifetime assistants. Now coaches that get a head gig, don't make it, and then realize it's better to be an assistant are more numerous. But this notion of having a coaching staff intact for 10, 15, 20+ years is almost unheard of anymore.