People move to Agile, go through required training and start working in projects. After a period of time, if you ask any team member, “what exactly is Agile?”, she’ll start talking about Scrum ceremonies, embracing change, shorter feedback cycle etc. Even after implementing all these aspects, you’ll find issues in that project.
One of the most basic issue remains – people still continue to work in silos even in Agile teams. You may find close collaboration within developer or tester community. However if you ask how exactly developers and testers are collaborating together, you may find people clueless.
Some teams still work in mini-waterfall fashion and term it Agile. In one such team, team-members followed all Scrum practices. However, developers work during first week on the user-stories and hand them over to testers by end of week. From Monday on wards, testers perform testing while developers wait for bugs and fix them as and when they are raised.
If you check all these anti-patterns one thing is obviously common – team is not collaborating together for Sprint success. They still work in siloed fashion and have developer vs testers mindset.
I personally feel very strongly against it. Irrespective of the ceremonies followed or the flavour of Agile, more than half battle gets won if team believes in the idea – “How can I help you?” and help each other in reaching towards Sprint goal.
You may say, good in theory but in practice how team-members really collaborate?
Here are some ways in which testers and developers can help each other:
- The most basic developers can help testers is by writing tests. Any application without automated tests is an application with lots of technical debt. Those regression tests have to be manual then and compounds the work-plate of testers.
- Developers and tester should pair up to define the test cases for the user-story together. While discussing those test cases, it’s important to focus on the basic idea of test pyramid, i.e. 80% tests should be covered with unit and integration tests. Only 10% tests should be covered with functional tests and rest 10% can be manual.
At this time of pairing, developer can suggest what all test cases can be implemented through automated unit and integration tests. Rest 10% tests can be automated functional tests.
- Developer should perform the checking (developed user-story meets the functional acceptance criteria) part of testing. So when developer says I am done developing the functionality, it should mean that the developed functionality meets all test cases discussed at the beginning. Tester can then focus on exploratory part of the testing.
While doing that the developer should write the required automated tests as well.
- When developer says, I am done with the development of the user-story, tester can come on the developer machine and check if there are any glaring mistakes or bugs in the functionality. If yes, developer can go back and start fixing those issues INSTEAD OF getting into a cycle full of waste (pushing the code to repository, CI build runs, executable created and deployed on test environment, tester does the required data setup, identify bugs, logs bugs into bug tracking system followed with repeat this cycle as and when developer fixes the defects)
- Developers can help the testers technically in setting up the required testing frameworks and infrastructure.
These are some of the fundamental ways with which developer and tester can help each other. But again it’s just a small list. If you believe in the philosophy – “How can I help you?”, you’ll find ways to help each other.
I find collaboration and helping each other as the basic mantra of success for any Agile team. On top of that there can be other reasons as well but this one is implicit. This is fundamental tenet of working in Agile.
Did you find other ways to help each other in your team? If yes, please share them as they can help others as well.