Look at the initial inputted user task. It was likely optimized, clarified to remove any possible ambiguity. Once the requirements have been massaged and optimized the design for how the tasks may be implemented are enumerated and weighed. Don't forget simple unit testing and security vetting is not merely extra credit, if you haven't done them...you haven't done your job!
For a ticketing system having different statuses to represent the progress of a given item shows transparency for the team and PO. You need to pick conventions that work for your team and project. Here are some possible approaches:
- Requirement captured
- Requirement optimized
- Requirement accepted/rejected
- Design process and enumerate different implementation options
- For each design provide:
- LOE on implementation
- Known security vulnerabilities, or if this is the preferred security approach
- Rate the "cleanest" approach via code quality, modularity
- Express if this approach is somehow similar or different than other similar tasks. The best approach is sometimes the more familiar. There is value to that, indicate that this may or may not be the "best" way of implementing a given task, but is consistent with the rest of the system and therefore a better approach
- Are there different execution impacts? Longer, shorter, slightly less feature-rich
- Do the different approaches have different monetary cost implications? More resource hungry?
- Ease of testing for success, failure, and edge conditions
- Indicate the design chosen and a brief reason why.
- Create a threat model.
- Show current system state with a data flow diagram.
- Add in the change to the system with the new functionality.
- Enumerate all possible threats that had existed before as well as additional threats.
- For each threat provide at least one compensating control to mitigate the threat
- Compare and contrast if the added functionality outweighs any remaining possible threats even with the compensating controls.
- A branch should be created that reflect the ticket number
- Initial technical task supports described functionality
- Positive, negative, and edge case unit tests are present
- Positive, negative, and edge case functional tests are present
- Security tests are in place to ensure that compensating controls are working and mitigate the threat.
- Any infrastructure, or migration related matters must be capable of being run upon deployment without any human interaction
- Ready for peer code review. A pull request should be submitted. Indicating the ticket number with a brief description of the changes present
- Code review should show that only code present in committed code reflect the ticket at hand. The code review should not be taken lightly. That person is now responsible for bad code just as much as the engineer who authored it. Don't just accept the request, add some comments.
- An attempt will be made to merge in the new branch into the master code base. Should requisite tests, code coverage, and other related tests pass the merge should apply and accept the code.
- The merge into the master branch should trigger a new deployment into the corresponding environment.