In Launchpad, series are containers for releases and milestones, which are separate types of object. Some things can be done for releases but not for milestones, such as tracking bugs separately for porting purposes. Other things can be done for milestones but not for releases, such as scheduling bugs and blueprints. This is awkward and confusing, to the extent that it fails the dogfood test: Launchpad itself uses milestones for what are actually releases.
One possible solution:
* For both distributions and projects, a series is a collection of milestones.
* A milestone has a toggle for whether it is a release or just a scheduling point.
* When a series is registered, it automatically contains one release milestone with the same name as the series, though this can be renamed or deleted if necessary.
A real-world distribution example: Ubuntu would have a "Hardy" series consisting of milestones "Alpha 1" through "Alpha 6", "Beta", "8.04", and likely also "8.04.1" and "8.04.2". At least the last three of these milestones would be marked as releases. (Reference: <https://wiki.ubuntu.com/HardyReleaseSchedule>.)
A real-world project example: WordPress would have a "mainline" series with "2.4", "2.5", and "2.6" release milestones, together with "2.2.3", "2.0.12", "2.3.2", "2.0.eventually" etc non-release milestones. (References: <http://wordpress.org/about/roadmap/>, <http://trac.wordpress.org/roadmap>.)
See also bug 99994 and bug 138994.