Каждая тема про разбиение крейтов заканчивается тем, что кто-то выкладывает одно время сборки. Чисел два, и меняются они в разные стороны.
Чистая сборка идёт от пустого target. После разбиения она может стать чуть хуже, потому что у каждого крейта свои метаданные, а компоновщик всё равно видит всё целиком. Цикл правки это ожидание после изменения одного файла. Он ускоряется, если от изменённого крейта зависит мало других, потому что cargo пересобирает изменённый крейт и зависящие от него, а остальное не трогает.
Подвох в обобщённом коде. Обобщённая функция компилируется в том крейте, который подставляет в неё конкретные типы, поэтому вынос такого кода в отдельный крейт часто ничего не переносит. Платит по-прежнему зависимый крейт.
cargo build --timings пишет HTML-отчёт с началом и концом сборки каждого крейта, и критический путь становится виден. Для цикла правки я трогаю один и тот же файл, пересобираю, повторяю раз двенадцать и выбрасываю первый прогон. Скучно, но жить приходится именно с этим числом.
Так что публикуйте оба числа и пишите, какой файл меняли.