The Brussels sprouts are first roasted so that they are tender and lightly charred. They are then mixed together with béchamel sauce, crispy pancetta, shallots and lemon zest and topped with a mix of Gruyère and Parmesan cheese.
Preheat oven to 400ºF (200ºC). Cut the Brussels in half then toss in olive oil, salt and pepper and spread in an even layer, cut side down on an aluminum foil-lined baking sheet. Roast until the Brussels sprouts are soft on the inside and lightly browned, about 20 minutes.
In a medium saucepan over medium heat, cook pancetta until fat has rendered and it is crispy, about 10 minutes. Remove with a slotted spoon to a small bowl, reserving as much fat as possible in the pan.
Add the butter and melt. Add the shallots and sauté until tender, about 6 minutes.
Add the flour, whisking to combine. Let the roux cook for a minute until a pale golden brown. Add the milk and thyme, whisking to incorporate.
Bring the mixture to a boil then lower the heat to medium-low. Cook, whisking occasionally, until the sauce coats the back of a spoon, about 10 minutes. Season with salt and discard thyme sprig. Remove the béchamel sauce from heat and set aside.
In a large bowl stir together the Brussels sprouts, pancetta, béchamel and lemon zest until combined. Pour the mixture into an 8-inch cast iron baking dish. Lower oven to 375ºF (190ºC).
Top with the Gruyère and Parmesan cheese and bake until the mixture is browned and bubbling, about 30 minutes.