Создание веб-сервисов и приложений для смартфонов, которым я профессионально занимаюсь в HappyFunCorp в течение последнего десятилетия или около того, раньше было довольно простым делом. Нелегко, но прямолинейно, особенно когда заказчиком был потребительский стартап, а таких было очень много.

Чем больше мы делали, тем лучше у нас получалось. Разработайте и напишите два нативных приложения, обычно сначала для iOS, а затем для Android. Не экономьте на дизайне. Подключите их к JSON API, обычно написанному на Ruby on Rails, который также поддерживает веб-сайт. Всегда есть веб-сайт; потребители могут видеть только ту сторону, которая представляет собой минимальный рекламный щит для приложения, но, по сути, всегда есть также сайт администратора для управления функциями и аспектами приложения.

Дизайн не так важен для сайта администратора, поэтому вы можете создать что-то грубое, но эффективное, например ActiveAdmin; зачем катить свое? Точно так же аутентификация сложна и легко ошибиться, поэтому используйте что-то вроде Devise, который поставляется со встроенными крючками для входа в Facebook и Twitter. Тщательно проектируйте свою базу данных. Используйте jQuery для динамических манипуляций в браузере, поскольку необработанный Javascript — это такой кошмар. Спорьте о том, использовать ли Rspec или Minitest для тестов вашего сервера.

Все там? Хорошо, разверните его в своей масштабируемой среде Heroku, чтобы вы могли просто «git push» отправить на промежуточную и рабочую среду с различными уровнями поддержки Postgres, автомасштабирования, конвейеров, кэширования Redis, рабочих заданий Resque и так далее. Если это стартап, держите их на Heroku, чтобы посмотреть, приживутся ли они, найдут ли легендарный продукт подходящим для рынка, не в последнюю очередь потому, что это поможет вам ускорить итерации. Если да, то в какой-то момент вам придется перевести их на AWS, потому что Heroku масштабируется только до сих пор, и это очень дорого. Если нет, что ж, «потерпите неудачу быстро», верно?

Это были дни, друзья мои, те безмятежные, давно минувшие дни (проверяет заметки) пять лет назад. Дни большого горя, конечно, но очень небольшой сложности принятия решений. Бум смартфонов был в разгаре, веб-бум утихал, и все еще плыли по этим двум приливным волнам.

Сегодня? Ну, сегодня мы все еще живы, ни одна из этих волн не сломалась, по сути, программное обеспечение все еще поглощает мир, но все… по-другому. Большая часть мира съедается, но это также происходит медленнее, например, рост на 50% в год с базового уровня в 1 миллиард долларов, а не на 500% с 1 миллиона долларов. Меньше мечтательных основателей с идеей приложения, которое, как они уверены, изменит мир, и достаточного финансирования, чтобы дать ему шанс. Конечно, они все еще там, и у них больше власти, но сейчас ландшафт стал более сложным.

Вместо этого мы видим все больше крупных предприятий, СМИ, промышленности и розничной торговли, понимающих, что они должны адаптироваться и быть поглощенными, экспериментируя с новыми техническими проектами с волнением и трепетом. Или запрашивать пользовательские приложения для очень специфических, но очень полезных целей и требовать, чтобы они взаимодействовали с их неудобным ранее существовавшим пользовательским промежуточным программным обеспечением именно так. Или технологические компании, даже крупные известные, отдают вспомогательные инструменты и проекты на аутсорсинг, чтобы сосредоточить свои внутренние команды исключительно на своих основных компетенциях и бизнес-моделях. За последние несколько лет круг наших клиентов определенно сместился в сторону предприятий.

Это не означает, что стартапы все еще не приходят к нам с яркими идеями и вдохновляющими презентациями в PowerPoint на достаточно регулярной основе. Как и основатели блокчейна с супер-рассеянными глазами (правда, я сам иногда немного мечтаю о блокчейнах), заменяющие основателей потребительских приложений прошлого. Я сомневаюсь, что мы единственные, у кого в конце прошлого года и в начале этого был поток стартапов с блокчейном, который на данный момент сократился до нескольких активных проектов. (Не в последнюю очередь потому, что инструменты все еще настолько сырые, что напоминают мне взлом командной строки 90-х.) Но я сильно сомневаюсь, что эта сфера исчезнет.

К настоящему моменту мы не занимались таким количеством проектов в области ИИ, как я ожидал, возможно, отчасти потому, что таланты в области ИИ по-прежнему очень редки и высоко ценятся, а отчасти потому, что оказывается, что многие кажущиеся «ИИ» работы могут быть выполнены с помощью простых линейной регрессии, а не созданием, обучением и настройкой нейронных сетей с глубоким обучением… хотя, если вы выполняете эти линейные регрессии с помощью TensorFlow, он по-прежнему соответствует модному слову «ИИ», верно? Правильно?

Однако больше всего изменились используемые нами инструменты. В настоящее время, когда вы хотите создать приложение, вы должны спросить себя: действительно ли оно нативное? (Java или Kotlin? Objective-C или Swift?) Или React Native? Или Хамарин? Или новый Flutter от Google? Когда вы хотите создать веб-сайт, вы должны думать: традиционный? Или одностраничный, с React, Angular или Vue?

Что касается сервера — вы знаете, Go намного быстрее, чем Rails, и о, эта элегантная обработка параллелизма, но, о, где моя карта/фильтр/уменьшение? Javascript по-прежнему остается неуклюжим языком, но наличие одного языка в стеке дает определенные преимущества, а в наши дни Node является мощным и богатым пакетами. И, конечно же, вы захотите, чтобы все это было контейнеризовано, потому что, хотя Docker определенно добавляет еще один или два уровня сложности конфигурации, обычно это того стоит.

Если вы не хотите стать полностью «бессерверным», по крайней мере, в некоторых аспектах, с Amazon Lambda или Google Firebase? Даже если вы не используете Firebase для хранилища данных, как насчет аутентификации, а? И если вы все контейнеризованы и Kubernetизированы, если это уместно, хотя, может быть, давайте не будем идти по пути множества микросервисов, пока вы не будете уверены, что ваш продукт соответствует рынку, то где вы хотите развернуть это, AWS или Azure, Google Cloud или Digital Ocean? Или вы хотите использовать один из их сервисов PaaS, таких как App Engine или Beanstalk, которые, как и Heroku, находятся где-то между «бессерверными» и «голыми виртуальными машинами»?

Я упрощаю, но вы поняли мою мысль. У нас как у разработчиков никогда не было больше возможностей, больше инструментов, доступных нам… и нам никогда не приходилось больше бороться с параличом анализа, потому что очень сложно определить, какой из возможных наборов инструментов является лучшим для той или иной конкретной ситуации. Иногда — часто — мы должны быть довольны просто выбором хорошего. И, боюсь, эта проблема выбора вряд ли станет легче в ближайшее время. Странное время для кодера. Мы живем и работаем, запутавшись в смущении богатства.

Первоначально опубликовано на https://techcrunch.com.