A full-text index has a minimum word length you will hit

InnoDB full-text ignores words shorter than three characters and words appearing in more than half the rows, and both are configurable only at the server level.

SHOW VARIABLES LIKE 'innodb_ft_min_token_size';   -- 3

-- so this matches nothing:
SELECT * FROM products
WHERE MATCH(name) AGAINST('XL' IN NATURAL LANGUAGE MODE);

-- and neither does a term in >50% of rows, in natural
-- language mode. boolean mode has no such threshold:
WHERE MATCH(name) AGAINST('+XL' IN BOOLEAN MODE);

Changing innodb_ft_min_token_size requires a server restart and a rebuild of every full-text index, which makes it a decision rather than a setting. Product catalogues hit both limits immediately — sizes are short and a brand name appears in most rows — which is why boolean mode ends up being what actually ships.