Дробление сложных задач

При разработке продукта возникает много проблем, которые нужно решать. И проблемы бывают очень простые и очень сложные. Если первые может решить один человек, то вот вторые обычно решаются всеми по чуть-чуть.

Этот алгоритм призван помочь вам разделять сложные задачи, которые не может решить один человек, на множество маленьких, которые можно решать по-одиночке.

Алгоритм

  1. Что вы хотите получить? Установите цель

    Например: Уменьшить время регистрации, ускорить отправку почты, ускорить установку приложения

  2. Представить, как программа должна выглядеть для того, чтобы выполнять поставленную задачу

    Например: Простая и понятная форма регистрации, быстрый почтовый сервер, маленькое и быстро запускаемое приложение

  3. Ответить на вопросы: “Какие конкретно части нужно в программе изменить? Что нового добавить? Что удалить?”

    Например: Убрать лишние 3 поля проверки пароля, отключить фильтрацию спама в исходящих письмах, убрать неиспользуемые иконки

  4. Расписать, что можно сделать прямо сейчас, а что только после чего-то

    Например: Чтобы добавить кнопку “редактировать” нужно, чтобы была функция редактирования, но она должна знать, кто может редактировать, а кто не может

  5. Расставить задачи по порядку “можно сделать сейчас - в начало, нужно что-то сделать до этого - в конец”
  6. Каждое изменение теперь - задача, и её, скорее всего, можно так же разбить на маленькие подзадачи
  7. ОСТАНОВИТЬСЯ нужно, когда вы хотите изменить вещи, которые делали не сами. Лучше в такой момент обратиться к эксперту

    Например: Нужно чтобы библиотека возвращала другое значение, браузер не блокировал всплывающие окна, уроки были в 2 раза короче, моторы были в 10 раз эффективнее.

Примеры

Чат

Текущая ситуация: есть ретро-чат для сисадминов (на чёрном фоне отображается зелёный логин и белый текст сообщения), написан на Python. Люди присоединяются к серверу (Python + Flask) с помощью отдельных программ-клиентов, регистрируются, заносятся в БД и могут писать в чате. В БД хранятся только пользователи: логин, пароль в безопасном виде и дата регистрации.

Проблема: новые пользователи не знают, кто является админом.

Большая задача: сделать так, чтобы админов не надо было запоминать по логинам.

Применяем алгоритм…

  1. Представляем: Человек сидит в чате пишет о котейках и при сообщении админа “прекратить флуд” осознаёт, что могут последовать репрессии.
  2. Что изменить: Добавить админам какие-то отличительные знаки, объяснить системе, кто из пользователей админ.
  3. Расставляем: Поскольку отличительные знаки расставляет сама система, то логичнее всего сначала рассказать ей how is how. Параллельно можно думать как именно админов отличать.
  4. Дробим ещё: Поскольку за саму систему отвечает программист, то пусть он сам думает как объяснять кто есть кто, так же нужно определить конкретно отличия и возможность улучшения данной фичи. Нельзя пропустить тестирование как часть задачи разработки, вдруг что-то пойдёт не так.

Получаем следующие задачки:

  1. Придумать отличительные знаки Admin пользователей (допустим это будет цвет логина)
  2. Исследовать хорошие цвета (самый хорошо заметный цвет - зелёный - уже занят, значит можно взять сочный синий цвет на красном фоне)

— Дизайнерско-исследовательские задачи закончились —

  1. Исследуем возможность того, что потом нужно будет кроме Admin сделать ещё и модераторов/vip/bot и так далее (ну скорее всего да, чат же делаем)
  2. Думаем, какой группе пользователей какое число соответствует (0 - обычный пользователь, 1 - админ)
  3. Добавляем в БД пользователям поле group в виде числа и изначально всем прописываем 0 при регистрации
  4. Всем админам ставим значение group в 1
  5. В коде, отображающем сообщения в чате меняем цвет, в зависимости от group

— Программистские задачи закончились —

  1. Провести тестрование решения (оказывается, что синий на красном совершенно не читается, и хочется вырвать глаза, и что были книжки по сочетанию цветов и теории цвета. Возвращаемся к задаче №2 с уже новыми знаниями о том, что малиновый так же хорошо виден на чёрном фоне, как и зелёный)

Сайт

Текущая ситуация: есть новостной сайт школы, на битриксе WordPress, который в автоматическом режиме показывает новости. Дизайн полностью свой, так как не оказалось шаблона, который бы отражал все цвета. А ещё заказу директора в правом нижнем углу обязательно должен был находиться герб школы с совёнком. Можно посмотреть новость, там уже есть комментарии и разные теги. При запуске проекта о свежести новостей никто не думал, так как публиковался только школьный совет: только уведомления о сборах и протоколы собраний.

Проблема: директор захотел также на сайте публиковать новости об олимпиадах и анонсы школьных мероприятий (“На следующей неделе сбор макулатуры!!!”). Из-за отсутствия даты, родители не смогли сориентироваться и с полной уверенностью, что уведомление задержалось на неделю из-за внутренней бюрократии, массово сдали макулатуру… досрочно.

Задача: Каким-то образом информировать пользователя о том, когда новость была опубликована.

Применяем алгоритм…

  1. Представляем: Пользователь читает новость, смотрит на дату, чтобы удостовериться в актуальности новости. Немного представив команда понимает, что не сходится в некоторых пунктах: Нужно ли время? Нужно название месяца или цифра? Год указывать полностью*
  2. Что изменить: Новости есть в главной ленте и на отдельных страничках “полного” просмотра, соответственно и там, и там должны быть отметки о публикации.
  3. Расставляем: Нужно провести интервью с пользвателями и узнать какой формат даты им будет понятен. После выполнения предыдущих задач можно уже и писать новый код. Ну и конечно же провести тестирование нового кода.
  4. Дробим ещё: После интервью у дизайнера может появиться понимание того, как оно должно выглядить, значит в исследование так же можно внести дизайн и прототипирование нового вида новостей. Программист же думает, что WP не сильно дураки делали и дату и так выводили, просто она не была реализована в необходимом дизайне сайта, поэтому он так же хочет исследовать документацию WP на предмет существующего функицонала.

Получаем следующие задачки:

  1. Узнать, какой формат удобен и понятен всем пользователям (11 ноя. 2018 15:43)
  2. Определить место, где люди скорее всего будут искать дату публикации (после самой статьи)

— Исследовательско-дизайнерские задачки закончились —

  1. Найти в документации WP поле, отвечающее за время публикации (допустим published)
  2. Сделать функцию, получающую на вход новость и выводящую время в нужном формате (“Зачем придумывать велосипед, если уже кто-то другой придумал?” - возникла мысль у программиста, когда он начал думать, как считать високосные года. Была взята готовая функция из интернета)
  3. Найти шаблон обрезанной новости, которая отображается на главной странице, и добавить под неё дату и время
  4. Найти шаблон полной новости, добавить в конец дату и время

— Программистские задачки закончились —

  1. Провести тестирование (оказывается, что многие даже не дочитывают новость до конца, а на фоне герба-совы дату и время никто не видит. Возвращаемся к задачке №2 зная, что можно поставить время и дату под заголовком, и людям, уже прочитавшим весь текст не надо крутить страницу вниз.)