Agile Software Development – Cracking the Code
by Sahana Anantha Murthy
Part of the "All the things you need to know to be a great Drupal developer" blog series
Cassette, VCR, disposable cameras, pager, dial-in Internet, CD’s, CD-player, maps, encyclopedia, waterfall model for software development etc. Well this list represents things that make us nostalgic and remind us of the ugly truth of how things quickly become obsolete in the agile world of technology.
Agile methodology is one of those things that grew out of obsolescence. It was an evolution for software teams to finally move from the conventional waterfall model to something that was more dynamic. In an ideal world, Waterfall is perhaps the best ideology for development. Its linear and sequential approach should ideally ensure greater control on your project. Just like its name, it’s a step-by-step process where the customer requirements are first analyzed, next the changes are designed, then the entire code is implemented, and finally the code is fully tested, evaluated/validated. Typically, at the end of the life cycle is the maintenance phase to ensure the software works as expected.
Seems like the perfect plan!!! Yet not, how so???
Like I said, Waterfall is meant for an ideal world where there is no unpredictability. Now, wouldn’t that be absolutely boring!!!
Agile takes the “boring” out of the waterfall model. Lets face it, if you’re not agile then well, you’re not agile. Agile is a software development methodology that is based on iterative and dynamic development, quite opposed to the traditional waterfall software development life cycle. Development is done in small chunks iteratively; tested and verified frequently allowing teams to be flexible and more responsive to customer requirements.
Agile is more relatable to how things actually work I today’s software world. Things are not always black or white. There is a famous quote from the creator of Agile that says– “Software development cannot be made on an assembly line”. Everything cannot be synchronized and predicted. Inspired from lean manufacturing concepts, Agile takes into account the unpredictability and dynamic nature of software development.
“Never limit the innovative” is a resonating tag that runs in my mind when I think of Agile. Development is done in small iterations, usually bi-weekly sprints where use cases are created, developed and tested. At the end of each of these sprints, there is a shippable/deployable product available. You can also incorporate changes dynamically on the go and deliver the same at the next sprint drop. This cannot happen in Waterfall until the initial design and changes are fully implemented and deployed. On the flip side however, with Agile (pun-intended), developers are expected to be well “Agile”. Sometimes requirements, design, development and testing phases all happen in one sprint.
While, it seems like a lot, because agile is incremental, the project is typically broken down (divided) into smaller chunks that get added to the sprint backlogs and prioritized accordingly, enabling the team to focus on just the right amount of action items for each sprint.
Lets get into the taxonomy and the nitty-gritty of agile development now, shall we????
Scrum – Perhaps the most popular implementation of this methodology. Scrum is a type of software management technique in agile methodology that offers control, direction and structure to teams suing agile.
If Scrum is to be followed by the book, then each Scrum team should have the three main roles – Product Owner, Scrum Master and a cross-functional Development Team. The product owner assumes maximum responsibility with the success of the product, ROI and the sprint deliverables. The Scrum master however, is the main arbitrator for Scrum and ensures that continuous integration and best practices are adhered to.
Lets not forget the most popular aspect of Scrum – the standup daily Scrum meetings. Ladies and Gentlemen, these meetings are not just to stare at and compare each other’s footwear. ☺ Its a quick, succinct standup meeting meant to address what each person in the team did yesterday, what they plan to do today and what roadblocks they face to achieve their goals. It’s a great recap of what everyone in the team is trying to achieve.
Apart from the daily scrums, there are other periodic meetings for sprint planning, sprint demo and addressing backlogs and caveats. When done right (which many companies don’t), this can be extremely effective for lean software development.
XP – I consider Extreme Programming to be an offshoot of Scrum. XP is a programming methodology primarily meant to improve the quality of code that teams deliver. Along with smaller sprints, XP encourages frequent checkpoints in the form of pair programming and code review. There is frequent cross testing and validation of code quality and best practices. Personally, I enjoy pair programming, because not only does it help deliver good quality code, it also creates camaraderie in the team. Code reviews, however is a different story. Back in the day, code review had a reputation to seep in some degree of animosity between developers. Lets face it, we all like our code best. But, with version control tools, even the code review process can be streamlined.
Kanban – Inspired by the just-in-time lean manufacturing process, this methodology applies similar principles to software development. The underlying concept of incremental development resonates with Kanban just as it does with Scrum, but it is quite different from typical scrum management. Kanban does not impose a set of roles for team members. In fact, one of the principles of Kanban is to get started with what we have now and change how we function. The basic idea is to not overwhelm the developers with a set of sprint action items like we do in Scrum. With Kanban, the team creates a framework around the workflow of the development process allowing developers to pull out and work on a single action item at a time. This ensures that work-in-progress is limited to the single item pulled out by each of the members. As a result, there can be continuous delivery of code without having to wait until the sprint drop. Moreover, it allows developers to innovate and improve code dynamically on a daily basis. Due to all of these reasons, Kanban is slowly becoming the popular choice for agile management amongst companies.
I have so far discussed the basic ideologies behind the different agile development processes. The key to success with agile lies in execution, precisely why we find so many companies who claim to be following agile but are not doing so in reality.
Well, yet again, we have technology to the rescue!!!! There are great agile related tools available today that facilitate agile principles and provide a placeholder for sprints data, backlogs etc, making it imperative for members of the team to follow these principles the way they were meant to be.
Agile methodology revolutionized the way software teams functioned and inspired the adoption of many similar methodologies like continuous integration, source code management etc.
In subsequent weeks, we will be walking you through these concepts and many more topics that can make you a great Drupal developer.