Skip to content

Principles

nin-jin edited this page Dec 3, 2020 · 2 revisions

Человек

  1. Человек ленив. Между сложным правильным путём и лёгким неправильным он с большей вероятностью выберет неправильный. Поэтому правильный путь должен быть легче неправильного. А то и вообще неправильный должен быть невозможен.

  2. Человек не идиот. Если делать продукт для идиотов - только идиоты им и смогут пользоваться. Не стоит тратить время на рассмотрение сценариев, типа "что если кто-то попытается вставить квадратную штуку в круглое отверстие?". И уж тем более не стоит ради поддержки таких сценариев жертвовать удобством/функциональностью/производительностью в более адекватных сценариях использования.

  3. Человек видит далеко не всё. Если не видно разницы, то незачем делать больше. Такие оптимизации можно производить без спроса. Если же человек может увидеть деструктивность оптимизаций, то они должны явно включаться им вручную. Тогда человек будет понимать на что и зачем идёт. И не будет воспринимать эту оптимизацию, как глюк.

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

Сообщество

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

  2. В каждой области может быть только один ответственный. Если формально ответственны несколько, то фактически не ответственен никто. А без единого идеолога и архитектора невозможно построить консистентное решение за разумное время.

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

Проблемы

  1. Зри в корень. У каждой проблемы есть не всегда очевидная первопричина. Найдя её, стоит придумать такое решение, которое полностью её устранит.

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

  3. Хорошая мина при плохой игре. При выборе решения стоит рассматривать наихудший сценарий развития событий и выбрать наилучшее решение для этого случая.

  4. Без компромисов. Между высокоуровневой простотой использования и низкоуровневой гибкостью мы выбираем оба варианта, строя удобные абстракции на гибкой основе.

  5. Не платим за то, что не используем. Даже минимальная наценка помноженная на многие приобретения выливается в существенную сумму, которая может оказать фатальное влияние.

  6. Отказ от не необходимого. Если от чего-то допустимо отказаться в некоторых случаях, то от этого следует отказаться вообще. Незачем тратить ресурсы на то, что не особо-то и нужно. Сэкономленное же всегда будет куда применить с большей пользой. Если же отказываться не допустимо, то оно в любом случае должно выполнять свою функцию.