Фича тоглинг что это
Что такое feature toggle или как избавиться от мучительных мёржей и долгоживущих веток?
Допустим, вы хотите разработать новую фичу, но не уверены, что она понравится пользователям, и вам нужно иметь способ безболезненно её скрыть. Или предположим, что вы работаете над новой большой фичей и хотите избежать монстр-коммитов. Или просто хочется сделать поведение сайта легко конфигурируемым. Как можно решить все эти проблемы, читайте под катом.
Проблема
Представьте, что циклы разработки вашей команды длятся по две недели, а реализация новой фичи потребует от команды 3 месяца разработки. На первый взгляд, есть две возможные схемы действий:
Использование feature switcher-ов для решения проблем
Такая проблема встречается в разработке довольно часто и есть изящное решение, позволяющее взять лучшее от описанных выше подходов — feature toggle или feature switcher.
По сути, feature switcher — это boolean флаг, который хранится в базе данных и содержит информацию о том, должна быть включена та или иная фича или нет. Значение этого флага может быть извлечено из базы данных по ключу. Удобство использования feature switcher-ов заключается в том, что они могут быть легко изменены бизнес-пользователем во время runtime через панель администратора без необходимости заново деплоить приложение.
Ниже приведен пример использования feature toggle на языке Java:
В примере выше configurationManager — это класс, позволяющий извлечь значение определенного feature switcher-а из базы данных по его ключу.
Также, при помощи feature switcher-ов, можно отображать/скрывать определенные элементы на фронтенде. Для этого придется положить значение флага в Model и передать его на View как это показано ниже:
После чего использовать переданное значение для рендеринга того или иного HTML кода:
Виды feature switcher-ов
Описанный концепт использования feature switcher-ов — это лишь один возможный случай использования и такие feature switcher-ы называются release toggles. Всего выделяют 3 разных вида feature switcher-ов:
Проблемы использования feature toggle-ов
Поскольку я работаю на проекте, где активно используются feature toggle-ы, то кроме очевидных достоинств их использования я начал замечать и проблемы, связанные с ними:
Решения некоторых из описанных проблем
Помочь решить вышеописанные проблемы могут следующие действия:
Итоги
Feature switcher — очень простой и одновременно мощный механизм, позволяющий избегать монструозных коммитов, легко менять поведения приложения или собирать несколько разных приложений на одной кодовой базе, используя разную конфигурацию feature toggle-ов.
Однако, стоит также помнить, что этот паттерн разработки имеет некоторые недостатки, которые выливаются в трудночитаемый и трудно поддерживаемый код, поэтому следует избегать чрезмерного использования этого паттерна и периодически проводить документирование feature switcher-ов и их ревизию, чтобы удалять неиспользуемые и, как следствие, очищать проект от “мёртвого” кода.
Не пишем код целый месяц и нам нормально
Комментарии 10
iOS приложения сейчас проходят ревью от нескольких минут до нескольких часов. А вот Android.
Для нас это тоже было неожиданностью. Дивный новый мир
Выглядит как разница нейминга разных компаний. Тесты писать можно, но лучше сильно не рефакторить, это может так же увеличивать риски как и новая фича.
Почему вы не рассматриваете вариант с feature enabling managment?
Почему не рассматриваем? Мы постоянно этим пользуемся, в статье есть про фича-тоглы.
Бывают изменения, которые нельзя затоглить или это очень сложно/дорого
Можно сломать и в процессе тоглинга, это не спасение от всех бед
Читал пролистывая 🙂 Было бы интересно глобальный фичатогл на все приложение, чтоб откатываться если что.
Но вообще, конечно, мир оффлайн приложений это боль по умолчанию.
У Убера была такая история, когда они все переписывали и буквально зарелизили два приложения. Даже по описанию это очень больно.
Тогл-принцип в интерфейсах
Пост в двух словах: анализируем, какие панели ключевые для программы. Скрываем ненужные, на нужные назначаем горячие клавиши, начинающимися на Alt + Cmd. Используем мнемонику, чтобы запоминать английские имена панелей: Alt + Cmd + I(nspector), Alt + Cmd + L(ayers). Переназначим все горячие клавиши так, чтобы одни и те же ассоциации срабатывали в разных программах. Позабудем про печаль и боль, умело смеёмся.
Как настраивать свои горячие клавиши в Скетче и не забывать их
И почему так важно назначать горячие клавиши для работы с символами.
Я хочу поделиться важной идеей, которая позволила мне выстроить единую систему горячих клавиш в своей работе. Если ты примешь её, то сможешь в считаные минуты ориентироваться в любых профессиональных редакторах, вне зависимости от их назначения и кажущейся сложности. Sketch, Photoshop, Illustrator, Pages, Axure, Final Cut, After Effects и кончая какой-нибудь Ableton Live или Logic Pro.
Все они используют один и тот же дизайн-паттерн — скрываемые панели.
To toggle (от англ.) — переключать что-либо, что может быть в двух режимах: включено/выключено. Нажал раз — включил, нажал два, выключил. Например, панель слоёв в Фотошопе или сетка в Скетче может быть видима, либо скрыта.
Я иногда натыкаюсь на горячие клавиши, которые следуют тогл-принципу. Не я его придумал. Однако, я не встречал ни одной программы, в которой этот принцип был изначально реализован без переназначений горячих клавиш.
Вам не нужно изучать интерфейс в деталях, а нужно понять, как сделать так, чтобы он не мешал лишними кнопками и панелями, и показывал то, что действительно необходимо для решения вашей текущей задачи. Если ты не используешь какую-то панель прямо сейчас, значит она загаживает интерфейс и снижает фокус внимания.
Идея 1. Что-то скрываемое
Эту идею легко можно довести до абсурда. По интернету гуляла смешная картинка с интерфесом текстового редактора Word, в котором включены все панели, которые в нём только есть:
Это не значит, что у Word был плохой дизайн. Напротив, тогда он предоставлял неслыханную гибкость опытным пользователям. Каждый мог включить в настройках то функциональный набор, который был нужен. Однако, такой уровень несёт опасность для начинающих пользователей. Большинство пользователей Word просто не знало о том, что в его контекстном меню скрыто ещё множество панелей. А чтобы научиться ими пользоваться, нужно читать унылую документацию. Если какая-нибудь важная панель, например Форматирование, исчезала из поля зрения, это могло стать настоящей драмой, поскольку Word воспринимался как сломанный.
Итак, первый из наших ингрединетов — скрываемые панели, содержащие какие-либо UI-кнопки.
Идея 2. Горячая клавиша в режиме on/off
Я впервые столкнулся с тогл-панелями в Фотошопе. Я узнал, что по нажатию F7 панель слоёв можно скрывать. Сперва это показалось довольно бессмысленным: очередная незапоминаемая горячая клавиша, которая скрывала маленькую квадратную панель среди полдюжины других. Но позже я выяснил, что панели в Фотошопе можно настраивать по размеру, делая нужные больше и убирая ненужные. Когда самая важная для веб-дизайна панель «Слои» занимала всю высоту экрана, она значительно загораживала макет, и я её регулярно скрывал, чтобы не мешала. Однако, размножить этот принцип на другие панели не удавалось. Я еле-запомнил F7, начертив её перманентным маркером на руке и развесив по всему дому стикеры-напоминалки. Бессмысленные горячие клавиши невозможно запоминать, если не используешь программу регулярно.
Минус упомянутого дизайна Word заключался ещё и в том, что его тогл-панели нельзя было сделать видимыми при помощи клавиатуры. Каждый раз пользователю приходилось лезть в контекстное меню и ставить галочку напротив нужной панели, чтобы сделать её видимой. Фотошоп решил эту проблему, хоть и очень криво.
Второй ингредиент — горячая клавиша, которая переключает видимость панели туда-обратно.
Идея 3. Используем мнемонику
Горячая клавиша — это не про безумные вытягивания пальцев по клавиатуре, не про запоминание семизначных чисел.
Прежде всего, горячая клавиша это приказ программе в обход графического интерфейса.
В этом её гигантское недооцененное преимущество. Дизайн программы может измениться, новая иконка собъёт с толку, но смысл команды и её название останется прежним.
Чтобы можно было запомнить команду, она должна вызывать человеческие ассоциации и быть понятной. Те, кто выпускает ПО со стандартными горячими клавишами вроде F7, совершают преступление против человечества, поскольку из-за них миллионы людей боятся использовать горячие клавиши, и особенно, переназначать стандартные.
Поскольку у меня стоял английский Фотошоп, панель слоёв в нём называлась Layers. Логично, что я назначил на неё Cmd + L(ayers). Однако, в Фотошопе было много команд, которые имели такой же вид: Cmd + D — Deselect, снятие выделения. Cmd + C и Cmd + V — всем известные копирование и вставка, и ещё множество других. Все они являются командами, которые ведут к каким-то заметным действиям на холсте. Я называю их действиями. Скрытие панели Layers в этом ряду явно было белой вороной. Решение подсказал текстовый редактор Pages, в котором основная панель Inspector скрывалась и показывалась по сочетанию Alt + Cmd + I. Я взял это на вооружение в Фотошопе, а позже и в Скетче.
Пазл сложился: все тогл-сочетания отныне получили вид Alt + Command + [буква].
Теперь однотипные панели вроде Inspector в разных программах автоматически получают постоянное универсальное сочетание.
Пять основных паттернов
Так я разделил горячие клавиши на группы-паттерны по внешнему виду:
В каждом паттерне присутствует ключ (буква).
Тогл-панели
Alt + Cmd + ключ. Умение эффективно использовать тогл-панели — мощнейшая техника, превращающая интерфейс в податливый пластилин на кончиках пальцев. Примеры: Скрыть/показать панель Inspector ( Alt + Cmd + I), скрыть Library в Logic Pro X ( Alt + Cmd + L).
Тогл-режимы
Ctrl + [ключ] — Эту группу я выделил после перехода на Скетч. Есть много действий, которые имеют сходную природу с тогл-панелями, но не выглядят как панель. Примеры: Включить сетку ( Ctrl + G), перейти в режим вращения объектов ( Ctrl + R), замьютить канал в аудио-редакторе ( Ctrl + M).
Инструменты
[ключ] — выбор инструмента. Скетч отлично использует такие горячие клавиши. Примеры: O — Oval Tool, V — Vector Tool, T — Text Tool. Photoshop в более сложном положении, поскольку инструментов в нём гораздо больше. Однако, и в нём это используется: M — Marquee Tool, L — Lasso Tool, B — Brush Tool.
Важные действия
Cmd + [ключ] — команда-действие. Вырезать, выделить, покрасить, переименовать и редактировать — это всё сюда.
Обращения
Shift + Cmd + [ключ] — тут два варианта. Либо парная обращающая команда (Сгруппировать/Разгруппировать), либо ещё один слой команд-действий.
Пример из Скетча, обращение:
Cmd + G — сгруппировать,
Shift + Cmd + G — разгруппировать.
Cmd + Z — отменить,
Shift + Cmd + Z — повторить отменённое действие.
Идея 4. Метод перебора букв
Букв явно меньше, чем команд. Буква S на клавиатуре всего одна, и по такому принципу в Фотошопе на неё претендуют сразу две панели: Swatches и Styles. И тут нам решать, что займёт основное сочетание Alt + Command + S. Что нам нужнее? Допустим, нужно много работать с цветами, поэтому выбираем Swatches. Второе сочетание может разместиться на следующей букве слова.
[S] T Y L E S — S занята Swatches, выбираем следующую букву.
S [T] Y L E S — T свободна. Получили Alt + Cmd+ T.
Как правило, хватает первых трёх букв слова. Если мы дошли до конца слова STYLES и все буквы заняты, возможно, эта панель не настолько важна, чтобы назначать на неё горячую клавишу. Либо придётся освободить уже занятые буквы.
Не держись за ключ
Не стоит стремиться сохранить букву, дополнив тогл-группу какой-нибудь посторонней клавишей типа Shift, потому что это ведёт к незапоминаемым монстрам: Shift + Alt + Cmd+ S, которые придётся зажимать всем офисом. Не надо так.
Если по ошибке вместо Alt + Cmd+ T мы нажимаем Alt + Cmd + S, развернув панель Swatches вместо Styles, ошибку легко исправить, нажав Alt + Cmd+ S снова и не отпуская клавиш Alt + Cmd, нажать следующую букву нужного названия панели, словно мы печатаем слово Styles.
Какие плюсы даёт следование тогл-принципу
Ты используешь память
Если их назначить один раз, твои горячие клавиши работают в любых программах для Mac. Не нужно запоминать, что в Скетче панель слоёв открывается Alt + Cmd + 1, а в Photoshop — F7. В обоих программах можно поставить одну клавишу: Alt + Cmd + L(ayers).
К слову, в Скетче я оставил Alt + Cmd + 1, потому что это легко было запомнить по другой логике: панель 1 слева, панель 2 справа.
Ты экономишь время
И не тратишь его на зрительное запоминание интерфейсов и рассматривание иконок, а обращаешься напрямую к первичному смыслу, ради которого используешь продукт.
Ты группируешь команды по смыслу
По внешнему виду горячей клавиши ты можешь понять, к какой группе она относится.
Ты используешь знакомые слова для подсказок
Читая названия панелей в интерфейсе программы, ты всегда можешь посмотреть, на какую букву они начинаются, зажать тогл-группу Alt + Cmd и добавить нужную букву. Либо, если нужная панель скрыта, посмотреть в меню программы. Поиск по меню в пункте Help работает на отлично.
Минусы тогл-подхода
Психологический барьер
Тебе придётся перешагнуть через серьёзный психологический барьер, научиться переназначать горячие клавиши и понять, что в этом нет никакого криминала. Это сложнее, чем кажется.
Придётся что-то настраивать, вместо того чтобы делать работу
Когда ты открываешь новую программу, первые 10 минут вместо работы тратишь на настройку. Впрочем, они окупятся.
Не хватит букв
Если нужно действительно много тогл-панелей в сложной программе, могут закончиться буквы. В этом случае придётся отойти от канонического Alt + Cmd и заменить его на Ctrl + Cmd, что нарушает стройную идиллию и слегка рушит мозг.
Что если в программе нельзя назначать горячие клавиши?
Значит, это хреновая программа. Найди хорошую. Либо напиши разработчикам, чтобы вынесли нужную функцию в основное меню. Часто независимые разработчики слушают пользователей. Если ты программист — напиши хорошую самостоятельно. Хватит это терпеть!
Словарик айтишника или Что? Где? Куда? Часть 1
«Привет! Добро пожаловать! Спасибо, что приняла наш оффер. Пойдем знакомиться с твоей командой. У них как раз сейчас дейли. Ты вышла под конец спринта, поэтому пока работы для тебя не запланировали. Как стендап закончится, можешь почитать спеки, командные окиары и просмотреть бэклог на следующий спринт. По всем вопросам обращайся к своему пио.»
Язык айтишников
Каждый, кто работает в IT, непременно сталкивался с профессиональным жаргоном и компьютерным сленгом. Его можно любить или ненавидеть, принимать или терпеть, но непреложным остается факт — IT-жаргон существует и от него никуда не деться.
Когда приходишь в новую компанию, на тебя наваливается куча незнакомых слов. Кажется, их так много, что потребуется немало времени, чтобы понять и выучить их все. Многие слова ты уже знаешь, о смысле других догадываешься, часть из них является англицизмами, поэтому догадаться об их значении несложно Первая реакция — неприятие: «Зачем использовать английские слова в русский речи, когда есть достаточно русских альтернатив?» Потом ты пытаешься сохранить чистоту языка. В итоге, начинаешь говорить так же, как и все. Это неизбежно.
Профессиональный жаргон существует не для того, чтобы испортить русский язык. Он позволяет ускорить устное общение IT-специалистов и наладить их взаимопонимание. Обычно слова получаются короткими и емкими. Иногда одно слово заключает в себе целую фразу. Поэтому польза в них, на мой взгляд, есть.
Я послушала, как говорят разработчики в Wrike, и составила словарик из самых распространенных слов. Слова собраны по тематическим группам.
Scrum-терминология
Scrum — это методология по управлению проектами. Набор принципов, ценностей, политик, ритуалов для организации работы. В скраме полно терминов, но в ежедневный обиход попала и закрепилась только часть из них.
Бэклог
От англ. backlog (дословно — очередь работ) — еще не запланированный объем работы, который требуется выполнить команде. Каждая созданная задача вначале попадает в бэклог, а потом уже в спринт.
Как и в случае со спринтом, термин используется и в отрыве от скрама. Часто бэклогом называют отложенные задачи. Которые сделать нужно, но не сейчас.
Гол, голевой
От англ. goal (дословно — цель) — цель спринта (бывает одна или несколько), которую команда берется сделать. Цель состоит из ряда задач, которые нужно выполнить, чтобы его достигнуть.
Слово употребляется и как существительное, и как прилагательное. Может быть множественного числа.
Дейли
От англ. daily (дословно — ежедневно) — ежедневные короткие (от 5 до 30 минут) встречи команды с целью поделиться прогрессом по выполненным задачам за предыдущий день и озвучить план работ на текущий день. Также дейли могут называть стендапом (от daily standup), потому что обычно такие встречи происходят стоя — для большей эффективности.
Коммититься
Глагол от англ. существительного commitment (дословно — ответственность). Коммититься — значит обещать выполнить определенный объем работы в оговоренные сроки. Это не просто обещание, это сознательное обязательство перед собой и командой. Человек, который закоммитился, обязан сделать всё возможное, чтобы выполнить то, что сам и пообещал реализовать.
Спринт
От англ. sprint (дословно — бег на короткую дистанцию) — заданный отрезок времени, за который нужно выполнить запланированный объем работы, чтобы в конце этого отрезка был ожидаемый результат.
Термин используют не только те, кто работает по скраму, но и те, кто просто хочет организовать свою работу и сформировать ясные рамки, во время которых должны быть выполнены задачи.
Инструменты для работы
Технические, информационные и вспомогательные средства и приложения для работы.
Ветка
От англ. branch (дословно — ветка) — тот редкий случай, когда в ходу русский перевод термина. Веткой (термин git) называют полную копию проекта, в которой ведется разработка. В проекте может быть создано много веток, что позволяет работать одновременно с разными частями кода. Потом все ветки загружаются в мастер. Процесс «ответвления» иногда называют «бранчеванием», уже как раз от branch.
От англ. mock-up (дословно — эскиз) — макет с UX-дизайном для разработки. Несмотря на то, что слово дословно переводится как «эскиз» или «прототип», в Wrike моками называют готовые проработанные макеты с дизайном.
От англ. production (дословно — промышленная среда) — ветка с рабочей версией продукта, которую видят пользователи. Это окончательная точка куда попадает результат разработки. Иногда так же называют мастер.
От англ. reference (дословно — пример) — схожий функционал или внешний вид, который используется для ориентира. Он служит для сравнения.
Спека
От англ. specification (дословно — спецификация) — документ с подробным описанием требований, условий и технических характеристик, как должен работать разрабатываемый функционал.
Таска
От англ. task (дословно — задача) — задача, заведенная или планируемая на любого работника.
Разработка
Термины, употребляющиеся разработчиками при работе над задачами.
От англ. boost (дословно — ускорение) — процесс повышения производительности, ускорение загрузки.
Катить
Отправлять готовую работу в деплой, предпринимать шаги для подготовки ветки к мерджу в продуктовую ветку.
Комплитить
От англ. complete (дословно — заканчивать) — завершать задачу, закрывать задачу, когда она полностью готова.
Консистентность
От англ. consistency (дословно — системность) — общее единообразие во всех частях продукта.
Матчится
От англ. match (дословно — совпадать) — полное соответствие чего-либо с чем-либо. Процесс приведения к единообразию.
Пинать
Термин, подобный глаголу «пинать», который также имеет значение «делать» и «работать». Конкретное значение определяется по приставке. Подопнуть — сделать немного, допинать — доделать.
Ручка
От англ. handler (дословно — обработчик) — бэкэнд-термин, означающий ответ от сервера, в котором приходят данные.
Скоуп
От англ. scope (дословно — объем) — набор фич и частей продукта, закрепленных за отдельной командой.
От англ. feature (дословно — характеристика) — определенная часть или деталь от общего продукта, которая разрабатывается изолированно.
От англ. flow (дословно — течение) — порядок действий при работе над задачей. Например, вначале задача берётся в разработку, потом проходит ревью, далее тестируется и т.д.
Должности
Некоторые должности, названия которых вошли в обиход в виде сокращений с английского.
Девопс
От англ. DevOps, сокращенно от Developer Operations (дословно — интеграция разработки и эксплуатации) — специалист, занимающийся внедрением DevOps-методологии. Полное название должности — DevOps-инженер, но в речи вторую часть всегда отбрасывают.
От англ. PO, сокращенно от Product Owner (дословно — владелец продукта) — роль по скрам-методологии, человек, ответственный за проработку продукта и распределение бэклога. Он знает о требованиях пользователя и возможностях команды.
От англ. PM, сокращенно от Product Manager (дословно — менеджер продукта) — менеджер, который отвечает за продукт, его обязанности совпадают с обязанностями пио, отличие только в том, что это название должности, а не роли в скраме. Так же, как пио, пиэмов могут называть продакт.
Организационное
Термины, относящиеся к организации работы, а также термины, употребляющиеся в неформальной речи при обсуждении чего-либо.
Дейоф
От англ. day-off (дословно — выходной) — просто выходной.
Драйвер
От англ. driver (дословно — водитель) — человек, который берет на себя инициативу управления проектом/процессом/задачей. В его обязанности входит следить за тем, как протекает созданный им процесс, и руководить им. Он мотивирует других людей выполнять работу для достижения поставленных целей.
Консёрн
От англ. concern (дословно — тревога, участие) — в английском языке слово «консёрн» имеет много различных значений, при этом очень часто употребляется в русской речи. Какое именно значение вкладывает в него автор, известно только ему самому. Иногда — это смесь многих значений, таких как: особый интерес, беспокойство, цель, настороженность, опасение и т.д.
Окиары
От англ. OKR, сокращенно от Objectives and Key Results (дословно — цели и ключевые результаты) — система по постановке и достижению целей. Она нужна для синхронизации работы всех участников компании/отдела/команды, чтобы все двигались в одном направлении, с понятными приоритетами и постоянным ритмом. В отличие от KPI, это амбициозное целеполагание, достижение окиаров (окров) на 70-80% — отличный результат.
Оффер
От англ. offer (дословно — предложение) — предложение о работе / приглашение на работу.
Поинт
От англ. point (дословно — точка) — чаще всего употребляется в значении «точка зрения», сокращенно от point of view. Также в значениях: «суть», «смысл», «довод».