Boil a large salted pot of water for the macaroni, and cook it al dente according to package instructions.: The pot should be loudly bubbling and the steam will smell faintly starchy as the water reaches a rolling boil, which tells you it is ready for the macaroni . Salt the water generously so the pasta itself is seasoned from the inside out, and watch the timer closely so the noodles finish with a firm bite rather than soft or sticky. A common mistake is under salting the water which results in a flat final dish, and another is overcooking the pasta which causes it to continue breaking down when mixed with the hot sauce.
Meanwhile, in another pot, melt the butter over medium heat. Stir in the flour and cook it, stirring often, until golden (about 3-5 minutes).: As the butter melts you will see it foam then calm, releasing a rich, creamy aroma that signals it is ready for the flour . Keep the heat moderate so it does not brown, unless you prefer a nutty depth, and stir as you add the flour to prevent clumping. If the heat is too high the roux will darken quickly and change the sauce color and flavor; if it is too low the mixture can become pasty and grainy.
Slowly whisk in the evaporated milk, then whisk in the seasonings. Cook for a few minutes until the sauce starts to thicken up (this happens quite fast, so be careful not to let it get too thick).: You will notice the texture shift from pasty to velvety, and a toasty, wheaty smell develops which indicates the raw starch is cooked out. This stage is essential because it removes the floury bite and allows the roux to properly thicken the sauce later. Stirring prevents hot spots and ensures even cooking, and forgetting to cook the flour long enough can leave a raw taste in the final sauce.
Take the pot off the heat and stir in the cheeses.: As you add the evaporated milk slowly, the mixture will smooth out and the whisking sound changes to a steady, light clinking as it becomes homogenous. Adding it in stages prevents lumps and helps you control thickness. The aroma turns more dairy forward, and the sauce immediately begins to look silkier. A typical error is adding the milk too quickly which traps lumps, so patience here is the ticket to a glossy finish.
Stir in the drained macaroni and toss to coat in the cheese sauce. Add pepper to taste (and more salt if needed). It's best enjoyed immediately.: Watch for the sauce to coat the back of a spoon, with steam rising gently and a sheen across the surface. The thickness should be saucy rather than pasty, because once you add the cheese it will loosen slightly. Stir frequently to keep the texture smooth; neglecting this step can lead to scorching on the bottom, and an overheated sauce can break, separating fat from the liquid.
Take the pot off the heat and stir in the cheeses: Removing the pot from direct heat prevents the cheddar and parmesan from seizing into stringy or oily clumps. As you stir, the cheeses melt into a glossy, velvety sauce and the scent becomes richer and more savory. This resting step preserves a smooth mouthfeel; adding cheese over high heat risks graininess or breakdown of the emulsion.
Stir in the drained macaroni and toss to coat in the cheese sauce: The moment you combine the macaroni with the warm sauce you will see the pasta become glossy and saturated, and the kitchen will fill with a buttery, cheesy aroma that signals readiness. Toss gently so each tube is evenly coated; overly vigorous stirring can shear the pasta and make the texture mushy. Taste and adjust with pepper and a touch more salt if needed, being mindful that the cheeses contributed salt already.
Add pepper to taste and serve immediately: Freshly ground pepper sprinkled at the end gives a fragrant lift that contrasts the rich sauce. Serve while the dish is hot so the sauce feels silky rather than congealed, and enjoy the warm, savory aroma that fills the room. A common pitfall is letting the dish sit too long which causes the sauce to thicken and lose its glossy texture, so plate promptly for the best experience.