Recipe: Puttanesca sauce to inspire passion

Julia DeSpain/Little Village

You may have heard about pasta puttanesca, or “whore’s pasta,” as it is so problematically translated, with its legendary history as a bordello staple that served as both aphrodisiac and restorative. The truth is that no one knows precisely why puttanesca is so named, just like no one knows exactly how factual any folktale is.

When I’m simmering puttanesca sauce, though, I’m pretty sure I know: my kitchen wafts a sweaty, steamy haze through the house, which smells like garlic, sure, but there’s a funk lurking a little lower in the air. A fecundity; a salty, fertile funk, made of fermentation and brine, that is physically felt as much as it is smelled. Puttanesca, quite simply, smells like messy, exuberant sex. Italian women have historically been stereotyped as too loud, too passionate, too susceptible to our own appetites. I used to reject these stereotypes, but as I grow older, I embrace them. And, when I make puttanesca sauce, I embody them, opening my windows so the whole neighborhood knows.

Prep time: 5 minutes
Cook time: approximately 30 minutes

  • 2 tablespoon olive oil (use some of the oil from the anchovies but not all 2 tbsp)
  • 4-6 cloves garlic, sliced thin or chopped
  • 4-6 oil-packed anchovy fillets
  • 1 (28-oz) can whole peeled tomatoes
  • 1/2 cup pitted Kalamata, Gaeta or oil-cured black olives
  • 2 tablespoon capers
  • crushed red pepper flakes to taste
  • fresh Italian parsley
  • black pepper

Shopping notes: It doesn’t matter what brand of anchovies, olives, or capers you use; they don’t need to be anything fancy. There are no right or wrong answers regarding everything in this sauce except for the tomatoes. They must be whole. Diced, crushed, pureed, or otherwise altered tomatoes are too acidic for this sauce, and they don’t provide the rustic, chunky texture that is integral to puttanesca. If you only have previously adulterated tomatoes, I’ve heard that a pinch of baking soda can neutralize the acid, and I can attest that a finely grated small-to-medium carrot added early on can also improve this — though this adds a sweetness that some may not prefer.

Thinly slice or chop the garlic; nothing fancy. No need to do anything to the anchovies; they’ll break down as they heat. Chop the olives coarsely, in half or at least similarly, so that they remain significant but can distribute relatively evenly into the sauce. Everyone always says to rinse capers, but I never do; I just make sure not to get too much brine in my scoops, and this works fine.

Add oil, garlic, crushed red pepper, and anchovies to a large skillet and warm it all slow and low, stirring once in a while to incorporate the anchovies into the oil as they break down. When it’s all tender and gloriously stinky, about 5-7 minutes, open your tomato can and set it right next to the pan.

Grab each tomato from the can and crush it with your hands into the pan, one at a time. Then, dump the juice from the can into the pan, too. Add a few twists of black pepper to the tomato mixture, and then turn the heat up to medium-high. When the sauce starts to bubble aggressively, turn it down to medium and let it simmer until it’s visibly thickened, about 10 minutes. Add your olives and capers, stir, and keep simmering until the sauce is the consistency you like.

If you’re serving this over pasta, salt your pasta water heavily before cooking the pasta, and reserve about ¼ cup of salted pasta water — post-cooking, when the water has absorbed some pasta starch — into your sauce toward the end of the cooking time. If you’re not serving it with pasta, add salt when you’re adding black pepper, at the beginning of cooking. If you don’t know how you’ll serve it just yet, salt it whenever you want; just proceed with caution, as the ingredients themselves are pretty salty.

While this sauce is delicious over pasta in its conventional form, it is also a kick-ass base for other fishy stuff; add raw shrimp, salmon, or other fish while the sauce is cooking, or mix in canned tuna for more substance and staying power. It also supports all manner of vegetables, particularly cauliflower, which is easily cooked in the sauce as well. Once, I braised a pork shoulder in some puttanesca sauce, and I served it over polenta, and my friends say they still dream about it; I’d imagine braising an old baseball glove in this stuff would also somehow be magical.

[gravityform id="17" title="false" description="false" ajax="true"]
<div class='gf_browser_unknown gform_wrapper your-village-form_wrapper' id='gform_wrapper_17' ><a id='gf_17' class='gform_anchor' ></a><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_17' id='gform_17' class='your-village-form' action='/recipe-puttanesca-sauce-to-inspire-passion/#gf_17'> <div class='gform_body'><ul id='gform_fields_17' class='gform_fields top_label form_sublabel_below description_below'><li id='field_17_7' class='gfield gfield_html gfield_html_formatted gfield_no_follows_desc field_sublabel_below field_description_below gfield_visibility_visible' ><h3 style="font-weight:800; font-size:34px;">Let's get started</h3> <p style="font-size:18px;">Fill out this form and we'll contact you with information about marketing with Little Village!</p></li><li id='field_17_4' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label gfield_label_before_complex' for='input_17_4_3' ></label><div class='ginput_complex ginput_container no_prefix has_first_name no_middle_name has_last_name no_suffix gf_name_has_2 ginput_container_name gfield_trigger_change' id='input_17_4'> <span id='input_17_4_3_container' class='name_first' > <input type='text' name='input_4.3' id='input_17_4_3' value='' aria-label='First name' tabindex='2' aria-invalid="false" placeholder='First name'/> <label for='input_17_4_3' >First</label> </span> <span id='input_17_4_6_container' class='name_last' > <input type='text' name='input_4.6' id='input_17_4_6' value='' aria-label='Last name' tabindex='4' aria-invalid="false" placeholder='Last name'/> <label for='input_17_4_6' >Last</label> </span> </div></li><li id='field_17_5' class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_17_5' ><span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_text'><input name='input_5' id='input_17_5' type='text' value='' class='large' tabindex='6' placeholder='Company name' aria-required="true" aria-invalid="false" /></div></li><li id='field_17_3' class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_17_3' ><span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_email'> <input name='input_3' id='input_17_3' type='text' value='' class='large' tabindex='7' placeholder='Your email address' aria-required="true" aria-invalid="false"/> </div></li><li id='field_17_8' class='gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_' ><label class='gfield_label' for='input_17_8' >Email</label><div class='ginput_container'><input name='input_8' id='input_17_8' type='text' value='' /></div><div class='gfield_description'>This field is for validation purposes and should be left unchanged.</div></li> </ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_17' class='gform_button button' value='SUBMIT' tabindex='8' onclick='if(window["gf_submitting_17"]){return false;} window["gf_submitting_17"]=true; ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_17"]){return false;} window["gf_submitting_17"]=true; jQuery("#gform_17").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=17&amp;title=&amp;description=&amp;tabindex=1' /> <input type='hidden' class='gform_hidden' name='is_submit_17' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='17' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_17' value='WyJbXSIsIjlmNzc1YTEyZmZjNmYyODk5Mzk0NDM3ZjRlOGYyZDNmIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_17' id='gform_target_page_number_17' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_17' id='gform_source_page_number_17' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> <p style="display: none !important;"><label>&#916;<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="126"/><script>document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_17' id='gform_ajax_frame_17'>This iframe contains the logic required to handle Ajax powered Gravity Forms.</iframe> <script type='text/javascript'>jQuery(document).ready(function($){gformInitSpinner( 17, '' );jQuery('#gform_ajax_frame_17').load( function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_17');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_17').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;if(is_form){jQuery('#gform_wrapper_17').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_17').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_17').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_17').offset().top); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_17').val();gformInitSpinner( 17, '' );jQuery(document).trigger('gform_page_loaded', [17, current_page]);window['gf_submitting_17'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_17').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_17').offset().top);jQuery(document).trigger('gform_confirmation_loaded', [17]);window['gf_submitting_17'] = false;}, 50);}else{jQuery('#gform_17').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [17, current_page]);} );} );</script><script type='text/javascript'> if(typeof gf_global == 'undefined') var gf_global = {"gf_currency_config":{"name":"U.S. Dollar","symbol_left":"$","symbol_right":"","symbol_padding":"","thousand_separator":",","decimal_separator":".","decimals":2},"base_url":"https:\/\/\/wp-content\/plugins\/gravityforms-asdf111aasdfffs-nope","number_formats":[],"spinnerUrl":"https:\/\/\/wp-content\/plugins\/gravityforms-asdf111aasdfffs-nope\/images\/spinner.gif"};jQuery(document).bind('gform_post_render', function(event, formId, currentPage){if(formId == 17) {if(typeof Placeholders != 'undefined'){ Placeholders.enable(); }} } );jQuery(document).bind('gform_post_conditional_logic', function(event, formId, fields, isInit){} );</script><script type='text/javascript'> jQuery(document).ready(function(){jQuery(document).trigger('gform_post_render', [17, 1]) } ); </script>