Stir water and salt together in a pot
Add chopped butter pieces and melt over medium heat
Once the mixture starts to boil, add the flour and stir immediately
Keep stirring until the dough becomes smooth and thick, about 1 to 2 minutes
Dry the dough for another 3 to 5 minutes to evaporate excess moisture
Transfer the dough to a new bowl and let it cool for about 5 minutes
Add eggs one at a time, thoroughly mixing after each addition
Add the last egg gradually by beating it separately first, then mixing in small batches
Transfer the dough into a pastry bag or plastic bag with a corner snipped off
Pipe out small rounds roughly the size of a ping-pong ball onto a baking tray, spacing them out
Dampen your fingertip and press down the pastry peaks for a smoother shape
Bake at 190°C (375°F) for about 10 minutes
Reduce temperature to 170°C (335°F) and continue baking for another 30 minutes
Do not open the oven for the first 20 minutes to avoid collapse
Combine flour, sugar, and salt in a bowl for the custard
Prepare three egg yolks at room temperature
Heat milk in a pan with sugar sprinkled at the bottom
Heat milk until small bubbles appear around the edges, but do not fully boil
Slowly add the dry ingredients to the milk while whisking fast
Keep cooking and stirring until the mixture thickens, about 1 to 2 minutes
Slowly pour about half a cup of the hot mixture into the eggs in a thin stream
Gently pour the egg mixture back into the pot a little at a time, stirring as you go
Keep stirring until the cream thickens up nicely
Cook on low heat for about 5 to 7 minutes until silky and smooth
Stir in vanilla extract if desired
Pour the custard through a sieve into a chilled container
Cover with plastic wrap pressed directly onto the surface
Refrigerate for at least 30 minutes
Whip heavy cream until it reaches stiff peaks
Gently fold the chilled custard into the whipped cream until smooth and well combined
Transfer the cream filling into a pastry bag
Fill the cooled cream puffs with the custard cream mixture
