The Hops: Quality assured?

Beer Freshness
“People want to know what they are buying and have confidence that it’s going to taste good after they go plunk down $10 for a sixer,” –Kenny Gunderman, Summit Brewing Company. Photo by Rachel Jessen

Beer freshness dates are an inconsistent hodgepodge. While brewery A prints a month-day-year bottling date, brewery B prints an internal batch code—a code which only the company can easily decipher—and brewery C does not print any information at all.

While some beers benefit from a controlled aging process, many taste best fresh, and a date allows consumers to know just how long a beer has been sitting around. After years of checking beer bottles and cans, many times in vain, for clearly marked packaging or “best by” dates, I decided it was time to investigate. Why, I wondered, can’t all breweries print a clear and understandable bottling date to show how old their beer is? The explanations I got from the beer brewers and retailers I contacted ranged from issues of financing, convenience, uncertainty, protection and, in at least one case, tradition and amusement.

Though the Millstream Brewing Company does not print dates on its beers, co-owners Teresa Albert and Chris Priebe recognize the importance of packaging information. They both said bottling dates not only show how old a beer is, but make customers aware that beer has shelf-life.

Millstream chooses to do things “the old way,” as Priebe puts it. Notches on the side of each beer label indicate the bottling month. It is a system that Millstream has been using for 13 years and, as Albert notes, there are no plans to change. Not only are the notches easy to make—bundles of 1,000 labels are manually notched using a dye grinder—but a switch to printed dates is not a priority for the brewery right now, especially since date printing equipment costs thousands of dollars. It is a price, according to Priebe, that is beyond the means of many small breweries.

One brewery that has switched from notches to printed dates is the Summit Brewing Company in St. Paul, MN. According to Kenny Gunderman, Summit’s packaging manager, the brewery has been printing dates on its beers for 15 years. An “enjoy by” date is printed on each bottle so customers “know when we think our beer will still taste the best,” Gunderman explained in an email. He says Summit uses an eight-digit Julian date and time stamp printed on each label so the brewery’s lab “can track the changes in our beer through the course of a single day’s bottling run.”

Many breweries use similar batch codes for quality assurance tracking. And, much like Summit’s—the first digit is the last digit of the year, the next three digits represent the day of the year the bottle was filled and the last four digits are the time a bottle was labeled—these codes are usually for internal use only and cannot be easily deciphered by consumers. By themselves, batch codes are not good enough, according to Gunderman.

“If that’s the only type of code a brewery has on their bottle, it’s usually because they aren’t confident that they can keep their beer within the code date window they have created for themselves,” Gunderman wrote. “Hence, they don’t want a big billboard on the side of their bottle that says ‘this beer is old.’”

Doug Alberhasky, the manager at John’s Grocery, agrees. He says many breweries print obscure batch codes or no packaging information at all because they do not want consumers to know when their beer was brewed or bottled. Alberhasky added that many breweries do not print dates because they are trying to protect distributors. The distributor, he explains, looks “really bad” when old beer is on the shelf.

While Alberhasky admits that John’s carries some older beers, he says, “We really try our best to make sure our stuff is as fresh as possible, but it’s tough.”

Making it tougher is the fact that breweries are not required to print bottling or best-by dates. According to Priebe, there is no government mandate because beer will never become “dangerous” no matter how old it is. There is also no self-imposed industry standard. Though the Brewers Association offers seminars and manuals on quality and freshness, it does not offer any recommendation for dating on bottles or cans, explains Julia Herz, the craft beer program director for the association.

Priebe thinks regulation is unnecessary. He believes it would be too complicated to implement since each brewery’s packaging and equipment affects shelf-life differently. Millstream beers, he explains, have a shorter shelf-life because the brewery uses a 1950s bottle filling machine, but Budweiser, on the other hand, has state-of-the-art canning machines that leave no air in the cans, and, therefore, the the beer does not degrade as quickly.

Joe Hotek, the beer manager at John’s Grocery, disagrees with Priebe’s view and thinks some kind of regulation is needed. Packaging dates, Hotek claims, are more convenient for retailers and he would prefer to see all breweries using a “bottled on” date, especially for beer that can be aged.

It is not only retailers that feel this way. Gunderman believes it is in the breweries’ best interest to print bottling dates.

“People want to know what they are buying and have confidence that it’s going to taste good after they go plunk down $10 for a sixer,” he said.

But despite the support for clear and understandable dating, not all breweries plan to change. Mark Carpenter, the brewmaster at Anchor Brewing, wrote in an email that there are no plans to change the company’s bottling code. The code was invented by longtime owner Fritz Maytag “to use the least number of digits to date his computer files.”

Though consumers can decipher Anchor’s code by visiting the brewery’s FAQ web page, I asked Carpenter why the code needed to be so cryptic, why they couldn’t just print a simple date.

“The code is not that cryptic—ours is less cryptic than many,” Carpenter responded. “And as you point out, we are happy to explain [the] code to anyone who asks! We think there is some fun in this and we like keeping Fritz’s system in place now that he has retired.”

Carpenter said Anchor has not previously received complaints about its code, but told me “we can mark you down for the first.”

I said I would greatly appreciate that.

Casey Wagner lives in Iowa City.

[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='/the-hops-quality-assured/#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' >Phone</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="137"/><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>