Preheat the oven to 400 degrees. Bring a large saucepan filled with salted water to a boil over medium-high heat and blanch the brussels sprouts until just tender - about 3 to 7 minutes (it depends on the freshness and the size of the sprouts). Drain in a colander. Rinse gently under cold water to stop the cooking.
Melt 2 tablespoons of the butter in a large skillet (I like to use my cast iron so I can use the same pan for the stovetop as I do for the oven). Saute the shallots until tender, then add the minced garlic. Cook for an additional 30-60 seconds. Add the remaining 2 tablespoons of butter. Once it melts, whisk in the flour to make a roux. Slowly add in the chicken broth followed by the milk, while whisking, until thickened and smooth. Add half of the gruyere cheese & season with salt and pepper to taste.
Add the brussels sprouts to the sauce & stir to combine. If using a cast iron skillet or an ovensafe pan, just leave it in the pan. If you are not, then transfer the mixture to a 2 quart casserole dish. Sprinkle with the remaining gruyere cheese.
Bake at 400 degrees for about 30 minutes. It should be golden brown and bubbly. I like to crank up my heat to broil and broil it for a couple minutes just for a little more browning. Let this sit for 10 minutes before serving.