Prep the ingredients. Cut the broccoli into small florets and peel the stems, then dice the stems.
Dice the onion, carrots, and celery. Mince the garlic. Pat the chicken dry and season lightly with salt and pepper.
Sear the chicken. Heat the olive oil in a large pot or Dutch oven over medium-high heat.
Add the chicken and cook 2–3 minutes per side until lightly golden. You don’t need to cook it through. Transfer to a plate.
Sauté the aromatics. Reduce heat to medium.
Add the butter to the pot. When melted, add the onion, carrots, celery, and a pinch of salt. Cook 5–6 minutes, stirring often, until softened.
Stir in the garlic and cook 30 seconds until fragrant.
Make the roux. Sprinkle the flour over the vegetables. Stir constantly for 1 minute to coat and cook off the raw flour taste. This step thickens the soup later.
Deglaze and add broth. Slowly pour in 1 cup of the chicken broth while stirring to smooth out lumps.
Scrape up any browned bits. Add the remaining broth, thyme, bay leaf, black pepper, and optional smoked paprika.
Simmer the chicken. Return the chicken and any juices to the pot. Bring to a gentle simmer, then reduce heat to medium-low.
Cover and cook 12–15 minutes, or until the chicken is just cooked through (165°F/74°C).
Shred the chicken. Remove the chicken to a cutting board and shred with two forks into bite-size pieces. Discard the bay leaf.
Add broccoli and finish simmering. Stir the broccoli florets and diced stems into the pot. Simmer uncovered 5–7 minutes, until the broccoli is tender but still bright green.
Stir in cream. Lower the heat.
Add the heavy cream and the shredded chicken. Warm gently for 2–3 minutes without boiling. Taste and season with salt and more pepper as needed.
Serve. Ladle into bowls.
Finish with a squeeze of lemon or a sprinkle of Parmesan if you like. Serve with crusty bread.