Hacker News new | ask | show | jobs
by zackmorris 4466 days ago
Currently contracting through oDesk. I tend to average about 25 billable hours per week, with the remainder of my time split between learning about technology trends and working on long term personal projects. This led to a six month stint last year as a contractor at a local business that is exploring startup approaches like Agile/Scrum, which was an overwhelmingly positive experience. I was also lucky enough to be a contractor at hp for a year in 2005 but didn’t recognize the potential of making it a career at the time.

Before that I had many years of negative experiences working as a furniture mover, a web developer, a Macintosh technician, and your local neighborhood computer guy. I survived for a year after the housing bust on $6,000 I made flipping PowerPC iMacs that were suffering from the bulging capacitor issue that’s been plaguing electronics. I scratched out income any way I could to support a floundering shareware business, hoping that the “if you build it, they will come” philosophy would pan out, but unfortunately it never did.

If I was a student again and had it to do all over.. hmmm what a question. I think that even today I consider £30,000 a year to be a good income, although a contractor can certainly make more than that at the going hourly rate if they reach full employment. It might help to take a step back and look at software development like any other kind of development. For example in real estate, there is earned and unearned income, and each type has its advantages.

There will always be money in the first type, because people always need things done. Historically contractors have generally been paid more than full time employees, because they are responsible for their own equipment, training, insurance, retirement, etc. Software development requires a great deal of education. If you add up all of the hours, not just in school but on personal time, it’s comparable to a being an architect or civil engineer. Except instead of leveraging the efforts of subcontractors, we employ code. So there is a potential there to make considerably more money. There is no ceiling on income for software contractors.

The second type works more like speculation. Yes, a client might make a million dollars from the code you develop. But the odds are extremely high (I would put them around 50/50, maybe even up to 90%) that he or she will break even or possibly lose money. The contractor gets paid first, after that it’s anyone’s guess. I had every advantage (a degree, a brief period of no bills living with my father after I graduated college, even a dot bomb to open up opportunities over the competition) but I was unable to find any traction with the products I was creating. The tech industry has rose colored glasses. For every overnight success, there are hundreds, even thousands of failures. Successful speculators in software are like the ones in real estate. Generally they just don’t touch the code. They’ve either put in their time and earned their wings, or they have a personal calling inside themselves to outsource the details and focus on the big picture. And perhaps most importantly, they have access to capital. I have come to peace with the fact that I would rather be in the trenches than flying a desk.

But say it’s the year 2000 again, I’m fresh out of college and Facebook hasn’t been invented yet, and I want to be in the second camp. It’s not going to happen selling shareware games, or scratching out a living doing odd jobs, or pulling all nighters with other hackers. As far as I can tell (and the simplicity of this took me a decade to grok), the secret is growth. I know it sounds mundane, but if you look at any successful company, they are always growing. So fresh out of school, I would have done my contract at hp first, to just see how established companies do things. Everything is about interoperability, passing data back and forth to different teams, being able to explain your work to others. It’s vanilla, and boring, but allows for scale. Then I would have taken my savings for the year (I would have only spent about a quarter to half of my earnings) and used that to bootstrap myself over the next year, meeting local developers and the clients they work for. I would have found myself designing websites, probably learning about the gotchas of scaling databases, but today it’s all about apps and SAAS and scaling interfaces and interoperating with mobile devices. I would have quickly found that there is high demand for such work. High enough that I couldn’t respond to all of the job invites coming my way, and would have to make a choice either to become a team of developers or cater to more selective clients. At some point I would have crossed a threshold where my priorities switched from survival to planning. To me, that means having six months of income or more saved so you can work on your own without answering to anyone. And more importantly, having a trade that allows you to build your savings again in case of failure (which is likely). Then I would have had a history of a few successfully completed projects under my belt, and could think about hiring myself and others.

Then I would either write a solution for a company and sell it at $10,000 a pop, or look at the niche they are ignoring and write the app that fills it. Knowing how I am, I’d go for the second option. It’s almost always something that people want really badly, that they’re willing to pay for, that they just can’t get easily (preferably software related so it can scale). In my fantasy, this would be a wifi box that gives you free internet by way of distributed hashing (hey, I can dream, that’s why I got my degree in computer engineering), and I’d just build them out of my garage and sell them locally for a few hundred dollars each until we hit scale. Maybe another option is a $99 app that runs on your cell phone, something that crosses wifi mode and tethering to create a mesh network. The prospect of canceling one’s internet and cable bills is almost too sweet to think about rationally. Then everyone in the country would want one, and we’d have more work than we could handle, and we’d sell to Elon Musk or Richard Branson or whoever for a billion dollars. I probably have, I don’t know, a few dozen, maybe a hundred ideas like this that I would like to do, but never had the savings to attempt such things, until recently. Most of them are not nearly this audacious.

But just out of college, my highest priority was “just finishing this game I’ve been working on for years” and I missed out on a ton of opportunities. So I think that kind of nagging, soul crushing worry is something to be very wary of, because it’s hindered the careers of countless developers. I should have focused on a concrete product, with say a three month development time, that I could sell for real dollars, that people would tell their friends about. The shareware and app markets are saturated, so for a fraction of the effort, I could have created new niches. I should have listened more closely when my family had trouble setting up their email and written a $5 solution for them, that solved the decision tree of username, password, pop/smtp, ssl, etc once and for all, and sidestepped the necessity of hosted tools like gmail. I remember being surprised that Apple implemented it in their Mail.app years later. Such low lying fruit could have been so lucrative in the early 2000s. It would have sidestepped app stores and marketing by going viral. Crossing that magical curve from $100 a month to $1,000 and then $10,000 would have put me well on my way to making a meaningful contribution. Instead I floundered, and let the internet lottery distract me from networking, bootstrapping and compound growth.

P.S. It’s worth noting that I’ve only had a six month cushion twice in my life, and didn’t keep my eye on the ball. I let others talk me out of it. Those times were after long term contracts, but my current goal is to get there independently. Sorry this got so long.

4 comments

Hey Zach, advice to you from an industry elder. From your comments, I would put you in your late 30s, young enough to be scrappy but experienced enough to be on a founding team.

The only reason for doing is to gain industry domain experience. (Software doesnt count.) The domain can suggest startup possibilities. Consulting income is a trap, unless you make massive savings.

Dont look back at what might have been. I worked on a VisiCalc equivalent on a 7094 in the 60s. One of the members of the founding team of Sorcim worked for me (remember SuperCalc?). Dont say I didn have my chances to be rich and famous.

Dont look sideways. If it is being done now, someone has beaten you to it. And someone else is working on the second generation.

Dont scratch your own itch. Software itches dont make money. Too many smart people doing the same thing.

Do cultivate relationships.

Do look for other people,s problems. As you noted , if it bugs the common man or the elderly, it is probably an annoyance for everyone else.

Hah you got me, I'm 36. I also agree that consulting can be a trap, but for the reason that it's not scalable. A consulting firm is only worth about as much as its employees, so there's no real exit strategy. I guess I'm kind of lucky that I don't live in a big city so can afford to dabble in it. But it does sting sometimes to not receive residual income for past work.

Cool to hear about your earlier escapades. My business partner and I were just getting a foothold in Mac OS 9 shareware games when Apple switched to OS X and antiquated the code we had worked so hard on for 5 years. I took it really personally and suffered several years of depression. Things didn't turn around for me until I stopped using my own code. Now I don't maintain an "engine", I just scavenge commonly used code and find that it shields me from the whims of proprietary APIs.

I guess what I’m trying to say is, I also look back on what might have been, and sometimes wished I had been born 5 years earlier, when things were “booming”. But it’s an easy trap to fall into, because at least for the time being, programmers’ leverage is increasing faster than competition can fill the niches. Kids today, what with their supercomputers and megabit internet connections and being able to stand on the shoulders of giants’ open source projects! Get off my lawn! In my day we didn’t even have the internet! We had BBS’s, and floppy disks that stopped being readable, and books.. paper books! Imagine such a thing! And girls didn’t even use computers! Neither did teachers! Can you imagine?

I too have often wished the geeks and hackers of the world were better at networking. Generations of potential have been lost to reinventing the wheel. It’s kind of ironic that we’re so able to communicate in this distributed fashion and solve problems but have so few interpersonal and professional relationships.

FWIW, I enjoyed your game. I especially liked the way the day and night cycle shifted the colour palette. Made a lasting impression.
Thanks, that is nice to hear. Lots of custom 16 bit blitters made that happen. I made one that blended between (I think) 16 bit patterns to interpolate between two images, plus some RGB blending if I remember right. PowerPC had some wonderful functions for all of that but in the switch to Intel, computers were fast enough that I used a regular loop since it was waiting around for ram anyway. We got pretty far on an OpenGL port but ran into issues with needing to draw the scene in a handful of passes instead of piece by piece. My partner had the vision for artwork and special FX and I just made it happen on the back end.
Russell, why do you say consulting income is a trap? Is it because it doesn't scale?
So as a college student now and graduating in two years what should I be focusing on currently and into graduation?
1.- network, know people 2.- don't focus on school or what you'll learn there, as Mark Twain wisely said: "I have never let my schooling interfere with my education" 3.- focus on working for yourself, not "getting a job".
Good post. If you are starting out, it's well worth listening to guys who tried hard and didnt quite get the brass ring. One trap that Zack and I both fell into is consulting. He had a lot of small contracts for a modest income, while I had multi-year contracts for a good income. I averaged $165K for more than a decade, but if you take out the health insurance, vacation/holiday pay, and don time, it's no better than a good paying job. In California it wont make you rich. And you can get trapped in older technology. The pay is good because no one else wants to do it.
Can you share some tips for new oDesk users? I registered on oDesk for 2 months already and although I'm fairly experienced (10 years), I got zero contact so far. I must miss some important thing to get noticed or contacted.
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.

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.
This is very helpful. For something as important as how to make money, a long answer and detailed one like this is welcome. I'm currently at a technical skill level between "freelancer" and "consultant" (loosely speaking, that is). This is useful advice. Thanks.