It's a long article, so let me excerpt a few bullet points for those don't have enough time to read the whole article:
1) Don't just hire local talent, hire nationally, even globally. There are lots of successfully companies embracing working remotely.
2) Evaluate the value of a person's contribution based on how much they have done rather than how much time they showed up (what's done >> what to do). Some effective way to measure so is to track Github commits to see how many bugs they fix, etc.
3) When hiring, hire by audit. Pay the interviewees some hourly rate to finish a mini-project that is a part of your company's real work (e.g. add a feature), and let their performance in the mini-test be a large factor in deciding hire/no-hire decision. Also, try to hire from your tech community.
4) Effective communications for remote work: real-time chat, video chat, online bulletin board, weekly team status report.
5) Some big drawbacks of remote work are: brainstorming is hard + mentorship is hard. Luckily, some of the companies don't need brainstorming much. And for mentorship, don't hire people that need extensive mentoring.
I've been thinking about this issue lately. Jr developers, interns, fresh grads, etc all have some alluring properties: they are cheap(er), have few(er) bad habits, and are more open to being coached into their roles.
Netflix, on the other hand, hires no folks like this.
My current company is comprised almost exclusively of newer engineers. It has put me in a strange position as someone with > 10 years experience in my field when that long ago, most were in high school.
I think the reality is that only large-ish companies have the slack time necessary to devote to mentoring. Companies have to get to a certain size first.
At a startup, you are running full tilt 24/7 by necessity.
Startups are not (usually) engineering firms with super high quality requirements. My first job (still in college) was at a startup. I was the only developer under the CIO. It was a java webapp and both of us barely knew Java when we started. It worked pretty well, we had minimal serious quality issues compared to most companies I've worked at, we had zero unit tests and a shoe-string budget. That company is still going strong and has made millions off the project I started practically on my own over 10 years ago.
It can be argued that startups require a broad range of skills in a wide array of technologies, and you don't get that with inexperienced people.
In a mid-sized organization you can work on a java webapp - as in your example - and possibly only on a part of that java webapp. In early stages of a startup, you're likely to have to know your way around the webapp's frontend, backend, mobile app/mobile web adaptation, handle SEO, plan for scaling, be a part DBA, handle server administration DevOps style, and do all kinds of internal business process automation unrelated to that product you're building. You'd need to be a jack of all trades at beginning - since there's noone around who's specializing in that other stuff - or spend half of your time becoming a jack of all trades.
I installed the servers in the rack at the data center, configured the load balancers, installed and configured the database with a hot backup and wrote 90%+ of the application code when we went live. You don't need people with all that much experience.
Well, mentorship was mentioned as being hard to do remotely. So, don't hire remote interns or remote junior devs. That seems like reasonably good sense to me.
But of course "remote" is a reciprocal relationship. If the senior dev is remote and the junior dev is local, it doesn't matter, the senior dev still can't mentor the junior.
1) Don't just hire local talent, hire nationally, even globally. There are lots of successfully companies embracing working remotely.
2) Evaluate the value of a person's contribution based on how much they have done rather than how much time they showed up (what's done >> what to do). Some effective way to measure so is to track Github commits to see how many bugs they fix, etc.
3) When hiring, hire by audit. Pay the interviewees some hourly rate to finish a mini-project that is a part of your company's real work (e.g. add a feature), and let their performance in the mini-test be a large factor in deciding hire/no-hire decision. Also, try to hire from your tech community.
4) Effective communications for remote work: real-time chat, video chat, online bulletin board, weekly team status report.
5) Some big drawbacks of remote work are: brainstorming is hard + mentorship is hard. Luckily, some of the companies don't need brainstorming much. And for mentorship, don't hire people that need extensive mentoring.