Today, freelance developers are in demand because most companies seek the cheapest solutions, which happens to be hiring freelancers. Most freelancer work by project and are paid by invoice not as an employee. There is cost saving to the company to pay by invoice and a risk to the Freelancer.
Freelance developer’s life involves working project to make money. Most freelancer must work many projects for multiple customers each year. With a conventional job, you work 40 hours, and you get paid for 40 hours. With freelancing, much of your work won't be billable. And some of the work you will bill for won't be paid or won't be paid timely. Many times, freelancers work 60 hours and receive no money.
Most freelance developers work by themselves for a customer’s thousands of miles away, concerned they may not find work, not get paid or are paid less then invoiced. Additional freelancer need to have many talents beyond freelancing. They must market themselves, speak the language, have all the equipment necessary with good internet connectivity. Freelancer is a business and they must manage this business and accept the risk of not getting paid.
Freelancer seek security to ensure they get paid. In the case, where the freelancer is building the app on the buyer’s equipment One of those tricks is to *insert* a complicated bug just in case they do not get paid and refuse to fix until payment is made.
Most businesses ask freelancers for code before they will pay the final invoice. Some freelancers will insert a pesky complicated hard to find bug (that would crash the whole application after weeks of usage). And offer to fix it when full payment is made.
In cases when freelancer releases code files and does not get paid. The buyer often hires others to make changes and upgrades, to disguise that he is using the code. Freelancers to protect themselves have been known to insert code into the files a servlet that would, when tripped, truncate the tables. If the freelancer is not paid and the application was deployed, the freelancer could with a cron connect with the servlet and truncate all the tables that would remove all the data.