Place chicken pieces in a large bowl. Pour buttermilk over chicken, ensuring all pieces are coated. Cover and refrigerate for at least 4 hours, or preferably overnight.
In a shallow dish, whisk together eggs. In another shallow dish, combine flour, salt, pepper, paprika, garlic powder, and onion powder.
Remove chicken from buttermilk, letting excess drip off. Dip each piece into the beaten eggs, then dredge thoroughly in the flour mixture, pressing to ensure a good coating. Place coated chicken on a wire rack and let it sit for 15-20 minutes to allow the coating to set.
In a large, heavy skillet or Dutch oven, heat about 2-3 inches of vegetable oil or shortening to 350°F (175°C).
Carefully place chicken pieces into the hot oil, skin-side down, without overcrowding the skillet. Fry in batches for about 6-8 minutes per side, or until golden brown and cooked through. The internal temperature should reach 165°F (74°C).
Remove chicken from skillet and place on a clean wire rack set over a baking sheet to drain excess oil.
Serve hot.
Notes
For extra crispy skin, you can double-coat the chicken: dip in egg, then flour, then egg again, then flour again.
Ensure the oil temperature remains consistent for even cooking. If it gets too hot, the outside will burn before the inside is cooked.
If you don’t have buttermilk, you can make a substitute by mixing 2 cups of milk with 2 tablespoons of lemon juice or white vinegar and letting it sit for 5-10 minutes.