There is something professional consultants may not want you to know:
You don’t need to make major changes to your development processes
in order to gain many of the benefits from Agile principles.
If you take the time to truly understand Agile (and not only repeat the Pros & Cons circling around the web), you’ll appreciate the fact that Agile is not a methodology but an approach to software development that can be applied to every methodology. Sure, methodologies such as SCRUM and XP were designed to make specific use of Agile principles, but this doesn’t mean you need to work this way in order to gain all or most of the benefits of Agile.
Some work Agile without even noticing it
A couple of months ago we talked to a customer who told us they wanted to work using Agile principles but had not had the time yet to implement SCRUM in their organization. The team’s manager mentioned that a SCRUM consultant had come to talk to them about implementing Agile, but after further review he decided it would be better to wait until their current release was out the door, within the next 6 to 9 months, to make all the necessary process changes.
This manager, being so impressed with what he heard, asked the team to make small changes and start implementing some of the ideas the consultant had suggested. And so, the team started having short 15 to 20 minute update meetings each morning over coffee and bagels.
Instead of having each programmer work on long tasks that could take between 6 to 8 weeks to complete, they started organizing tasks for shorter periods and worked in task teams of 2 or 3 programmers.
Another thing they did was to get the testers to work earlier and more closely with the developers, beginning during the coding phase itself, Testers would perform preliminary tests on the unfinished product and also give programmers ideas on how they could improve their Unit and Integration tests. As part of this process, programmers also “learned” how to run part of the manual test cases themselves before committing their changes as part of their “internal sanity.”
Finally, the manager asked the whole team to schedule a formal meeting with Product Marketing at the end of each month where they would demo the progress of the features. During these meetings Marketing would also provide feedback that could still be implemented for the current version’s development without delaying the release.
The manager told us that since they started working this way the productivity and the general working environment in the team improved greatly, and that he was really looking forward to implementing SCRUM in the team.
What he had not understood was that, without making any revolutionary changes to the way they work, they were already implementing an important number of Agile practices and experiencing their benefits.
The Road of Small Changes and Improvements
The story of this manager is a great example of how Agile can be implemented using small changes to your overall process. There is no real need to carry out a revolution in order to achieve many of the results you are looking to gain.
Following are a number of ideas that can be taken from the story above and that we believe can be implemented quickly regardless of which development methodology your team is currently using.
(1) Work in small/er chunks
Instead of working with a small number of very large requirements or tasks, break them down into smaller, more easily managed chunks that can be completed in shorter time intervals (days or weeks). This way you are making sure tasks don’t start taking up more resources than you originally allocated (because if your planning assumptions start slipping you will notice it within 2 weeks instead 2-3 months into the work) and most importantly, you will be able to deliver features faster to Testing and to Product Marketing and get feedback in time to make the necessary fixes and adjustments without affecting your release date.
(2) Increase the collaboration and communication between programmers and testers
If the idea is to get feedback about the features to the developers as quickly as possible then the best way to do so is to test sooner, many times, even in parallel to development.
You can achieve this in multiple ways, for example by inviting testers to run their test directly on the development environment as soon as parts of the features are ready (instead of waiting until everything is completed).
Another way is by having testers work with developers to plan and write their Unit and Integration tests in ways that will help them catch more bugs more quickly. And finally, how about we start teaching programmers how to run at least part of the manual and automatic tests written by the testers as part of their Sanity Sessions before committing their code? We see many teams where developers have their own Test Sets in PractiTest that they need to run before committing their code to the main branches.
(3) Have more automated tests and run them more often
This is one of the first principles applied by Agile teams but in fact, it is logical for every type of project. Make a commitment and a conscious investment in automation.
Start by instructing your developers to create Unit and Integration tests for each new feature or major bug fix.
You can also have your testing team create automatic tests to cover as much of your product as possible, and instruct your developers to code in ways that will make this functional automation simpler and more robust (for example, by using correct instrumentation of the GUI elements).
But creating your tests is not nearly enough. You need to have a framework that runs these tests as often as possible and provides immediate feedback to programmers whenever they’ve introduced a bug.
Today there are a number of very good Continuous Integration Frameworks (such as Jenkins, Bamboo or TeamCity), all of them can be integrated into PractiTest using our Robust API. Finally, you will also make sure your programmers comply with the golden of rule of “you broke it, you fix it. RIGHT AWAY!”
(4) Seek quick feedback and continuous improvement
The greatest enemy of improvement is human behavior: no one likes being criticized, and we mean that. No one!
That is why whenever we work on something, we don’t like showing it to others unless we feel it is complete and our audience will be able to understand “exactly” what we did.
But as you may already understand, this is counter-productive in programming because if we wait too much to get feedback then we won’t be able to implement any changes without missing our delivery targets.
So what can you do?
Basically, overcome the trauma of being criticized by making it a policy to have everyone present their progress to the rest of the team and product marketing – as they are working.
Work on creating a culture where people know how to give and receive feedback. You can achieve this by making sure feedback is always directed to the work and not to the person, and also by having people give feedback on both the good and bad things in the product (and not only focus on stuff that needs to be fixed).
It may not be easy at first, but it will be easier with time and the value gained by this is simply incredible.
(5) Embrace change and work accordingly
This may be the cornerstone of Agile – the realization that regardless of how hard you work on planning your project and how good you are at it, in the end, stuff will change and you will need to adjust your plans.
But, slogans aside, how do you embrace change?
First of all plan less, not less deep but yes, less for the long-term since you cannot foresee exactly what your reality will be a few months down the line.
Seek feedback sooner rather than later, make sure that if you do need to change features and plans, you know this 2 to 4 weeks into the project and not 6 to 9 months into it.
Plan for change and make sure your team is aware that change will indeed come and it will be accepted; this makes it easier for them when they are faced with that reality and need to cope with it.
Making small changes should be part of your work culture.
One of the best principles you can adopt from Agile is the understanding that just as the product and the requirements are constantly changing, so should your work processes be dynamic and adaptive.
Be open to asking questions about whether you are working in the best and most effective way or if you can make small (or large) improvements to the process?
Be open to feedback, seek it and even reward the people who give it. Once you are able to introduce the acceptance of feedback into your company culture, you will see how things really start improving, almost on their own.