<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
    http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.
-->
<section xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="5.0" xmlns:xl="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude"
    xsi:schemaLocation="http://docbook.org/ns/docbook ../../../content/dtd/docbook.xsd"
    xmlns="http://docbook.org/ns/docbook">
    <title>Product Backlog Item Overview</title>
    <section>
        <title></title>
        <para>
            On the product overview there are 8 sub menus -Overview,Update,Backlog,Billing,Default Tasks,Categories,
            Content,and Communications
        </para>
        <para>
            The product overview consist of:
            <orderedlist>
                <listitem><para>Product Backlog Item Information</para></listitem>
                <listitem><para>Product Backlog Email messages</para></listitem>
                <listitem><para>Revisions List</para></listitem>
                <listitem><para>Product Backlog Item Status List</para></listitem>
                <listitem><para>Tasks</para></listitem>
                <listitem><para>E-mail</para></listitem>
                <listitem><para>Backlog Item Content List</para></listitem>
            </orderedlist>
        </para>
    </section>
    <section>
        <title>Product Backlog Item Information</title>
        <para>
            Show the Product Backlog Item information.
        </para>
    </section>
    <section>
        <title>Product Backlog Email messages</title>
        <para>
            Show Product Backlog Email .
        </para>
    </section>
    <section>
        <title>Revisions List</title>
        <para>
            
        </para>
    </section>
    <section>
        <title>Product Backlog Item Status List</title>
        <para>
            Show the Product Backlog Item Status since the Product Backlog Item have created.
        </para>
    </section>
    <section>
        <title>Tasks</title>
        <para>
            List of task in the Product Backlog.
        </para>
    </section>
    <section>
        <title>E-mail</title>
        <para>
            List of the E-mails that belong to Product Backlog Item.
        </para>
    </section>
    <section>
        <title>Backlog Item Content List</title>
        <para>
            List of the E-mails that belong to Product Backlog Item.
        </para>
    </section>
</section>
