Dry the bread: Spread cubed bread on baking sheets and let it sit out overnight to dry.
In a hurry? Toast in a 300°F (150°C) oven for 20–30 minutes, stirring once, until the edges feel dry but not browned.
Prep the pan: Grease a 9x13-inch baking dish with butter. Set aside.
Brown the sausage: In a large skillet over medium-high heat, warm 1 tablespoon olive oil (optional) and add the sausage.
Break it into small crumbles. Cook until browned with some crisp bits, about 6–8 minutes. Transfer to a plate, leaving the drippings in the pan.
Cook the aromatics: Reduce heat to medium.
Add 4 tablespoons butter to the pan. When melted, add onion, celery, and a pinch of salt. Cook, stirring often, until soft and translucent, 8–10 minutes.
Stir in garlic and cook 1 minute more.
Add the herbs: Stir in sage, thyme, and half the parsley. Cook 30 seconds to bloom the flavors.
Combine with bread: In a large bowl, add the dried bread cubes, cooked sausage, and the onion-celery mixture. Toss gently to distribute everything evenly.
Moisten the mixture: Whisk the warm stock with the beaten eggs.
Pour about 2 cups over the bread mixture and toss. The bread should feel evenly damp but not soggy. Add more stock a little at a time if needed.
Season: Add salt and pepper to taste.
Remember, sausage and stock can be salty, so season gradually. Stir in any optional add-ins now.
Rest: Let the mixture sit 5–10 minutes so the bread absorbs the liquid. If there are dry patches, sprinkle on a bit more stock.
Transfer and dot with butter: Spoon the mixture into the prepared baking dish.
Melt the remaining 2 tablespoons butter and drizzle over the top, or dot small pieces across the surface for extra browning.
Bake covered, then uncovered: Cover tightly with foil and bake at 350°F (175°C) for 25 minutes. Remove foil and bake another 20–25 minutes until the top is golden and crisp and the center is hot and set.
Finish and serve: Sprinkle with the remaining parsley. Let rest 5–10 minutes before serving so it slices cleanly and the flavors settle.