Preheat oven to 375 degrees. In a large saucepan, combine butter, sugar, salt, and 2 cups water. Bring to a boil over medium-high heat, and immediately remove from heat. Using a wooden spoon, quickly stir in flour until combined. Return pan to medium-high heat, and cook, stirring constantly, until mixture pulls away from sides and a film forms on the bottom of the pan, about 3 minutes.
Transfer mixture to the bowl of an electric mixer fitted with the paddle attachment. Mix on low speed until slightly cooled, about 1 minute. Increase speed to medium, and add whole eggs, one at a time, beating until each is incorporated before adding the next. Test batter by touching it with your finger and lifting to form a soft peak. If a soft peak does not form, the batter needs more egg. If you have added all the whole eggs and batter still does not form a soft peak, lightly beat remaining egg whites, and add a little at a time.
Immediately transfer to a pastry bag fitted with a 5/8-inch plain tip (such as an Ateco #808), and pipe puffs onto a parchment paper or Silpat-lined baking sheet 1 inch apart. Gently smooth any pointed peaks with a moistened finger, rounding tops to ensure even rising. Bake, rotating sheets halfway through, until puffs are golden brown, 20 to 25 minutes. Transfer sheets to wire racks to cool completely.