= A Guide To Proposal Creation
//Licensed 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.
:jbake-type: proposalGuide
:jbake-status: published
:idprefix:
:toc:
:imagesdir: ../images/

This document provides guidance only. The policy is found link:/incubation/Incubation_Policy.html[here].

== Abstract

This document describes approaches to drawing up a proposal for submission. It is not an inflexible standard but represents a consensus condensed from discussions on the link:lists.html#general+at+incubator.apache.org[general mailing list]. Feel free to modify the template when submitting your proposal.

=== Background
Entry to the incubator is a process decided by a vote.
The proposal is the document upon which the link:/incubation/Roles_and_Responsibilities.html#Sponsor[Sponsor] (usually the incubator) votes.
It's not required to have a good proposal, but having a good proposal will increase the chances of a positive outcome.

Proposals to the incubator generate attention. The link:lists.html#general+at+incubator.apache.org[general mailing list] is open, widely discussed, and well indexed. It is a very public space.
A good proposal should target the wider audience and not just the link:/incubation/Roles_and_Responsibilities.html#Incubator+Project+Management+Committee+%28PMC%29[IPMC].
Use this time to engage and inform potential link:participation.html#developer[developers] and link:participation.html#user[users]. 

A good proposal should shape the future evolution of the project. Still, each proposal only captures the particular details at birth. It is understood that projects change and evolve. 

=== Continuous Improvement
The incubation process is continuously evolving.
Hopefully, this will help newer projects to be even stronger and more successful than existing ones. 
One consequence of this approach is that what previous podlings have done, even those that are now TLP,  may not be a reliable guide.
Another is that documentation may be a little outdated.

=== Help Wanted!
Help to improve the system by posting a patch for this document to the link:https://issues.apache.org/jira/browse/INCUBATOR[incubator section] of link:http://issues.apache.org/jira[JIRA] or a comment to the link:lists.html#general+at+incubator.apache.org[general list] or raise a pull request at the link:https://github.com/apache/incubator[incubator site repository].

== Formulating A Proposal
=== Preparation

Start with research. The link:/cookbook[Cookbook] is a good place to start.
Read the link:http://www.apache.org[Apache] link:http://www.apache.org/foundation[documentation].

link:lists.html[Subscribe] to the link:lists.html#general+at+incubator.apache.org[general mailing list]. 
Spend some time reviewing the link:++https://lists.apache.org/list.html?general@incubator.apache.org++[mailing lists archives]. 
The mailing lists are the standard way of link:http://www.apache.org/foundation/how-it-works.html#communication[communication] and link:http://www.apache.org/foundation/how-it-works.html#decision-making[decision making] at Apache.

Before starting on the formal proposal, recruit a link:/incubation/Roles_and_Responsibilities.html#Champion[Champion]. The Champion understands
Apache and should be able to help navigate the process and put your proposal together.

Review link:https://cwiki.apache.org/confluence/display/INCUBATOR/Proposals[recent proposals] and how they have been link:++https://lists.apache.org/list.html?general@incubator.apache.org++[received]. Check to see which podlings have become top level projects and which have not. link:https://cwiki.apache.org/confluence/display/INCUBATOR/Incubating+Issues[Read up] on some of the issues a podling may face while in incubation.

The incoming community needs to work together before presenting this proposal to the incubator. Think about and discuss future goals and the reasons for coming to Apache.
Feel free to ask questions link:lists.html#general+at+incubator.apache.org[on the list].

Every proposal is different. There will always be some aspects which do not seem to fit well into the link:#proposal-template[template]. 
Use the template as a guide but do not feel constrained by it. Adopt what works and change what doesn't. It is fine to do that.

Be sure to add your proposal to link:https://cwiki.apache.org/confluence/display/INCUBATOR/Proposals[this list]. You can copy the link:https://cwiki.apache.org/confluence/display/INCUBATOR/New+Podling+Proposal[existing template] for you new proposal.

=== Project Name
While it is important to come up with a link:graduation.html#notes-names[suitable project name] and product names during incubation, it is a requirement to do this before entering incubation. Be careful not to disrupt your proposal and entry process. But also be aware that changing your name may be required at some point, and that could be disruptive to your community.

=== Presentation

Once you have a draft proposal, it should be presented to the incubator.
Post the proposal in plain text in an email to the link:lists.html#general+at+incubator.apache.org[mailing list] with a subject line prefixed with _[PROPOSAL]_. You should be clear that you want to discuss your proposal when submitting this mail.

If there is interest in the proposal, expect a lively debate to begin.
Approval follows a link:http://www.apache.org/foundation/voting.html[vote] to enter the incubator.
Discussion is an important part of opinion formation. A proposal will require development if it is to gain the maximum level of support from the
link:/whoweare.html[incubator].

=== Developing The Proposal

Expect to work on improving the proposal on the list after presenting it.
No preparation can cover every question. It is usual for unexpected and novel questions to be asked. These questions are often a sign of interest. So (though it may sometimes feel like an ordeal) approach these questions as a real opportunity to engage with the incubator.

The link:https://cwiki.apache.org/confluence/display/INCUBATOR/Proposals[wiki] is a useful development tool. Consider creating a wiki page containing the evolving proposal content. Those who are interested should add themselves to the watch list for the page so they can receive change notifications.

Developing the proposal on the wiki allows for easy collaboration. The wiki is just a tool to assist the development of the final proposal (the one that will be voted upon).

Effective management of this development process is a good exercise in community building.
The wiki is not an appropriate forum for debating changes. Discussions should be gently moved onto the appropriate link:lists.html#general+at+incubator.apache.org[mailing list]. 

=== The Vote

When the proposal seems finished, and some form of consensus has emerged, the proposal should be put to the vote.

If the wiki is used to develop the proposal, please ensure that the wiki matches the final proposal then add a notice to the wiki that development of the document is now complete. Change the wiki page to be read-only so that no further changes can be made.

Embed the final proposal text or include the final version number of the wiki proposal page in the email which starts the VOTE thread. If a change is required after the vote has been called then the vote must be cancelled, the change made, and the vote restarted. Alternatively, Mentors will advise on how to make the change once the proposal has been accepted. Do not edit the wiki proposal unless you cancel the vote thread.

== Proposal Template

The aim of presenting a template with examples and comments is educational. Proposals are not required to adopt this format. 
Every proposal is different. There may be sections which don't seem to be useful. It's fine to miss them out and to add new ones that the proposal appears to need.

The format is less important than the content.

Each section is broken down into a commentary/explanation and examples. The link:https://cwiki.apache.org/confluence/display/INCUBATOR/New+Podling+Proposal[proposal template] page can be copied to a new page under link:https://cwiki.apache.org/confluence/display/INCUBATOR/Proposals[proposals] on the Incubator Wiki to speed up creation. Please remove excess commentary and examples sections.
