Sunday, March 27, 2011

How much process in Agile

The question of “How much process in Agile” is very difficult to answer. In fact while coaching various agile teams, I get these questions very frequently and these questions are being asked by all the roles of the team. Every time I give the same diplomatic answer “It depends” . In this post I would try to elaborate my perspective of “It depends”. The number of process steps in the agile mode of software development depends on the competency of team members (team experience and skills), maturity of the team, the business domain and the criticality, the management approach, trust of the team, team motivation and other similar factors.

  • Competency of team members and maturity of team members How much requirement elicitation and requirement documentation to do, how much design modeling and how much detailed design document to be prepared and many other aspects depends on how much experience the team has and the skills the team members possess. In some teams where the team is very competent, just writing the user stories from the user perspective is enough for the further coding and testing and for the final release. Whereas in some other team where the team competency is not that high it needs further detailing of the user’s perspective and it needs to further have the design details until the class level details (in oo based approach). In a team which has very good skills on the design, there may be no need to detail down the Architecture further. Just having a brainstorming on the overall design modeling is enough. Team can further come up with the solution by themselves.But if the team lacks in skills on design patterns, refactoring skills to make design better then there is high probability that the design which is getting developed lack the overall perspective. The amount of documents and the amount of process depends on the competency of the team. So team should spend time in improving the competency.
  • Business Domain and the Criticality  The amount of review, coverage and the code inspection to be done in a mission critical system is quite different from an application system. If we need to achieve zero defects quality, then it needs high level of attention. Well, as mention in the first point, it has a very high dependency on the competency of the members which the team has. I see a pattern in various teams where there is a kind of acceptance for the level of quality, also termed as , AQL (Acceptable level of quality). For a mission critical system , every 1 defects is very costly and it can even pose danger to lives of people. So zero defects is not a choice but the requirement in this context. Another example is an online shopping system where a minor defect may not cause that much harm as the former. The level of process stems also changes based on this. Also it highly depends on the AQL.
  • Trust in the Team Trust among the team members is an important factor for deciding the process steps. Some examples- Team conducts manual logical code reviews, whether records for the code reviews should be maintained. It depends on the team trust and how responsible the team is in ensuring that the team agreement is followed with the right objective. Every step in the process is added to ensure repeatability. If the team members can ensure without the records then it is good. Processes in team becomes less heavy if every team member trust on each other and completes the activities as agreed upon.
  • Some mandatory practices that is recommended for the Agile Teams Simple Design, Automated Testing, Automated Inspection, Continuous Integration , Collective Code Ownership, Iterative Releases, Customer Demo are some of the practices which Agile Teams should follow. In my opinion team also should not do very detailed design if it is not required. Each team to use common sense based approach to decide this rather than written rule. If rules are there it is good but there need to be enough flexibility to change the rules.
  • Not a right idea to remove the existing process, governance completely It is recommended that teams change the existing process which is working well and take a step by step approach towards adopting agile. Governance is something which is here to stay irrespective which process model we follow. Governance helps in the management visibility and attention. It is good to have governance as it ensures that there is enough mechanism in an organization to ensure that all projects deliver successfully. Agility is all about people and the amount of process to be followed also depends on the people who are doing it. Teams should use the common sense based approach based on the team dynamics, business situation and domain for defining the process. Nobody can give any silver bullet solution for this. Only best practices can be referred.
  • References
Agile Software Development - The Cooperative Game - Alistair Cockborn ( Alistair Cockburn and Jim Higgsmith Series Editors

Thursday, March 24, 2011

Agile Iterations Test Challenges - Test Automation

In this series “Agile Iterations and Test Challenges”, I would try to bring my perspective of some of the test challenges with respect to Automation during the Iterative releases.

Unlike in the V Model and the waterfall model where the testing time is dedicated 2-3 months for a typical was 50-100 kloc projects, in Agile Iterative life cycle this is split into each of the iterations. Each Iteration is tested by the test professionals and is certified about the quality of the release. This work is done in collaboration with the development team. During the iterations the test team participates actively in the brainstorming and provides active contribution towards the various customer scenarios from the test perspective. I have seen that in most of the organization the test staff is relatively less staffed. The typical ratio of Tester to developer is around 1:3 or 1:4 or may be less. The tester tests at each of the user story level. Sometimes the pace at which the developer completes the story is much faster than the tester can complete the story testing since the number of tester is less and also due to poor infrastructure. The developer testing is mostly at unit testing level. For the functional testing mostly the team relies on the testers. Some of the practices of automation like have a scalable automation framework, good test suite organization, test naming convention; test logging etc. is slightly weak from the test perspective. The Iteration level automation is weak and sometimes not complete. Since the Iterative releases are being given at every 2-3 weeks once and the testing also happens parallel. Due to lack of good automation, I have seen test sometimes is not able to cope up with the pace of the releases. Due to this the quality of the software sometimes suffers.

  • Test Automation Framework Scalability- Refer to my earlier post “Top Reasons why Continuous Integration practice fail or result not seen “where I have given some aspects that should be considered for the test automation framework. It is observed that the Test framework either focuses on either the tool part or the scripting part. The Test Frameworks does not ensure that the SUT system architecture is taken into consideration while designing the overall automation framework. This creates issues, where the frameworks are not scalable and there are issues related to overall test execution later. Test Teams must ensure that the Automation framework considers all the aspects of testing like the system under test architecture, test inputs, test outputs, SUT precondition program state, SUT post condition program state, environmental inputs and outputs, component dependency, APIs , capturing the results, analysis of the results etc, the various monitoring tools. In the following sample system the automation framework should be divided into each of the respective areas like GUI, APIs.

  • Test Suite Organization, Naming Convention - It is seen that the test suites are not organized well based on the features and the functionality. The unit testing, functional suites, performance, reliability, volume testing suites should be rightly organized at each of the feature level. Sometimes the test cases are run as monolithic systems where all the test cases are run at one go with no organizations. There is lack of appropriate naming convention due to which it is not clear which functionality is failing.

    Some of these issues is due to lack of enough competency & awareness and others due to readiness for the iterative testing. It is important as agile teams to plug these gaps.

References

1. Agile Testing- A Practical Guide for Testers and Agile Teams- Lisa Crispin, Janet Gregory

Tuesday, March 22, 2011

Agility is all about people

"If you put fences around people, you get sheep"- William McKnight, President and Chairman (1949-66), 3M.

"What is Agile?", " How can we do Agile?", "Are you Agile?", "Measure whether the team is Agile", "What practices we should follow to be become really agile", "Is this team 100% Agile or 50% Agile"..
These are few questions which are frequently asked by various stakeholders of the organizations /(s) with which I have been associated with. I am sure you also would have heard such kind of questions in your day to day execution of project..
Well, Let me put my perspective of Agility..

Agile means quick , active, lively in literal meaning. Agility is the pace at which we respond to the customer and provide what the customer need. The team need to be really quality conscious and have practices & processes that can help in faster response to ensure this.

To be Agile , it is important that the people associated with the project is highly motivated. They should have the shared dream to be successful. Team should take pride in working together and executing the project. Team should be able to define the rules of the project and follow them well. Team should decide when to meet for the daily standups. Team should collectively decide the appraisals of each other through the 360 degree feedback. There should be collective ownership for the delivery and all should work towards ensuring that the common goal is met. There need to be sufficient flexibility in the team for changing the rules of the project as the situation demands. The Scrummaster or the relevant role should support the team in following the rules and protecting the team well.

All the practices of Agile (eg. XP, SCRUM) gives very high focus to the agility of people. In fact all the practices of Agile works effectively only if the people executing it executes with the real objective in mind. I have seen tasks getting completed just because somebody wanted it to be completed. I have also seen tasks getting completed where the whole team had a vested interest to complete and they strived hard to complete. The difference is very visible. The quality of the second one really shows. In my opinion there is no alternative to have a highly motivated and energized team to have a good agile team. If any team want to see their customers really happy and deliver what they want, they must have a motivated and energized team to execute the project. Unlike other industry, software development is highly people centric. So, of course, it is different and it should be handled differently. We must encourage team to open up and build up a very positive environment of Trust where the members feel motivated, energized and feel like doing anything for achieving the common goal. Real Agility can only be achieved by this. The practices of Agile are just a means to achieve this. There can be more and better practices which can be found. But we need to keep people as our centre of focus.

Building a highly self organized, motivated and energized team does not mean that Business is not the focus. Our team exists due to the Business and we need to do everything possible to ensure that our business is successful. A self organized and motivated team can achieve and deliver more business..

References
1. The Art of Agile Development- James Shore & Shane Warden
2. The Software Project Manager's Bridge to Agility- Michele Sliger and Stacia Broderick

Thursday, March 17, 2011

Top Reasons why Continuous Integration practice fail or result not seen


In this post I would try to bring my perspective of what are the top reasons where Continuous Integration fails or in many cases the benefits are not seen immediately. Many cases I have seen that team looses hope and feel that it is an overhead which Agile practices has brought in. One of the reason may be that the Team / Team member or the management is looking for a quick solution without deep thinking about how Continuous Integration practice can be done really well.
Among many of my readings I have found that the article by Martin Fowler is very useful. Thanks to Martin for his writing:
http://martinfowler.com/articles/continuousIntegration.html

Reason 1- Every team situation, competency , technology, domain and dynamics is different. Just copying the CI Design or roadmap from some other team is a wrong idea. Every team should have their own vision about how do they want the CI to look like. What all they want to run in the Continuous Integration System. Some teams try to run all the tools of inspection, all test cases together and starting with real continuous integration immediately without the infrastructure in place. That may not be a good idea in my opinion. It is always better to have a step by step approach. We can start with periodic build, incremental build and slowly move into the continuous integration approach. But if the team really have the competency then they can start immediately. It is really required to do this analysis.

Reason 2- Assuming that all the team members are very good in test coding skills is a wrong idea. Many times it is found that the test suite organization skills are poor in team members and there is no systematic training. The test code writing skills are not good in some cases due to which the test cases does not work properly. This is one of the reason where CI does not work effectively and there are frequent build failures.

Reason 3- User stories are not granular enough. During the user stories documentation I have seen that the stories has not been written with an overall perspective of granularity so that the developers can really check-in the code frequently and also if the story card can be realized effectively in short period. This is not quite easy and I am sure many people may have different opinion about this. One of the reason which I have seen for this is that the Business Analyst does not write the story as vertical slices from the user perspective. It does not depict the end to end functionality in the story. The requirements are sometimes written in a modular way. Due to this it is very difficult for a coder to checkin at frequent intervals. One pattern is observed that this issue is actually not known and we expect Continuous Integration to work.

Reason 4- CI should be actually run in the clone of production environment. But in big products which are used by many customers there are many environments and the multi-combinational testing, it is required that the strategy of testing is analyzed deeply.
Following is a good example -
Try to answer this

Each user on a computer system has a password which is generally 6-8 characters long, where each character is an uppercase letter or digit. Each password must contain at least 1 digit.
How many password combination is possible.?

The answer is:
2,68,4,483,063,360 possible variations of password exists
1 Test Case Design Time = 1 minute ,60 Test Cases = 60 minutes
1 day= 480 Test Procedure , 155 years to create and execute a complete Test.

In many cases I have seen the team don't analyze the stategy and the CI is run in some combination which is actually not the right representation of the production environment. Teams can use some of the techniques like parwise testing / OAT(Orthogonal Array Testing) to analyze the right combinations. But it is important to use these techniques with good judgement about the test sufficiency and coverage. The Test Strategy is really important to understand the real customer environment, where the test suites should be run and this work should happen during the Infrastructure readiness time for CI,not during the Test Execution time.

Reason 5- The Test Frameworks does not ensure that the SUT system architecture is taken into consideration while designing the overall automation framework. This creates issues, where the frameworks are not scaleable and there are issues related to overall test execution later.
Test Teams must ensure that the Automation framework considers all the aspects of testing like the system under test architecture, test inputs, test outputs, SUT precondition programe state, SUT postcondition programme state, environmental inputs and outputs, component dependency, APIs , capturing the results, analysis of the results etc, the various monitoing tools. In the following sample system the automation framework should be divided into each of the respective areas like GUI, APIs.
Here the test framework can be designed in such a way that the GUIs can be tested independently of the APIs. Most of the functionalities performed by the system might be tested through the APIs. It is better to automate the tests through the API as it is easier and more reliable. GUIs are normally fragile and goes through changes frequently.
Since the focus of the article is continuous integration, I may not elaborate more about the Test Frameworks. Important point is that for running continuous integration systems effectively it is important to have robust test automation system and the automation framework should be scaleable and reliable.
I have found this article very useful and I would highly recommend this for further reading.
http://www.softwarequalitymethods.com/Papers/autoarch.pdf

Reason 6- I have seen sometimes that the team does not have good build scripting skills due to which there are issues. Sometimes the CI Tool chosen does not support administration console for build dependency management etc where it becomes need that there need to be good knowledge on build scripting.

Reason 7- Overall CI Framework of the system is not very clear. Here CI framework does not mean Tool. It means how the different components in the overall system is organized and how it depend on each other and whether the Continuous Integration system is also organized in similiar manner. For big system it is very important that there should be multiple Component level CI System which further builds the overall System level CI. It is also seen that the build staging (Stages to ensure faster feedback in the respective CI System) is not very clear.
These causes issues where the CI takes longer time to execute and finally the team does not use the CI for actual feedback.

Some further reading

http://martinfowler.com/articles/continuousIntegration.html
http://cruisecontrol.sourceforge.net/
http://hudson-ci.org/
http://www.jetbrains.com/teamcity/

Tuesday, March 15, 2011

Continuous Integration- Powerful practice focussing on the team culture not merely tool deployment

Continuous Integration is one of very powerful practice that can used for the faster and quality delivery. If Continuous Integration has to be implemented well in teams, it is important to have the deep level of software engineering practice implementation right. If teams assume the Continuous Integration can be well done only if the same is thought about during the development phase then it may not be very successful.

CI is one of the most powerful practice that can help in ensuring that we have the working software available at any given point of time. It must be understoood that continuous integration is not just a tool deployment. It is a culture adoption.
In my opinion the team should have following aspects ( just mentioned few important ones) very well implemented during the software development life cycle:

  • During Requirements development ensure that the requirements / user stories are granular enough so that later developers are able to checkin frequently.
  • User stories should have the right acceptance test cases identified. Further when the test cases are automated it can be ensured that the basic acceptance test cases can be run in the stage 1 of the build so that the feedback is available early.
  • Test Automation is thought and designed from the scalability perspective
  • Test Suite Naming and Organization is well thought about before the beginning
  • Test Strategy should be well thought.
  • Testers and Developers are training on coding, test coding, test naming convention, build scripting etc.
  • Team is trained on CI
  • There should be a good private build setup.

The team must ensure that before the actual execution of the project, the team should have all he infrastructure ready so that the time can be really productive during the actual work and focus on the functional work rather than infrastructure readiness.

Following are some the varioius aspects of Continuous Integration

  • Continuous Testing
  • Continuous Build
  • Continuous Inspection
  • Continuous Feedback
  • Continuous Deployment and Of Course
  • Continuous Improvement :-)

In our further blogs we will talk about how to think about system perspective while thinking about CI.

Suggested Reading:

  • Continuous Integration- Improving Software Quality and Reducing Risk - Paul M Duvall, Steve Matyas, Andrew Glover

Agile Practices that can be adopted

The collection of Agile Practices of XP, SCRUM, Crystal etc can be used for faster and better delivery process. Following are some of the practices which team can think of adopting:
• Continuous Integration
• Automated Testing
• Collective Code Ownership
• Private Build
• Incremental Testing
• Iterative Delivery
• Product Backlog and Iterative Planning
• Daily Stand-up Meeting
• Simple and Evolutionary Design
• Customer Demo and Feedback
• Architecture and Iteration Modelling
• Epic and Story Card
• Pair Programming
• Test Driven Development

Adopting Agile- Some key strategy

Adopting Agile Principles and Practices is sometimes due to the hype created in the industry. Sometimes it is due to some fancy terms used by some people.

Before any organization adopting the agile practices, it is always better to understand the real meaning of agile. Just by following some practices the team cannot become agile.

During my readings I have found the book The Art of Agile Development - By James Shore, Shane Warden a very interesting read.

I will try to cover some of the pre-requisite for Agile Adoption from any team's perspective.

Strategy 1- Team agreement to follow Agile

I feel the most important point regarding the adoption of Agile strategy is the team acceptance that the agile practice deployment would help in present issues faced by the customer and better customer delivery. If the team members don’t want to use the practices and if it is forced by some other team or management to adopt agile, it probably may not work.

May be we need to have some strategy to adopt principles where there is awareness issue in team.

Strategy 2- Strong Management support and acceptance about the change

The next most important aspect is the support provided by management for this change. Management can be slightly tolerant from the perspective that even if it fails it is okay.
Also it will really help in bringing the change in the organization as it also requires some infrastructure support and othe related support

Strategy 3- Availaibility of Customer or in worst case Proxy Customer for Feedback Purpose

It is very important in Agile mode of development that customer be closer to the development team so that feedback can be given immediately about the progress of the work. In my opinion the biggest advantage of being Agile or following agile practices is to give the customer what they want.
It is better that the customer is avaialble during the development and the customer should provide feedback of the iterative development. In worst case we can have the customer representative or the proxy customer who can provide the feedback.

Strategy 4- Good understanding about the Agile Principles and Practices

Team should have a very good understanding about the Agile values , principles and practices.
Agile should not be considered as some silver bullet solution for all the existing problems. It cannot solve the problems with with magic wand. Also we cannot delete all the existing process of an organization and live in a virtual world of agility.
In fact there is nothing like this.
Every team need to identify their own way of being Agile and provide the customer the best delivery.
Teams must understand the agile values, be self organized and deeply motivated to give the best. Teams can come up with the operating rules and follow that.

Strategy 5- Team Organization

It is upto the way the team adopt agile. Agile works in teams based on the way teams adopt. Be it a small team or a big team each team must ensure that the teams are componentized well, divide the team into smaller groups and have a good structure in place. This really helps in ensuring that all aspects work well

Strategy 6- Adopt the practices of Agile with the real objective

Agile practices of XP or SCRUM is a collection of practices which complement to each other. It is always better to use the practices together.
For example if we are doing simple desing and if dont do TDD then it becomes difficult. Same way if team is doing Iterative Delivery without following Automation and Continuous Integration then it is next to impossible to give iteriative delivery in 2 weeks sprint.

All the practiecs of XP and SCRUM should be considered in clusters and adopted else there are chances of failure.

Agile Value- Customer Collaboration over Contract Negotiation

There were times when service providers used to negotiate with the customer for what services shall be provide and what not. There were all permutations and combinations done and finally both the party signs the contracts. The contracts has all the details right from what requirement going to be delivered to contract about how to handle changes. Any changes that comes later to the contract negotiation goes through a big bureaucratic process to ensure that each part project each other better. One of the important value of Agility is that there is a contract but rather than negotiating on the contract there is more and more collaboration with the customer . There are cases which we have come across where there are teams to which the customer says “ I don’t want the requirement as of now”, there is reply from the team that “ It is mentioned in the contract so we will deliver. After delivering we will take up change requirement”. This a good example of “waste”. An Agile team focus on delivering value and focus more on collaborating with the customer.

Agile Value- Working Software over Comprehensive Documentation

I remember days when the project manager used to ask the team members about the progress of the tasks and he gets the reply that it is “50% complete” or “82% complete”. Nobody knows what does “50% complete” or “82% complete means. Only the team member is aware of the status. Finally the project managers does some guess work about the completion status and projects the overall status as some x% as part of the project status report. The stakeholders are happy about the progress without knowing the underlying truth about the real progress of the project. In the Agile Model of Development if there is any need for status projection the status is always reflected in the latest build of the Continuous Integration Server. The feature which is not available as part of the build means the progress is not there. So the things are quite clear in agile mode of development.
Many times there is a myth we have observed that “Agility means no documentation”. Here we would like to bring our experiences into effect. It is to be noted that Agility is not a rule book where somebody can specify about how much to be documented at specific scenarios. Each project is different and situation also is quite unique. No experiences or scenarios can be compared. Now setting this context we would give the background. There are experienced Agile practitioners who feel that there is no need of requirement or design artefacts; they can directly sit with the customers and do the coding. There are set of experience agile practitioners who feel there should be some basic documentation of requirements and further to that the coding and testing process can start. And many such different experiences.. We can do search over the net and we can find many such experiences. There is nothing wrong in reading such experiences. But we should not get drifted with such thoughts or experiences. How much documentation or how detailed the documentation should be a call which team or organization can take based on the specific condition in which the teams are operating. We should not overdo neither should we underdo. It should be a balance. To find out the right balance is the challenge. The need of right and enough documentation depends on factors like criticality of the projects, experience and skill sets of team members, availability of right tools, maturity level of team and other factors.
In Agile Teams, the working building is always available. Continuous Integration practice is being followed by teams where integration is a non event. Each Build compiles the source code , runs the necessary test, inspection tools, other necessary tools and have the completed build multiple times a day.

Agile Values, Principles and Perspective

Agile Manifesto, which focusses on the Agile Values and Principles is well explained in the following website:
http://www.agilemanifesto.org/
In my opinion every team before embracing the Agile Practices must deeply understand the Agile Values and Principles well. This will really ensure that the team will adhere to the principles and not merely focuses on practices. We must realize that practices are just means to achieve agility.

Principles behind the Agile Manifesto
(http://www.agilemanifesto.org/principles.html)

We follow these principles:
Our highest priority is to satisfy the customer
through early and continuous delivery
of valuable software.

Welcome changing requirements, even late in
development. Agile processes harness change for
the customer's competitive advantage.

Deliver working software frequently, from a
couple of weeks to a couple of months, with a
preference to the shorter timescale.

Business people and developers must work
together daily throughout the project.

Build projects around motivated individuals.
Give them the environment and support they need,
and trust them to get the job done.

The most efficient and effective method of
conveying information to and within a development
team is face-to-face conversation.

Working software is the primary measure of progress.

Agile processes promote sustainable development.
The sponsors, developers, and users should be able
to maintain a constant pace indefinitely.

Continuous attention to technical excellence
and good design enhances agility.

Simplicity--the art of maximizing the amount
of work not done--is essential.

The best architectures, requirements, and designs
emerge from self-organizing teams.

At regular intervals, the team reflects on how
to become more effective, then tunes and adjusts
its behavior accordingly.

Agility

How to become Agile. It is a question which we face quite often when we interact with the software development professionals. Well, there is no answer to this. First, we have to define what Agile is. Again, unfortunately there is no one answer to this. There are so many factors to the Agility which we will try to make a noble attempt in this chapter.
Agility is about the human dynamics, the culture, the mindset, the discipline, the ability to do things right, the capability and skills, and so many other factors..
Is there a difference between the ways the software development is being done is normal development methodology vs agile mode of development. Well, there is a big difference in way we approach towards the software development.

Agile is about customizing the operational processes to the need and ensuring better quality and efficiency. Fortunately the Agile Community has come out with innovative practice which does not ask you to do analysis-paralysis. Some of the various flavours of Agile are XP, Scurm, Feature Driven Development, Cyrstal, DSDM.
XP and Scrum is very rich in technical and a management practices respectively. Many teams uses the hybrid of XP and Scrum.

It is very important to have a strong team who understands the spirit of Agile. Agile should not be forced upon the team members. It should be decision of choice. Agile way of working can only sustain if we have a motivated workforce. People should have a good buy-in to practice agile.

It is to be noted that just by seating together in at able does not mean agile. Also just by having standup meeting at a common time is not being agile. If agile is being deployed by the team leader or the management to meet certain hidden agenda then rest assured that the deployment will not be a good learning of something to smile about. Agile adoption should not be pushed from top management. Management should give direction.