In today’s fast changing world we cannot escape from the fact that business requirements change very often. If we use the predictive, heavy weight methodologies for developing software it is very difficult to incorporate the changing business needs of our customers. Lightweight software development methodologies, which appeared in the late nineties “embrace changes”. The disciplined adaptive nature of these methodologies helps us to easily accommodate changing business needs of our customers, even in later part of the development cycle.
Many software development organizations are using agile development methodologies like Scrum as it helps the organizations to respond to changing business environments very quickly and provide better customer satisfaction. In today’s business environment it is not really the big that win the battles rather it’s the fast that win the battles over the slow. Time to market is very important in today’s fast changing world. Agile development helps us to deliver the value to the customer rapidly through a divide and conquer approach and prioritization. The right 20% of effort will yield 80% of the value, so we do a lot of those in agile development and extreme testing.
Introduction to Agile
In Scrum the whole development is divided into different increments/sprints. Top priority user stories are covered in the initial sprints. Unit tests are developed first as a best practice. Then the code is written to ensure that 100% of unit tests pass. This is done in an incremental way. The developers write unit tests and 100% of Unit tests are automated. This will help in executing the tests repeatedly and also simplify the reporting of results.
There is one more important type of testing involved in agile testing, which is called Acceptance Test/Customer Test. These tests are written, based on User stories. They are formal tests conducted to determine whether or not a system satisfies its acceptance criteria and to enable the customer to determine whether or not to accept the system. Test engineers write the Acceptance tests with the help of customers in some organizations. It is very important to understand the customer perspectives while writing the acceptance tests. The big mountain acceptance tests are automated using an appropriate tool and executed on all the builds. Agile testing creates confidence that code is complete and it works; catches integration defects when they are first created, and, most importantly, provides confidence that a maintenance change did not introduce a regression error.
Basic values like open communication, tight feedback loop in the scrum teams, simplicity and courage are the key in scrum teams. In scrum, testing isn’t a final hurdle it is a journey along the full development cycle.
Areas to Focus
While building a distributed agile team we need to consider multiple factors. If we don’t build the right team for Agile it is going to be very tough to get the results. Open Communication is one of the key values in agile development.
Individuals and Interactions
If your existing team is to be transformed into an Agile team the most important step is to evangelize the agile concepts and benefits in your team. Management and Development teams also need to be educated on the ROI(Return On Investment). When we were implementing Agile in our organization we used to conduct talks by practitioners on agile, play agile dramas depicting the outcome from monumental methodologies and light methodologies. Once the platform is set we can start implementing agile practices and values. We need to identify and prioritize which are the areas to focus on first for the team. We may need to refactor the team. If there are team members in your team with a negative attitude or having an attitude to resist changes, then proper guidance needs to be given to them to bring in the change. If there are no improvements, it is a good idea to move them to a different project. Agile talks about “tossing off” the code at the end of the day if it doesn’t serve the purpose. This is applicable for team members also. Don’t try to patch it up too much…
While recruiting new members to an agile team we need to ensure that they have the right set of attitudes and skills in line with the agile way of working. Openness, ready to give and accept feedback, simplicity, courage, adaptability, good in communication, right skill mix …these are some of the attributes we need to ensure in a new hire. If you are planning to hire it is a good idea to have a brief discussion about agile practices you follow in your organization during the interview. Once they are hired we need to evangelize agile among them. In some cities we may not get engineers who worked in agile earlier. Transforming an engineer who has been working in monumental methodologies to an agile environment is not that easy. It’s a big paradigm shift. There may be resistance to change. We need to plan our inductions in such a way that the returns of Agile are communicated to the new hires appropriately. Once they understand the synergy it gives to customers and the organization employees will start believing in this new model. Once this milestone is covered it is easy to evangelize the other agile practices we follow in our organization.
Like the “pair programming” concept in Agile mentoring also can be done through pairing. A new hire is paired with a senior engineer who is in the team for more than 1 year. A high level introduction about the product is given to the new hire. After that during the sprint the new hire pair up with other team members according to the plan laid out by the Coach. The mentoring plans always focus on big mountain functionalities first.
When a groupWhen group of people works together in internationally distributed locations, there is great need to communicate with each other, share data and share expensive resources. Building a good communication mechanism is very important for the success of agile testing. Conversation with developer, customer, and feature team leads and product manager is frequent. Daily Stand up meetings with the scrum teams helps to build the relationships among the teams. All the Agile team members including developers, test engineers, documentation experts, product managers and DevOps assemble in the morning (usually on a planned fixed time like 10am) for a short stand up meeting of 5 to 10 minutes duration. Plan for the day and top priority unresolved issues from the previous days work is communicated to the team. This meeting is not for resolving the issues or detailed discussion. Resolutions are taken later after the meeting. If we are working in a distributed model where the development is happening in the US and the testing is in India or some part of the feature team is in a remote location like India and China, Communication and the feedback loop get badly affected. Tailored agile for these kinds of offshore development can be called as “Distributed Agile”. Collaboration among testers, programmers, and other stakeholders is more highly valued on agile projects than details of process, practices, or tools. Test engineers are part of scrum teams. Agile methods ask teams to continually evaluate how to improve group interaction, for the benefit of the project.
Once we have decided the members of the scrum team, building the team is the first priority. We need to plan for internal and external team building activities initially. We can also do a lot of informal interactions and get together … like all feature team members having evening snacks together in the snacks parlor.
Video calls, Chat, email , lightweight documentations , phone calls etc.. can be used for constant communications. We can plan for weekly meetings with members of the scrum team who are in the remote location. It is a good idea to have all the scrum team members participate in this meeting. Frequent conversations between the remotely located team members is a good practice. This will help us to build relationships. We need to agree on the overlap timings when the video calls can happen as most of the time one of the engineers will be at home because of the time zone differences. Engineers traveling in both directions frequently (2-3 travels per quarter) and working with the remote team for 3-4 weeks will enhance the relationships. This will help us for better culture sync. These ambassadors ensure there is enough osmosis within the distributed feature team.
Working Software over Comprehensive Documentation
Jim McCarthy said that, “The regular build is the single most reliable indicator that a team is functional and a product is being developed.” This is very much true in the case of a distributed agile team. We need to ensure that we have good CI/CD practices in our organization where the latest builds are easily available for the test teams. This will help the test teams to run their test on the latest code. We need to automate the big mountain acceptance tests using appropriate tools. This will help us to test often and communicate the progress to the feature teams.
Frequent demos of the current status of the features to the entire feature team is very important. It is a good idea to have such demos weekly once. Demos can be arranged for remote teams on Fridays and we can have a group test after that where the entire feature team tests the latest build with a focus on new features. These demos can be recorded and uploaded to a common repository. Later if some of the team members want to go through the demo they can always replay it from the common repository. During the initial milestones where the top priority features are developed we can use build mechanisms like “sandbox” where the developers check in their new code as and when the unit test passes into a sandbox build maintained by the feature team. Test engineers can always use this build for testing the new features. As we are going to give feedback on working software rather than on design documents or requirement documents the feedback inputs will have more value. Development engineers can incorporate the feedback back into the sandbox the next day. At the end of the week all the new code checked in by the feature team in the sand box (which is tested and feedback incorporated) can be checked into the main line code. If we are working in distributed agile we may need to document some of the important changes. We can use wiki or google doc etc… for maintaining these kinds of knowledge bits.
To build an effective testing team for Distributed agile we need to focus on individuals and interactions over processes and tools. We need to ensure that the latest code is available for testing in all the internationally distributed locations. Feedback based on working software helps to build confidence in the feature teams.
References : https://agilemanifesto.org/
Baiju Joseph Thalupadath
Head Of TechOps(QE,RE & SRE) @ Yahoo Small Business