Rinse and soak the cut potatoes in cold water for 10 to 30 minutes; this removes surface starch. Dry thoroughly with a clean kitchen towel. Notice how damp potatoes steam instead of crisping.
Heat your cast-iron skillet over medium-high until shimmering. Add oil and swirl to coat. The oil should thin and move easily when ready - that surface tension helps transfer heat evenly.
Add potatoes in a single layer, avoiding overcrowding. Let them sear undisturbed for 4 to 6 minutes until an initial golden crust forms. You want a clear, audible sizzle and a brown edge before flipping.
Toss gently with tongs, flip sections to expose new surfaces, and continue cooking for another 6 to 8 minutes. Add the butter and onions after the first flip so the onions can caramelize without burning.
Season with salt and pepper while the potatoes are hot so seasonings adhere. If you notice steaming, reduce heat slightly - steam prevents crisping and leads to soggy fries.
Cook until deep golden brown and crisp, about 12 to 15 minutes total, checking texture by inserting a fork into a piece. The interior should yield easily, while the exterior remains rigid and crunchy.
Transfer to a wire rack or paper towel briefly to drain excess fat, then serve hot. I found that resting on a rack keeps the underside from becoming soft.