In the bowl of a stand mixer, combine the instant yeast and warm water and let sit 10 minutes until foamy.
Add the sugar, salt, softened butter, egg, egg yolk, vanilla extract, and almond extract to the yeast mixture and mix briefly to combine using the dough hook on low speed.
Add 2 1/2 cups of the all-purpose flour to the mixer, about 1/2 cup at a time, mixing on low until the dough starts to form; if very sticky, add additional flour 1 tablespoon at a time until dough pulls away from the bowl but remains slightly tacky.
Transfer the dough to a lightly greased bowl, cover tightly with plastic wrap, and place in a warm, draft-free spot to rise for about 2 hours, until puffed.
Punch down the dough gently, wrap it in plastic, and refrigerate for 6–8 hours or overnight.
On a lightly floured surface, roll the chilled dough to about 1/2-inch thickness. Cut donut rounds with a large cutter and cut centers with a ~1-inch cutter to make holes. Place donuts and holes on a parchment-lined baking sheet, lightly cover with plastic wrap and a towel, and let rest 1 hour (no more than 1 hour).
Heat 2–3 inches of vegetable oil in a large Dutch oven over medium heat to 350°F (use a thermometer). Fry donuts in batches without overcrowding, cooking until golden brown on each side.
Use a slotted spoon to transfer fried donuts to a paper towel–lined baking sheet set over a cooling rack to drain; repeat with remaining donuts.
Whisk together powdered sugar, milk, vanilla extract, and optional butter extract until smooth and lump-free to make the glaze.
Dip each slightly cooled donut into the glaze, flip to coat both sides, then return to the cooling rack and let the glaze set about 10 minutes.