Ticket handling

<Tickets

This document outlines the best practices for handling tickets in a medium/big size Open Source Project. As CocoaPods is developed on GitHub and thus is based on GitHub features, except this point all the concepts are applicable to other Open Source Project.

The following guidelines are indicative and any step can be skipped when reasonably useless.

CocoaPods' ticket handling and development is an open process where actors use their own judgement to decide whether they are comfortable undertaking an action. If for any reason there is no enough confidence for an action the rest of the team can be called.

<Labels

Tickets are classified along 4 axis: type, status, difficulty and priority. Every time a label is applied or changed a comment should be posted including any relevant information.

Type

  • enhancement
  • defect
  • discussion

Status

  • waiting input
  • confirmed
  • detailed
  • waiting validation
  • blocked

Difficulty

  • easy
  • moderate
  • hard

Priority

<Steps to resolve a ticket

  • Type identification
  • Clarification
  • Confirmation
  • Identification of the actions
  • Implementation
  • Validation

<Type Identification

The ticket type should be set to either: enhancement defect discussion

If the ticket duplicates another one it should be closed as duplicated indicating a comment.

<Clarification

The ticket status should be changed to waiting input

If the ticket description is incomplete or unclear further information should requested to the submitter. This information might include a reproducible test case for defects.

<Confirmation

Either ticket should either to closed or its status should be changed to confirmed

If the ticket is considered highly desirable it can be prioritised setting the priority to

Defects

A defect can be confirmed by reproducing the test case reported by the user. The confirmation comment should report the version of CocoaPods used and should be considered valid for 2 minor versions. Moreover it should include a report of the output generated by the tool and the contents of any generated artefact if relevant.

Features

Minor enhancements can be confirmed by any contributor, major ones instead require the opinion of a member of the Core team as their judgement might require architectural and philosophical implications.

<Identification of the actions

The ticket status should be changed to detailed

If there is another ticket which should be resolved before implementing this ticket the blocked label should be applied and a comment indicating the dependency should be posted.

In this step, according to the breath of the change and the technical difficulty involved with it, the difficulty of the ticket should be set to either easy moderate hard

Consists in the description of the changes which should be performed to the output of CocoaPods indicating the command (or the context where they should happen) if relevant.

Moreover the comment should include a description of the programmatic changes required to implement the ticket.

<Implementation

After the ticket has been implemented via a pull request it can be marked as waiting validation

<Validation

Once a ticket has been implemented it should be validated, merged and finally closed.

To validate the implementation of a major ticket a member of the Core team is required.

Unless for trivial changes every pull request should include:

  • Tests to prevent a regression
  • A note in the CHANGELOG