Background: When I brew 'all-grain', I BIAB 2.75 gal batches in a 3 gal fermenter.
For me, a recipe for a standard strength ale is roughly 5# base malt and .75# character malts.
I have the space for a basement LBHS with space for grains, yeast (fridge), and hops (freezer).
For base malts, I keep a "two row" malt and a "pale ale" malt in stock. Occasionally, I'll "special order" Maris Otter or Golden Promise.
For character malts, I have 1-2# each of Munich (10L), biscuit, a range of "American" and "British" crystal, Simpsons DRC (+1 to
@AlexKay), chocolate malt (both 200L & 350L), and black malt. Over time, as I've been "chewing on a couple of kernels", I can start to suspect that the malt is getting old - and I'm willing to dump a 'suspect' malt.
Over time, I see that I'm ordering every 2 or 3 months to restock items (often malts or yeast). With the online stores and shipping services that I use, orders arrive by Thursday when I order on Sunday night or Monday morning.
Winter storms can add a day or two to the delivery time - so plan according.