Pour the warm milk into a small bowl, sprinkle the yeast on top, and stir gently. Let stand in a warm spot until foamy, 5-10 minutes.
Transfer the yeast mixture to the bowl of a stand mixer fitted with the paddle attachment. Add the shortening, egg, sugar, salt, and 1 ½ cups of the flour and beat on low speed until combined, about 2 minutes. Add the remaining 1 ½ cups flour, raise the speed to medium, and beat until incorporated, about 30 seconds. Switch to the dough hook and beat on medium speed until the dough is smooth and pulls away from the bowl, 3-4 minutes. Transfer to a well-oiled bowl, cover with plastic wrap or a kitchen towel, and let the dough rise in a warm spot until doubled in size, about 1 hour.
Punch down the dough, turn it out onto a well-floured work surface, and roll out ½ inch thick. Using a doughnut cutter or 2 different-sized round cutters (3 ½ inch and 1 inch), cut out doughnuts and holes. Transfer to a well-floured baking sheet, cover lightly with plastic wrap or a kitchen towel, and let rise in a warm spot until doubled in size, about 1 hour.
To fry the doughnuts, heat the oil over medium-high until it registers 325°F on a deep-frying thermometer. When the doughnuts are cooked through (cut one open to test), 1-2 minutes per side (holes take less time), use a slotted spoon to transfer to a cooling rack or prepared baking sheet. Let cool for 10 minutes before glazing.
Courtesy of The Doughnut Cookbook by Williams-Sonoma Test Kitchen