Two things: lack of client knowledge and developers in low income countries.
Non-technical people simply have no idea how much effort is required to develop an app.
- They have no concept of requirements, and when you explain, you will never squeeze them all out of the client before beginning the project.
- They don’t understand that you need a lot thinking time up front, and should come up with an architecture and write design domination before writing the first line of code.
- They have no concept of databases, or of error handling, which can be as much as a third of the total code. And it’s not just writing error handling code, it’s also thinking about what to do in each possible error scenario. - They tend to see only he GUI and have no concept of anything “under the hood”. To them, “it’s only a button”, without realizing that when it is clicked you might have to validate some input, talk to a server and handle its response, including errors or no response at all, and then update the GUI. Nope, “it’s just a button”.
- If they can describe their app in a few sentences, they can’t understand why it might take months to implement.
- And, finally, they don’t understand testing.
All of which leads them to “low ball” the effort required and the amount they are willing pay, which is generally peanuts for an idea they are certain will make them millions.
The people accepting such tasks are generally living in countries with low costs of living such as Eastern Europe and India. Your normal hourly rate might exceed their daily rate. Also, they may be a few unscrupulous ones who will accept, do half the work and explain that the task is more difficult than expected and will require further payment to complete. Generally, though, it’s just down to cost of living.
Btw, what I have done in the past is to find someone with an idea and good business contacts who can’t afford to pay to develop an app (I googled once and found that even an average Android app “costs” about $60k to develop). I write the code, they do the sales and we split 50:50.