Заказчик не может сформулировать ТЗ на языке, понятном программисту. Поэтому давным давно от программирования отделилась профессия "постановщик задач". Человек способный разговаривать с заказчиком и с программистом на их языке. Это очень сложная и по хорошему дорогая профессия.
Сейчас появляется обратная тенденция. Постановщики задач стали программировать сами. Стало проще объяснить задачу непосредственно компьютеру, чем программисту. Хорошие среды разработки и обширные библиотеки это позволяют.
Соответственно, на сегодняшний момент ответ такой: на фриланс бирже можно брать только работы по которым имеется опыт. Есть понимание задачи (лучше чем у заказчика), есть наработки: шаблоны, библиотеки и т.д. Сделавший пяток различных магазинов поймет невнятное ТЗ очередной=го торговца и большую часть соберет из готовых частей.
Более общий ответ: чтобы заниматься прикладным программированием, нужно становится специалистом в области, к которой предполагается "прикладываться". Или брать такого специалиста в команду.