Prep the ingredients: Dice the chicken into bite-sized pieces.
Chop the onion, carrots, and celery. Cut broccoli into small, even florets so they cook quickly. Shred the cheddar and set it aside to come to room temperature.
Sauté the aromatics: In a large pot or Dutch oven, warm the olive oil and 1 tablespoon of butter over medium heat.
Add onion, carrots, and celery with a pinch of salt. Cook 5–6 minutes until softened. Stir in garlic and cook 30 seconds until fragrant.
Brown the chicken: Push the vegetables to the sides.
Add the chicken to the center with a pinch of salt and pepper. Cook 4–5 minutes, stirring occasionally, until lightly browned. It’s okay if the chicken isn’t fully cooked yet.
Make the roux: Add the remaining 2 tablespoons of butter.
Once melted, sprinkle in the flour. Stir to coat the chicken and vegetables. Cook 1–2 minutes to remove the raw flour taste.
Add liquids: Slowly pour in the chicken broth while stirring to prevent lumps.
Bring to a gentle simmer. Add the milk or half-and-half and return to a light simmer. Do not let it boil hard.
Simmer with broccoli: Stir in the broccoli florets.
Add Dijon and a pinch of nutmeg if using. Simmer 8–10 minutes, uncovered, until the broccoli is tender and the chicken is cooked through.
Finish with cheese: Lower the heat to the bare minimum or turn it off. Gradually add the shredded cheddar by handfuls, stirring between each addition until melted and smooth.
Season with salt, pepper, and red pepper flakes to taste.
Adjust texture: If you prefer a silkier soup, use an immersion blender to briefly blend 1–2 cups of the soup, then return it to the pot. Keep some broccoli pieces intact for texture.
Serve: Ladle into bowls and top with chopped parsley or chives. Add extra cheddar on top if you like.