Connect with us

Разработка

Григорий Петров: Технический долг и как его отдавать

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

Григорий Петров

Опубликовано

/

     
     
[button color=4d61d7 icon=arrow-left-2 url=https://apptractor.ru/develop/grigoriy-petrov-trudnosti-proektirovaniya.html] Предыдущая статья [/button]

 

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

Откуда возникает технический долг

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

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

Что такое костыли

1

Я не знаю где этот термин появился впервые, но сейчас, когда разработчики и менеджеры говорят про “костыли в коде”, они имеют в виде изменения, несовместимые с текущей архитектурой и приделанные к ней снаружи, только чтобы удовлетворить требования заказчика. Как человеку с больной ногой выдают костыль, чтобы он мог хоть как-то передвигаться, так и в программу добавляют код-костыль, чтобы хоть как-то выполнить задачу. Огромная разница заключается в том, что у человека нога рано или поздно заживет сама. А вот костыли, добавленные в код, сами никуда не денутся, и останутся в нем, формируя технический долг. Говоря иными словами, внося несовместимые с архитектурой изменения, разработчик “берет в долг” время разработки, обещая в будущем “сделать все как надо”. На практике это будущее никогда не наступает – у незнакомого с концепцией технического долга заказчика всегда есть срочная работа, которую надо делать вместо того, чтобы делать “непонятно что”. Технический долг копится, парализуя архитектуру программы – ведь он добавляет гораздо больше сложностей, чем обычные изменения, так как костыли, добавленные в код, “по живому” модифицируют архитектуру непредусмотренным способом.

Пример из жизни, которым я часто иллюстрирую костыли и технический долг на тренингах и консультациях – это полки. Обычные полки, которые крепятся к несущей стене перфоратором, дюбелями и шурупами. Предположим, у нас уже висят две полки и нам нужно повесить между ними третью. И тут, беда-печалька, ломается перфоратор. С точки зрения архитектуры, правильным решением будет починить перфоратор и сделать, как полагается. Но если полки надо кровь из носу повесить до вечера, то делается костыль – третью полку гвоздями или шурупами прикручивают к уже висящим двум. Торжественно при этом обещая, когда починится перфоратор, все переделать. Данное решение, кроме очевидных минусов меньшего поддерживаемого веса, повышает сложность системы и затрудняет ее изменение. Через два года, когда про костыль все забудут, пришедшие монтировать шкаф для встроенного холодильника сборщики мебели решат снять крайнюю полку… Ну вы догадываетесь, что будет. С техническим долгом все абсолютно то же самое – костыли копятся в коде, раскладывая по нему ловушки и мины, повышая сложность. Если не отдавать технический долг вовремя, то даже небольшая программа может в один далеко не прекрасный момент оказаться совершенно неподдерживаемой, потому что ее сложность за счет костылей уже давно вышла за пределы кошелька Миллера.

Как работать с техническим долгом

2

Первое и основное правило работы с техническим долгом – не упоминать о техническом долге о нем нужно знать. Чем больше участников разработки знает о техническом долге в проекте – тем проще следить за его объемом и выделять время на его устранение.

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

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

О техническом долге должны знать разработчики. Hindsight Bias (здесь и далее я буду использовать перевод “ретроспективное когнитивное искажение”, если кто знает перевод лучше – пишите) заставит их сопротивляться и хором говорить, что “это же очевидно и мы всегда об этом знали”, успешно забывая на следующий день. Один из хороших способов – это введение регламента о маркировке технического долга в коде, например, комментарием “//TODO:” или “//FIXME:”. Первое время тим лиду придется отслеживать корректное добавление и удаление таких комментариев, но в целом команда привыкнет к таким практикам довольно быстро.

Все надо обсуждать заранее

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

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

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

Комментарии
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement
1 Comment

1 Comment

  1. Konstantin Konopko

    26.04.2015 at 21:45

    Спасибо, это интересно!

You must be logged in to post a comment Login

Leave a Reply

SDK

App Annie запустила аналитику установленных в приложениях SDK

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

AppTractor

Опубликовано

/

Автор:

Все данные доступны в App Annie Intelligence. Теперь команды по продажам могут использовать данные о мобильных SDK и рынке приложений для привлечения более перспективных потенциальных клиентов и заключения более крупных сделок.

Ускоренное создание потока продаж

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

Отбор наиболее перспективных потенциальных клиентов

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

  • количество установленных SDK атрибуции рекламы, загрузки, доход, активные пользователи, доля показов — для продаж рекламы
  • количество установленных SDK рекламных платформ, долявыполненных показов, активные пользователи, длительность сеанса вприложении, загрузки, доходы — для работы с издателями

Оценка своих позиций: измерение доли рынка SDK рекламных платформ

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

Комментарии
Продолжить чтение

Разработка

Как сделать HTML5-приложение на Corona

10 июля движок для создания 2D-приложений Corona обновился до версии 2018.3326. Это значит, что поддержка платформы HTML5 наконец вышла в открытую бету, и создание HTML5-приложений доступно всем пользователям.

AppTractor

Опубликовано

/

Автор:

Что такое HTML5-игры и почему они важны

Легкие онлайн-игры на основе HTML5 запускаются во вкладке любого браузера или внутри знакомых всем приложений: в социальных сетях или мессенджерах. Чтобы начать HTML5-игру, не нужно скачивать приложения из App Store или Google Play или обновлять плагины браузера  достаточно выбрать игру парой кликов из каталога встроенной в социальную сеть / мессенджер игровой платформы. Подобные платформы уже есть во «ВКонтакте» (Direct Games), в Facebook (Instant Games) и даже в Telegram и китайском WeChat. Благодаря этому аудитория игр расширяется: пользователи ждут новых игр, а девелоперы с удовольствием их создают, адаптируя новые жанры, усложняя игровые механики.

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

Все указывает на то, что пора собирать свое первое HTML5-приложение и зарабатывать на нем, пока это не сделал ваш сосед. Поэтому сегодня рассказываем и показываем, как поставить готовую игру на HTML5-рельсы и разместить ее на платформах Facebook Instant Games и VK Direct Games с помощью движка Corona.

Портирование в HTML5:

  1. Заходим на сайт Corona Labs и скачиваем на свой компьютер последнюю версию Corona 2018.3326.

  1. После установки ПО и открытии Corona Simulator создайте аккаунт в открывшемся окне – Corona Developer Login или зайдите под существующим.
  2. Теперь самое интересное – начинаем портировать игру в HTML5-формат. Мы покажем на примере игры из Corona Marketplace. Скачиваем и открываем игру в Corona Simulator: Open Project -> Папка игры -> main.lua. Даже если у вас несколько файлов .lua, выбираем сначала main.

  1. Чтобы cобрать из вашего проекта HTML5-приложение, выберите в меню Corona Simulator — File -> Build -> HTML5(BETA).

  1. В открывшемся окне портирования задайте имя и расположение файла. Что делать с опциями под галочками:
    – Include Standard resources означает, что ваша игра сможет использовать стандартные элементы Corona (кнопки, фигуры) — рекомендуемая для начинающих;
    – Create FB Instant archive (создает архив файлов, который потом пригодится для портирования проекта на игровую платформу Facebook) — ставьте галочку.

  1. После нажатия OK запустится портирование игры в HTML5-формат. В окне Corona Simulator Console отобразятся списком все файлы приложения и итоговый вес игры.
  2. Когда портирование закончится, игра автоматически откроется в системном браузере. Можно также открыть в любом удобном браузере, нажав в всплывающем окне на Open in Browser, чтобы запустить игру. Внешне она будет выглядеть одинаково во всех браузерах, в том числе, в мобильных.

  1. В папке с готовым HTML5-приложением вы найдете zip-архив для загрузки игры на Facebook Instant Games.

Портирование на Facebook Instant Games

  1. Зарегистрируйтесь на странице Facebook для разработчиков (developers.facebook.com) -> Начать работу (или «Мои приложения», если аккаунт уже есть).

  1. На странице всех ваших приложений Facebook -> Добавить новое приложение (developers.facebook.com/apps).
  2. В открывшемся каталоге приложений выберите «Моментальные игры» (Instant Games)

  1. Добавьте иконки, название и описание будущей игры начиная с вкладки «Информация».
  2. Во вкладке Веб-хостинг -> Загрузить версию загружаем zip-архив, из папки с вашим HTML5-приложением.

Помните, что размер приложения не должен превышать 5МБ. Это связано с использованием webview, который существенно ограничивает производительность устройства;

Facebook предоставляет свой сервер для моментальных игр, беспокоится о собственном нет необходимости.

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

  1. Теперь можно посмотреть, как выглядит и работает игра: Настройки в левой панели -> Основное -> Веб-игры на Facebook -> вставляем в адресную строку браузера ссылку из окна «URL Страницы веб-игр Facebook».

  1. Осталось только заполнить все настройки приложения, включая вкладки «Лидеры», «Проверка», «Рекомендации», «Отзывы», «Покупка в приложении» и отправить игру на проверку. И вуаля, ваша игра уже в левом меню среди других на Facebook Instant Games!

Портирование в VK Direct Games

  1. Активируйте плагин VK Direct Games в Corona Marketplace. Зайдите на страницу плагина и нажмите кнопку Activate;

  1. В своем проекте в файле build.settings установите плагин VK Direct Games. Как это сделать описано в документации к плагину;
  2. Соберите из вашего проекта HTML5-приложение как описано выше.
  3. Готовое HTML5-приложение перенесите на свой сервер. Если нет сервера, можно воспользоваться сервисом GitHub, который организует ваш сервер по адресу yourname.github.io;
  4. Наберите в браузере строку yourname.github.io и проверьте, что ваше приложение работает корректно, помните, что игры в ВК должны занимать не более 10МБ;
  5. Зайдите на страницу в VK для разработчиков. Выберите пункт «Мои приложения» из верхней панели и нажмите кнопку «Создать приложение»;

  1. Выберите пункт «Встраиваемое приложение», заполните поле названия и описания игры и нажмите кнопку «Перейти к загрузке приложения»;

  1. На ваш телефон должно прийти уведомление о создании вами игры — вам надо подтвердить это действие, чтобы продолжить;
  2. Добавьте иконки для описания игры, как указано на странице «Информация»;

  1. В левой панели выбираете пункт «Настройки» и выбираете тип приложения iFrame, включаете состояние «Видно всем» и самое главное, в поле «Мобильная версия»: добавляете адрес вашей HTML5-игры (пример: https://yourname.github.io);
  2. Важно! Оставьте поле адрес iFrame пустым;

  1. Сохраните настройки — иконка вашей игры будет в левой панели — нажмите на нее — у вас появится экран игры и кнопка «Отправить на телефон»;

  1. Подключите телефон через USB к компьютеру, погасите приложение VK и нажмите кнопку «Отправить на телефон» — вы услышите звук пуш-нотификации;
  2. Смахните сверху вниз по экрану телефона и выберите пуш-нотификацию — ваша игра запустится внутри приложения VK;

Bingo! Теперь ваша игра есть на ведущих игровых платформах, а также во вкладках самых популярных десктопных и мобильных браузеров.

Комментарии
Продолжить чтение

Медиа

Android Dev Подкаст. Выпуск 70. React Native. Впиливать или выпиливать?

Мы обходили стороной вопросы кроссплатформенных фреймворков, но вот настал час для обсуждения одной и самых модных и более-менее стабильных платформ. Мы пригласили разработчиков с большим стажем. В мир Reat Native кто-то пришел из Andorid, кто-то из iOS, а кто-то из веб – и тем и интереснее получилась беседа. Надеемся, что к концу выпуска, слушатель, вместе с ведущими, сформирует свое мнение о React Native и будет готов к обсуждению внедрения этого фреймворка на работе.

AppTractor

Опубликовано

/

Автор:

Мы обходили стороной вопросы кроссплатформенных фреймворков, но вот настал час для обсуждения одной и самых модных и более-менее стабильных платформ. Мы пригласили разработчиков с большим стажем. В мир Reat Native кто-то пришел из Andorid, кто-то из iOS, а кто-то из веб – и тем и интереснее получилась беседа. Надеемся, что к концу выпуска, слушатель, вместе с ведущими, сформирует свое мнение о React Native и будет готов к обсуждению внедрения этого фреймворка на работе.

Материалы

Комментарии
Продолжить чтение

Дизайн и прототипирование

17 лекций о разработке интерфейсов Школы разработки интерфейсов Яндекса

Этой весной в Яндексе прошла очередная Школа разработки интерфейсов. Школа рассчитана на начинающих разработчиков, которые всерьёз интересуются созданием интерфейсов и уже знают азы, но пока не набрались опыта. Чтобы освоить программу Школы могли все желающие, Яндекс выпустил видеокурс — он объединяет все лекции, которые читались в ШРИ весной.

AppTractor

Опубликовано

/

Автор:

Материалы для самоподготовки

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

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

Курс даёт базовую теорию. Тех, кто хочет применить знания на практике, Яндекс приглашает на очные занятия в Школу разработки интерфейсов. Практики будет много — слушателей ждут семинары, домашние задания и работа над учебными проектами. Для поступления нужно заполнить анкету и решить тестовое задание.

Обучение в Школе бесплатное. Набор открыт в трёх городах: Москве, Симферополе и Минске. Жители других мест могут приехать на учёбу в столицу: тем, кто пройдёт отбор, Яндекс оплатит дорогу и проживание в хостеле.

Комментарии
Продолжить чтение

Реклама

Наша рассылка

Нажимая на кнопку "Подписаться" вы даете согласие на обработку персональных данных.

Вакансии

Популярное

X
X

Спасибо!

Теперь редакторы в курсе.