def METHOD_NAME(data, ax=None):
    """A utility function for plotting labelled, filled contours with black
    contour outlines marking each level.
    Parameters
    ----------
    data : :class:`xarray.DataArray`:
        A two-dimensional array with longitude and latitude as dimensions.
    ax : :class:`cartopy.mpl.geoaxes.GeoAxesSubplot`:
        An axes object from Matplotlib package with projection from Cartopy package.
    Returns
    -------
    handles : :class:`dict`:
        A dictionary containing three objects corresponding to the filled contours, the black
        contour outlines, and the contour labels.
    Description
    -----------
        Produce labeled and filled contour on the world map with tickmarks and
        tick labels.
    """
    handles = dict()
    handles["filled"] = data.plot.contourf(
        ax=ax,  # this is the axes we want to plot to
        cmap='viridis',  # our colormap
        levels=levels,  # contour levels specified outside this function
        transform=projection,  # data projection
        add_colorbar=False,  # don't add individual colorbars for each plot call
        add_labels=False,  # turn off xarray's automatic Lat, lon labels
    )
    # matplotlib's "contourf" doesn't let you specify "edgecolors",
    # instead we use matplotlib's "contour" to plot contour lines on top of the filled contours
    handles["contour"] = data.plot.contour(
        ax=ax,
        levels=levels,
        colors="black",  # note plurals in this and following kwargs
        linestyles="-",
        linewidths=0.5,
        add_labels=False,  # again turn off automatic labels
    )
    # Label the contours
    ax.clabel(
        handles["contour"],
        levels=np.arange(-10, 50, 10),
        fontsize=8,
        fmt="%.0f",  # Turn off decimal points
    )
    # Add coastlines and make them semitransparent for plot legibility
    ax.coastlines(linewidth=0.5, alpha=0.75)
    # Use geocat.viz.util convenience function to set axes tick values
    gv.set_axes_limits_and_ticks(ax,
                                 xticks=np.arange(-180, 181, 30),
                                 yticks=np.arange(-90, 91, 30))
    # Use geocat.viz.util convenience function to add minor and major tick lines
    gv.add_major_minor_ticks(ax, labelsize=8)
    # Use geocat.viz.util convenience function to make plots look like NCL plots by using latitude, longitude tick labels
    gv.add_lat_lon_ticklabels(ax)
    # Remove degree symbol from tick labels
    ax.yaxis.set_major_formatter(LatitudeFormatter(degree_symbol=''))
    ax.xaxis.set_major_formatter(LongitudeFormatter(degree_symbol=''))
    # Use geocat.viz.util convenience function to add main title as well as titles to left and right of the plot axes.
    gv.set_titles_and_labels(ax,
                             lefttitle=data.attrs['long_name'],
                             lefttitlefontsize=10,
                             righttitle=data.attrs['units'],
                             righttitlefontsize=10)
    return handles