Introduction to the Agile Software Development concept. Describing the background to SDLC methodologies including RUP, Prince2 and PMBOK, defining the difference between traditional methodologies to Agile and expanding on Agile methods and practices.
Project Management evolved from and through construction and engineering.I like this slide as it shows concepts software is trying to replicate. Building framework / foundations first, then the first level (phase 1) and 2nd level. But the entire structure needs to be engineered.
So... What is Agile? In a nutshell is being limber and flexible.
Project Management is about ensuring delivery of any product to these key elements:Meeting customer needs / requirementsControlling scope, cost and scheduleEnsuring qualityThe famous Project Management triangle is only 1 part of the project delivery spectrum. The triangle here shows a ‘Quality’ focus which I like.
Systems Development Life Cycle or Software Development Life Cycle is a software development concept that captures all steps from start (idea generation) to finish (decommissioning). This is a traditional life-cycle and is often referred to as the ‘Waterfall’ method.This is a great diagram that illustrates the direct relationship to engineering and construction where you don’t do the next step until you finish the first.
Traditional software development projects normally uses one or more of these methodologies:RUP (Rational Unified Process)PMBOK (Project Management Body of Knowledge) – USAPrince2 – UKAlthough Prince2 and PMBOK are generic project management methodologies and RUP is a software specific methodology, they all share one thing in common = heavy and bulky.RUP appears to be water in its approach (Inception, Elaboration, Construction and Transition), however it is heavily reliant on iterations. RUP is therefore in some ways, agile as well.
Over time, a new generation of methodologies, methods and techniques have developed. These introduced a more light-weight set of methods and techniques.So we have Agile. What does agile mean and where did the name originate from?
Agile comes from agility. The dictionary says agility is in a nut-shell the ability be nimble. In the software context this means adaptable to change.
So in 2001, a few people got together and defined the key concepts of Agile in software development.Individuals and interactions => communications and CollaborationWorking software => delivery if quality softwareCustomer collaboration => closing the gap between the project team and the customers and end usersResponding to change => the golden nugget, HOW? I’ll touch on this later on my blog at www.chaosdimention.comThe same group also extended the 4 core concepts with the “12 Principles of Agile”.
Okay, so here’s my own view of the methods and practices of agile.“Scrum”, “Lean” and “TDD” are my favorite ones and when merged they can produce excellent results.Extreme ProgrammingA method that promotes frequent “releases” in short development cycles. This method uses the “Pair Programming” practice in its core.ScrumAn iterative framework for controlling and delivering software projects with fixed iteration times. Scrum includes a number of practices including “Business Value” prioritization, frequent blitz meetings (called “Scrum”) etcLeanSoftware development comes from “Lean Manufacturing” which was pioneered by Toyota. It’s purpose is to “Eliminate waste” and focus only on things that create value to the client / customer. Examples of ‘waste’ in software development are: (1) Too much documentation, (2) Cumbersome or complex processes etcFDD (Feature Driven Development)Iterative and incremental process based on client-valued functionality (feature). FDD is a model-based process which relies on Object Modeling in its core.TDD (Test Driven Programming)Development led by test cases and unit tests and a developer that writes codes and refactors it to pass the tests.BDD (Behavior Driven Programming)Business-rules driven development that uses encourages collaboration between all stakeholders, especially non-technical ones. BDD extends TDD with writing natural language test cases.Pair ProgrammingAn “Extreme Programming” practice that is performed by two developers sitting at the same machine.Planning PokerCollective / consensus based estimation practice (commonly used in Scrum)
Here are some diagrams that illustrate key concepts of my methods and practices.Scrum provides the rigidness and structure to a development project. Estimating, planning and controlling techniques are very effectiveTDD encourages best quality delivery from developers to testers. Developers will have higher confidence their code meets the requirements by continuously running the unit tests and test case. As a result, testing effort will be shorter as less communications is required (backwards and forwards between the teams) and development estimates will become more accurate and solid over timeLean enables teams to be a bit creative and ensure that only necessary and value-creating activities should be followed
I found Agile methods and practices to dramatically improve software development projects:Estimation - using collective and individual point system coupled with frequent reviews of progress and re-estimation improves estimation tremendouslyRequirements - User Stories are a very effective way of capturing requirements and engaging clearly with the clientTesting – TDD increases quality exponentially as it reduces the risk of requirements being unclear or developers claiming a feature is done when it’s notInfrastructure – the habit of setting up a full-set of environments for a more rapid and iterative development process reduces infrastructure, release and deployment risks very earlyProcesses – overall, the agile practices, methods and processes provide a great tool-set for the modern software development project needs
Agile introduces challenges too.Small software companies normally tend to juggle many projects with limited resources. Some agile techniques will be hard to implement as the teams are constantly shifting from one project to another. In addition, blitz meetings must be very short and very effective. Perhaps a general scrum meeting (covering all projects) should be held instead of the targeted daily 15 minutes scrum for 1 project.Web-development companies also struggle with delivering quality work utilizing an agile methodology. Some key functions such as Information Architecture, Wire-Frames, Design cannot be fully agile due to the architectural nature of them. Other techniques or a hybrid agile-formal methodology could be implemented.Fixed price projects introduces high-risk for the software provider. In this case estimation must be thought through very carefully at the outset of the project and sufficient contingency must be allowed. Possible pitfalls could arise from client assumptions, client review cycles, development under-estimation, testing under-estimation etc.Many projects these days have team members spread across the globe. This introduces communication and collaboration challenges to the agile concept. Video conferencing, IM and other online collaboration tools must be used to maintain the constant flow of effective communications.
At the end of the day, projects are supposed to deliver to customer needs!The methods and practices chosen are insignificant, so long as the customer gets what they need!