Preheat your oven to 400°F (200°C). Line a large baking sheet with parchment paper. Preparing the tray beforehand makes it easier to pipe or spoon the dough quickly.
Add the water, butter, and salt to a medium saucepan. Heat over medium heat until the butter melts and the mixture comes to a full boil.
Remove the saucepan briefly from the heat and add all the flour at once. Stir vigorously with a wooden spoon until the mixture forms a smooth dough that pulls away from the sides of the pan.
Return the pan to low heat and stir the dough for approximately 1–2 minutes. This helps remove excess moisture and prepares the dough to absorb the eggs properly.
Transfer the dough to a mixing bowl and let it cool for about 5 minutes. Add the eggs one at a time, mixing thoroughly after each addition. The dough should become smooth, glossy, and thick enough to hold its shape.
Stir in the grated cheddar or Gruyère and Parmesan. Add black pepper, garlic powder, paprika, and chopped herbs if desired. Mix until the cheese is evenly distributed throughout the dough.
Spoon the dough into a piping bag or use two small spoons to form mounds approximately 1–1½ inches wide on the prepared baking sheet. Leave enough space between each puff to allow expansion.
Bake for 25–30 minutes, or until the puffs are well risen, golden brown, and firm on the outside. Avoid opening the oven during the first 20 minutes, as sudden temperature changes can cause them to collapse.
Allow the cheese puffs to cool for a few minutes before serving. For a crispier finish, make a tiny slit in each puff near the end of baking to release steam, then return them to the oven for another 2–3 minutes if needed.Arrange them on a serving platter and garnish with chopped parsley. Serve plain or with a creamy herb dip, tomato chutney, or your favorite savory sauce.