def start_child_span(parent_span, operation_name, tags=None, start_time=None):
    """A shorthand method that starts a `child_of` :class:`Span` for a given
    parent :class:`Span`.

    Equivalent to calling::

        parent_span.tracer().start_span(
            operation_name,
            references=opentracing.child_of(parent_span.context),
            tags=tags,
            start_time=start_time)

    :param parent_span: the :class:`Span` which will act as the parent in the
        returned :class:`Span`\\ s child_of reference.
    :type parent_span: Span

    :param operation_name: the operation name for the child :class:`Span`
        instance
    :type operation_name: str

    :param tags: optional dict of :class:`Span` tags. The caller gives up
        ownership of that dict, because the :class:`Tracer` may use it as-is to
        avoid extra data copying.
    :type tags: dict

    :param start_time: an explicit :class:`Span` start time as a unix timestamp
        per :meth:`time.time()`.
    :type start_time: float

    :rtype: Span
    :return: an already-started :class:`Span` instance.
    """
    return parent_span.tracer.start_span(
        operation_name=operation_name,
        child_of=parent_span,
        tags=tags,
        start_time=start_time
    )