Boil pasta in salted water according to package directions for al dente. Drain and set aside.: The bubbling pot will steam up the kitchen and you should hear a gentle rolling boil, not a violent roar, which keeps the pasta from breaking apart. A properly salted pot seasons the pasta internally, giving the finished soup more balanced taste. Drain into a colander when the texture is firm yet tender, and set aside so it does not continue to soften in hot water. A common mistake is overcooking the pasta , which will absorb too much broth later and become mushy; time it carefully and test a piece before draining.
Chop onion, carrot, celery, garlic by hand or mini food processor.: As you chop, notice the sweet onion aroma and the earthy, crisp scent of the carrot and celery . Even cuts ensure even cooking so the vegetables soften at the same rate, creating a balanced base. I prefer a rough chop for texture in the soup, but a fine dice will meld more into the broth. Avoid leaving large uneven pieces, which can lead to inconsistent bites.
In a large soup pot or dutch oven, melt light butter. Add chopped vegetables and sauté on low heat until soft, about 5 minutes.: When the butter melts, it will foam slightly and give off a rich, dairy scent that signals the start of browning potential. Keep the heat low to medium low so the butter does not brown, unless you want a nuttier base. This gentle heat helps soften the vegetables without risking a bitter char. Overheating the butter before adding the vegetables can lead to uneven cooking and lost sweetness.
Add flour and fresh pepper to the pot and stir until smooth.: As the vegetables soften, the pot will release a layered, savory aroma. Stir frequently so the onion becomes translucent and the carrot and celery begin to tenderize. Softening the vegetables slowly draws out their natural sugars and builds a savory backbone. If you rush this step with high heat, the outside may brown too quickly while the interior stays firm, changing the intended flavor profile.
Slowly add chicken broth, milk, nutmeg and dry mustard powder; whisking constantly.: When you sprinkle in the flour , it will clump briefly before incorporating into the fat to form the roux. Stir until the mixture looks glossy and smooth, which indicates the flour is evenly hydrated and will thicken the soup uniformly. Cook briefly to cook off the raw flour taste, watching for a subtle change in scent. If you do not cook the flour enough, the soup can retain a chalky taste later.
Set heat to medium-low and let it come to a slow boil. Cover and cook on low about 10-15 minutes.: As you pour the broth and milk , whisk steadily to avoid lumps, and you will see the roux gently loosen into a creamy pale liquid. The aroma shifts to a warm, milky scent with a hint of spice from the nutmeg and dry mustard . Whisking is key to a silky texture. If you add liquid too quickly, bits of roux can clump, leaving an uneven texture in the finished soup.
Add broccoli florets, parmesan cheese, and stir well. Adjust salt and pepper to taste.: Watch for small bubbles rising to the surface and a steady steam; that indicates the liquid is heating uniformly. Once it reaches a gentle boil, cover and cook on low about 10 to 15 minutes so flavors can meld and the soup thickens. The aroma deepens and the broth will start to feel slightly more viscous on your spoon. Avoid high heat, which can separate the dairy or scorch the bottom of the pot.
Cook uncovered until broccoli is cooked, about 5 minutes. Remove from heat and wait until it stops boiling.: When you add the broccoli the steam will smell green and fresh, and the Parmesan cheese will dissolve into the warm broth providing a savory lift. Stir so the cheese melts evenly and the broccoli is distributed throughout. The green pieces should look vibrant, not dull, which signals they will retain a pleasant bite. Overcooking the broccoli here can make it mushy, so monitor the next step closely.
Add cheddar cheese a little at a time, mixing well until cheese melts.: With the pot uncovered you can see steam escape and hear a soft simmer; the broccoli should be tender yet still slightly firm when pierced with a fork. This balance keeps the texture lively in the soup. Remove from heat and wait until it stops boiling to prevent the dairy from overheating during the next additions. A typical error is leaving the pot at a rolling boil, which can make the milk break or the cheese seize when added.
Return the cooked elbows to the soup and mix well, adjust salt and pepper if needed.: As you add small handfuls of freshly grated cheddar , the soup will go glossy and silkier, and you will hear a gentle settling as the cheese incorporates. Adding gradually helps it melt smoothly and prevents clumping. Stir until each addition is fully dissolved before adding more, and keep the heat low to protect the texture. If the soup becomes grainy, it may be from overheating the cheese or adding it too quickly.
Eat right away so the pasta doesn't absorb all the broth.: When you fold the reserved pasta back in, the soup will take on a heartier body and the aroma becomes warmly starchy. Mix until the pasta is evenly coated and taste for seasoning, adjusting salt and fresh pepper as needed because the cheeses add salt. If the pasta soaks up too much broth, you can loosen with a splash of milk. Avoid adding too much salt early on, because the cheese can push the saltiness over the edge as it melts.
Eat right away so the pasta doesn't absorb all the broth: Serve while the soup is hot and the broth is still slightly loose, so each spoonful has a creamy mouthfeel and counterpoint from the broccoli . As it sits, the pasta will continue to absorb liquid, concentrating flavors and thickening the texture. If you must hold it, cool slightly and reheat gently with a little milk to refresh the consistency. A common misstep is letting the soup sit too long before serving, resulting in a dry, stodgy bowl.