Warm the milk, sugar, whole coffee beans, salt, and 1/2 cup of the cream in a medium saucepan. Once the mixture is warm, cover, remove from the heat, and let steep at room temperature for 1 hour.: As the mixture warms you will notice the sugar dissolving with a soft clink against the bottom of the pan and a rising coffee aroma that becomes more intense, floral and roasted at once. This gentle warming helps draw oils and soluble flavor from the beans, so keep the heat low enough to avoid boiling, which can volatilize delicate notes. A common mistake is bringing it to a rapid boil, which flattens the coffee profile and risks scorching the dairy. Watch for small steam wisps and a fragrant bloom, then remove from heat so the steep extracts best flavor compounds.
Rewarm the coffee-infused milk mixture. Pour the remaining 1 cup cream into a large bowl and set a mesh strainer on top. In a separate medium bowl, whisk together the egg yolks. Slowly pour the warm coffee mixture into the egg yolks, whisking constantly, then scrape the warmed egg yolks back into the saucepan.: During this rest the aroma will deepen and the color will darken slightly as the beans continue to infuse the dairy, producing a concentrated flavor without extra bitterness. I like to cover the saucepan to trap aromatic oils, but avoid a hot environment which accelerates over extraction. Letting it sit too long can make the infusion astringent, so stick to the hour for balanced intensity.
Stir the mixture constantly over medium heat with a heatproof spatula, scraping the bottom as you stir, until the mixture thickens and coats the spatula (and registers 170 degrees F on an instant-read thermometer). Pour the custard through the strainer and stir it into the cream. Press on the coffee beans in the strainer to extract as much of the coffee flavor as possible, then discard the beans. Mix in the vanilla and the finely ground espresso and stir until cool over an ice bath.: Bringing the steeped mixture back to warmth loosens the oils again so they move into solution, and you will sense a renewed coffee presence. Pour the remaining 1 cup cream into a large bowl and set a mesh strainer on top to catch the beans later. The warm aroma will fill the kitchen, and steam will carry the roast scent. Heat gently to tactile warmth, not a boil, to protect the dairy proteins. Avoid overheating which can cook the cream and alter texture.
Chill the mixture thoroughly in the refrigerator, then freeze it in your ice cream maker according to the manufacturer's instructions.: The yolks should become smooth and slightly pale as you whisk, taking on a satiny sheen. This aeration helps them temper more evenly later. A frequent error is rushing this step and ending up with lumps when hot liquid is added; take your time to whisk until the yolks are homogeneous.
Slowly pour the warm coffee mixture into the egg yolks, whisking constantly, then scrape the warmed egg yolks back into the saucepan: The slow pouring is where you protect the yolks from curdling, and you should feel the bowl warm in your hands without shock. This tempering step prevents scrambled bits and builds a unified custard base. If you pour too quickly the yolks will seize and you will need to strain and salvage, so keep a steady stream and continuous whisking.
Stir the mixture constantly over medium heat with a heatproof spatula, scraping the bottom as you stir, until the mixture thickens and coats the spatula (and registers 170 degrees F on an instant-read thermometer): You will notice the sound change to a gentle simmer and the aroma intensify; the custard will visibly thicken and leave an even ribbon on the spatula. Constant stirring prevents hotspots and ensures even cooking, which is crucial for a smooth texture. The main trap here is walking away, which leads to curdling or grainy texture. Aim for that 170 degrees F target and remove promptly.
Pour the custard through the strainer and stir it into the cream: The strained custard will be glossy and thick, and as it blends into the remaining cream it will lighten slightly in color while becoming silkier. Press on the coffee beans in the strainer to extract concentrated flavor, but do so gently to avoid releasing bitter compounds. A mistake is vigorous pressing which can force grounds through, creating gritty bits; press evenly and discard the spent beans.
Press on the coffee beans in the strainer to extract as much of the coffee flavor as possible, then discard the beans: The extracted liquid will smell most intense now, carrying a rounded roast note. This final pressing is about efficiency: you want every bit of aromatic oil but none of the coarse grit. If you notice any sediment in the pan, pass it through a finer sieve to ensure a smooth base.
Mix in the vanilla and the finely ground espresso and stir until cool over an ice bath: Adding the vanilla extract and the finely ground espresso at this stage layers sweetness and concentrated coffee punch. Stirring over an ice bath accelerates cooling and prevents bacterial growth while preserving texture. You should feel the bowl cool down within minutes; stop stirring once the base is noticeably cooler. The pitfall is cooling too slowly, which can lead to graininess, so be decisive with the ice bath.
Chill the mixture thoroughly in the refrigerator: A deep chill not only improves texture but allows flavors to harmonize; the aromas blend and become more integrated as the fats solidify slightly. I usually chill for several hours or overnight for best results. Rushing to churn warm base risks poor texture and ice crystal formation, so be patient and ensure the mixture is cold throughout.
Freeze it in your ice cream maker according to the manufacturer's instructions: As the machine churns, air will be incorporated and the base will thicken into soft serve, revealing a glossy, velvety surface and strong coffee scent. Follow your maker's guidelines for churn time to achieve the right overrun; under-churning yields dense ice cream, over-churning can make it grainy. After churning, harden in the freezer until scoopable.