Consulting. It's as much art as science. You apply for a job to create/change some system, and need to bid an amount that not only covers your time, but leaves a little something extra in your pocket. Of course, we all know that requirements are never absolute, or even well thought out. As such, you need to build some extra cost into your bid to take this into account. Build in too much and you will be overpriced and not get the job. Build in too little and you will be under-priced and get the job at what will inevitably become a loss.
Writing a contract that restricts the work to a specific list of features is nearly impossible because nobody ever thinks through what they want in advance (think about your last outsourced project). Given that, you need to be skilled at letting the client know that you will be nice and implement tiny things that are not in the spec for free, but anything that is outside the contract spec and takes any real time will be at an added cost (the art of saying no: why yes, we can add that feature, but it will take x weeks at a cost of y).
During the start of January 2016, Sean was contracted by a local news organization to modify their news website for them. Their website was built using WordPress. Believing that it was just a simple addition of pages, footers, headers, and theme, he took the job, and agreed upon a deadline of January 31 with a very small fixed fee of $30 (yes, t-h-i-r-t-y dollars for several weeks of work). Sean felt relieved that he was not going to have to build a full-blown news website because he already had another project in his start-up on queue.
My lawn-guy gets more than that for ten minutes of mowing.
Sean was given the credentials to the web host they were using and started to work. Upon opening the website, it took more than 10 seconds for it to fully load. He felt sad but endured the pain because he believed the task was just "easy." In the first two weeks, doing the job felt good. He optimized the WordPress website a bit, added the necessary pages and footers, and added SEO. Everything was fine and Sean was ready to show them the website.
A week later, the client called Sean and completely changed the requirements. They asked him to add a custom look on two of the pages, change the font, and add an interactive news map. That was not in the originally agreed-upon site design! Sean vigorously protested, but the client just said (non-verbatim), "Aww. Sean, you're a very good programmer! You can do it right? It can't be that hard."
When people tell you how easy your job is, the best thing to do is to make them do it for themselves.
Sean was not in a position to increase the cost of the job to cover the extra work, and could not do anything about it at that time. A week passed and he finished the custom look. He even had to pull in the source code from the website to his laptop because the loading was so slow that he could no longer bear it. What was left to be done was the interactive news map.
Now I don't know anything about web design but that sounds like something that's significantly more complicated than you can do for $30, let alone on top of the other work.
The interactive news map they requested was such that when the user clicked on a given province on a map, news for that province would be displayed on the bottom of the map. Sean did not know how he would implement that feature. It was certainly not in the cards given the original fee.
Sean thought that they should receive service that was comparable to the fee they paid. He told to them that the interactive news map couldn't be done because of "technical stuff." They bought the excuse.
What he gave them was a website that looked done but actually had a lot of visual bugs. What they asked him to do was to modify their website by just adding a couple of pages, a theme, and add the necessary information, and that's what he gave them.
Before and during the start of work, Sean learned that he was the second programmer they contracted to develop their website. The first programmer they contracted was a friend of his who was also asked to modify the site and add an interactive news map. He bailed out immediately because of the discrepancy between the pay and the amount of work.
To this day, their news website is still up and running, albeit really slowly. However, it seems that they haven't added their articles yet.
It's like when you see job postings where they want an expert with ten years of experience in each of web design, Java, C++, C# and .NET, system administration and as a DBA in each of Sybase, Oracle, DB2 and SQL-Server, and their pay range goes up to $60/hour. And they wonder why they can't fill the job.