Mix the softened butter and sugar in a small bowl until smooth, then stir in the flour until a soft dough forms.
Roll the dough between two sheets of parchment paper to about 1/8 inch thick, freeze until firm, then cut into 2-inch circles and set aside in the freezer.
In a saucepan, bring the water, butter, and salt to a boil, then reduce the heat and stir in the flour all at once until a ball of dough forms and pulls away from the sides.
Keep cooking the dough over low heat for 4 to 5 minutes, stirring constantly, until it dries out a bit and leaves a thin film on the bottom of the pan.
Transfer the dough to a bowl and let it cool slightly, then beat in the eggs one at a time, mixing well between each; add part of a fourth egg only if needed until the dough is glossy and forms a “V” when lifted.
Pipe the dough into small mounds on a parchment-lined baking sheet and place a frozen craquelin circle on top of each one.
Bake at 375°F (190°C) for 10 minutes, then lower the heat to 335°F (170°C) without opening the oven and bake another 25 to 30 minutes until puffed and golden.
While they cool, whisk together the flour, sugar, and salt for the custard; heat the milk in a saucepan until steaming, then slowly whisk the dry mix into the milk and cook until thickened.
In a separate bowl, beat the egg yolks, then gradually add a bit of the hot mixture to temper them; pour everything back into the pan and cook 2 to 3 more minutes until smooth, then chill with plastic wrap pressed to the surface.
Whip the cream and sugar in a cold bowl until stiff peaks form, then fold into the chilled custard; poke a hole in the bottom of each puff, pipe in the filling, and enjoy right away or chill until serving.