Ассоциация производителей КРС голштинской породы

Эволюция продукта

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

Цвет означает роль, а не настроение

Красным в книге набраны две разные вещи: отрицательная племенная оценка и находка проверки. Первое — измерение, второе — упрёк, и рядом они читаются как одно. Отсюда правило: если на экране уже есть красное число, находку красным не помечают — для неё есть другие приёмы, они ниже.

Цвет добавляется в палитру, а не подбирается на месте из того, что уже объявлено. Tailwind не ругается на несуществующий цвет: он молча не выпускает правило, класс остаётся в разметке и выглядит работающим. Так пропали восемнадцать полос в оценке экстерьера — все значения показывались стоящими на нуле, хотя данные были на месте.

Зелёный «лес»Принадлежность и текущий выбор: активный раздел, шапка таблицы, панель поиска
ОранжевыйГлавное действие экрана. Ровно одно: два акцента означают, что выбор не сделан
Розовая заливкаНаходка: претензия, противоречие, превышенный порог. Не «ошибка системы»
Серый «чернила»Пояснение, подпись, второстепенное. Восемь ступеней, все в палитре

Кнопка без модификатора — белая

Базовый класс задавал только форму, цвет приходил модификатором, и кнопка без модификатора выходила прозрачной — то есть надписью в воздухе. Так стояло в пятнадцати местах, и ни одно из них не было выбором: вторичной кнопки в наборе просто не было.

Теперь вторичная и есть базовая. Рамка, а не тень: вторичные кнопки стоят и на сером фоне кабинета, и на белых карточках форм, а тень видна только на первом.

У полей ввода ловушка та же и пока не убрана: базовый field рассчитан на зелёную панель поиска и на белой карточке остаётся без рамки — то есть невидимым. Рамку добавляет field-on-light, и он стоит в девяноста четырёх местах против одного, где его нет. Правило до исправления простое: на белом фоне поле пишется с модификатором, и забыть его — значит получить форму без полей. Один раз это уже случилось.

Главное действиеОбычное действиеНедоступно

Число держит правый край, что бы рядом ни стояло

Подпись ставится слева от числа, а не справа. Стояла справа — и «стельная» отодвигала число влево: колонка переставала быть колонкой, и сравнить дни у соседних строк можно было только по одной.

Цифры моноширинные везде (tabular-nums): в пропорциональном наборе единица уже восьмёрки, и столбец чисел разъезжается сам собой.

Рядом с числом стоит то, из чего оно посчитано: «по 28 из 28 коров», «дочерей 5». Средний удой по двенадцати коровам из семидесяти и по семидесяти из семидесяти выглядят одинаково убедительно, а означают разное.

КороваДней после отёла
Ромашкастельная1 288
Тайга673
Айва529

У пометки на значении четыре разных смысла — и четыре разных вида

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

Плашка не переносится на две строки. Название претензии — ярлык, а ярлык либо помещается, либо его надо переименовать; перенесённый ярлык делает строку вдвое выше соседних, и ряд начинает прыгать.

Тёлка — противоречие: значение спорит с другим значением той же записи

4,2 % — расчётное: под наведением формула и то, из чего считалось

Низкий удой — претензия к животному: розовая плашка

Не осеменялась — вопрос к записям, а не к животному: серая плашка, в счёт не идёт

Ноль — это утверждение. «Нет данных» — прочерк

«Выбыло 0» читается как «мы никого не потеряли», а означать может «выбытие не заполняют». Поэтому там, где считать не по чему, стоит прочерк, а под ним — чего именно не хватает.

Пустой раздел объясняет себя словами и говорит, что сделать. Раздел, который молчит, читается как поломка: человек ищет ошибку там, где её нет.

Обрезанный список говорит, что он обрезан. «Показано 200» без «из 640» — ложь о размере беды.

Средний удой, кг

нет ни одной записи с удоем

Соматика

не измерено, а не «ноль»

Порядок частей страницы задан каркасом, а не памятью

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

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

  1. 1. Меню кабинета — единственное, что не меняется от страницы к странице
  2. 2. Хлебные крошки — только у вложенных
  3. 3. Заголовок
  4. 4. Вводный абзац: о чём раздел и чего в нём ждать
  5. 5. Содержимое

Объяснение живёт под знаком вопроса, а не перед числами

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

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

Заголовок отчёта i— короткая строка под ним, разбор под знаком

Отбор виден и снимается по одному условию

Условие, о котором панель молчит, — самое дорогое: выдача сужена, объяснения нет, и снять его можно только «сбросить всё». Так однажды работал отбор «чистопородные»: он действовал, а в списке условий его не было.

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

Условия:Тип:Племенное свидетельствоСбросить всё

Язык — часть визуального кода

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

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

Сокращения раскрываются там, где встречаются впервые. «ССК», «ИПЦ» и «ДИМ» понятны зоотехнику и непонятны бухгалтеру хозяйства, который открывает ту же страницу.

Чего здесь пока нет

Раздела о поведении на узких экранах: правила есть в коде (таблица уходит в горизонтальную прокрутку, колонки прячутся по приоритету), но списком они не собраны, и приоритеты у разных таблиц назначены по-разному.

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

Тёмной темы. Она потребует пересмотреть весь смысловой слой цвета выше, а не только подставить другие значения: розовая заливка находки на тёмном фоне перестаёт быть мягкой.