After a lot of trial and some error, I have gone with mashes in the range of 7 gallons for a 10.5 gallon batch of beer with approximately 18 pounds of grist (I make a lot of light lagers). I will run about a gallon and a half into the mash at the end of the mash (not mashing out, really, but usually raising the mash temp slightly); then I batch sparge with 6.5 gallons of sparge water (15 gallons total), collecting on average about 12.75 gallons, which I boil down to 11 or so with a 90 minute boil (this means I start with 15 gallons, which is handily three 5 gallon jugs of water - hard to mess that up, even after a late night with the boys the night before brewing).
For a range of 16-22 pounds of grain (my typical 10 gallon batch size of grist), I am pretty much okay with the same set up, often not adjusting for the high or low end of the range (just boiling longer, if I want to reach a specific gravity). If I am a bit under in volume, I am typically a little higher on OG, so I will occasionally add a little water to top up the batch in the fermenter when needed (or just live with the lower volume/stronger beer!) After fermenting, I typically yield right around 10.5 gallons (or a little more), which allows me to fill a 2 liter soda bottle as a “green beer tester” by quickly chilling and force carbonating it.
If I am doing a specific recipe from another brewer, I will do the proper volume calculations, but for run of the mill “house lagers”, this quick and dirty system has been working fine for my 10 gallon batches.