Был ли случай когда не получалось донести до остальных свои идеи

Ответ

Да, был случай, когда предлагал перейти с RecyclerView.Adapter на ListAdapter для оптимизации обновлений списка. Коллеги сомневались из-за сложности миграции и неочевидных преимуществ.

Как решил:

  1. Написал сравнительный тест (дифф-утилиты, производительность).
  2. Сделал POC с упрощённым примером:
class DiffCallback : DiffUtil.ItemCallback<Item>() {
    override fun areItemsTheSame(old: Item, new: Item) = old.id == new.id
    override fun areContentsTheSame(old: Item, new: Item) = old == new
}
  1. Показал, как это сокращает boilerplate и ускоряет notifyDataSetChanged().

Вывод: конкретные примеры > абстрактные аргументы. Команда согласилась на постепенный переход.

Ответ 18+ 🔞

Вот, вспомнил одну историю, как я пытался коллег уговорить с RecyclerView.Adapter на ListAdapter перелезть. Ну, понимаешь, классика: всё работает, зачем трогать, да и выглядит страшно — эти DiffUtil, сравнения... Подозрение ебать чувствую, что меня сейчас пошлют куда подальше.

А я-то знаю, что штука охуенная, обновления сами считаются, не надо каждый раз весь список дергать. Говорю им — ребята, давайте апгрейнемся, будет вам хиросима и нигерсраки по скорости. А они смотрят на меня, как на полупидора, и такие: "Ну и нахуя? И так всё пашет, не трожь".

Как решил, ёпта:

  1. Не стал языком чесать. Сел и впендюрил сравнительный тест. Наглядно показал, как старый адаптер с notifyDataSetChanged() бензина хавает как не в себя, а новый — только измененные ячейки моргает. Цифры, графики — доверия ебать ноль без них.
  2. Сделал POC — маленький пример, чтоб не пугать. Вот, смотрите, чувак, всего-то и кода:
class DiffCallback : DiffUtil.ItemCallback<Item>() {
    override fun areItemsTheSame(old: Item, new: Item) = old.id == new.id
    override fun areContentsTheSame(old: Item, new: Item) = old == new
}

Объяснил, что areItemsTheSame — это типа "это тот же самый человек?", а areContentsTheSame — "а он в той же майке пришел?". Всё, хуй с горы, логика проще некуда.

  1. Показал, как эта мартышлюшка весь этот boilerplate с кучей notifyItem* методов сама за тебя делает. И главное — никаких лишних анимаций и морганий, когда один элемент обновился.

Вывод-то какой получился? Э бошка думай: конкретные примеры > абстрактные аргументы. Не надо орать про "лучшие практики" — просто покажи, где конкретно у тебя пизда рулю и как это починить. Увидели цифры, потрогали пример — терпения ноль ебать, согласились на постепенный переход. Вот так, ядрана вошь, иногда нужно не спорить, а просто сесть и сделать наглядную хуйню.