Further, try finding, training, and developing talent straight from high school or earlier. It worked for Major League Baseball.
Also, ditch tech recruiters and in-house HR recruiters and let your engineering managers actually do the recruiting and hiring for their own teams. That's IMO the basic duty of a manager (aside from seeing that work gets done), but most orgs seem happy to have their managers do everything else but recruit and hire.
Also, I rent a 15x15-foot office for $175/month (on a month-to-month lease). That's typical in my area (Midwest). Give each employee a $250/month budget (to also account for Internet and other costs) and hire them remotely on the condition they find their own office. Let remote employees in the same city go in together to get a shared, remote office.
For an industry which rejects maybe 99% of candidates and has high turnover (my guess, every 2-3 years someone leaves your average programmer job), it's really your own fault for not having an easier time finding/keeping talent. Hint: give people raises based on current market rates instead of based on each person's current salary. Also, maybe you can take some of that commission you'd otherwise give a tech recruiter and start making riskier hires while also increasing your training budget. Put the riskier hires on their own team, isolated from the top talent, and let them work on their own projects while under the guidance of mentors and educators. Finally, stock options, foosball, and ping-pong are not acceptable substitutes for wages and 40-hour weeks, and you're fooling nobody except the least experienced, which is maybe why you have to reject so many candidates.