Загрузка файла на сервер. Требования.
Представь, что тебе надо срочно передать скриншот экрана твоего смартфона. Веб-интерфейс поддерживает поле выбора файла, при нажатии на кнопку открывается как раз обзор твоих последних фото, и там же есть только что сделанный тобой скриншот. Представь, что тебе досталась глючная версия Сафари, которая падает через несколько секунд, после того, как сама внутри свяжется с серверами Apple и проверит какие-то обновления. Повлиять на это никак нельзя, на сервера лезет именно сам браузер, настроек для отключения причин падения нет. Ты написал здоровский сервис техподдержки, помогающим людям избавиться от истерики, связанной с совпадением ста неприятностей в один момент времени, путём решения всех его проблем. Для решения очередной проблемы вам позарез необходим скриншот телефона вашего клиента. Место на его телефоне почти закончилось, благо, на скриншот хватит. Удалять больше нечего - он только что забил весь телефон видео-свидетельствами очевидца наблюдения пришельцев. Ничего удалять нельзя! После скриншота, максимум, что осталось - 50 килобайт свободного места (доступного, кстати, в Local Storage!). Сафари при запуске открывает свою левую страницу (выполнение которой неизбежно приводит к падению браузера), а закрыть он её не позволяет, только открыть новую вкладку или переключиться на имеющуюся. Загружаемый "мусор вычищает и без того забитый кэш браузера, и страничка твоего сервиса вынуждена каждый раз загружаться заново. Клиент находится в глухой деревенской степи, и от твоей поддержки может зависеть его жизнь. Он всё время движется, но покрытие в этой области очень слабое. Интернет периодически пропадает, максимум, что у него есть - это edge. Также клиенту постоянно названивает его друг, из-за чего и без того тормозной интернет постоянно вырубается. У клиента заканчивается последний оплаченный мегабайт. Баланса на телефоне хватает только для приёма входящих звонков и чуточки интернета. Да, и у него садится батарейка. Он её периодически подзаряжает своим чудо-солнечным аккумулятором, но погода пасмурная, и уже вечереет. Всё, что нужно - отправить по edge на твой грёбаный сервер один грёбаный трёх-мегабайтный скриншот. Связь может быть только по HTTPS, т.к. за твоим клиентом следят бандиты с GSM-прослушкой. Бушуют грозы, и периодически вышка связи отрубается, твой клиент вынужден искать новую. Его телефон в роуминге, и операторы каждый раз разные. Некоторые даже режут соединения по WebSocket'ам. Напоминаю: просто разработай дизайн страницы загрузки скриншота, опиши все технологии и решения, которые ты будешь использовать, а главное - опиши все детали протокола. В каком порядке какой код будет выполняться. Что будет происходить при открытии страницы? Как будет происходить отправка скриншота на сервер? Что будет после загрузки? Необходимо полностью спроектировать законченное веб-приложение, учитывающее все перечисленные нюансы. Бюджет - $1000. Сроки - один месяц. Исполнитель - один. Спроектировать необходимо за один час. Клиент, если выживет, принесёт $10,000. Вопросы?
Предполагается, что опытный разработчик, при получении от заказчика любого базового и простого (на первый взгляд!) ТЗ, обязан спроектировать решение таким образом, чтобы в будущем, в процессе допиливания его решения поколениями других программистов, им не пришлось приделывать костыли или переписывать всё заново. Потому что, по моему скромному мнению, человек, считающий себя профессионалом, обязан уметь самостоятельно уточнять ТЗ и думать о конечных пользователей ЗА ЗАКАЗЧИКА, потому что ему самому, в конечном счёте, выгодно заработать ОЧЕНЬ МНОГО ДЕНЕГ для заказчика - он придёт к профессионалу ещё раз и тогда можно торговаться и диктовать свои условия. Надо ли проявлять эмпатию и свою техническую смекалку?