Developing Software when you are Technically Challenged

December 29th, 2009

Recently I read a blog post from one of the RSS feeds I subscribe to. The author was looking to create an iPhone app to promote his business. He researched a few options – one quoted him $20-$30,000, another $8-10,000 and he also came across a website offering to create one for $499.

From reading his blog, I assume he has little-to-no software development experience. This is a scary position to be in. How do you choose between widely varied options? What could the difference possibly be if the product is the same?

To the layperson, the obvious choice is the $499 option. The logic for choosing this option is sound – he wants an iPhone app; these companies all make iPhone apps; therefore the cheapest one will be the best option for me.

Unfortunately, it is not so simple with software.

After being involved in software development for the past five years I’ve learned that out of the full cost of developing software, only a part of it comes from the initial creation. To rephrase, much of the cost of developing software comes after the software has been created.

How can this be?

Many non-technical people put in charge of software projects do not really know what they want. Usually, they have a vague idea but as the product is developed, more ideas will come. These new ideas require changes to the product. If you’re not familiar with the way software is developed, you may think this is simply moving around text as you would with a text editor like Microsoft Word. Nothing could be further from the truth. In practice, software development is a type of architecture.

Let’s say you want to build a house. You have a general idea of what kind of house you want so you tell the designer you want a house with a certain number of rooms and so on. He designs the plans and begins building the house. Part-way through, you walk through the half-completed house and realise you would like the kitchen to be bigger and the bedroom to be moved to a different location. Is it going to be easy to make this change? No. Although software is not quite as inflexible to dynamic changes, it still requires the foundation to change which can be major.

Now a good software architect will try to design the software to allow easy adjustments along the way. However, these architects usually learn how to do this through years of experience. This means you won’t find them at the cheap end of the pricing spectrum.

So what is the $499 option offering? After taking a look at their website, they are offering a simple template option to create an iPhone app. This means you are locked into their system. If you want to add changes later, it is going to cost a lot.

If you are really, absolutely, positively sure that you will not want changes, then this option is a good deal. In my experience, this is rarely the case. Many clients come up with new ideas only after seeing the product in action.

If you go with the $499 option and you want custom changes, you will probably have to hire another firm as I doubt this company is in the custom-development business. That means that the new firm will have to invest time learning the system and implementing the changes. I’ve even worked on projects where it has been cheaper to throw away the original work and start over from scratch. This means the initial cost for developing the software was a complete waste. Either the company doing the work did not fully understand the client’s requirements or the client did not know what they wanted well enough to explain it.

Probably the worst thing you can do as a non-technical person starting a software project is to just go with the cheapest option. The initial development cost can be only a small part of the final cost.

Detail what you are looking to accomplish with the software. Spend time communicating with the vendor what your end goal is. Make sure any potential vendor has clear guidelines what they will support after development and make sure they are asking lots of questions to fully understand your requirements. Many software projects go awry not because of technical challenges, but because of communication challenges. Good communication will help your software project immensely.

Sneaky Pricing

December 17th, 2009

Pricing is one of the hardest things to get right for your business. I heard a story the other day of a business that implemented random pricing to pick the right one. On their pricing page, they had the system choose at random from a pre-determined list of prices. These price points ranged from $5 all the way up to $200. Keep in mind, this was all for the same product. After analysing the data, they decided to settle around $20.

It was a very interesting way of using technology to your advantage. Marketers always want to hit that price point where price x customers will provide the most revenue. This company was able to leverage technology to help them do that. It’s just another way in which the web can help your business in ways that can’t be done offline.

This is a post about another pricing strategy.

Recently I signed up for Safari Books Online. On their subscription page, they offer two choices – the unlimited Library at $42.99/month or the limited access bookshelf at $22.99/month.

Safari Books Online - Subscribe

I can read up to 10 books per month for $22.99. Being this is about half the price of a technical book, I thought it was a good deal and signed up.

Today I received an email with special holiday pricing. Sign up by the end of December and I could receive access to the Full Library for just $29.99 per month. Since it was just a little more, I checked it out to see if it was worth it.

When I came to the Change Subscription page, this is what I saw:

Safari Books Online - Change Subscription

Notice anything different?

Now, they have a third option – the 5-slot Bookshelf for only $9.99/month. I imagine this option is for people who are considering cancelling their account. It is a way for them to keep their business by offering a reduced price for reduced services.

In my case though, their plan backfired. I was happily paying $22.99/month but since 5 books a month is plenty for me, I reduced my subscription.

In summary: Because of a marketing effort to get me to upgrade, I actually downgraded my account. I suppose the lesson is to be careful with pricing. It’s good to make an effort to keep customers but you don’t want happy customers paying less than they would have otherwise.

You, Inc.

December 14th, 2009

Are you an employee who dreams of starting your own business? You have an idea that excites you when thinking about it. You visualise the finished product coming to life. You imagine all the money rolling in from sales. That is great but it could be months or years down the road. Do you really need to wait that long to start a business?

No. You already run a business, and that business is You, Inc.

No matter if you are an employee or employer, you are operating a business. Each month you have revenue (income) and expenses. You have a balance sheet (whether you realise it or not). You have at least one customer. Sounds like a business.

One of the best realisations I have had in my career is that I am not an employee, I am a business of one. As an employee, I choose to provide my services to one client. As a business, it is quite risky to have just one client. However, if you choose to do so, you need to be aware of the pros and cons.

Thinking as owner of You, Inc. puts me in a different mindset than if I consider myself an employee. As an employee, the company is in control of the work I do. As a business owner, I am in control. It helps me question things like: Is this the kind of business I want to be in? Am I providing good value? Will my clients want to work with me again?

When you start thinking of yourself as You, Inc., different questions start to come up? Am I running my business well? Am I investing in the future of my business? How can I grow? Is it smart having only one client? What are the goals for my business?

It is important to run your business well because how you run You, Inc. today is the way you will run a “traditional” business. If you do not communicate well with your client now, then you will not communicate well with clients in the future. If you are running a loss every month, you will do the same with your business. Does You, Inc. operate with little or no debt? It is important to get You, Inc. running smoothly before moving onto bigger things otherwise you won’t be able to handle them.

A year after winning the lottery, most winners say they wish they had never won. Generally, life only lets you move on to the next step when you are ready. If you jump too far ahead, such as in the case of lottery winners, it usually causes too much hardship.

To run You, Inc. successfully, copy what successful businesses do. Just do it on a lower scale.

Good businesses spend money on sales and marketing.
Good businesses do not rest on their past. They are constantly investing in development of new products (skills).
Good businesses demonstrate values and try their best to live up to them.
Good businesses reward those who help them.
Good businesses treat others fairly and courteously.

To shift your mindset, spend a little time each day thinking about your business. If you were in control, what are some things you would do differently? Then realise that you are in control.

How to Torture Programmers

December 7th, 2009

Do you have a programmer in your life that drives you up the wall? Would you like to be rid of him forever? You can! Just follow these five simple steps and your programmer will run crying for the hills.

1) Put him in an open office

Remove as many barriers to communication as possible. Put the most talkative person – the person who can’t keep quiet for more than five minutes – as close as possible. It’s best if you have many non-programmers within earshot so they can chatter about topics of non-interest to the programmer.

Microsoft did a study that showed that for each interruption, it takes a programmer at least 15 minutes to get back into the focus they were in before being interrupted. If you have everyone in an open office, there will be more interruptions and chances for torture.

2) Lockdown his machine

Don’t let him pick the tools he wants to do his job. After all, security is paramount and programmers can’t be trusted. Instead, give him the tools that you choose. Preferably pick ones that companies with a large sales staff directly sold to you. Only let him use one browser – and that browser is IE 6.

When you hire a mechanic to fix your car, he would go nuts if you told him he could only use one wrench. The same is true of programmers. Limited tools means more frustration!

3) Timely Interruptions

Programmers generally work in 45 minute blocks. The first 15 minutes is gathering information, identifying the problem and coming up with a plan to solve it. The next 15 minutes is trying different methods and learning about which ones work. The final 15 minutes is putting the learning to use, figuring out the solution and implementing it.

If you want to torture programmers, you need to time your interruptions. Interrupt too frequently and he will never start work. Interrupt too late and he will have accomplished his task already. You want to hit that sweet spot around 25-30 minutes. This will break his state and cause him to lose much of the learning he has acquired to solve his task. Do this at strategic points throughout the day and he will leave feeling he has accomplished nothing.

When you interrupt, do it for some mundane reason. The more pointless and non-urgent the better. Also, be sure not to ask if he’s busy. You don’t want him to have the opportunity to put your interruption on hold.

4) Provide Pointless Work

Or, better yet, no work at all. Force the programmer to still come to the office and sit there all day. He can surf the Internet but isn’t allowed to work on anything challenging or useful. This might be fine for a couple days, especially if he has been overworked, so you may need to give this plan some time. After a few weeks, the programmer will be dreading the morning when he has to go to work and not be productive.

5) Shoddy Equipment

If the psychological torture isn’t good enough, it’s time to turn physical. Buy the cheapest equipment you can. Make sure his chair has as little adjustments as possible. Even better, have him sit on a stool. Gravity will do the work for you and strain will start to cause problems with the programmer’s spine, shoulders and arms. He will start developing back problems causing him pain for a long period of time.

Your company does not need to put up with happy and productive programmers anymore! Just implement these 5 simple steps and you will have broken their spirits. Productivity will cease and morale will plummet. Work will soon be torturous for programmers just like it is for you.

Read Books, Not Blogs

December 3rd, 2009

“Spend 15 minutes per day reading about your craft and within 5 years you will be in the top 5% of your industry.”

I read this quote a couple years ago and have tried to live by it since to see if it is accurate.  I wouldn’t consider myself in the top 5% so it hasn’t worked yet.  I keep doing it though because I see why it can work.  To be in the top 5%, you have to do things only the top 5% do.  The top programmers continually learn new and better ways of programming and if you do that, then one day you will be among them.

What does this have to do with blogs?

It is tempting to go through RSS feeds and think you have improved your knowledge.  When you think about what you learn by reading blogs, have you really learned that much?  Blogs are great but there is a major problem with relying on them for learning.  How much time does it take for an average blogger to write up a blog post?  A couple hours?  Maybe more if they aim for higher quality.  Compare that with books.  Authors spend months and months writing the content for a single book.  Books go into much more depth than even the best blogger could provide. When choosing sources to learn from, pick the ones that have had the most effort and thought put in. Books > articles > blog posts > comments

A programmers job is on getting things done and getting things to work.  When you can reliably get things working with little effort, complacency can begin to sink in.  You start thinking that because you always get things to work, you know everything.  This is dangerous. It’s a good reason to read books to keep you humble.

Whenever I’m reading a technical book, I’ll always find better ways of doing things. It could be simple like learning a new function or bigger such as design methods. This keeps me from wrongfully thinking I know everything. If I can still learn new things, I am far from being an expert.

Can you really accomplish much in 15 minutes?

You would be surprised how 15 minutes per day adds up.  The first few days seem like nothing. After a week or two you realise how much you have picked up. 15 minutes doesn’t allow for excuses. No matter how busy anyone can find 15 minutes each day. This can be applied in other areas as well.  If you have a business idea but think you don’t have enough time, start doing it for 15 minutes per day.  You will soon start to see major progress.

But you say, “I don’t want to buy technical books. They will be out of date in 2 months and will just collect dust on my shelf.”

Luckily the Internet has solved that problem. I recently signed up for Safari Online and couldn’t be more pleased. There are thousands of technical titles to choose from for only $23 per month. Considering that just one technical book costs double that, it is an excellent deal. I can read as many books as I have time for and don’t need them cluttering up my desk afterwards.

There is no excuse not to develop your skills a little each day. Time and cost are not issues. Do yourself a favour. Read for 15 minutes each day.

——-

Link to Safari Books Online

I Don’t Want to be a Code Monkey

November 30th, 2009
“I don’t want to be a code monkey.”  I’ve heard a few friends say this who are involved in programming.  I don’t get it.
Wikipedia says that a code monkey is someone “who writes computer code for a living.”  That’s pretty broad.  I assume a code monkey refers to someone who mindlessly takes orders.  In that case, a code monkey must be someone who stands behind a counter, smiles and says “Would you like to supersize that IF statement?  You can get an extra variable for just 50 cents more!”
Perhaps it is more than that though.  Perhaps these people just don’t want to take orders and want to have creative control over their work.  Fools!  If you are not fulfilling orders, you are not providing value and you are not getting paid.  No matter what you do, you will always have to take orders and serve.  Even a founder of a company needs to fulfill the orders of his customers.
In my programming career I always feel I have creative control over my work.  I have worked with both technical and non-technical clients, on large systems and small and all situations call for creative input.  Without creativity, programming would be boring.  Top programmers can command 6 figure salaries.  Surely, monkeys do not get paid that well.
What if you work for a non-technical manager who just says what he wants done?
What’s wrong with that I say.  If the person you’re working for isn’t technically minded then you have complete freedom to do the work in whatever way you choose.  You can try out new frameworks or programming languages.  You can use different development methodologies.  It doesn’t matter as long as it gets the job done.  There are differences between working for a technical and non-technical manager and they generally balance out.  With a non-technical manager, however, you are the expert.  They hired you because they don’t know what you know.
Just because you program doesn’t mean you are a code monkey.  You have a choice.  You will end up being a code monkey if you stop learning after college.

“I don’t want to be a code monkey.”  I’ve heard a few friends say this who are involved in programming.  I don’t get it.

Wikipedia says that a code monkey is someone “who writes computer code for a living.”  That’s pretty broad.  I assume a code monkey refers to someone who mindlessly takes orders.  In that case, a code monkey must be someone who stands behind a counter, smiles and says “Would you like to supersize that IF statement?  You can get an extra variable for just 50 cents more!”

Perhaps it is more than that though.  Perhaps these people just don’t want to take orders and want to have creative control over their work.  Fools!  If you are not fulfilling orders, you are not providing value and you are not getting paid.  No matter what you do, you will always have to take orders and serve.  Even a founder of a company needs to fulfill the orders of his customers.

I always feel I have creative control over my work.  I have worked with both technical and non-technical clients, on large systems and small and all situations call for creative input.  Without creativity, programming would be boring.  Top programmers can command 6 figure salaries.  Surely, monkeys do not get paid that well.

What if you work for a non-technical manager who just says what he wants done?

What’s wrong with that I say.  If the person you’re working for isn’t technically minded then you have complete freedom to do the work in whatever way you choose.  You can try out new frameworks or programming languages.  You can use different development methodologies.  It doesn’t matter as long as it gets the job done.  There are differences between working for a technical and non-technical manager and they generally balance out.  With a non-technical manager, however, you are the expert.  They hired you because they don’t know what you know.

Just because you program doesn’t mean you are a code monkey.  You have a choice.  You will end up being a code monkey if you stop learning after college.

The Ups and Downs of Freelancing

November 26th, 2009
Since summer 2008, I have logged over 600 hours of freelance programming work through the website odesk.com.  It has been an interesting experience.  I started freelance work because I missed programming.  In May 2008, I moved to China and ended up becoming an English teacher.  While English teaching is rewarding in its own way, I missed the satisfaction that comes from solving technical problems and creating systems.
I reviewed a few freelancing websites including Rent a Coder and eLance but settled on oDesk.  Why? There was no signup fee with oDesk and the fee is simply 10% of earnings.  I remember other sites charging 15% and having complicated systems of bidding for jobs. oDesk seemed to offer the best model without taking too big a chunk or requiring an upfront fee.  I definitely did not want to pay an upfront fee since I was just getting started.
Getting the First Job
Within a few weeks of looking, I landed my first task.  Getting the first task is always the most difficult.  It is a catch-22.  Buyers want to see feedback to know you are reliable but you can’t get feedback until you have your first completed task.  How did I get it?  I had completed some tests to show my knowledge and added items to my portfolio but I believe I got the task because of the cover letter.
In the job description, the buyer outlined that he wanted an addition to a part of his admin page.  My cover letter specifically addressed his problem and offered the steps I would take to solve it.  This must have made me stand out as I was hired and told to go at it.  This was a fixed price job.  It would be the first and last fixed price job I would consider doing.
Fixed Price Downsides
Upon completing the task according to the original job description, the buyer then asked if a change could be made to make things easier.  I informed him that the work suggested was outside of the original job description and I would be able to do the work but would need to negotiate more money for the task.  After that, the task was closed and paid.  I did not receive a reply from him.
This taught me my first lesson with freelance programming: fixed price work is a bad deal.  With software, it is very difficult to define all the requirements needed for even the most trivial of tasks and you can forget about getting every detail on larger projects.  This makes it impossible to estimate time needed and rate to charge.
This task was a small one and I was paid $25 for it.  Since it ended up taking me nearly 5 hours, it wasn’t a good deal for money but it did enable me to get on the system and lead to my next job.  Just over a year later, I have now been able to land tasks for $30 per hour or more.
Earning More
How did I increase my rate?
1) Judge a book by its cover
I don’t waste my time applying to every job that interests me anymore.  I am selective.
First off, I only look for jobs that pay hourly and that look like they will be a long-term deal.  It’s not worth it to take on tasks that will be done in less than a couple weeks because you then need to spend more time looking for more work.
Secondly, from the job description, try to guess if the buyer will be in your price range.
Keys I look for:
well written job description that tells me the buyer has experience and is looking for a quality developer
location: buyers from North America, Western Europe are generally going to have the ability to pay more than buyers from less developed countries
previous work: oDesk shows the previous work that the buyer has hired and the rate.  If the rate is much lower than yours for a comparable task, move on!  Be careful though that you aren’t comparing apples to oranges.  Just because someone pays $3/hr for data entry doesn’t mean they are looking to pay that for a developer
2) Keep Moving Up
Finally, move up from tasks that are too competitive.  Tasks that have too much competition will have a ceiling on how much someone will pay no matter how good you are.  For example, I did a number of tasks converting PSD image files into valid XHTML/CSS code.  After a while I realised that no matter how well you do the job, it will be difficult to find anyone willing to pay more than $20/hr for it.  If you do a Google search, you will find tons of places that are offering this service.  Now, I only take programming tasks and have left behind the CSS tasks.
3) Your cover letter is your sales pitch
Buyers probably get around 50 cover letters for each programming job.  Stand out by keeping yours brief and to the point.  I keep mine at two paragraphs.  The first paragraph addresses the buyers specific problem they are looking to solve.  I have received jobs just because the cover letter addressed specifically what they were looking for.  The second paragraph gives generic info about me such as my availability.
I have posted a job as a buyer looking for a web designer and about 75% of the cover letters were generic.  If you address the buyer’s concerns directly, it will definitely put you in the top of the heap.
4) Always be applying
This is an open market.  You should always be on the lookout for new opportunities. This applies to both employees and the self-employed.  If someone is currently paying you $20/hr, then keep applying to jobs but apply at $30/hr (or whatever you feel is a fair rate).  It usually takes me about 30 minutes per day to find three interesting jobs and apply to them.  If you get an offer at a higher rate, the payoff is definitely worth it.  You’ll get a lot of rejections but those don’t matter because you already have work.
5) Figure out why you were hired
…and emphasize it on your cover letter.  Some people might hire you because of your availability.  For me, I always emphasize that I am a native English speaker, I am from Canada and I communicate in normal language – not tech-speak.  Many of the people hiring developers on oDesk are not technical.  They don’t really know (or care) what jQuery or YUI is.  They just want to hire someone who can communicate clearly and get the job done.  That’s it!  I see so many people with titles like “5 yrs exp Cobol/Lisp/JS/PHP/Perl” and it’s sad.  The buyer does not really care and you are wasting a great opportunity to stand out from the crowd.  Find out what makes you different and emphasize that.  It probably has nothing to do with the programming languages you know.
Pros and Cons
There are ups and downs to working as a freelancer vs being an employee.  The first one is in the name: FREElancer.  You are free to work how, where and when you want.  Feeling sleepy and want to take a nap after a few hours of work? Go right ahead.  Want to go to another city for the week and work from there? Just do it.  Need to go out during the day and work in the evening? No problem.  I’ve done all these.
On the other hand, there are no benefits like you might get at a job.  No holidays, no vacation time, employment insurance, health benefits or whatnot.  A mistake I made when first setting my rate is not adjusting for that.  If you take your pay as an employee, the equivalent as a freelancer should be at least 20% more.  Some people will say as high as 100% more.
I recently came across a study which showed that self-employed people do not make as much money as they would if they were an employee, but they are much happier.  This correlates to my experience being self-employed vs employed.  I may not have as much money but self-employment keeps things interesting.  Some weeks I worked 50+ hours, others around 20.  For a guy like me who values his free time and can always find things to do, it is a great position to be in.  Freelancing is always challenging and exciting.

Since summer 2008, I have logged over 600 hours of freelance programming work through the website odesk.com.  It has been an interesting experience.   In May 2008, I moved to China and ended up becoming an English teacher.  I started freelance work because I missed programming.  While English teaching is rewarding in its own way, I missed the satisfaction that comes from solving technical problems and creating systems.

I reviewed a few freelancing websites including Rent a Coder and eLance but settled on oDesk.  Why? There was no signup fee with oDesk and the fee is simply 10% of earnings.  I remember other sites charging 15% and having complicated systems of bidding for jobs. oDesk seemed to offer the best model without taking too big a chunk or requiring an upfront fee.  I definitely did not want to pay an upfront fee since I was just getting started.

Getting the First Job

Within a few weeks of looking, I landed my first task.  Getting the first task is always the most difficult.  It is a catch-22.  Buyers want to see feedback to know you are reliable but you can’t get feedback until you have your first completed task.  How did I get it?  I had completed some tests to show my knowledge and added items to my portfolio but I believe I got the task because of the cover letter.

In the job description, the buyer outlined that he wanted an addition to a part of his admin page.  My cover letter specifically addressed his problem and offered the steps I would take to solve it.  This must have made me stand out as I was hired and told to go at it.  This was a fixed price job.  It would be the first and last fixed price job I would consider doing.

Fixed Price Downsides

Upon completing the task according to the original job description, the buyer then asked if a change could be made to make things easier.  I informed him that the work suggested was outside of the original job description and I would be able to do the work but would need to negotiate more money for the task.  After that, the task was closed and paid.  I did not receive a reply from him.

This taught me my first lesson with freelance programming: fixed price work can be a bad deal if you’re not careful.  With software, it is very difficult to define all the requirements needed for even the most trivial of tasks and you can forget about getting every detail on larger projects.  This makes it impossible to estimate time needed and rate to charge.

This task was a small one and I was paid $25 for it.  Since it ended up taking me nearly 5 hours, it wasn’t a good deal for money but it did enable me to get on the system and lead to my next job.  Just over a year later, I have now been able to land tasks for $30 per hour or more.

Earning More

How can you increase your rate?

1) Judge a book by its cover

I don’t waste my time applying to every job that interests me anymore.  I am selective.

First off, I only look for jobs that pay hourly and that look like they will be a long-term deal.  It’s not worth it to take on tasks that will be done in less than a couple weeks because you then need to spend more time looking for more work.

Secondly, from the job description, try to guess if the buyer will be in your price range.

Keys I look for:

  • well written job description that tells me the buyer has experience and is looking for a quality developer
  • location: buyers from North America, Western Europe are generally going to have the ability to pay more than buyers from less developed countries
  • previous work: oDesk shows the previous work that the buyer has hired and the rate.  If the rate is much lower than yours for a comparable task, move on!  Be careful though that you aren’t comparing apples to oranges.  Just because someone pays $3/hr for data entry doesn’t mean they are looking to pay that for a developer

2) Keep Moving Up

Finally, move up from tasks that are too competitive.  Tasks that have too much competition will have a ceiling on how much someone will pay no matter how good you are.  For example, I did a number of tasks converting PSD image files into valid XHTML/CSS code.  After a while I realised that no matter how well you do the job, it will be difficult to find anyone willing to pay more than $20/hr for it.  If you do a Google search, you will find tons of places that are offering this service.  Now, I only take programming tasks and have left behind the CSS tasks.

3) Your cover letter is your sales pitch

Buyers probably get around 50 cover letters for each programming job.  Stand out by keeping yours brief and to the point.  I keep mine at two paragraphs.  The first paragraph addresses the buyers specific problem they are looking to solve.  I have received jobs just because the cover letter addressed specifically what they were looking for.  The second paragraph gives generic info about me such as my availability.

I have posted a job as a buyer looking for a web designer and about 75% of the cover letters were generic.  If you address the buyer’s concerns directly, it will definitely put you in the top of the heap.

4) Always be applying

This is an open market.  You should always be on the lookout for new opportunities. This applies to both employees and the self-employed.  If someone is currently paying you $20/hr, then keep applying to jobs but apply at $30/hr (or whatever you feel is a fair rate).  It usually takes me about 30 minutes per day to find three interesting jobs and apply to them.  If you get an offer at a higher rate, the payoff is definitely worth it.  You’ll get a lot of rejections but those don’t matter because you already have work.

5) Figure out why you were hired

…and emphasize it on your cover letter.  Some people might hire you because of your availability.  For me, I always emphasize that I am a native English speaker, I am from Canada and I communicate in normal language – not tech-speak.  Many of the people hiring developers on oDesk are not technical.  They don’t really know (or care) what jQuery or YUI is.  They just want to hire someone who can communicate clearly and get the job done.  That’s it!  I see so many people with titles like “5 yrs exp Cobol/Lisp/JS/PHP/Perl” and it’s sad.  The buyer does not really care and you are wasting a great opportunity to stand out from the crowd.  Find out what makes you different and emphasize that.  It probably has nothing to do with the programming languages you know.

Pros and Cons

There are ups and downs to working as a freelancer vs being an employee.  The first one is in the name: FREElancer.  You are free to work how, where and when you want.  Feeling sleepy and want to take a nap after a few hours of work? Go right ahead.  Want to go to another city for the week and work from there? Just do it.  Need to go out during the day and work in the evening? No problem.  I’ve done all these.

On the other hand, there are no benefits like you might get at a job.  No holidays, no vacation time, employment insurance, health benefits or whatnot.  A mistake I made when first setting my rate is not adjusting for that.  If you take your pay as an employee, the equivalent as a freelancer should be at least 20% more.  Some people will say as high as 100% more.

I recently came across a study which showed that self-employed people do not make as much money as they would if they were an employee, but they are much happier.  This correlates to my experience being self-employed vs employed.  I may not have as much money but self-employment keeps things interesting.  Some weeks I worked 50+ hours, others around 20.  For a guy like me who values his free time and can always find things to do, it is a great position to be in.