The problem is you have to think a year ahead, but I don't think that's such an issue.
In other words, once the employee has the skills to earn $85k, why should she wait six months for her giant raise when she could just switch employers and get the giant raise right away?
Not that this is the reason why the fantasy scenario doesn't work - if it were reliably possible to turn a raw recruit into DHH with six months of training, the fact that we'd have to pay market rates the entire time would be the least of our problems. Indeed, it would not be a problem at all.
A real reason why more companies don't try training up raw recruits is that (a) running a school is a specialized business and (b) the yield is far less than 100%, so it only works at scale. You need to admit - optimistically! - 10 or 20 bright and motivated nonprogrammers in order to graduate one person who, after six to twelve months of training, can be expected to successfully attack problems like:
"A customer has called; he has an obscure problem with his web site. Help him debug this problem over the phone. You have no access to the code or the server."
or
"Here's a legacy codebase that spans 267 files, two major versions of Rails, and three generations of programmers. Improve it. Don't break it, though, because our revenue depends on it."
or
"Here's a collection of 175 cloud instances running in Amazon. Build a system that reliably backs them all up once a day, with no downtime, and that can verify on demand that those backups exist."
or even something as "simple" as
"Here is a Wordpress site with a handful of specialty plugins installed. Here is an empty Git repository. Fill this Git repository with Rails code that implements a site that looks and acts exactly like the Wordpress site."
[1] http://www.azlyrics.com/lyrics/andrewbird/howyougonnakeepemd... - this song is now 95 years old, so I guess I better footnote it!
Why couldn't companies hire actual developers with no previous experience in {some_tech} or {some_framework} and train them in said tech/framework?
It seems companies, just like recruiters, feel safer when they hire a "rails dev" for a "rails position" when in fact a good programmer with zero rails experience would be much preferable to a mediocre programmer who has some rails experience.
PS: the song is excellent but I couldn't find any recent cover; this old guy with a Banjo is killing it: http://www.youtube.com/watch?v=FlUExq2hNBU
But it works best if you have an existing team, trained in the technology, of sufficient size that it can afford to spend a little time mentoring, and with a long-term outlook.
There are teams like that who use Rails. But, as it happens, Rails is also a favorite tool of brand-new startup teams who are already critically overworked and who probably won't be around in six months. And it's a favorite tool of one- and two-person teams: When a one-person team loses a developer, the new hire has no mentor available. So there's plenty of openings for pre-educated Rails developers.
Mind you, there's also the cynical explanation: It's more "efficient" to advertise for "rails devs" because you can screen the resumes so much faster. Those who can't answer trivia questions about ActiveRecord syntax are out! This would, of course, be dysfunctional. But the whole job-ad system is already so dysfunctional that this particular bit of dysfunction may be lost in the noise.
In order to solve the problems you mentioned, it's confidence and a particular mindset you need, not simply skill. I had overlooked that.
I think you could actually keep employees, though, with the right management. There are lots of reasons she would wait six months before the giant raise. Money isn't actually the main motivator for a lot of people, and with the knowledge that she is appreciated and people depend on her as well as the fact that she will be better paid upon contract negotiation at end of term, she's more likely to stay.
Oddly enough, lots of people want to have a career. They just don't expect to get loyalty from a company anymore and so don't give a company theirs.
If training is specialized, why not pay for people to go through some external training program in exchange for contract? I know some companies do this now for Rails and it's common for other skills.
Master craftsmen have apprentices. It's a model that works, that's all I'm saying.
You could do it with contracts & law. Offer 10 year salaries-index-linked-at-a-minimum employment contracts. Employment contracts that specifically state the employer won't do things like outsource, (or if you're in USA won't do 'at will'). Employment contract that'll give 5 times the legal minimum of redundancy leave. Require that upper level management/directors don't get bonuses if there's been any pay freezes or pay cuts. Lots and lots of little things like that might be a way.
This will (obviously) restrict the business, and limit its resaleability. ("Come buy us out, you just have to pay 50 people for the next 8 years").