Moving towards a more standardized Agile methodology means finding the suitable tool for our processes.
Asana helped us develop new features and track the issues, but we can see some difficulties in organizing it in the way we want.
The main problems with Asana:
- inability to easily find what the teams are actually working on
- no support for creating and tracking epics (combining multiple stories in order to implement flows and track them across several sprints).
You can mitigate this by creating different projects, add epics as tasks, stories as sub-tasks, then assign these stories to sprints, but you still don’t have any way of seeing a progress report for a certain epic.
We may track the epic status if we create it as a project, but we won’t be able to prioritize it as a whole
- poor reporting – we have only a burn up chart.
- poor overall responsiveness – it freezes and goes down often
- hard to use it in a traditional scrum workflow – does not use or enforce any process
On the other hand, Jira is an older tool created by a well known company (Attlasian) with rich experience in project management software. Attlasian owns Bitbucket also – a service similar to GitHub (Jira integrates well with Bitbucket). Attlasian serves 85 of the Fortune 100.
Jira was designed for teams wanting to enforce a standardized flow.
Main advantages of Jira over Asana:
- more mature product
- built in support for Scrum and Kanban. Also, you can define your own flow by using a visual representation.
- supports epics
- you can prioritize entire product backlog including epics in addition to prioritization of individual epic backlog items
- easily see active sprints
- interactive scrum or Kanban boards (see what’s in progress/done and change status by moving items like you do with the post-its)
- supports estimates using several methods (classic time, issue count, business value, story points)
- advanced agile reporting (sprint burn-down chart, epic burn-down, velocity, cumulative flow diagram, etc)
- can use estimate method (story points for example) to take into account story complexity in reporting
- can track time and let’s you edit remaining time for tasks
- supports working with versions
- supports components (ex: Database, User Interface, etc
- configurable screen types for each type (story, bug)
- configurable fields
- integrates with github to link issues to commits. Also integrates well with other Atlassian tools like Bitbucket, Confluence, Bamboo.
- faster and more reliable
Main advantages of Asana over Jira:
- nicer UI/UX. Asana is a newer product. Every UI interaction is quicker: assign, add labels, comments, upload file, change state, set due dates, add followers, etc.
- more flexible. Does not impose any flow. This can be either a plus or a minus, depending on what we want.
- who is doing the issues more visible, and easier retrieval of the list of items assigned to a person
As a personal impression, It feels very natural to work in Asana, and I have a hard time finding my way in Jira. If I could combine the Asana ease of use and Jira flows and reporting I would say that would be a good choice. For now it seems we need to choose from ease of use against better processes.
Coming from a flexible tool like Asana to something more rigid like Jira will mean we definitely need to follow stricter procedures and some frustrations may arise out of this because some may feel that procedures will stand in their way. That’s why a transition from loose procedures to more rigid ones need to be carefully analyzed.
My recommended workflow using Jira:
- Preferably use a single project in order to have a single backlog and prioritize the project from a centralized place
- Use Components to organize related items (Broker Area, Employer Area, etc). Components can have Component Leads: people who are automatically assigned issues with that component. Components add some structure to projects, breaking it up into features, teams, modules, sub-projects, and more. Using components, you can generate reports, collect statistics, display it on dashboards, etc. Project components can be managed only by users who have project administrator permissions. They should have unique names across one project. Nothing prevents users from adding issue to more than one component.
- Use Epics to group related stories and track flows. Epics or complex stories may be re-organized during the backlog refinement meetings
- Use Labels as the simplest way to categorize items. Anyone can create new labels on the fly while editing an item. All project labels are displayed in the Labels tab of the project as a tag cloud. We can have labels like Production emergency, Feature requests, etc
- Use parallel sprints (this is experimental feature in Jira but our current process uses parallel sprints)
Where to enable this:
- use this workflow
- use this board configuration:
The usual procedure is to write stories in the product backlog using the standard format:
As a <actor> i’d like to <action> in order to <benefit>.
A story describes a feature from the business perspective.
Stories can be grouped into epics (a flow for example or a complex story is an epic and can span on multiple sprints).
In Jira you can filter to see backlog items from an epic, those without epics or all.
This way you can track epic progress, prioritize stories inside epics.
There is no easy way to prioritize epics itself. To accomplish this you need to add a KanBan board and filter only epics. This can be used as a Roadmap or as a ScrumBan bucket.
Stories are split into tasks by the dev team. Tasks focus on the “how” while stories focus on the “what”. A story can have sub-tasks, and sub-tasks can represent the technical part.
The product owner should never create tasks, but he will create stories.
For the big picture, organizing a project always involves starting with a roadmap. This is used to create epics, then stories, then tasks.
Definition of done
Scrum was created to allow for an iterative, incremental development. This means at the end of an iteration a piece of working software is delivered.
And this means we need to clarify the definition of done. This is generally accepted as: functional code, does what the requirements say, development is final (passed code review and refactoring), automatic test were written, and manual QA tests passed.
More on definition of done:
… Scrum asks that teams deliver “potentially shippable software” at the end of every sprint. To me, potentially shippable software is a feature(s) that can be released, with limited notice, to end users at the product owner’s discretion. – See more at: https://www.scrumalliance.org/community/articles/2008/september/what-is-definition-of-done-(dod)#sthash.3eYz8Wmf.dpuf
This does not mean that all sprints declared successful are bug-free, but should be production-ready. Each sprint ends with a sprint review and then the product owner can declare the sprint successful or failed. In Scrum, failing sprints is not considered a bad thing, but accepted as normal and certain actions are taken to improve what went wrong.
Scrum teams must include a QA specialist on the team and QA is done during the sprint, not after the sprint. If the QA is done after the sprint or the sprint is not declared successful or failed, I think this is not Scrum.
What about a separate sprint for QA ?
Some people may advocate the idea that from their own experience QA will always remain behind, and a separate sprint for QA will improve the process.
QA also may feel that this will allow for a slower, more systematic approach to testing.
I know for a fact such procedure is implemented in some organizations, but I find it to be anti-agile because it does not take into account the definition of done.
See comments on this methodology (author itself does not advice to use it, but he notes it as as a possibility):
Having QA work on their own sprint is not in the way Agile/Scrum was designed.
There are some important aspects of doing Scrum that I want to point out:
– Teams share the responsibility of completing work (ideally means a potentially shippable product at product owner discretion) during a sprint
– Teams include QA in order to get things done without defects.
– Teams accomplish this by trusting each other, good communication and constant adjustment and improvement of future sprints by using retrospective meetings.
The whole purpose of Agile is building the product incrementally. The sprint is not completed if it is not QAd.
We didn’t had a QA specialist on our team still we managed to deliver bug-free or with minor bugs because we did automated tests and manual testing ourself.
From my experience a good QA specialist will not remain behind and has enough time to create test plans, test manually and make some automated tests during the sprint, as long as Scrum is done correctly. Remember that the team members can help each other, and developers should not feel uncomfortable to help with the testing or documentation if required.
Sub-tasks for testing ?
In Scrum or KanBan an issue/story is completed in stages. In fact these are the same stages from waterfall, but done inside a smaller timeframe. That’s why you don’t need separate tasks for testing, because the sprint backlog item can flow from analysis to dev to testing to finished. The item is done ONLY when all stages are completed.
Uncompleted items, bugs from previous sprints, production emergencies
If some items remain uncompleted, the item is not presented during the sprint review meeting and is scheduled for another sprint.
If issues are found AFTER the sprint was delivered and that functionality wasn’t released all bugs will be included in next sprints according to priority given by Product Owner.
If issues went into production they are usually added with high priority to current sprints, leaving the possibility of the team to negotiate removal of other less important items in order to complete the sprint on tie.
There are also bug-fixing only sprints, in which a team tries to solve as many bugs as possible from the backlog, usually during and after a release.
The ideal workflow is one that can offer production-ready code at any time not at certain intervals and for that comes into help Continuous Integration where automated tests assure high quality releases even twice a day. CI can be used for maintenance releases and this does not exclude formal V2, V3 releases, but usually you find that by using CI you don’t need to release big changes and prepare months away, but be prepared at any time and use feature toggles instead when ready to enable a finished feature.
In conclusion, I would advice to leave QA in the team, make the team as a whole (including QA) responsible of completing items, declare the sprint success/failed after sprint review meeting, and add items not done or bugs in the next sprints.