Nival: Как не увлечься погоней за универсализацией...

22
Ловушка универсализации

description

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

Transcript of Nival: Как не увлечься погоней за универсализацией...

Page 1: Nival: Как не увлечься погоней за универсализацией компонент

Ловушка универсализации

Page 2: Nival: Как не увлечься погоней за универсализацией компонент

Что будет

1. Проблема2. Наблюдения3. Варианты решения4. Эксперимент5. Решения для менеджера6. Решения для программиста7. Практика в Unity8. Вопросы

Page 3: Nival: Как не увлечься погоней за универсализацией компонент

Prime World (PC)

Page 4: Nival: Как не увлечься погоней за универсализацией компонент

Prime World: Defenders (PC, iOS, Android)

Page 5: Nival: Как не увлечься погоней за универсализацией компонент

Blitzkrieg 3 (PC, Mac, Linux)

Page 6: Nival: Как не увлечься погоней за универсализацией компонент

Etherlords (iOS, Android)

Page 7: Nival: Как не увлечься погоней за универсализацией компонент

Что сделает программист если ему не “мешать”?

Page 8: Nival: Как не увлечься погоней за универсализацией компонент

Бесполезно потраченные ресурсы на:• добавление не востребованного

функционала (универсализация, “переиспользование” компонент)

• излишнее упрощение (наведение красоты, чрезмерный рефакторинг)

Следствие:• Падение мотивации менеджеров

Дороговизна разработки• Усложненная инфраструктура

Проблема

Page 9: Nival: Как не увлечься погоней за универсализацией компонент

Наблюдения

Тезисы:• Программисты любят упрощать (путь

наименьшего сопротивления/красота)• Часто это не выгодно• Дольше в разработке не значит лучше (есть

некоторый предел, по сравнению с забором)

Page 10: Nival: Как не увлечься погоней за универсализацией компонент

Варианты решения

На теории:• Архитектор• Технический дизайн

На опыте:• Ретроспективы• “Чужие” компоненты• Метрики пора/не пора универсализировать

Легко считается только при “заказе” всех изменений

Page 11: Nival: Как не увлечься погоней за универсализацией компонент

Аппроксимации

N – число ревизиий конкретной ветки/папки

Page 12: Nival: Как не увлечься погоней за универсализацией компонент

Аппроксимации

M = цикломатическая сложность,E = количество рёбер в графе,N = количество узлов в графе,P = количество компонент связности.

Page 13: Nival: Как не увлечься погоней за универсализацией компонент

Аппроксимации

N – число функцийM – число вызванных функций в эталонном запуске

Page 14: Nival: Как не увлечься погоней за универсализацией компонент

Эксперимент

Не сработало:• Метрики• Архитектор

Сработало:• Ретроспективы• Технический дизайн• Упрощение компонент

Page 15: Nival: Как не увлечься погоней за универсализацией компонент

Решения для менеджера

Направлять желание сделать “правильную” систему для часто модифицируемых элементов

Примеры+: игровая логика, отладка, обслуживание, стабильность серверов/клиентов, аналитика, нотификации оператора, размер клиента, процесс сборки (opt)

Примеры-: рендер, логи, архитектура (на поздних стадиях)

Page 16: Nival: Как не увлечься погоней за универсализацией компонент

Решения для программиста

1. Больше доверять программистам, которые не вы

2. Понимать позицию заказчика3. Не тратить силы на порицания4. Передавать опыт/технологии5. Находить время подумать о деталях

Page 17: Nival: Как не увлечься погоней за универсализацией компонент

Практика в Unity

Требования к компоненте:• Тестируемость• Гибкость• Надежность

Сильные стороны Unity API:• Асинхронность без callback• Компонентный подход• Reflection редактор• Runtime обновление public значений

Page 18: Nival: Как не увлечься погоней за универсализацией компонент

Практика в Unity

Под что в Unity нужно адаптироваться:• Смешанные MVC компоненты• Слабоуправляемый конвеер вызовов• Слабоуправлямая работа с памятью• MonoBehaviour должен находиться на

GameObject

Page 19: Nival: Как не увлечься погоней за универсализацией компонент

Практика в Unity

Варианты архитектуры:• “Скриптовать”• Делить на ActiveComponents + Managers• Адаптировать архитектуру под Unity

компонеты (IHTTP, IUnityData, IUnityView...)

Page 20: Nival: Как не увлечься погоней за универсализацией компонент

Выводы

1. Выделение компонент необходимо2. Нужно понимать разницу между

практичностью и увлеченностью3. Делать проще чем хотели часто хорошее

решение4. MVP бывает и на уровне проектирования

Page 21: Nival: Как не увлечься погоней за универсализацией компонент

Индекс Хирша (h-индекс)