Мы хотим создать простой механизм для инженеров, чтобы они могли добавлять экспериментальный код и функции в наше приложение, чтобы опробовать новые вещи для подгруппы пользователей, проводить A/B-тестирование различных вариантов поведения приложения и, как правило, предлагать песочницу. среда, в которой разработчики могут сходить с ума, не затрагивая основной производственный код. Вот некоторые из наших требований к экспериментальным функциям (EF):
- Добавление EF должно быть предельно простым для всех, кто знаком с Rails, JS/Coffee и нашими приложениями.
- Код EF должен находиться вне производственного кода («на острове») как можно дольше.
- EF-код не должен прорастать раковыми щупальцами в производственный код, т. е. оставаться максимально слабо связанным.
- С первого взгляда должно быть понятно, что является EF-кодом, а что нет.
- Код EF не должен поддерживать полную организационную политику TDD, UX и т. д. На самом деле целью этого является быстрое и грязное экспериментирование, мы не хотим, чтобы процесс и политика ограничивали творчество и энтузиазм. Только если эксперимент считается успешным (путем пользовательского тестирования), хотим ли мы тратить усилия, чтобы довести его до всех политик.
- Функции EF можно включать и выключать на сайте панели мониторинга и развертывать для определенных пользователей.
- Разработчики, работающие над производственным кодом, не должны быть обременены работой с экспериментальным кодом — в идеале полное разделение. Эксперименты могут прерваться, если производственный код будет обновлен, и это предпочтительнее, чем заставлять разработчиков производственного кода поддерживать все эксперименты в актуальном состоянии. Экспериментатор должен поддерживать эксперимент в рабочем состоянии.
- Наша система построена на Rails для сервера и имеет многофункциональное клиентское приложение, написанное на CoffeeScript с Knockout.js и Backbone.js. EF может касаться кода Rails (действия контроллера, маршруты, модели), шаблонов представлений, кода CoffeeScript (привязки данных, шаблоны jQuery, модели и модели представлений и т. д.), CSS/SCSS, и механизм должен позволять помещать все это в песочницу.
На данный момент нас не очень беспокоит процесс измерения для сплит-тестирования или многовариантного тестирования, это решаемая проблема с такими инструментами, как Vanity gem, или коммерческими решениями, такими как KissMetrics и MixPanel. Нас больше интересует, как создать установку, которая решает проблемы разделения, слияния и обслуживания. Существуют ли такие инструменты для Rails?