Cook macaroni al dente according to package instructions. Drain and rinse with cold water.
While noodles are cooking, melt butter in a saucepan over medium heat. Sprinkle in flour and stir with a whisk until thickened.
Whisk in warm milk, working out any lumps. Cook for about 2 minutes until sauce has thickened. Add 1 more tbsp flour if it is not thickened. Remove from heat.
Add both cheeses and stir until melted and smooth. Season with salt and pepper.
Fold in macaroni noodles and pour into a shallow pan and refrigerate for at least 1 hour, until macaroni is cold, making it easier to mold into balls.
Shape the cold mac and cheese into meatball-sized balls.
Prepare the coating by beating together your eggs with 2 tablespoons milk and pouring the bread crumbs into a shallow bowl.
Dip the balls into the egg then into the bread crumbs. Repeat these steps twice for each ball to give it a thick coating of bread crumbs.
Preheat the air fryer to 375˚F/191˚C for 5 minutes, then fry the coated mac and cheese balls for 10 minutes, until golden brown and center is hot. No need to flip halfway. Serve with your favorite marinara or Alfredo sauce for dipping.
For the oven: cook at 375˚F/191˚C for 20 minutes
Do not overcook noodles, or they will be too mushy to hold a good shape
You can play with the ratio of cheddar cheese to gouda cheese to your preference.
Use an ice cream scoop to help create uniformed sized balls.
If you wanted to make this ahead, you could freeze the formed cheese balls prior to the coating. Then when you are ready to cook them, remove them from the freezer, coat them in the egg & breadcrumbs as instructed, and then fry them for a little longer since they were originally frozen.