РИТ++ 2017, AppsConf
Зал Найроби + Касабланка, 5 июня, 17:00
Тезисы:
http://appsconf.ru/2017/abstracts/2707.html
С быстрым ростом команды и приложений мы столкнулись с новыми для нас вызовами. Стало труднее экспериментировать, code review не решал своих задач, а стабилизация релиза занимала непредсказуемое время. Поскольку мы хотим чаще выпускать новые версии приложений и спать при этом спокойно, то, как инженеры, начали решать эти проблемы с технической стороны, активно используя feature toggles.
Расскажу, когда уместен этот подход, как применяем для стабилизации продукта и приближения к сontinuous delivery. Обсудим приемы борьбы с тех. долгом без ущерба корректности работы.
16. “While feature toggles are a valuable tool in the box,
they are a second-best option.
The best thing to do with such features is to find a
way to gradually release them into production as you
are building them”
16
Martin Fowler
23. Feature
interface Feature<out T> {
val value: T
val description: String
val key: String
// ...
23
Описание для
тестировщиков
Уникальный
идентификатор
24. Toggle router
interface Features {
val isNewFlowEnabled: Feature<Boolean>
val newAdvice: Feature<String>
val apiUri: Feature<Uri>
// ...
24
25. Самый простой способ
if (features.isWallpapersEnabled) {
wallpaper.visibility = VISIBLE
}
25
26. Изоляция решений
fun openGallery() {
val intent = if (features.isNewGalleryEnabled){
intentFactory.internalGalleryIntent()
} else {
intentFactory.systemGalleryIntent()
}
startActivity(intent)
}
26
27. Изоляция решений
fun openGallery() {
val intent = if (isNewGallerySupported()){
intentFactory.internalGalleryIntent()
} else {
intentFactory.systemGalleryIntent()
}
startActivity(intent)
}
27