Cook the pasta according to the box one minute under the al dente time, then drain and set it aside. The pasta will keep cooking when placed back into the skillet.
Melt the butter in a large skillet over medium heat. Whisk the flour into the butter until smooth.
Slowly pour the milk into the flour mixture and whisk again until smooth again. Then season it with salt and pepper.
Add the cheeses a handful at a time and stir them until melted. Taste the cheese sauce and add more salt or pepper as desired. Cook it until thickened, but don’t cook it too long, or it will start to separate.
Add the pasta back into the cheese sauce and stir until well-coated, then serve and enjoy.
Notes
Cook the pasta to one minute under al dente. It keeps cooking when it goes back in the skillet.
Use whole milk for the creamiest sauce.
Freshly grate the cheese for the best texture that's smooth.
Add the cheese slowly while stirring.
Avoid cooking the cheese sauce too long, which can cause it to separate. If it does, adding a splash more milk and whisking quickly will bring it back together.
This nutrition information is based on the exact products I used in this recipe. Brands and sizes of products could alter exact nutrition and should always be calculated independently.