Как принять сложное программное решение с помощью матрицы решений

Изменения внутри монолита могут иметь далеко идущие непредвиденные последствия. Это делает крайне трудным, если вообще невозможным, безопасное внесение фундаментальных изменений в систему. В Gusto мы строим модульный монолит, но нам еще предстоит кое-что сделать.

Когда моя команда решила заняться проектом, который коренным образом изменит способ сверки налогов, возникло несколько опасений. Как инженерная организация, занимающаяся расчетом заработной платы, дает зеленый свет для фундаментальных изменений в своей налоговой системе, когда последствия затрагивают многие области, функции и команды?

В течение нескольких недель мы распространяли проблему среди различных команд инженеров. Мы попросили внести свой вклад, и наш репозиторий творческих решений продолжал расти. Через несколько недель, несмотря на захватывающий разговор, у нас осталось много потенциальных решений для доставки этого изменения, но не было четкого ответа, как выбрать между ними. Каждое решение имело свои преимущества, но каждое из них также сопровождалось значительными рисками.

Этот тип аналитического паралича может серьезно замедлить проект или даже полностью его остановить. К счастью, мой менеджер Янник Давант предложил рассмотреть возможность использования матрицы принятия решений. С помощью матрицы решений мы смогли разбить наши варианты, четко сравнить решения и найти путь вперед.

Как построить матрицу решений

Матрица решений — это инструмент, который обеспечивает взвешенное сравнение множества вариантов. Когда необходимо учитывать множество различных факторов и рисков, но путь вперед может быть только один, матрица решений — отличный способ проанализировать множество вариантов и найти консенсус в команде.

Определите критерии оценки

Вместо того, чтобы начинать с решений, начните с критериев оценки. Первым шагом к построению матрицы решений является уточнение показателей успешного проекта. Например, в нашем проекте налоговой сверки наиболее очевидным критерием успеха было то, что работа повысила точность налогообложения. При дальнейшем рассмотрении мы поняли, что также важно, чтобы влияние изменения было предсказуемым. У нас были строгие сроки реализации проекта. Наша команда хотела бы, чтобы все наши проекты двигали нас к нашим долгосрочным целям.

После тщательного рассмотрения того, что сделает этот проект по сверке налогов успешным, мы смогли выдвинуть следующие требования:

  • Изменение повышает точность налогообложения
  • Воздействие предсказуемо
  • Изменение обратимо
  • Изменение незаметно для клиента в приложении
  • Проект может быть завершен в течение двух месяцев
  • Решение продвигает нас к другим нашим долгосрочным целям

Поскольку это высокотехнологичное решение, многие критерии исходили от инженеров. Однако мы также собрали некоторые критические требования от заинтересованных сторон. Заинтересованные стороны, работающие с клиентами, смогли внести свой вклад, который наша команда инженеров не учел.

Взвесьте критерии оценки

Перечисление ваших критериев оценки является полезным первым шагом, однако каждый критерий не имеет одинакового веса. Например, хотя наша команда предпочла бы решение, которое «движет нас к нашим долгосрочным целям», мы намного заботимся о том, чтобы «изменение не было заметно для клиента в приложении».

Следующим шагом к матрице решений является взвешивание каждого из перечисленных вами критериев. Каждый критерий имеет разный уровень важности, и наша матрица решений должна это отражать. Вы можете выбрать любой диапазон для применения взвешенных значений. Наша команда выбрала от 1 до 10, где 1 — наименее важный, а 10 — самый важный.

Определение и взвешивание критериев должно быть командной деятельностью. Обсуждение того, как выглядит успех проекта, выявит неясные области и даст команде возможность прояснить несоответствия на раннем этапе.

Ранжируйте решения по каждому критерию

Как только критерии оценки будут четко определены и взвешены, команда может оценить каждое решение по каждому критерию. Мы допускали баллы от 0 до 3, где 0 означает, что вариант не соответствует критериям, а 3 означает, что критерии, скорее всего, будут соответствовать критериям.

При завершении процесса ранжирования мы хотели избежать предвзятости привязки, склонности людей поддаваться влиянию первой части информации, которую они слышат. Каждый товарищ по команде завершил процесс ранжирования в одиночку, чтобы обеспечить как можно меньше предвзятости. Затем мы собрались вместе, чтобы обсудить рейтинг каждого критерия оценки по сравнению с каждым вариантом и договориться о рейтинге в команде. Это был длительный процесс, и его не следует торопить.

Рассчитайте окончательный балл решения, умножив вес каждого критерия на рейтинг решения для этого критерия и сложив общую сумму.

solution_score = sum_for_each_criteria(weight * solution_ranking)

Наконец-то мы это получили. Наши решения были оценены по взвешенным критериям, и наш путь вперед был ясен.

Примите решение и продолжайте строить

С помощью матрицы решений моя команда смогла коренным образом изменить нашу налоговую систему. Мы не создаем программное обеспечение в черно-белом варианте. Любая сложная (и поэтому интересная!) проблема обычно имеет множество возможных решений, каждое из которых имеет уникальные преимущества и риски. Матрица решений — это мощный инструмент, с помощью которого команды могут преодолеть аналитический паралич, ясно увидеть проблему и найти путь вперед.

Вы использовали матрицу решений раньше? Есть ли у вас другие инструменты, которые вы используете для принятия сложных программных решений? Поделитесь ими в комментариях!