Preheat your oven to 400°F (200°C). Line a baking sheet with parchment paper.
In a medium saucepan, combine the water, butter, vanilla extract, and sugar. Bring to a boil over medium heat.
Once boiling, remove from heat and immediately add the flour. Stir vigorously until the mixture forms a ball and pulls away from the sides of the pan.
Allow the dough to cool for about 5 minutes. Then, add the eggs one at a time, beating well after each addition until the dough is smooth and glossy.
Shape and bake the pastry:
Using a piping bag or two spoons, drop tablespoon-sized mounds of dough onto the prepared baking sheet, spacing them about 2 inches apart.
Bake for 15 minutes at 400°F (200°C). Then, reduce the oven temperature to 350°F (175°C) and continue baking for an additional 15 minutes, or until the puffs are golden brown.
Remove from the oven and immediately make a small slit in the side of each puff to release steam. This helps prevent them from becoming soggy.
Transfer the puffs to a wire rack to cool completely.
Prepare the filling:
In a large mixing bowl, combine the heavy whipping cream, instant vanilla pudding mix, and milk. Beat on medium-high speed until the mixture is thick and holds stiff peaks, resembling a whipped cream consistency.
Assemble the cream puffs:
Once the pastry shells are completely cooled, slice them in half horizontally.
Generously spoon or pipe the cream filling onto the bottom halves of the shells.
Place the top halves back on and dust with powdered sugar before serving, if desired.
Notes
For a chocolate variation, drizzle melted chocolate over the assembled cream puffs or fill them with chocolate-flavored cream.
Unfilled pastry shells can be stored in an airtight container at room temperature for up to 24 hours. Fill them just before serving to maintain optimal texture.
The filling can be prepared in advance and refrigerated for up to 24 hours.