Prepare the wet ingredients. In a large mixing bowl, cream the softened butter and granulated sugar until light and fluffy (about 2–3 minutes). Then, add the eggs, one at a time, beating well after each addition to make sure they’re fully combined. Next, mix in the vanilla extract.
Combine the dry ingredients. Whisk together the flour, baking powder, baking soda, and salt in a medium bowl.
Mix the wet and dry ingredients. Add one-third of the dry ingredients to the butter mixture and mix until combined. Then, pour in half of the milk or half-and-half, mixing gently. Mix the remaining dry ingredients and milk in two more additions until a soft dough forms. Avoid overmixing to keep the cookies tender.
Chill the dough. Divide the dough in half. Then, wrap each half into a flat disk tightly in plastic wrap. Chill the dough in the refrigerator for at least 2 hours or overnight for best results.
Roll the dough. Preheat your oven to 375°F (190°C). Line baking sheets with parchment paper or silicone baking mats. Roll out one dough disk on a lightly floured surface to a ¼-inch thickness. Flour the surface, rolling pin, and dough to prevent sticking.
Cut the dough. Use cookie cutters to cut out desired shapes, transferring them to the prepared baking sheets with about 2 inches of space between each cookie.
Bake. Bake the cookies in the oven for 11–12 minutes or until the edges are lightly golden. Let the cookies cool on the baking sheets for 5 minutes before transferring them to a wire rack to cool completely.
Prepare the buttercream icing. In a large bowl, beat the powdered sugar, softened butter, and shortening until smooth and fluffy. Slowly add 1 tablespoon of milk or cream and the vanilla or other extract. Mix well, adding more milk as needed to reach the desired consistency. Divide and tint the frosting with food coloring if desired.
Decorate. Frost the cooled cookies using a knife or piping bag. Add sprinkles or other decorations while the icing is still wet. Allow the icing to set completely before storing.