Разработка
Today

Когда идти улучшать — не надо

Есть ряд решений, для которых добавление любых «фичей» несет сильно больше минусов, чем плюсов. «А еще вот это добавим» там не работает, особенно если вас об этом никто не просил.


Навеяно недавней ржакой, уязвимость в виндовс-блокноте (notepad), severity 8, удаленное исполнение кода. Вот не шучу ни разу, https://www.cve.org/CVERecord?id=CVE-2026-20841 .

То есть реально, есть какой-то говнокодер (или вайб-кодер), который умудрился блокнот сломать, как в анекдоте.

Когда отпустит, смотрим что там такое: речь не про старый топорный notepad.exe, который с нами (вроде бы) с 1995 года. Речь про «новый блокнот», который в свежей Винде, и в который впихнули поддержку markdown.

В маркдауне есть ссылки, и вот их не самая корректная обработка приводит к тому, что можно подпихнуть ссылку на исполнимые файлы и протоколы — типа file://, семейство ms-app://, и просто пути в файловой системе. Это уязвимость CWE-77, вставка спецэлементов в команду. Exploitable, всё честно.

Src: windows central

Притащили в приложение новых функций, одна из них реализована криво. Все юзеры операционной системы под риском, причем высоким, потому что продукт в операционку вшит. Используется, или не используется, это уже дело второе. Офигеть, наулучшали. «Хорош покращувать», кто помнит шутку.

Кстати, опция работы с MD у нового notepad по дефолту отключена; но для .md включится самостоятельно, без спросу. То есть, таки поломали поведение.


И вот уместно задать вопрос, в этой всей связи

— а нахрена в тот продукт вообще кто-то руками полез?

Маркетинговый буллшит, чесались руки, давайте придумаем фичей, блабла — это понятно. Я знаю как принимаются решения в Microsoft, спасибо, я там работал, представить могу. Чисто по конкретике:

— был тот человек, которому паршиво жилось без поддержки ссылок в windows notepad.exe?

И сколько их таких?

Я — не верю. Скепсис мой на этот счет легко подтверждается тем, что редакторов с поддержкой чего угодно на рынке миллион. Бесплатных тоже.

Нет такой острой неотложной потребности, со стороны юзеров, которую надо было идти решать в принципе.

Необходимости в новом внутрисистемном инструменте с заявленными фичами — также не было, хотя бы потому что рядом есть встроенный WordPad, который там валяется аналогично с 1995 года и, по правде сказать, особой бытовой популярности не снискал.

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

Перепись аналогично сомневающихся доступна здесь https://news.ycombinator.com/item?id=46971516.


В чем тут цимес. Есть класс продуктов и решений, которые не надо «ходить и улучшать». Они уже и так хорошие, они решают полностью всю ту задачу, которую на них потребитель возложил, даже ограниченную. И не собирается возлагать какие-то дополнительные.

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

Их ценность не в том, что они делают.
Их ценность также в том, чего они не_делают.

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

Сумма этих свойств формирует доверие. Когда вы сломаете доверие к продукту или инструменту, вы потеряете скорее всего его главное рыночное преимущество.

От гирлянды требуется не мигать.


Этим часто грешат неопытные и/ли начинающие проектировщики. В подтверждение моих слов, посмотрите на миллион «учебных проектов», которые пачками выкладывают вчерашние студенты на всякие дриббло-бехансы.

— Я сделал новый todo-list. Я «запроектировал» и нарисовал калькулятор. Я могу нарисовать окно логина. Я могу набросать окно мессенджера. Я нарисовал очередные 100500-е стандартные иконки. Я нарисовал дашборд в админке.

В них сразу со старта заложена фундаментальная «мертворожденность». Функциональная. У нас есть уже, для всех этих озвученных задач, успешные решения. Они понятные, проверенные, предсказуемые.

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

Потому что у нас уже есть примеры действительно успешных todo, без свистоперделок, не надо туда ничего добавлять пока не просят. У нас есть типовой калькулятор (а еще эксель и BI для сложных задач), и если там в базовой арифметике что-то начнет по-другому считать, или не будет предсказуемых кнопок, возникнут вопросы. Что требуется человеку от окна логина, тоже давно понятно и известно (пустить и не мешать).

Примеры современных мессенджеров похожи друг на друга не потому, что все ленивые, а потому что эта механика давно кристаллизовалась по содержанию и форме, в общий понятный знаменатель. Сеты базовых иконок давно известны, косметические отличия на практике не особо важны. Дашборды в админке имеют ряд четко очерченных функций, а без применимости к конкретной админке, это форма без содержания — она бессмысленна, и ее «улучшательства» тоже, пока мы не знаем, что действительно надо было улучшать.


Что делать: ну, во первых, херней не маяться.

Не надо мне пихать маркдаун в блокнот, и AI-помощника в калькулятор, если я об этом точно не просил. А просил не трогать.

Во-вторых, к подобному классу продуктов применимы обычно только два направления действительно улучшений

— меньше, а не больше. Смотрим не на то, что в продукт «надо добавить», а что из него еще, в его практически идеальной форме, можно убрать. Не поломав механики, ценность, предсказуемость, и так далее. Вот это действительно сложная задача, «делать просто — это сложно!»

Например, для блокнотов, есть обширный класс решений, где нет даже части тех базовых элементов, что предлагает стандартный системный notepad.exe. И сюрприз, они полезны, и имеют свою аудиторию. Например focus mode, вообще без-интерфейсный режим, только ты и буквы, только функция, без формы.

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

Но докопаться до сути вещей, и «улучшить неулучшаемое» на этом пути в принципе возможно. Хотя бы в целях умозрительного эксперимента и упражнения. Законченность — это не когда нечего добавить, а когда нечего убрать.

— «невидимые» функции. Класс фичей, которые никак, никоим образом не затрагивают существующее поведение продукта и experience пользователя в этой связи, но добавляют неочевидные полезные свойства. Например то, как многострадальный notepad взаимодействует с диском, автосохранение, отслеживание изменений. Поведение с кодировками, потому что о них вспоминают только тогда, когда они слетели. История изменений, существование которой никак не влияет на сам блокнот, но решает внешние по отношению к нему задачи.

Рыночной необходимости все равно может и не быть, можно ее в случае notepad вовсе не искать, потому что есть масса решений, которые описанное всевозможное из коробки делают — по статистике плагинов Obsidian наглядно видно, чего людям недостает от блокнота. Но это иллюстрация, в каком направлении вы можете копать, если чешется. Можно, не значит нужно. Основной приоритет, все равно, не сломать и не поменять существующее. Сделать так, чтобы ничего не поменялось, но всё поменялось. Не затронуть базовое, и не расшатать ожидания — главный приоритет.

Я вот кстати уверен, что если бы MS просто притащили в блокнот систему плагинов, и сказали «развлекайтесь там сами», то было бы сильно интереснее.

Как сделали с Teams, там отдельная плагинная индустрия выросла, кому что вкуснее хочется, причем с некислыми коммерческими деньгами.

Но Obsidian бы обиделся.

А, у нас же для этого VSCode есть.


Из интересных примеров, судьба шариковой ручки. За ней есть очаровательная история BIC, которые в погоне за простотой и дешевизной уже сделали максимально минималистичное решение — и по эргономике, и по предсказуемости, и по цене (что немаловажно). И не собираются его менять, менять = только портить. 76 лет ручке, если что.

Но есть пример «невидимой функции», как концепция, когда вот у тебя ровно та же ручка, без изменения experience, пишет не только на бумагу, но и копию сразу в облако. Когда ребята такое заявили, и показали прототип, ряд людей сказала shut up and take my money.

По итогу заработало, но не взлетело — experience изменился, совсем аналогично сделать не получилось. А потом мы перешли на печатание букв, и ценность решения резко снизилась.


В сухом остатке, иногда улучшать и «добавлять» — только портить. Увы и ах.

Hope that helps.