melt butter in an 8 or 9 inch nonstick, ovenproof skillet over low heat. Add the leek and garlic and cook very slowly, stirring frequently, until soft and golden, about 10 minutes, then set skillet aside off the heat.
Meanwhile, fill a large bowl with water and ice cubes and set aside.
Bring a skillet of salted water to a boil over high heat. Add the asparagus spears and cook until blanched, about 2 minutes. Immediately drain the asparagus in a colander, then plunge into the bowl of ice water to stop the cooking. Drain asparagus again.
Cut asparagus spears into 1/2 inch pieces. Scatter asparagus and ham over the leek mixture in the skillet.
Preheat the broiler and set the rack about 5 inches from the heat source.
Place the eggs and milk in a medium bowl and whisk to combine. Add dill, chives and lemon zest, then season with salt and pepper.
Add the egg mixture to the skillet with the leek mixture and cook, without stirring, over medium-low heat until the bottom and sides have set, about 4 minutes. The top of the frittata will still be wet.
Sprinkle the cheese over the frittata and place the skillet under the broiler. Cook until the top puffs and turns golden brown, 3-5 minutes. Remove from the broiler and let it rest for 2 minutes.
Run a heat-proof rubber spatula or small knife around the edge of the frittata to release it from the skillet. Slide it onto a serving plate. Cut into 4 wedges and serve hot.