Dating, hiking and falling in love with snow at Iowa state parks

Maquoketa Caves State Park — Adria Carpenter/Little Village

Since moving to Iowa City from Athens, Georgia last August, I’ve spent my free time relaxing in Johnson County’s parks and greenspaces, and my weekends hiking state parks and trails. Here’s a tentative ranking of the five state parks I’ve explored throughout the state so far, plus an honorable Wisconsin mention.

Lake Macbride State Park, Johnson County

A deer wanders through MacBride state park. Wednesday, Nov. 13, 2019. — Zak Neumann/Little Village

I first went to Lake MacBride in October on a second date. We hiked to what she described as a “waterfall.” In reality, it’s a spillway that divides Lake Macbride from the Iowa River. She swore that there’s usually more water in the “waterfall,” and there’s photos online to verify her claim. But during our visit, it was a slight trickle, like a leaky spigot. Still, I enjoyed the large body of water, and the shady trail leading towards it.

Looking north at Lake Macbride from Macbride Nature Recreation Area. — Zak Neumann/Little Village

Maquoketa Caves State Park, Maquoketa

Maquoketa Caves in the winter. — Adria Carpenter/Little Village

My date and I went in January, under a foot of snow, which I thought would make for great pictures. Unfortunately, the caves were closed when we arrived for bat hibernation. We explored some of the shallower caves that didn’t go underground or require lights, and we walked the forest trails. This was my first real experience with snow. Georgia snow, when it rarely appears, is fine and powdery. This snow was thick, mostly untouched for weeks, and magical. After surviving my first Midwest winter, I’m still in love with snow.

A return to Maquoketa Caves State Park in the springtime. — Adria Carpenter/Little Village
Maquoketa Caves State Park — Adria Carpenter/Little Village
Maquoketa Caves State Park — Adria Carpenter/Little Village

Backbone State Park, Dundee

We hiked the Backbone trail, which loops between Backbone Lake and Maquoketa River. The mile-long tail has jagged rock and overgrown roots. It’s narrow but beautiful. We climbed into a hollowed section of rock to hide from the wind and eat our picnic. It was “spring,” my partner said, which meant bare trees and brown grass, but no snow. Further along, we peered over the ledge to see the river, surrounded by tall, yellow grass. It reminded me of the Dead Marshes. The trail was slightly disorienting. It looped around without us realizing, and we somehow ended back at the parking lot.

Ledges State Park, Madrid

I’d like to come back in late summer or fall, when the trees and flowers are in bloom. My partner and I hiked around Canyon Road and the Table Rock Loop. The paved trail began high above the gorge, and the cold, windy air burned my face. We climbed down and failed to cross a flooded pathway. The winding stairs felt near vertical on the return trip. We stumbled onto a witchy stone house, a flood pole nearby. We’d listened to a horror podcast earlier, and the dead forest began to creep me out as we walked back to the car.

Palisades-Kepler State Park, Mount Vernon

White moth and dark leaves, September 2021 in Palisades-Kepler State Park. — Jav Ducker

We hiked the Cedar River Trail and Cedar Cliff trail, which began around a beach area. It has a rough texture somewhere between sand and silt, but the dogs didn’t seem to mind. Further along there’s a dam. Water rushed across, so we couldn’t walk along it. There are stairs, carved through the rock, which lead up to the Cliff Trail. We found a nice vantage point to hammock and read. As we left, I saw the American Gothic Barn, a replica of Grant Woods’ famous painting covering the barn’s exterior.


Devil’s Lake State Park in Sauk County, Wisconsin

A view of Devil’s Lake — Adria Carpenter/Little Village

Devil’s Lake has three things I love: large bodies of water, big trees and big rocks (in that order). The park features the Devil’s Doorway, a rock formation with a tall gap in the middle. The rocks were pinkish red with streaks of pale green. I stopped to take pictures every five minutes. From the overlook, the forest was a sea of vibrant red, orange and yellow. I was awe-struck at the sight of the lake, which covers 374 acres. Even with a wide lens, I couldn’t photograph the entire surface, and my panorama picture was too wide to fit on Instagram. If you make the three-hour drive for a weekend trip, stay at The Birdhouse Inn.

Devil’s Lake State Park — Adria Carpenter/Little Village
Adria Carpenter/Little Village
Devil’s Lake State Park — Adria Carpenter/Little Village
Devil’s Lake State Park — Adria Carpenter/Little Village
Adria Carpenter/Little Village

This article was originally published in Little Village issue 307.

[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='/dating-hiking-and-falling-in-love-with-snow-at-iowa-state-parks/#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' >Comments</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="7"/><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>