Русский
Русский
English
Статистика
Реклама

Веб-разработа

Семилетними шагами миграция с JSP Angular JS на Angular 2

26.03.2021 10:08:08 | Автор: admin

Что нужно для перехода от серверного рендеринга к пользовательскому? Чем хорош Angular 2+ и как на него перейти? В этой статье попытаемся разобраться в данных вопросах и описать процесс миграции от серверных технологий рендеринга, таких, как JSP, к клиентским технологиям рендеринга представлений с использованием Angular.

Используемые технологии

Прежде чем приступить к коду, опишем весь стек используемых технологий:

  • Spring Framework - фреймворк для Java-платформы.

  • JSP - технология, позволяющая создавать содержимое, которое имеет как статические, так и динамические компоненты. Страница JSP содержит текст двух типов: статические исходные данные, которые могут быть оформлены в одном из текстовых форматов (например, HTML) и JSP-элементы. Эти элементы конструируют динамическое содержимое, позволяя внедрять Java-код в статичное содержимое страницы.

  • AngularJS и Angular - JavaScript-фреймворки от компании Google для создания клиентских приложений. AngularJS был одним из первых JavaScript-фреймворков, разработанным для создания одностраничных приложений (SPA). Он был выпущен в 2009 году как фреймворк с открытым исходным кодом. В 2016 году был выпущен Angular 2. Он был переписан с нуля на TypeScript и не является обратно совместимым с AngularJS.

Изначально у нас есть приложение, написанное на Spring+JSP с использованием AngularJS.Наша цель - перейти к SPA с использованием современной версии Angular.

Какие перспективы?

Angular является современным и популярным фреймворком и обладает рядом преимуществ по сравнению с JSP и AngularJS.

Основное концептуальное различие между JSP и Angular заключается в том, динамически ли генерируется страница в браузере (на стороне клиента) или на сервере. При использовании Angular не приходится извлекать всю страницу с сервера после ее загрузки в первый раз. Вы просто обновляете части страницы, которые изменились на клиенте (хотя это часто происходит в ответ на данные, полученные с сервера). Рендеринг на стороне клиента позволяет избежать ненужных запросов на полную страницу, когда изменилась только ее часть.

Внедряем технологию

Перейдем непосредственно к описанию процесса перехода и рассмотрим вопросы, возникающие при смене технологий.

Инициализация нового Angular приложения

Вместо JSP-страниц нам теперь понадобится Angular приложение. Для его создания удобно использовать Angular CLI. Angular CLI - официальный инструмент для инициализации и работы с Angular-проектами. Он упрощает создание приложения, его компиляцию.

Angular CLI можно установить, выполнив следующую команду:

npm install @angular/cli

После создадим новый Angular проект с помощью команды:

ng new <название проекта>

Команда ng new генерирует скелет будущего приложения. Angular CLI создает одноименную директорию и помещает в нее исходные файлы "скелета" приложения.

Создание служебных сервисов

На JSP-страницах использовалась информация, содержащая Java-выражения, а также специфичные теги: http://www.springframework.org/tags, в частности, для локализации и http://java.sun.com/jsp/jstl/core. Также в некоторых ситуациях может существовать необходимость в кастомизируемом ролевом доступе, информацией о котором, помимо сервера, должен владеть и клиент. Для получения этой информации создадим дополнительные контроллеры с методами, возвращающими нужную информацию. Запросы, возвращающие сообщения для локализации, должны быть доступны без аутентификации. Это связано с тем, что эти сообщения отображаются на всех страницах, включая доступные неавторизованным пользователям. Поправим конфигурацию Spring Security, чтобы она игнорировала запросы по шаблону "/messages/*":

@Overridepublic void configure(WebSecurity web) {    web.ignoring().antMatchers("/messages/*");}

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

Проксирование

В случае, когда клиент хостится на отдельном сервере, возникает потребность в проксировании запросов. Тот факт, что фронтенд и бэкенд прослушивают отдельные порты, не позволяет Angular делать внутренние запросы. Это связано с тем, что веб-браузеры разрешают только внутренние запросы к тому же источнику, из которого было загружено веб-приложение. К счастью, мы можем позволить Angular CLI выступать в качестве прокси-сервера для нашего бэкенда Spring. Приложение Angular будет отправлять бэкенд-запросы на сервер разработки, который будет пересылать их на бэкенд.

Для этого добавим в корневую папку проекта файл proxy.conf.json с конфигурацией прокси-сервера:

{  "/api": {    "target": "http://localhost:8099",    "secure": false,    "cookieDomainRewrite": "localhost",    "changeOrigin": true  }}

Также поправим package.json, чтобы данная конфигурация применялась, указав в стартовом скрипте "start": "ng serve --proxy-config proxy.conf.json".

Перенос JSP страниц в компоненты Angular

Angular приложение состоит из компонентов, у каждого из которых своя независимая логика. Компонент - полноценная сущность, у которой есть своя логика TypeScript, разметка HTML и свой стиль CSS. Соответственно каждая JSP-страница будет разбиваться на отдельные компоненты, в которых в отдельные файлы выносится html, typescript и css. Для отправки запросов к бэкенду создадим отдельные сервисы. Заменим конструкции AngularJS на аналогичные в Angular.

В каждом компоненте, в методе ngOnInit пропишем получение необходимых сообщений для локализации, а также добавим проверку наличия необходимых для данного компонента привилегий.

При открытии JSP-страницы выполняется проверка на наличие привилегий. В случае отсутствия привилегий пользователь перенаправляется на страницу входа.

<%   if (!SecurityUtils.hasRole(SecurityConstants.VIEW_USER)) {       response.sendRedirect("login.jsp");   }%>

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

Все guard-ы должны возвращать либо true, либо false. И происходить это может как в синхронном режиме (тип Boolean), так и в асинхронном режиме (Observable<boolean> или Promise<boolean>). Данный пример разрешает переход при наличии у пользователя привилегии VIEW_SETTINGS. Метод hasPrivilege отправляет запрос на сервис и возвращает Observable<boolean>.

@Injectable({ providedIn: 'root'})export class SettingsGuard { readonly  SECURITY_CONSTANTS = SecurityConstants; constructor(private router: Router,             private securityConstantService: SecurityConstantService) { } canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot):   Observable<boolean|UrlTree> | Promise<boolean|UrlTree> | boolean|UrlTree {   return this.securityConstantService.hasPrivilege(this.SECURITY_CONSTANTS.VIEW_SETTINGS); }}

Обработка ошибок

Следующий шаг - обработка ошибок, возвращаемых сервером. Добавим HttpInterceptor, который обеспечивает перехват http-запросов и ответов для преобразования или обработки их перед передачей. При получении ошибок 401 или 403 будем перенаправлять пользователя на страницу входа:

public handleError(err: HttpErrorResponse): Observable<any> {  if (err.url != null && (err.status === 401 || err.status === 403)) {    this.router.navigate(['/login']);  }  return throwError(err.error);}

Подобным образом можно обрабатывать другие ошибки, подробнее можно почитать, например, здесь.

Кэширование

Сообщения для локализации интерфейса, а также ряд других констант не меняется во время использования приложения, поэтому нет смысла каждый раз запрашивать их с сервера. Для реализации кэширования добавим RequestCache и CachingInterceptor.

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

cache = new Map<string, RequestCacheEntry>();get(req: HttpRequest<any>): HttpResponse<any> | undefined {   const url = req.url + req.body.key;   const cached = this.cache.get(url);   if (!cached) {     return undefined;   }   const isExpired = cached.lastRead < (Date.now() - maxAge);   return isExpired ? undefined : cached.response; }put(req: HttpRequest<any>, response: HttpResponse<any>): void {   const url = req.url + req.body.key;   const newEntry = { url, response, lastRead: Date.now() };   this.cache.set(url, newEntry);   const expired = Date.now() - maxAge;   this.cache.forEach(entry => {     if (entry.lastRead < expired) {       this.cache.delete(entry.url);     }   }); }

CachingInterceptor реализует интерфейс HttpInterceptor, перехватывает запросы и решает, нужно их кэшировать или нет. Любой класс, реализующий интерфейс HttpInterceptor, должен иметь метод intercept.

В этом методе мы сначала проверим, нужно ли кэшировать данные из запроса (метод isCacheable), и, если нужно, попробуем извлечь данные из нашего кэша. Если у нас есть кэшированные данные для конкретного запроса, то мы вернем Observable с этими данными. Иначе мы отправим запрос на сервер для извлечения данных, в нашем случае, используя метод sendRequest. Этот метод также кэширует запрос для дальнейшего использования.

intercept(req: HttpRequest<any>, next: HttpHandler) { if (!isCacheable(req)) { return next.handle(req); } const cachedResponse = this.cache.get(req); if (req.headers.get('x-refresh')) {   const results$ = sendRequest(req, next, this.cache);   return cachedResponse ?     results$.pipe( startWith(cachedResponse) ) :     results$; } return cachedResponse ?   of(cachedResponse) : sendRequest(req, next, this.cache);}

Заключение

Итак, описанные действия приблизили нас к получению современного Angular приложения, совместимого с нашим бэкендом. Остальное было делом техники. Популярные фреймворки предоставляют широкий спектр возможностей и огромное комьюнити с поддержкой. Уход от устаревших технологий необходим для полноценного развития приложения, даже если переход может вызвать сложности. Надеюсь, эта статья поможет вам продвинуться в нужном для вас направлении.

Подробнее..

Из песочницы Почему мы занимаемся аутстаффингом IT-персонала и не стыдимся этого

16.10.2020 12:13:24 | Автор: admin
Привет! Мы Holyweb, веб-разработчики с инженерным подходом, адепты JS, и мы любим аутстаффинг. А вы?



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

Судите сами: на Хабре мы насчитали 3к материалов про аутсорсинг, заказную разработку, продуктовую разработку и тд, и меньше 50 публикаций про аустаффинг. Как это вообще возможно?

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

В этом материале мы постараемся ответить на вопросы про аутстаффинг, которые вы задаете себе (и которые уже приготовились писать в комментариях).

  • Аутсорсинг, аутстаффинг а в чем вообще разница?
  • С какими клиентами есть смысл работать по аутстафф-модели?
  • Почему аутстафф нравится нам больше, чем аутсорс?
  • Почему клиенту аутстафф приятней, чем аутсорс или инхаус?
  • В каком случае веб-студии / продакшну лучше не пытаться в аутстафф?

Поехали!

Аутстаффинг, аутсорсинг а в чем вообще разница?


Прежде всего, разберемся с матчастью.

Аутстаффинг это


  • Человек / команда людей, которые находятся в штате веб-продакшна, но их часы полностью выкуплены компанией-заказчиком. Чаще всего это full time работа на одном проекте. Реже part time, в таком случае проектов может быть два.
  • Заказчик обычно выбирает одного разработчика или целую команду, проводит собеседование, а то и не одно. Сюда же тестовые задания и даже лайвкодинг. В общем, все круги жесткого отбора.
  • За формирование бэклога и постановку задач отвечает менеджер со стороны заказчика. Разработчики общаются с ним напрямую. Все коммиты, отчеты и действия фиксируются в клиентской системе управления проектами.
  • Функция подрядчика дополнять, усиливать или вовсе заменять команду заказчика. Обычно закрывается потребность только в одной определенной функции (например, frontend разработка на React.js).
  • Менеджер со стороны подрядчика занимается общим аккаунтингом и HR-сопровождением.
  • Формат оплаты retainer (когда клиент платит фиксированную сумму в месяц за разработчика / команду) или time and material (выработанные часы, умноженные на ставку, в идеале с оплатой простоев по вине клиента).



Аутсорс-разработка это


  • Человек / команда людей, которые находятся в штате подрядчика, и он на свое усмотрение формирует команды для клиентских проектов.
  • Заказчик не взаимодействует с конкретными разработчиками. Чаще всего он не в курсе, сколько людей какой квалификации делают его проект. Оценивается только результат.
  • Чаще всего разработчик совмещает проекты и переключается между ними по несколько раз в день.
  • Подрядчик берет на себя полную ответственность за разработку или ее кусок. Формирует бэклог, ставит задачи и контролирует выполнение менеджер на нашей стороне.
  • С клиентом общается менеджер подрядчика, иногда тимлид.
  • Формат оплаты чаще всего fix price, иногда time & material (как правило, на долгой техподдержке, реже на разработке с нуля).

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

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

Аутсорсинг это такси, аутстаффинг каршеринг. А свой автомобиль инхаус-команда




По аутстафф-модели могут работать почти любые сотрудники: аналитики, тестировщики, программисты, верстальщики, дизайнеры. У нас это в основном react-разработчики сейчас на рынке на них очень большой спрос, который сильно опережает предложение.

С какими клиентами есть смысл работать по аутстафф-модели?


Наш опыт говорит, что сфера бизнеса не играет здесь ключевой роли: наши команды работают с финтехом, ритейлом, IT холдингами и интеграторами. Мы с одинаковым успехом делаем публичные сервисы и внутрикорпоративные системы.

Размер проекта тоже не определяющий фактор. Аутстафф подходит как для больших проектов, которые требуют постоянного развития (читай бесконечного), так и для таких, когда за 1-2 месяца цели достигаются и контракт заканчивается.
Инга Морозова
Руководитель партнерской программы Globus


Как правило, клиент уже приходит с пониманием того, по какой модели работать. Крупные заказчики из сферы финтех, FMCG, IT в последние несколько лет предпочитают держать экспертизу у себя внутри и выбирают именно работу по аутстаффу. Но это не означает, что какие-то проекты не отдаются по аутсорсу зачастую по такой модели к нам приходят свежие проекты, новые продукты, в рамках которых ещё не написано огромного количества кода. Словом, все зависит от проекта и клиента.
Но есть действительно важные моменты, на которые стоит обратить внимание. Если хотя бы по двум пунктам случилось совпадение здесь можно работать по аутстафф-модели. В противном случае, стоит подумать еще раз, не случится ли разочарования и у клиента, и у вас?

Внутри компании клиента есть IT-компетенции


Разработка IT-продукта сложный процесс, и клиент должен понимать, как она устроена. Иначе эффективной работы не получится. Даже несмотря на наличие нужных компетенций, немногие компании могут (или хотят) собрать крутой боеспособный IT-отдел. Есть работы/направления, которые по разным причинам клиент не хочет отдавать внутренней команде разработки.

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

В чем прежде всего заинтересованы мы? Чтобы разработчик был равномерно загружен и не случалось простоев. Значит, у клиента должны быть необходимые компетенции, которые позволят правильно ставить и принимать задачи. Слова рефакторинг, багфикс, тестирование должны быть понятными обеим сторонам, чтобы не возникало возражений в духе: А почему вы сразу не написали код правильно? Я не буду платить вам за то, что вы исправляете свои же ошибки. Совсем хорошо, если на стороне клиента есть техлиды в том же технологическом стеке, на котором вы работаете.
Руслан Ишмухамедов
Управляющий партнер Evapps


Тут все довольно просто по модели аутстафф можно работать только в случае, если на стороне клиента есть сильный менеджер проекта, который может грамотно построить работу команды. Если этого не будет, скорее всего, в итоге проект не уложится в сроки/деньги, а виноватым в этом будет, конечно же, ваш разработчик и ваша компания в целом.


У нас на проекте какая-то (!)

Есть явная и осознанная потребность в масштабировании


Допустим, у клиента есть очень масштабный проект, который требует в один момент нанять 30-40 человек. Это настоящий вызов для HR-отдела. Цифровая конкуренция будет только нарастать. И пока одни теряют ценное время на поиски разработчика мечты, другие уже выкатывают новые релизы. Или такая ситуация: производительность команды не сбалансирована, есть недостаток определенной экспертизы, из-за этого постоянно растет технический долг.


Типичный HR, которому нужно ввести на проект 40 сотрудников за 2 недели.

Потребность подрасти становится очень явной, когда бизнес-процессы в компании замедлились или требуются дополнительные ресурсы, потому что не получается вовремя решить все задачи. Необходимо ускорить рабочий процесс, так как запуск проекта в срок напрямую влияет на развитие бизнеса и быстрый возврат инвестиций.
Сергей Полуэктов
CEO MediaSoft


Наша компания достигла точки развития, когда спрос на услуги превысил предложение. Поэтому у нас есть такая роскошь выбирать своих клиентов. Среди них нет руководителей отделов маркетинга. Это почти всегда IT-департамент внутри крупных компаний.

Мы сразу обозначаем, кто мы и как работаем. Обычно в первом же запросе от клиентов есть описание специалистов. Например: Нам нужно два Golang-разработчика и три Kotlin-разработчика с определенным опытом и компетенциями. Это значит, что сам клиент ждет от нас аутстаффинга.

Если запрос содержит просьбу рассчитать сроки и стоимость, мы понимаем это не наш клиент. Рынок полон компаний, которые подойдут ему гораздо больше.

Не будем капитанствовать вы и так знаете, что в IT-сфере кадровый голод. Формирование IT-отдела с нуля или его масштабирование может встать компании в серьезную сумму, поэтому многие используют возможность обращаться к услугам аустаффинга с целью экономии. И это отличный повод для начала переговоров.
Никита Шабашкевич
Исполнительный директор AWG


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

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

Клиент готов играть не в одни ворота


В момент подбора аутстафф-команды клиент обычно включается по максимуму: проводит собеседования, проверяет тестовые задания, вдоль и поперек оценивает качество кода и уровень кругозора каждого сотрудника.

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


В некоторые игры трудно играть одному

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

Максим Кравец
CEO Holyweb


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

Почему аутстафф нравится нам больше, чем аутсорс?


Дорогие коллеги по рынку! У нас для вас плохие новости (да, для многих это будет до сих пор новостью). Если вы думаете, что компетентнее своего заказчика, вы опоздали на пару лет. Продуктовые команды на стороне клиента и бэк офисы развиваются и стремительно наращивают экспертизу. Они полностью в состоянии создавать, творить и достигать результатов самостоятельно.

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

Именно поэтому мы активно развиваем аутстафф как отдельное направление своего бизнеса. Вот какие плюсы для компании несет в себе эта модель.

Меньше шанс влипнуть в неприятности с некорректной оценкой проекта по fix price
Мы все знаем, что оценивать проекты по фиксу это как идти по канату в темноте с завязанными глазам над пропастью, на дне которой точеные пики.


Ну, вы поняли.

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

Прогнозируемая загрузка и выручка


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

Экономия ресурсов. Избавляемся от хаоса и энтропии


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


Олег, у нас все сломалось!

Получаем опыт в разных сферах


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

Почему клиенту аутстафф приятней, чем аутсорс или инхаус


Окей, мы разобрались, почему аутстафф приносит профит нашему бизнесу. Давайте теперь посмотрим, почему клиент заинтересован в нем не меньше?

Чего хочет клиент от своего подрядчика или инхаус-команды? Ответ известен: получить больше (результата, качества, отгруженных задач, запущенных проектов) и потратить меньше (времени, денег, своих ресурсов).

В чем ему поможет аутстафф?

Быстро усилить свою команду



Меньше времени больше результата!

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

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

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


Мы пропустили через свои жернова немало чужого legacy-кода. Вот пример того, что иногда пишут тимлиды заказчика. А у нас время было и код доработан!

Сэкономить деньги



Тот же результат, а деньги сэкономили

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

Аутстафф позволяет не сжигать бюджет на проект, а расходовать его рационально. Более того, клиент может максимально гибко распоряжаться имеющимися ресурсами, а не тратить силы на споры с подрядчиком в духе в ТЗ, которое мы подписали полгода назад, этого не было, и мы делать этого не будем.
Никита Шабашкевич
Исполнительный директор AWG


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

Получить от исполнителя максимальную погруженность в продукт



Меньше собственных ресурсов но больше вовлеченности и инициативы.

Специалист на аутстаффе погружается в процессы и атмосферу клиента почти так же сильно, как его собственный сотрудник с принятием всех требований к методике работы, корпоративной культуры и рабочему графику.

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

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


Офис заказчика на момент разработки

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


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

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

В каком случае веб-продакшнам лучше не пытаться идти в аутстафф


И вот, наконец, когда вы уже мысленно запустили новый бизнес-процесс, настало время честно ответить себе: готовы ли вы к тому, что вместе с новой моделью работы у вас появятся новые сложности?

Вот явные стоп-факторы, которые должны заставить несколько раз подумать, нужно ли вам это все.

Вы не готовы качать HR-направление и саппортить своих сотрудников


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

Кроме того, среди опытных подрядчиков есть мнение не стоит заниматься аутстаффом, если вы не отвечаете за свои ресурсы полностью. Иными словами, если сами работаете с субподрядчиками.
Сергей Полуэктов
CEO MediaSoft


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

У вас много джунов


Кризис этого года задал новую тенденцию уменьшение размера команд и еще более жесткий отбор. Если ваш сотрудник не пройдет собеседование у клиента, на аутстафф-рынке он не представляет никакой ценности. Вашему клиенту нужны не джуны, а миддлы и синьоры. Через их интервьюеров может пройти несколько десятков разработчиков и на фоне сильных мидлов по условной ставке 1800 руб в час вы со своим джуном за 2000 руб будете выглядеть клоунами. В худшем случае испортите себе карму и ваших разработчиков просто перестанут брать на собеседования.

Аутсорс-разработка позволяет сбалансировать команду и плавно растить своих разработчиков, тогда как в аутстаффе некомпетентность невозможно прикрыть. Вы к этому готовы? А ваша команда?
Сергей Полуэктов
CEO MediaSoft


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

Вы не умеете в удаленную работу


Мы изначально начали строить свою команду как удаленную и распределенную и сейчас это приносит свои плоды. За два с лишним года мы прокачались и в собеседованиях по Zoom, и в постановке задач, и в контроле. Научились поддерживать атмосферу хотя некоторых ребят из команды мы ни разу не видели вживую. Такой подход позволяет нам собирать настоящие бриллианты, не ограничиваясь одним регионом (и даже одной страной). Если вам это не подходит, если вы не умеете работать неизбежными с рисками, а офисные печеньки и кофеварка вам милее всего на свете, то подумайте еще раз.

Вы не готовы работать под NDA


Да, это наша суровая реальность немалая часть проектов проходит для нас под грифом совершенно секретно. Мы не всегда можем разместить на сайте логотип клиента или упомянуть его в кейсе. Портфолио не так быстро пополняется проектами, потому что многие из них не публичные. Поэтому приходится искать другие способы, чтобы доказать свою компетентность.
Игорь Толпыго
Руководитель отдела продаж 65apps


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

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

Что в итоге


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

Если совсем коротко обобщить, то вот плюсы аутстаффинга для веб-продакшна:

  • Долгая и хорошо прогнозируемая загрузка разработчиков. Это можно посчитать, этим легко управлять.
  • Наша команда получает разносторонний опыт и прокачивается со скоростью х3.
  • Мы не можем влипнуть с некорректной оценкой по fix price потому что мы не работаем по такой модели.

А вот плюсы для клиента:

  • Возможность быстро нарастить IT-экспертизу. Концентрация на цели продукта, а не на HR-рутине.
  • Глубокая интеграция специалиста в свою команду.
  • Быстрое масштабирование команды в обоих направлениях: при необходимости усилить, по завершении проекта прервать сотрудничество и никто не будет уволен.

На пересечении этих плюсов мы строим долгосрочное партнерство, растим кадры и наращиваем обороты. И не планируем останавливаться!

***


Мы хотим продолжить делиться своим опытом и рассказывать про более практические штуки. Например, про такие:

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

Напишите в комментах, про что интересно почитать, и мы обязательно об этом расскажем. А еще будет круто, если вы поделитесь своим опытом в аутстаффинге и кейсами успешными или совсем не очень. Давайте это обсудим!
Подробнее..

Recovery mode ИТ-аутстаффинг глазами клиента обсуждаем с руководителем разработки Mail.ru Cloud Solutions

03.03.2021 14:04:54 | Автор: admin

В 2021 году половина российских компаний планирует нанимать временный персонал для привлечения к проектной деятельности. Это показал опрос Hays, в ходе которого высказались почти 5 тысяч респондентов. 15% из них планирует за счет аутстаффинга оптимизировать свои расходы. 7% опрошенных испытывают сложности с поиском подходящих сотрудников в штат.

Компании Holyweb, которая специализируется на аутстаффинге ИТ-персонала, стало интересно, что стоит за этими цифрами. Они решили задать вопросы непосредственно тому, кто принимает такие решения руководителю разработки на стороне клиента.

Глеб Корсунов, CBDO Holyweb, обсудил с Михаилом Кебичем, руководителем разработки публичного облака Mail.ru Cloud Solutions, какие существуют опасения относительно аутстафф-подрядчиков, как безболезненно подключить внешних специалистов к инхаус-команде и как влиять на их мотивацию.

Приятного чтения!

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

Функция аутстаффинга дополнять, усиливать или заменять команду заказчика. Это рабочий инструмент, у которого есть свои плюсы и минусы. Мы в Mail.ru Cloud Solutions им пользуемся и нам он помогает.

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

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

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

С помощью аутстаффинга мы решаем задачи управления ресурсами быстро привлечь под задачу дополнительные руки и так же быстро сократить этот ресурс, если он не нужен здесь и сейчас. Если кто-то из аутстафферов уйдет, на наш бизнес это никак не повлияет. У нас своя разработка: все, кто отвечает за предоставление сервиса в режиме 24/7, работают во внутренних командах Mail.ru Cloud Solutions. На аутстафф мы стараемся отдавать полностью отчуждаемые задачи, чтобы они находились в зоне ответственности одной команды разработки от и до. Это могут быть сложные и объемные проекты на нескольких месяцев. Впрочем, мы всегда стремимся уменьшать циклы разработки стандартный спринт для инхаус-команды составляет две недели, и аутстафф двигается в том же ритме.

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

Как отношение инхаус команды к аутстафферам влияет на качество сотрудничества?

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

Например, саботаж со стороны внутренних разработчиков, причиной которому может стать банальная ревность. Представьте: команда месяцами или годами пилит продукт, и вдруг приходят разработчики со стороны и начинают предлагать новые идеи, добавляют свой код (и критикуют существующий), требуют к себе внимания. Главное здесь заранее донести до команд всю ценность их взаимодействия и убедиться, что все одинаково понимают общие цели. И, конечно, не пускать взаимоотношения на самотек, а держать их под контролем и вовремя реагировать на тревожные звоночки.

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

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

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

Как доверять, но проверять?

Универсальный совет выделите сотрудника, который следит за загрузкой специалистов и администрирует всю работу аутстафф-команды.

Но, честно говоря, не думаю, что стоит внедрять специальные практики для контроля над внешними сотрудниками. Есть ключевые параметры цена, качество кода и скорость работы. Меня, как заказчика, волнует, сколько денег я потратил и что за них получил.

Если для эффективной работы программисту нужно играть на балалайке или в Dota пожалуйста. Оценивать мы будем результат.

Эта позиция в той же степени распространяется и на внутренних сотрудников Mail.ru Cloud Solutions.

Аутстафф-сотрудники не такие мотивированные, как штатные? Так ли это и как можно на это влиять?

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

При правильной организации процессов и хорошем онбординге вовлеченность и мотивация аутстфферов сопоставима с мотивацией штатного специалиста.

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

Нам приходилось менять как компании-подрядчиков, так и самих специалистов внутри проекта, если они не подходили нам по софт-скиллам. Под ними я, в том числе, понимаю возможность самостоятельно выполнять задачи и давать качественную обратную связь о проблемах на проекте.

Когда можно делать первые выводы об эффективности аутстафферов? Первый месяц работы самый важный?

Оценка эффективности зависит от того, работает специалист внутри нашей команды или речь идет о полностью внешней выделенной команде.

Если аутстаффер работает внутри команды, то мы в Mail.ru Cloud Solutions оцениваем его точно так же, как и штатных сотрудников. Онбординг новых специалистов занимает столько же времени, они полностью интегрируются в команду и работают по той же системе и с теми же KPI, что и инхаус-разработчики. КПД каждого отдельного разработчика измеряется в зависимости от сложности сервисов и задач, с которыми работает его команда. Быть эффективным и попадать в сроки команды невозможно без качественной коммуникации.

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

При оценке внешней команды мы смотрим на ее результативность. Качество коммуникации можно оценить уже в начале работы. Через 2-3 недели становится понятно, насколько аутстафферы проактивны, самостоятельно инициируют обратную связь или нет, сразу ли сообщают о возникшей проблеме, предлагая собственные пути решения.

Как найти баланс при подборе разработчиков не перегнуть палку и не проглядеть подходящих кандидатов?

Мы проводим полноценное техническое интервью такое же, как для сотрудников Mail.ru Cloud Solutions, которых берем в штат. Обязательно уделяем внимание софт-скилам разработчика и его кругозору. Кроме того, устраиваем собеседование с руководителем команды и продуктовым менеджером.

Этапы отбора не отличаются для аустафферов и членов инхаус-команды, ведь требования и для тех, и для других у нас одинаковые.

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


Аутстаффинг относительно новая форма взаимоотношений между клиентом и поставщиком, и правила игры только формируются. Если тема вас заинтересовала, рекомендуем почитать другие статьи Holyweb об аутстаффинге: почему это выгодно и как успешно обходить подводные камни.

Остались вопросы? Пишите в комментарии или Глебу в Facebook ответим всем.

Если вы хотите присоединиться к команде Mail.ru Cloud Solutions: прямо сейчас открыты вакансии Python/Go-разработчика в команду PaaS и Go-разработчиков в команды объектного хранилища и IAM.

Полный и актуальный список вакансий MCS.

Подробнее..

Бесплатные хостинги для веб-разработчиков

27.12.2020 00:14:52 | Автор: admin

Привет, Хабр!

Одним из наиболее популярных направлений разработки сегодня является веб. И когда нужно разместить свой проект где-нибудь, кроме localhost, многие сталкиваются с трудностями - ведь хостинг должен быть быстрым, удобным, и, желательно, бесплатным :)

В этом списке вы найдете 15 бесплатных сервисов, где легко сможете разместить свой проект и не заплатите ни копейки. Погнали!

Vercel

Данный сервис позволяет собирать и размещать статические веб-сайты на различных фреймворках (поддерживаются как JS-фреймворки, так и, например, генераторы статических сайтов - Hexo, Hugo, Jekyll и другие). Для каждого проекта выделяется несколько бесплатных доменных имен третьего уровня, есть возможность предпросмотра сборки.

Вот что включает в себя бесплатный тариф:

  • 50 пользовательских доменов

  • 100 Гб файлового пространства

  • 100 Гб ежемесячного трафика

  • Неограниченное количество проектов

  • CLI-интерфейс

  • Serverless, CDN, CI/CD

Netlify

Netlify - прямой конкурент Vercel. Однако, кроме функций, которые предоставляет предыдущий сервис, тут на бесплатном тарифе присутствует:

  • Обработка до 100 отправленных форм в месяц

  • До 1000 авторизованных пользователей в месяц

  • Аналитика работы сайта

Heroku

Heroku позволяет запускать Full Stack приложения в контейнерах (так называемых Dynos). Поддерживается большое число языков программирования и фреймворков. Главный недостаток - после получаса бездействия проекты, размещенные на бесплатном тарифе, "засыпают", а повторный запуск контейнера требует определенного времени.

На стартовом тарифе доступны:

  • 550 часов/месяц работы Dynos (1000 после привязки банковской карты)

  • 512 Мб ОЗУ на 1 контейнер

  • CI/CD, CLI

  • По 1 домену на 1 контейнер

Stormkit

Stormkit позволяет размещать только проекты на JavaScript. Бесплатно доступны:

  • 1 проект

  • 50 Гб трафика

  • Неограниченное количество доменов

  • Неограниченное количество сборок

Hostman

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

  • 100 Гб/месяц трафика

  • Бесплатные домены и SSL

  • CI/CD, CDN

Glitch

Glitch позиционирует себя как коллаборативный сервис для упрощенной разработки веб-сайтов. В основном здесь находятся проекты на NodeJS, но поддерживается ряд других языков. Приложения запускаются в контейнерах, как на Heroku, и тут так же доступно 1000 бесплатных часов работы приложений в месяц. Однако, если на Heroku проекты заливаются через CLI или Git, здесь присутствует браузерная IDE и терминал.

Repl.it

Подобен предыдущему сервису. Бесплатно предоставляется 0.5 Гб ОЗУ и 0.5 Гб дискового пространства.

Surge

Хостинг статических сайтов. Бесплатно доступны:

  • 1 сайт с 1 доменом третьего уровня

  • Неограниченное количество сборок

Firebase

PaaS-сервис от Google, позволяющий разработать бэкенд без написания кода, а также разместить свой статический веб-сайт. Вот что входит в стартовый тариф:

  • 10 Гб дискового пространства

  • 360 Мб трафика/день

  • Базы данных

  • Serverless

  • Тестирование

  • Многое другое

Render

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

  • 100 Гб трафика в месяц

  • CDN, CI/CD, SSL

GitHub Pages

С помощью этого инструмента из любого репозитория GitHub можно развернуть статический веб-сайт. Поддерживается Jekyll, доступен 1 бесплатный домен 3 уровня, SSL, неограниченный трафик.

begin

Хостинг для практически любых веб-приложений на NodeJS или Deno. Бесплатно доступно 5 веб-сайтов, поддерживается Serverless.

Deta

Достаточно интересный проект, предоставляющий возможность размещения веб-приложений на Python и NodeJS. К каждому приложению подключается NoSQL база данных. Главный минус - все взаимодействие с сервисом осуществляется через CLI. Бесплатно доступны:

  • 2 Гб дискового пространства, 2 Гб на базу данных

  • 50 000 обращений к контейнерам в месяц

  • 25 000 обращений к БД в месяц

Fly

Очередной сервис, позволяющий запускать приложения в виртуальных машинах. Со стартовым тарифом вы получите:

  • 8 миллионов секунд работы VM в месяц (хватит примерно на 3 VM, запущенных постоянно)

  • 160 Гб ежемесячного трафика

  • 10 активных SSL-сертификатов

Fleek

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

  • 3 Гб дискового пространства

  • 50 Гб ежемесячного трафика

  • 250 минут на сборку в месяц

Заключение

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

Буду рад, если вы предложите свои варианты - достойные сервисы будут также внесены в этот список.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru