К сожалению найти хорошего разработчика действительно непросто.
А хороший разработчик на удаленке - это вообще отдельный "фрукт", который созревает годами.
Чтобы найти такого человека, нужно хорошо разбираться в мотивации и знать где искать:
Как правило разработчики на удаленке - люди с хорошим техническим бэкграундом и хорошим английским (работают в интернациональных командах).
Это в каком-то смысле поднимает планку по з\п (первый факт).
Что касается Upwork - здесь очень тяжело найти реального разработчика. Upwork никак не фильтрует уровень таких специалистов. И надо признать, не особо эффективно борется с различного уровня мошенничеством, как то: накрутка отзывов, подделка личности и т.д.
Процентов 80 там (цифра просто из головы, прошу не принимать близко к сердцу) - это низкоквалифицированные рабочие(либо посредники) с проблемами в само мотивации. Это ни хорошо ни плохо - это факт (номер два), потому что мотивировать себя на удаленке действительно непросто, особенно если ты не любишь свою работу (к сожалению сейчас в IT попадает все больше "случайных" людей из за хайпа и денег).
Факт номер три - большинство хороших разработчиков получают огромное удовольствие от создания нового, решения сложных проблем, а также от взаимодействия с технологиями (чем продвинутее, тем лучше). Поэтому все что Вы можете сделать с точки зрения контроля - установить ограничения на условия задачи и просто не мешать (это я о ежедневных отчетах).
Тем не менее, контроль за бюджетом и сроками очень важен, и это задача из дисциплины управления проектами.
Разработчики этим, как правило, не занимаются (а если и занимаются, то опытные, и попросят за это больше $$).
Поэтому чтобы контролировать ход работ по проекту, Вам (или Вашему менеджеру проекта) необходимо разработать (либо взять существующие) соответствующую методику (например
Scrum). Не обязательно копировать 1в1, просто взять то, что нужно, в зависимости от проекта и размера команды.
Например разбейте ход работ на итерации (длиной в 2 недели). В каждой итерации выделяйте какое-то время на декомпозицию и оценку задач. Старайтесь по окончании каждой итерации получать видимый и работоспособный результат, прежде чем приступать к следующей (грубо говоря, отчетный период - каждые две недели).
Используйте инструменты для совместной проектной работы - Trello, Jira и т.д.
В общем большой упор нужно делать именно на психологию и установление доверительных отношений с разработчиками, потому что интеллектуальный труд очень зависим от этих вещей (и еще от денег, конечно же).
Конечно это не означает, что тех кто откровенно кладет болт на работу нужно уговаривать и убеждать поработать. В таком случае это просто не ваши "пассажиры".
Ну и искать рекомендую не на бесплатных фриланс-биржах по ключевым словам, а на специализированных площадках: тематических тусовках (чаты/форумы по технологиям/фреймворкам), специализированных биржах с отбором кадров (типа Toptal), ресурсах посвященных работе (типа Djinni.co).
Также порекомендую самому проводить какой-либо простейший отбор/тестирование кандидатов, особенно если кандидаты с фриланс-бирж и не топовые профили.