Having recently had to do a lot of hiring and also played too much FIFA, I couldn't help but wonder if a argument couldn't be made for software engineering job contacts to work more like soccer player contracts. One issue is you might hire a junior dev, train them and just when they start to provide value BigCorp makes them an offer they can't refuse and you are left with the bill. If on the other hand the was a contract where a new employer had to pay some amount of money to the previous employer that might help with the situation. Hiring a upcoming super star and coaching them might turn from a risk into a business model in itself. Of course there are lots of potential issues that would need to get figured out, but at least for junior devs this might be a net win.