After dealing with some frustrating bugs in our marketing tracking last week, I had the opportunity to moderate a live technical chat this week about how to handle bugs within agile frameworks. I learned strategies for interweaving management of bugs, defects, and problems into workflows that are rooted in the values of the Agile Manifesto:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
Hundreds of developers, dev managers, CIOs, CTOs, and even some non-techies registered for our live chat and learned how to become Agile Bug Beating Superheroes!
Our panelists were Jacek Materna, Assembla CTO and John-Daniel Trask, Raygun CEO.
Between them, the amount of sheer knowledge, experience, and leadership is astounding. Those in attendance raved about the quality of the information and shared that they will be putting these tips into practice right away (even while stuck in traffic!). Some tweets:
Slow delayed drawn out deployments = Software quality problems - Iterate quickly to maintain quality #AgileBugs— Lise-Ann Brennan (@TheLiLiB) June 29, 2016
How to best handle bugs in your agile practices https://t.co/Vj1kKEVh6W— Ilko García (@ilkogarcia) June 30, 2016
Here are some of the things I learned from the chat. You can watch the recording of the event anytime and then feel free to chime in about the lessons that have been most valuable to you.
Tips to avoiding bugs in the first place
- A rigorous code review process ensures that shipped product is high quality
- Create an environment of collaboration and empowerment for all coders and testers
- Keeping simplicity at the heart of the operation fosters stable product and happy customers
- Maintain a toolset that enables simplicity: a project management tool, a product monitoring tool, and a code review tool
- Open communication and collaboration between the engineers gives the team a wider vision and the ability to see all parts of the product that may be affected by a change
- Accept that software is sufficiently complex and there may always be some bugs, therefore you should factor that reality into your agile workflows
- Using a staging environment (especially in continuous deployment scenarios) minimizes errors
How to squash bugs within a sprint
- Build a flexible process (which may be hybrid agile in nature) that allows all stakeholders to get the most out of their toolset
- The ultimate mission is working product
- Keep the inventory lean – ensuring there is always a working product deployed is more important than progressing on multiple features
- Communication is the #1 asset for distributed teams and centralized teams alike
- Use feedback loops to ensure that users of the software are having a great experience
- Features are not called “finished” until they are monitored operating successfully in a production environment
How to differentiate critical bugs
- Maintain 24/7 open lines of communication with the customer base so they have multiple ways of reporting issues
- Separate DevOps from the Dev team so they can cover the operational side of keeping software & systems running
- Use a stack of deployment monitoring tools to enable 100% uptime and react quickly to severe errors
- Prioritize bugs based on scope and level of impact to ensure that customers have a good product experience
- Effective ways to differentiate critical bugs often involve the number of affected users or the nature of the error
How to report bugs and design test cases around them
- The more data and context that can be automatically pulled into the ticket or error report, the easier it is for developers to fix it quickly
- Integrate tools so that the team has a single view of the entire process
- When there is an error, write a unit test for it that proves it, and then resolve it so that you don’t regress
- Having robust unit tests gives developers comfort about making changes without regressing in other places
- If it seems like writing the test case is complicated, you are probably looking at the problem from too broad of a scope
Best practices for bugs discovered after the sprint
- Make sure you have frequent, automatic deployment and great post-deployment monitoring
- Determine how impactful the issue is to the customer base and their user experience
- Focus on getting the product back to a working state
- The most important area to invest in is the ability to respond quickly when bugs are discovered
- Users are extremely forgiving when you are responsive – it’s a great way to turn “at-risk customers” into raving fans
After the experts addressed my questions, they also spent time with questions from the audience, like:
- When you go into sprint planning, do you keep a certain percentage or point value open for defects found during the sprint?
- How do you make sure less technical folks, like support teams, understand when they are spotting recurring issues with new code?
- What would you do if you wanted to become more agile, flexible, and deploy several times a day (instead of being bound to sprint plan and deploy every two weeks), but you have tons of tickets in the backlog?
The entire chat was packed with actionable tips for making your development team more productive.