#
The Development Cycle

As I noted in the 1.38 ReleaseNotes, version 1.38 was different from prior versions because it had a lot more contributions. We expect that this trend will continue. As a consequence, we have modified how we do development, and instead of making a list of all the features that we will implement in the next version, each developer will sign up for one (maybe two) projects at a time, and when they are complete, we will release a new version.

The difference is that we will have more time to review the new code that is being contributed, and will be able to devote more time to a smaller number of projects (1.38 had too many new features for us to handle correctly).

Future release schedules will be much the same, and the number of new features will also be much the same providing that the contributions continue to come -- and they show no signs of let up :-)

Feature Requests:
In addition, we would like to "formalize" the feature requests a bit.

Instead of me maintaining an informal list of everything I run into (kernstodo), we would like to maintain a "formal" list of projects. This means that all new feature requests, including those recently discussed on the email lists, must be formally submitted and approved.

Formal submission of feature requests will take two forms:
1. non-mandatory, but highly recommended is to discuss proposed new features on the mailing list.
2. Formal submission of an Feature Request in a special format. We'll give an example of this below, but you can also find it on the web site under "Support -> Feature Requests". Since it takes a bit of time to properly fill out a Feature Request form, you probably should check on the email list first.

Once the Feature Request is received by the keeper of the projects list, it will be sent to the Bacula project manager (Kern), and he will either accept it, send it back asking for clarification, send it to the email list asking for opinions, or reject it.

If it is accepted, it will go in the "projects" file (a simple ASCII file) maintained in the main Bacula source directory.

Implementation of Feature Requests:
Any qualified developer can sign up for a project. The project must have an entry in the projects file, and the developer's name will appear in the Status field.

How Feature Requests are accepted:
Acceptance of Feature Requests depends on several things:
1. feedback from users. If it is negative, the Feature Request will probably not be accepted.
2. the difficulty of the project. A project that is so difficult that we cannot imagine finding someone to implement probably won't be accepted. Obviously if you know how to implement it, don't hesitate to put it in your Feature Request
3. whether or not the Feature Request fits within the current stategy of Bacula (for example an Feature Request that requests changing the tape to tar format probably would not be accepted, ...).

How Feature Requests are prioritized:
Once an Feature Request is accepted, it needs to be implemented. If you can find a developer for it, or one signs up for implementing it, then the Feature Request becomes top priority (at least for that developer).

Between releases of Bacula, we will generally solicit Feature Request input for the next version, and by way of this email, we suggest that you send discuss and send in your Feature Requests for the next release. Please verify that the Feature Request is not in the current list (attached to this email).

Once users have had several weeks to submit Feature Requests, the keeper of the projects list will organize them, and request users to vote on them. This will allow fixing prioritizing the Feature Requests. Having a priority is one thing, but getting it implement is another thing -- we are hoping that the Bacula community will take more responsibility for assuring the implementation of accepted Feature Requests.

Feature Request format:

    ============= Empty Feature Request form ===========
    Item n:   One line summary ...
      Date:   Date submitted
      Origin: Name and email of originator.
      Status:

      What:   More detailed explanation ...

      Why:    Why it is important ...

      Notes:  Additional notes or features (omit if not used)
    ============== End Feature Request form ==============

    ============= Example Completed  Feature Request form ===========
    Item 1:   Implement a Migration job type that will move the job
              data from one device to another.
      Origin: Sponsored by Riege Sofware International GmbH. Contact:
              Daniel Holtkamp <holtkamp at riege dot com>
      Date:   28 October 2005
      Status: Partially coded in 1.37 -- much more to do. Assigned to
              Kern.

      What:   The ability to copy, move, or archive data that is on a
              device to another device is very important.

      Why:    An ISP might want to backup to disk, but after 30 days
              migrate the data to tape backup and delete it from
              disk.  Bacula should be able to handle this
              automatically.  It needs to know what was put where,
              and when, and what to migrate -- it is a bit like
              retention periods.  Doing so would allow space to be
              freed up for current backups while maintaining older
              data on tape drives.

      Notes:  Migration could be triggered by:
               Number of Jobs
               Number of Volumes
               Age of Jobs
               Highwater size (keep total size)
               Lowwater mark
    =================================================