The Best Pie Is Pecan
By
Chris Crowley ,
senior writer at Grub Street
who covers the people who work and eat in New York City’s restaurants
Save this article to read it later.
Find this story in your account’s ‘Saved for Later’ section.
One pie to rule them all.
Photo: Wanwisa Hernandez/Getty Images/EyeEm
It’s Thanksgiving, a time to gather, eat too much, and argue with your family about their controversial opinions. It’s not always fun, but at least there will be dessert, and on Thanksgiving, dessert means pie, and at my house — and hopefully yours — it means pecan pie, which is the best pie.
The reasons are as clear as they are simple. The purpose of any pie, of course, is to elevate its star ingredient. The best pies transform otherwise fine ingredients into the best possible versions of themselves. Cherry pie, for example, is great, and it’s better than raw cherries. But raw cherries are also pretty good, so it doesn’t take much heavy lifting to make them better. Key limes, on the other hand, are inedible, yet key lime pie is one of mankind’s great achievements. That brings us to pecans: one of the worst nuts. People will eat peanuts, cashews, and almonds by the handful. Meanwhile, raw-pecan people are, if we’re being generous, outliers, and probably best avoided. A pecan-pie person, though? That is a person who knows what’s up, because they know what all pecan-pie people know: that the addition of vanilla, eggs, brown sugar, a little bit of heat, and a buttery, flakey crust will turn these frankly poor nuts into the only dessert that’s worth eating after an hours-long autumnal feast.
Sure, there are other pies that people like to eat on Thanksgiving. If there is such a thing as too wholesome, it is apple pie. It’s comforting, familiar, and incredibly boring. Apple pie is the Hallmark movie of desserts. It’s too basic to be exciting.
Speaking of basic, the mere existence of “pumpkin-spice latte season” should be enough to disqualify pumpkin pie from any best-pie discussion. Pumpkin pie is also not a vehicle for pumpkin improvement. It is a vehicle for cinnamon, nutmeg, and clove — all fine spices, but hardly things that are made better solely by their inclusion in a pie. If a pie’s main flavors can be successfully reduced into a seasonal coffee gimmick, they’d better work in a pie.
Pecan pie is all about the pecan life. It does not require a scoop of ice cream, or a dollop of whipped cream, or, God forbid, something like a slice of cheddar (another knock against apple pie). Pecan pie is a pie that stands on its own. It has the gooeyness of a candy bar, the crunchy texture and warm flavor of toasted nuts, and that flaky, buttery crust.
Having just laid out the ironclad argument for why pecan pie is objectively the best pie, I will also confess that I have an admittedly subjective soft-spot for pecan pie, because my mom, a talented baker, has made it for Thanksgiving every year since I was in high school. While everyone else gears up for the potatoes, or for the day after’s leftovers, I spend November looking forward to that pie, because I know that no matter what else happens, it will be there and it won’t let me down — and what more could you want from Thanksgiving?
The Best Pie Is Pecan
Things you buy through our links may earn Vox Media a commission.
Latest News from Grub Street
the grub street diet
Yesterday at 6:00 a.m.
Erik Piepenburg Used to Man-hunt at Veselka
“The dining room isn’t as gay as when I went there in the ‘90s, but whatever.”
By Paula Aceves
1.5x speed
June 3, 2025
What Keith McNally Is Listening To
“Because this is a dangerous time in America, I gravitate to podcasts which concentrate on the lunacy of the Trump administration.”
chef shuffle
June 3, 2025
Victoria Blamey Is Heading to Il Buco
The acclaimed chef will be culinary director for Donna Lennard’s family of Italian restaurants.
openings
June 3, 2025
Dell’anima Returns to the West Village
The 2010s favorite is back where it belongs.
By Anna Hezel
where to eat
June 2, 2025
Where to Eat in June
The best restaurants for right now.
By Grub Street
the approval matrix
May 30, 2025
The Approval Matrix: Elon’s Big, Beautiful Crash
Our guide to what’s highbrow, lowbrow, brilliant, and despicable.
gifts
May 30, 2025
The Best Gifts for Beer Lovers, According to Brewers and Beer Lovers
Because you can do better than a novelty beer helmet.
the grub street diet
May 30, 2025
Restaurateur Natalie Johnson Romanticizes Sandwiches From the ’90s
“We do a seared tuna burger with wasabi-soy glaze, and it’s just what I want to be eating.”
By Alan Sytsma
announcements
May 29, 2025
Introducing Emily Gould, Dinner Party ’s New Host
Here’s what to expect from the newsletter’s next era.
father's day gifts
May 29, 2025
The Best Gifts for Foodie Dads
Foolproof ideas for the dad who says the quickest way to his heart is through his stomach.
restaurant review
May 29, 2025
Bánh Anh Em Makes Food With Some Tooth
The sandwiches and soups are chewy, crunchy, crispy, and crackly — usually all at once.
By Matthew Schneier
coming soon
May 28, 2025
Millions of People Watch Cugine’s Videos. Will They Eat His Chicken Cutlets?
The social-media food star is opening a café in Brooklyn. “I needed to do something new,” he says.
By Jason Diamond
comebacks
May 27, 2025
This City Is Ready for Some Fro-Yo
Pistachio drizzles top artisanal swirls while once-forgotten chains plot a return to prominence. Is the next big yogurt boom here at last?
By Rachel Sugar
the grub street diet
May 23, 2025
Erika Henningsen Hates a Book-Length Menu
“I’m talking to you, Cheesecake Factory.”
By Zach Schiffman
talking to
May 22, 2025
The Chef Who Opened His First Restaurant at 46
Gregory Gourdet won awards for his restaurant and found fame on Top Chef . He’s back in New York to launch his next chapter on the cusp of turning 50.
By Adam Platt
staffing up
May 21, 2025
Where Have All the Good GMs Gone?
Managers keep restaurants running, and they are more in demand than ever. Newfound leverage means higher salaries and even pre-approved time off.
By Chris Crowley
openings
May 20, 2025
A Star From France Is Opening a Properly Luxe Restaurant in the West Village
Le Chêne, from Alexia Duchêne, debuts this week.
By Tammie Teclemariam
coming soon
May 19, 2025
One of King’s Owners Is Going Solo at Lei
Annie Shi’s new Chinatown wine bar is something different.
By Megan Krigbaum
the approval matrix
May 16, 2025
The Approval Matrix: We’re Leaving on a Qatari Payola Plane
Our guide to what’s highbrow, lowbrow, brilliant, and despicable.
the grub street diet
May 16, 2025
Adam Roberts Is Particular About His Fish
“You can tell a lot about a person by how they make their tuna.”
By Emma Alpern
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"5":5,"6":6,"19":19,"39":39,"45":45}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(3),auth=require(19),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(5),appendLandingPageParams=require(144),pageUri=require(134).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let i=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||i.classList.remove("open")})}function gtmSendReport(e,n,t){let i={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(i.eventLabel=n.href),gtm.reportNow(i)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const i=t.split("?"),o=new URLSearchParams(i[1]);for(let e of n.entries())o.set(e[0],e[1]);t=`${i[0]}?${o.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),auth.isMobileAppRequest()&&e.classList.add("nymag-app"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"3":3,"5":5,"19":19,"134":134,"144":144}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(231),_each=require(419),Fingerprint2=require(418),DS=require(417),Eventify=require(257);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"231":231,"257":257,"417":417,"418":418,"419":419}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(128),_forEach=require(117),_isString=require(279),_intersectionWith=require(420),_isEqual=require(285),_each=require(419),_debounce=require(161),_sortBy=require(215),page=require(134),visit=require(124);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"117":117,"124":124,"128":128,"134":134,"161":161,"215":215,"279":279,"285":285,"419":419,"420":420}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]