IT-инфраструктура для бизнеса и творчества

Чем занимаются тысячи разработчиков в Uber и как устроена их работа: рассказ инженерного менеджера Статьи редакции

И почему процессы могут зависеть от стран.

Инженерный менеджер Uber Андрей Неверов выступил в подкасте «Запуск завтра» и рассказал об особенностсях своей работы. Он был техническим директором в американском стартапе Trucker Path, который хотел стать «Uber для грузовиков». Сейчас Андрей руководит одной из команд программистов Uber в Дании.

Андрей рассказал Самату Галимову, почему в компании столько разработчиков, как они поделены и как справляются с проблемами.

Андрей Неверов личная страница в Facebook

Почему в Uber так много программистов

Uber насчитывает около 25 тысяч сотрудников. Порядка 70% из них работают в США. Также есть офисы в Голландии, Великобритании, Дании, Болгарии, Франции, Индии и Бразилии.

Uber очень большой. Одновременно в мире совершаются 400 тысяч поездок (таксисты с пассажирами, курьеры, грузовики). К середине 2021 года компания хочет увеличить этот показатель до 600 тысяч поездок. В день совершается 10-15 млн поездок. По каждой нужно провести вычисления, сохранить данные, рассчитать маршруты, выписать чек.

Для пользователя схема проста: нажал кнопку, машина поехала. Но это огромное количество инженерии. И чем больше компания и клиентов, тем она сложнее.

В Uber много разных систем и они работают в унисон. Одна система может общаться с другой.

Например, есть система, которая ведет автомобиль по маршруту. Когда пассажир прибыл по месту назначения, эта система говорит другой: «Поездка закончена, иди и сними столько-то долларов с карты этого пассажира». Платежная система должна пойти в другую систему и сказать: «База данных, дай мне привязанную к аккаунту пассажира кредитную карту».

Все системы друг с другом общаются по каналам коммуникации. Если одна сломалась, то сломались все системы, которые с ней пытаются разговаривать. Для того, чтобы это починить, нужно выпустить новую версию кода либо перезапустить систему в старой версии, которая до этого работала.

Как поделены разработчики

В офисе у Андрея около 60 человек. Они поделены на команды по пять человек. У каждой — свое направление работы. Одна команда может обслуживать платежную систему, другая разрабатывать искусственный интеллект, который считает спрос и предложение, третья — заниматься мобильным приложением и так далее.

Названий у команд нет, есть продукт, которые они производят. Нет единого общепринятого стандарта, как команды должны работать. Можно подобрать способ, который больше всего нравится конкретному менеджеру.

В команде может быть технический лидер. Он обеспечивает качество принимаемых технических решений и занимается большим количеством коммуникаций. Технический лидер — это не должность, а роль. Это такой же разработчик, у него нет подчиненных.

Андрей занимается инструментами для разработчиков, с помощью которых они выкатывают новые версии своего кода. У него в подчинении 14 человек, которые поделены на три команды.

Страница Uber в Facebook

Как ставятся цели

В Uber план составляется на полгода, руководство компании готовит список бизнесовых целей. Команды его изучают и говорят, какие проекты могут сделать для достижения той или иной цели. Они составляют свои планы, общаются между собой, чтобы понять, насколько это вообще реально. И далее уже начинают работать по своим планам.

Среди бизнесовых целей может быть, например, поиск нового дата-центра, поскольку контракт аренды старого заканчивается. Ответственным нужно будет поставить туда компьютеры и запустить на них инфраструктуру, которая обеспечивает работу Uber. Причём нужно это сделать это так, чтобы никто из пользователей ничего не заметил. Как вариант, можно придумать, как контролировать и распределять нагрузку на компьютерах в дата-центре.

Как решают проблемы

При возникновении проблемы команды разработки решают ее собственными силами, но если нужна помощь, обращаются к инфраструктурной команде, которая понимает, как все работает.

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

Какие особенности работы Uber в разных странах

Uber присутствует во многих странах и везде действуют свои законы. В Амстердаме компания работает по одним правилам, в Лондоне — по совершенно другим (разница даже в том, как работает интерфейс и как оформляются водители).

Например, в Голландии если ты хочешь стать водителем Uber, нужно получить специальную лицензию. Это занимает год, зато потом ты начинаешь работать и неплохо зарабатывать. В США ничего такого водителям не нужно: скачал приложение, нажал на кнопку и поехал.

Кроме того, может различаться процесс разработки, если этого требует какая-то юрисдикция. Так, для Лондона Uber должен выпускать код по другим правилам, нежели обычно, так как департамент транспорта британской столицы обязал компанию использовать более надежный механизм выпуска новых функций.

(function () { let cdnUrl = `https://specialsf378ef5-a.akamaihd.net/SelectelBranding/images/` let previousArticleNumber = null let currentArticleNumber = 0 let platform = 'Desktop' let articles = [ { name: 'camera', url: `${cdnUrl}CameraCat`, text: 'умную камеру для\u00A0наблюдения за\u00A0котиками', link: 'https://vc.ru/selectel/306690', num: 3 }, { name: 'chill', url: `${cdnUrl}ChillCat`, text: 'трекер, который подскажет, когда пора отдохнуть', link: 'https://vc.ru/promo/288561-eye-tracker', num: 1 }, { name: 'cloud', url: `${cdnUrl}CloudCat`, text: 'котика: даёшь ему «пять», а\u00A0он делает бэкап в облако', link: 'https://vc.ru/dev/294799-maneki-neko', num: 2 } ] let buttonCycle = document.querySelector('.button--cycle') let buttonChoose = document.querySelector('.button--choose') let buttonMobile = document.querySelector('.button--mobile') let textField = document.querySelector('.selectel-footer-subtitle') let imageAgent = document.querySelector('.image--agent') let banner = document.querySelector('.selectel-footer') buttonCycle.addEventListener('click', cycleClick) buttonChoose.addEventListener('click', () => sendEvent(`Promo ${articles[currentArticleNumber].num} Left`, 'Click')) buttonMobile.addEventListener('click', () => sendEvent(`Promo ${articles[currentArticleNumber].num} Left`, 'Click')) let media = window.matchMedia("(max-width: 570px)") media.addEventListener('change', matchMedia) function matchMedia() { if (media.matches) { platform = 'Mobile' } else { platform = 'Desktop' } update() } matchMedia() function cycleClick(event) { sendEvent(`Promo ${articles[currentArticleNumber].num} Right`, 'Click') if (event) { event.preventDefault() event.stopPropagation() } window.open('https://vc.ru/tag/selectelDIY', '_blank') //cycle(event) } function cycle(event) { // incrementArticleNumber() textField.innerHTML = generatedText() imageAgent.src = articles[currentArticleNumber].url + platform + '.svg?3' imageAgent.setAttribute("class", "") imageAgent.classList.add('image--agent', articles[currentArticleNumber].name) banner.href = articles[currentArticleNumber].link } function update() { banner.href = articles[currentArticleNumber].link imageAgent.src = articles[currentArticleNumber].url + platform + '.svg' textField.innerHTML = generatedText() } function incrementArticleNumber() { previousArticleNumber = currentArticleNumber if (currentArticleNumber >= articles.length - 1) { currentArticleNumber = 0 } else { currentArticleNumber++ } } const sendEvent = (label, action = 'Click') => { const value = `SelectelDIY — loc: Footer — ${label} — ${action}`; if (window.dataLayer !== undefined) { window.dataLayer.push({ event: 'data_event', data_description: value, }); } }; function generatedText() { let defaultText if (platform === 'Desktop') { defaultText = `Мы тут собрали %text%. Хотите научим?` } else { defaultText = `Мы тут собрали %text%.` } return defaultText.replace('%text%', articles[currentArticleNumber].text) } function getRandom(min, max) { min = Math.ceil(min) max = Math.floor(max) return Math.floor(Math.random() * (max - min + 1)) + min } (function create() { currentArticleNumber = getRandom(0, articles.length - 1) cycle() let page = document.querySelector('.page--entry') if (page) { function insertAfter() { let parents = page.querySelectorAll('[data-id="7"]') let referenceNode = parents[0] referenceNode.parentNode.insertBefore(banner, referenceNode.nextSibling); loaded() } setTimeout(() => insertAfter(), 0) } }()) function loaded() { banner.classList.add('loaded') } loadImages([ `${cdnUrl}CameraCatDesktop.svg`, `${cdnUrl}ChillCatDesktop.svg`, `${cdnUrl}CloudCatDesktop.svg`, `${cdnUrl}CameraCatMobile.svg`, `${cdnUrl}ChillCatMobile.svg`, `${cdnUrl}CloudCatMobile.svg?3`, ]) function loadImages(urls) { return Promise.all(urls.map(function (url) { return new Promise(function (resolve) { var img = document.createElement('img'); img.onload = resolve; img.onerror = resolve; img.src = url; }); })); } }())
0
5 комментариев
Популярные
По порядку

А убер планирует вводить в парк водителей на ретро, типа волг 24, москвичей, жигулей?
Так иногда хочется прокатиться на нормальной машине, вспомнить детство, а не на этих современных пластиковых погремушках

0

Вы хотели сказать "Яндекс планирует"?

5

Я тоже бы с удовольствие поездил бы на советских. А не этих одноразовых киа рио/ хэндай солярис. рвать от них хочется.

–1

Разбивка на команды, тили-тили, а чем занимаются то?
Но вот это я запомню:
"у каждого крупного подразделения разработчиков есть небольшая группа людей, к которым можно обратиться, если дела совсем идут плохо"
Интересно как эти группы называют между собой разработчики :)

1

фиксики :)

0
Читать все 5 комментариев
Возник по просьбе бразильских банкиров и стал любимым напитком солдат во время Второй мировой: история Nescafe Статьи редакции

В 2021 году Nescafe — крупнейшее подразделение Nestle и бренд, который оценивается больше чем в $20 млрд. По собственным данным компании, в мире каждую секунду выпивают более 5000 чашек напитка.

Дегустация Nescafe National Museum
ТОП-17 ошибок, которые съедают конверсию лендинга на завтрак
Завод по производству идей. Как работают акселераторы, зачем они нужны стартапам и куда идти с идеей прямо сейчас

По данным Startup Genome, 9 из 10 стартапов терпят неудачу. Возможных причин «смерти» много: недостаточно протестированная гипотеза, неподтвержденная юнит-экономика, неверная стратегия или просто неудача в подходе к продажам.

Хочу кухню как у подруги: зачем в Циан сделали поиск квартир по фото

Рассказывает Юлия Зыкова, руководитель команды «Аудитория» в Циан.

Мы сделали бот, который печатает и отправляет ваши фото маме. В 2 клика
Катя со свежими фотками для родителей

Мы запустили Kind Bot — доброго бота, которому в 2 клика можно скинуть свои фотки. Он их напечатает и отправит по почте вашей маме. Или другому близкому человеку.

Как у меня украли 600 тысяч с карты, а «Тинькофф» нарушает федеральный закон

Спойлер: я не вводил никуда код, не переходил по ссылкам и не сообщал данные карты.

Как меня хейтили десятки тысяч человек. Взрывной PR, кому он нужен
Из науки в IT: как создать свой стартап и стать преподавателем

Как перейти в IT из другой сферы? Как разработать курс, которому нет аналогов? Как студенту получить максимум пользы от занятий? Рассказывает преподаватель OTUS Сергей Окатов, руководитель курсов «Kotlin Backend Developer» и «Kotlin Developer. Basic».

Новый пролетариат

Очень давно один из классиков написал ёмкую по тогдашним временам фразу «пролетариату нечего терять, кроме своих цепей» Сейчас сложно понять её суть, но тогда она была понятна всем. Рабочий обладал только своими «руками» и это было единственное, чем он владел, абсолютное большинство жило от зарплаты до заплаты в арендованном жилье и не обладала…

Что Tele2 предлагает клиентам в «черную пятницу»

На главной распродаже года клиентов компании ждут сразу несколько интересных предложений: скидки на смартфоны, пакеты SMS и безлимитный трафик на YouTube, Яндекс.Карты, Яндекс.Навигатор.

Опыт возврата денег за обучение дизайну у Yakovlevv.com. Тварь я дрожащая или право имею?

В данной статье приведен мой личный опыт покупки данных курсов, мои оценочные суждения, а также сухие факты, в виде скриншотов и аудиозаписей из моей личной переписки с владельцем этих самых курсов, на тот момент исполняющего услуги как ИП Яковлев Виталий Борисович ( ОГРНИП: 319784700156839 ), сейчас же, работающего от лица ФОП Торб'як Тетяна…

null