Hacker News new | ask | show | jobs
by zackmorris 4464 days ago
I apologize in advance for how long this got :-/

At first I was signed up on freelancer.com as well and did several ~$150 contracts where I could bid/get picked/do the work/get paid practically the same day, which helped my psyche. I also did a relatively large project on elance.com but unfortunately didn't get paid for it due to disputes over milestones (the customer kept adding to the to do list), which is what led me to the escrow on odesk.com. I did a few fixed rate contracts but found my time management skills were not exactly stellar so switched to hourly for a while and found some peace knowing I was getting paid for my time like a regular job. Once I got back in the swing of things, I tended to prefer fixed rate again for the freedom it provides.

For odesk.com, I put a couple of pics in my portfolio, got a decent score on a skills test, and had some credentials in my education and employment history. But ya, at first I was not getting any invites and was bidding on several contracts at once without any bites. On the surface, a lot of the bidders look very experienced and I just couldn’t see how to compete with them. I guess what changed is that I stumbled onto some contracts where the client was frustrated with the quality of previous work, and I took the plunge and cleaned up their apps for them. It was an eye opener because I saw the kinds of tradeoffs that are made under low budgets. It wasn’t that any individual aspect of the code was bad, but more that it was a hodgepodge of different approaches all mashed together, that broke the don’t repeat yourself (DRY) principal, had no separation of logic and interface, was full of memory leaks, just on and on. The code had been written overseas for a really low rate and so several people had been banging away on it just trying to get it done. It was kind of remarkable, in a way, but not the kind of code that could be easily reused. So it hit me that the reason a high hourly rate is worth it is that a client can either choose to pay a team to follow good coding practices (which costs time = money) or pay an experienced developer to do it and avoid the broken telephone game. There really is no free lunch, and I think that clients understand that before developers do. So eventually I threw up my hands, realized I couldn’t fight the laws of economics, and “reluctantly” raised my hourly rate. I tried $30/hr for quite a while because that’s the overtime rate for a typical $20/hr programming job in Idaho and I don’t think a contractor should bid below 1.5 times the salary they desire (due to down time etc). So your contracting rate will be some multiple of the going hourly rate in your location. I also stopped being anxious about it, because I knew what the work entailed, so I wrote my bids in a conversational tone, just saying roughly what would be involved and not making any huge promises, and even saying where complications might come up, allowing for contingiences. That worked pretty well and I started getting more hours in and receiving invites from clients that weren’t looking for bargain basement code. It was kind of weird though to be charging more but not seeing it in my bank account, and I was having a lot of lean months. I hadn’t really factored in the hours I spent mulling over the code in my subconscious. So I came to terms with the fact that I was having trouble getting in more than about 4-6 billable hours per day, even though I felt like I was working all of the time. So I went ahead and just accepted that I’d average 25 hours per week and raised my rate again to ~$50/hr to account for the research I inevitably did but wasn’t charging for directly. I found that it alleviated a lot of the dread I was feeling when I thought about getting started working each day. For me, it was never about the work, but battling my own tendency towards distraction and procrastination. That was the point where I started getting more interesting contracts that were actually a pleasure to work on. I had been in fight or flight mode for so long that when the survival instinct died down, coding seemed to feel like a natural thing to do again and it was much easier to get in the zone. It was like picking up a good book after not reading for a few years. It had never occurred to me that clients had been going through this exact scenario in reverse thousands of times around the world, had felt frustrated and arrived in a similar place.

I really wish someone could have told me all of this, but I probably wouldn’t have heard it anyway. And in fairness, I made a lot of mistakes, for example after my six month contract last year at a higher rate, I went back down to $30/hr thinking that I had to do that to get seen. It wasn’t the case at all though, and trying to beat the laws of physics just set me back again. So I went back to my current rate and things have been good. At some point I will probably raise my rate again because I’m noticing that the gun.io contracts are priced higher than I’ve been charging (probably due to location) and I need to plan for the future, having a family etc. Also writing this out now, it sounds a little out there, so I want to emphasize that it’s just the same programming any of us have been doing. I spend 80% of my time scouring the web for the answers, mostly on stack overflow, and 20% of my time actually typing. I normally accomplish one item on my todo list per day, maybe two or three if they are small. And I’ve come to terms with the fact that any estimate I make must be tripled, so that what I think will take two weeks will actually take six. That’s been a bit of a blessing in disguise though, because I know that to actually finish something in two weeks, it means I can’t write much code. It puts the emphasis on finding open source projects that do what’s needed, or wiring up the logic in Interface Builder (finding whatever run of the mill solution works with Apple’s human interface guidelines, instead of trying to code around the issue). Also I keep a large notes file, for example tips like “~/Library/MobileDevice/Provisioning Profiles” contains Xcode’s provisioning profiles, so when I’m using a client’s developer credentials I can trash mine and not spending hours trying to get things working that should already work. If you can get to a good setup and know that you can deliver, it makes it a lot easier to bid. So go ahead and try for some smaller/easier contracts at first and if you find you are finishing ahead of schedule, spend the extra time making it top notch for the client. Someone might hear about it through the grapevine and look you up. It helped me a lot to stop thinking about competing with other contractors, or even just satisfying the client, but instead imagine the end user and what they will get out of the work. I think that’s about it, but I wouldn’t want to leave out the fact that having a cool game in my profile and a few lets just say “interesting” blog posts probably helped as much as anything. Those are somewhat based on luck though and wouldn’t be much to talk about without the fundamentals. Also follow your nose a bit if you know someone in the business. I’m a bit isolated out here and I could have saved a lot of time if I lived in more of a tech city. If you do your homework and also put yourself out there, things will work out.

2 comments

Wow, this is an awesome answer! A big thank you for taking time sharing your experience. There are many good points and I will definitely go over this again and again as I work on oDesk.

Regarding my situation with the getting initial works, I think I will do what you said, like doing the tests and adding stuff to profile. May I ask that for the first few contracts, did you apply for them or did the clients discovered you? Did you have to say anything to make them comfortable with the fact that you have zero work done on oDesk before?

I think I applied for a couple of gigs at first and tended to get them (maybe 50/50 odds) and also tended to just apply for ones that I felt a calling towards, so I rarely had more than one application outstanding. After that, what usually happened is work became ongoing, so they came up with more things to do, or mentioned another project they wanted and I continued work under the same contract. That may have been a mistake in hindsight because I didn’t show much versatility, but, ongoing employment like that says something too and I wish more contracting sites reflected that.

I don't recall trying to comfort them about my inexperience on oDesk. I mostly just focussed on similar work I had done in the past, even if it was just a concept I was interested in that they were trying. Most of this stuff is so esoteric to non-technical folks that authenticity goes a long way. To alleviate their fears, you could ask for less up front. On contracts that are 40 or so hours or less, I ask for 50%, but beyond that I tend to ask for 25%. Then I usually pitch about 3-5 milestones. Never settle for 0% upfront, because it takes several hours/days to get up to speed with a project before you begin. You can always give refunds too, so don’t stress too much about going over if you have the meter running on an hourly contract. It’s probably better to have an accurate accounting of your time and renegotiate after the next payment. This has never come up for me though, because I tend to be a lot harder on myself than the client is. Just be aware of it and add in some contingency time, maybe 10-20% of total when you are bidding. So bid 100 hours instead of 80, 50 instead of 40, etc, and don’t worry about round numbers because they sound suspicious anyway. You really can’t go wrong with an honest approach, and if you still aren’t getting contracts, perhaps message some of the people who declined and just ask if there’s something you could do better to land one next time. Short of that, I’ve been thinking of pasting a beard on my profile picture.

Thanks for sharing your experiences, and I'm going to read it in full, but just wanted to suggest that it may be easier to read if you break up your comment into shorter paragraphs at logical points, with a newline between paragraphs.