We develop a product that consists of a core runtime shared across products (project1, project2, ...) and a project/product specific part. For each of those "products" we maintain multiple branches because different versions are rolled out into the field and require maintenance and sometimes even feature backports.
We also use JIRA as an issue tracking system and I'm having trouble finding the right way to model our product types/branches. The JIRA elements that seem relevant in this context are components and versions:
- we use components to differentiate between CORE, PRO1, PRO2, etc
- we use components also to identify what branches are concerned
- we use Fix Version to keep track of what iteration to resolve the issue (iterative development, bi-weekly iterations)
This more or less works but using the Component type for branches is a hack and has the disadvantage that you can not "retire" components, only delete them. We choose to go this way since if we would mix the iterations together with the branches in the Fix Version field we can no longer query for "iteration X and branch Y" (JIRA does not support AND queries).
What sort of best practices exist for maintaining branches and tracking iterations in JIRA?
Some stats for context: we are talking about around 4 product types and about 3 major branches per product type to maintain.