Getting a job using any certain technology is kind of a chicken-and-egg problem. You can’t get a job using Ruby on Rails until you have experience with Rails, but then you can’t get Rails experience until you have a job using it. Frustrating.
Is there a way around the catch-22? There is.
But first, here’s what not to do
One popular piece of advice when you’re trying to break into new skills is to work for other people for free. I don’t think this is the absolute worst idea in the world, but it does have problems. Here are some:
- It sets a precedent with your client that your work is worth isn’t worth much. Not every client has worked with a software engineer before, and the only notion they have of market rates might be their experience with you. So if you charge a client $200/hr, $20/hr or $0/hr, that very well might be what gets stuck in his or her head as to the value of your work. It is of course possible to tell the client up front that this kind of work normally goes for a three-figure rate and that you won’t be working for free forever. I think it’s probably likely, though, that the client will get attached to whatever rate you charge him or her initially. That’s been my experience.
- It’s kind of tricky to limit project scope. When you’re working with a client for money, you work however many hours they can pay you for. When you’re not requiring the client to pay you anything, there’s kind of a battle between “I can’t just work an unlimited amount of time for free” and “I don’t want to be a dick to my client.” That’s the tug-of-war that has always happened in my head whenever I’ve done free work in the past. Again, you can attempt to somehow limit scope in the beginning, but I don’t know that any mechanism you might set up would be nearly as effective as the “that would cost more actual money” mechanism.
- You’ll probably get shitty clients. This one probably doesn’t need much explaining, but it’s a phenomenon that not everyone seems to be aware of. Penny-pinching clients tend also to be the most painful to work with.
The simple solution
My solution is not very complicated: instead of working for other people for free, work for yourself for free. This approach has the following benefits:
- You own what you create, and can show off the source code freely if desired
- You get to pick all the technologies with which you work
- You call the shots with regard to features, timelines, workflows, etc.
- If you build a useful product, you might even be able to earn some money off of it
There are also drawbacks, like the fact that you don’t get the “real world” experience of interacting with clients. To me the trade-off is worth it.
I’ve used this approach multiple times with success. Examples:
- Throughout the mid-1990s I built my own websites using HTML. Later, around 2000, my dad hired me to build his business’s website.
- In 2005 I started tinkering with Linux and PHP. Later that same year I got a job using Linux, PHP, and other technologies I already had experience with like HTML and CSS.
- In 2011 I started my first Ruby on Rails project. I built a product that did scheduling for hair salons. Later that year I got my first minor freelance Rails gig, and then in 2013 I was hired at a full-time (contract-to-hire) job doing Rails. Now Rails is all I do.
I’ve used this same approach to get paid to teach guitar lessons, do rudimentary SEO, and manage a Google AdWords campaign. The bar for “competent enough to be paid” is not all that high.
How to come up with something to work on
It might be easy or hard for you to come up with an idea for a project to work on. My advice would be to find a problem that real people actually have, and, crucially, actually want a solution for. Two products I’ve built that have gotten a certain amount of traction include scheduling software for hair salons and a tool for office workers to coordinate their lunch outings. Here are some ideas of untested viability that you’re welcome to use:
- Storage facility management software
- Logistics software for transportation companies
- A CRM specifically for credit card processors
I’m not suggesting that you set out to build a software company, but if you’re going to pour time into a side project, might as well make it a side project that has a chance of earning some money. If you are interested in building a software company, though, you might want to check out the Micro-ISV community.
I have had my experience of people who ask to do free stuff long term for them without compensation. If you start and then stop later, the ones I met called you a backstabber when you stopped doing stuff for them. The basic hiring method of these guys is “You’ll get your share of earnings”. The guys never did anything productive to get the product out.
I don’t think doing free stuff is inherently bad. But if you’re doing free stuff for somebody, at least choose the person yourself with following logic: “today I’m going to help this guy, tomorrow that guy”. Do not respond to demands!
I didn’t even think of the “backstabber” factor. Good point.
Jason – Thanks for posting the why of “what-not-to-do” as it is good to see the implications of doing what so many devs do. Also the multilayered steps of how to go about moving into a new language AND the potential ideas you’ve observed make this a very well rounded post. Hat tipped.
I thought one of the benefits of working for free was that you could always (well, usually always) just stop for any reason and nobody would blame you for it. Is that not the case? Maybe it depends on who you’re working for and in what capacity.
Lately I’ve been contributing a little bit to an open source project. I can’t imagine anyone being angry if I left the project without any sort of notice.
Thanks Jason for your what not to do tips.
I start learning fox pro in nineties for free until the client is happy, then moved to learn oracle using my fox pro experience to get me the job in a company I knew that they are using oracle. Then I used my oracle experience to get a job in a company using .Net. Now I’m looking for a company that is using ruby on rails 🙂