Почему многим программистам платят почасово?
У вас в заголовке вопроса про почасовую оплату, а в тексте - про фиксированное время на выполнение работы. Это совершенно разные вещи.
Программистам платят по часам и по факту, потому что очень часто невозможно заранее определить стоимость работ. И даже если программист выставляет какую-то сумму заранее, он закладывает в нее большое количество рисков (если, конечно, он не вчера работать начал), поэтому и заказчику и исполнителю часто выгоднее оплата по часам по факту (не все заказчики это понимают, к сожалению, многие как раз думают, что программист будет тянуть время и ковырять в носу).
Большинство задач вполне можно продумать и оценить. И если вы не знаете сколько времени у вас понадобиться на то чтобы изменить цвет кнопочки или напримре написать АПИ для авторизации, то это говорит о том что вы не профессионал. Никто не просит оценивать время точь-в-точь. Но нужно хотя бы чувствовать разницу между задачами на час/день/неделю.
Но есть и такие задачи, которые действительно сложно оценить, например написать какую-то новую распределенную базу данных с реализацией нового механизма распределенных транзакций, обладающую определенными свойствами. В таких задачах часто необходимо пересмотреть много вариантов чтобы выбрать подходящий и заранее неизвестно к чему вас это приведет. Может быть эта задача вообще пока что не решается.