I started working on a contract with a local software company where I am helping them adopt Scrum. I’ve been “Scrumming” for over 2 years (yes, I am a ScrumMaster) and I really enjoy this type of work. I’m not doing any coding (that’s what my nights are for), I am pretty much helping them put the process in place and coaching them as they try to get a grip on the new methodology. So as I’m going through the process, I am realizing more and more that just because you are following an agile process, it doesn’t mean that you are Agile.
Being Agile means different things to different people, as a self-organizing team, the team is responsible for adopting agile software development techniques that will help them improve on what is delivered to the product owner as a sprint completes. Examples of agile techniques include:
– Test-driven development: Unit test cases are coded in order to execute new functionality. Anyone can run the test cases at any time and verify that new functionality doesn’t break existing test cases. Unit test cases can then be automated and executed as part of a build. This practice does not do away or QA testing as it a developer’s responsibility to look after and run the test cases. Test-driven development calls for a “test first” approach to development, but this can be adapted to include a unit test as part of the code deliverables.
– Refactoring: Code duplication is avoided by consolidating and relocating duplicate functionality.
– Continuous integration: As code is checked-in, a build automatically kicks off and the team is notified of any errors. The build includes unit tests, and can run anywhere from nightly to as soon as the code is checked in.
– Coding standards: Coding patterns and naming conventions are established and adhered to by the team, which makes cooperation between team members a lot easier. A developer does not need to familiarize him/herself with the coding practices of a sub-system if the same standards are followed by everyone.
– Automated acceptance/regression testing: By automating some of the regression testing, the team can spend more time testing new features and further automating testing. A repeatable process is important to insure better quality in future releases.
The Agile Manifesto tells us that these are the values of Agile Development:
– Value Individuals and Interactions over Processes and Tools
– Value Working Software over Comprehensive Documentation
– Values Customer Collaboration over Contract Negotiation
– Value Responding to Change over Following a Plan
So, there is a lot more to Agile than just adopting a process, but it’s a great start!