Melt the butter in a large skillet over MEDIUM heat. Add the onion and bell pepper and cook, stirring frequently, for 2 minutes Add the asparagus and garlic and cook for 2 minutes more,or until onion is translucent and the asparagus is just barely fork tender. If the asparagus is very thin, it only needs a minute or so. Thicker asparagus will need a bit longer. Set aside.
In a large bowl, whisk the eggs. Add the half-and-half or milk, mustard, salt, pepper, and nutmeg and whisk until well combined (the mustard will try to clump so be sure it’s incorporated). Set aside.
Coat a 3-quart or 9x13-inch baking dish with nonstick cooking spray.
Spread half of the bread cubes over the bottom of the dish (should cover the bottom ) and top evenly with half of the ham and half of the asparagus mixture (I scatter it with my hands - messy, but it ensures an even amount of everything). Sprinkle with half of the Gruyere and pepper Jack and pour half of the egg mixture evenly over the top.
Place the remaining bread cubes evenly over the top and use your hands to lightly pack the mixture down into the baking dish. Layer with the remaining ham, veggies, and a final layer of the cheeses. Pour the remaining egg mixture over the top, making sure to drizzle some over the edges of the casserole.
Cover the strata with plastic wrap and refrigerate for at least 1 hour or for the best result, overnight.
When ready to bake, remove the strata from the refrigerator and let it stand at room temperature for about 30 minutes while you preheat the oven to 350 degrees F.
Bake, uncovered, until puffed, set and golden brown, 50 to 55 minutes (internal temperature should reach a minimum of 160 degrees F). Let stand for 10 to 15 minutes before serving. It will set a bit more as it cools.