between $30-50 USD for 5 gallons of beer
See if there’s a homebrew club in your area that runs bulk buys, you can drop your per-batch price by a fair amount with buying ingredients in bulk. Un-milled grains last a long time if stored properly, hops can be stored in the freezer and I’ve used them up to a year after opening without a significant drop in quality. Same goes for yeast if you get dry. I have a 500g bag of US-04 that is over a year old and still ferments just fine, I transferred it to a mason jar and keep it in the coldest part of my fridge. I was able to drop my per-batch cost to around $20 CAD or less for most beers that I brew, and having the ingredients on-hand means I can brew whenever I feel like it.
This is a security thing. A descriptive error message is useful for troubleshooting, but an error message that is useful enough can also give away information about architecture (especially if the application uses remote resources). Instead, provide an error code and have the user contact support to look up what the error means, and support can walk the user through troubleshooting without revealing architecture info.
Another reason can be i18n/l10n: Instead of keeping translations for thousands of error messages, you just need to translate “An Error Has Occurred: {errnum}”