ALM (Application Lifecycle Management) is an encompassing term used for all efforts involved from the inception of a software project through it’s retirement. But more often it is used to describe the ways in which software is written including the methodologies involved. In encompasses everything from requirements gathering, into design, coding, testing, and maintenance. ALM covers the way that teams function within each other, and is used to define a particular set of protocols in the attempt to improve the process in which projects are undertaken.
The SDLC (Software Development Life Cycle) refers specifically to the process of writing bits, it can be broken down into four major sections: Design, Development, Test, and Release. Once completing the last of these steps it continues back into the design phase. It describes
Waterfall development describes a system when all of the requirements for a software project are created, then design begins, then coding begins, then testing begins, then release begins, then maintenance begins. Flowing from one stage to another focusing on one large main release. Upon the completion of this maintenance cycles will be planned and released in the same way. In many places this model of software development has fallen out of favor due to it’s high chance for failure, as each action places the bulk of work on a new task that is only done once (i.e. we don’t start testing until all development on the project is complete).
Agile describes a series of processes and techniques that are used in the planning and process of building software. Their main metric for success is the successful release of software in a repeatable and predictable pattern. The idea is simply to break the project into smaller parts and preform the SDLC multiple times. By repeating this pattern multiple times beginning at the start of the project helps to build confidence in the process and can be ultimately helpful in negotiating a relationship with the customer.
If the process is repeatable there are less chances for the failure of the process to lead to surprises, estimates will become more and more accurate as you are able to gauge the productivity of team members. The main idea being that if something is done once then it can be difficult to accurately capture all of the possible problem scenarios. The larger the chunk of work that you are looking at the larger the risk becomes. To address this using an agile process we break larger tasks into smaller ones, estimate the amount that can be done in a small period of time (this is called a sprint or iteration), and placing everything that is not in that iteration on the back burner ( called a backlog ) until a later iteration. Design, development, testing and release are done for this subset of tasks.
With each iteration more working is completed bringing the project closer and closer to a completed project that will then be released as a “Major” release.
This is normal. Many times it is necessary to lay the foundation for software working with a smaller set of requirements but the idea is that since this is now a repeatable process your particular requirements will make it into another iteration. At the beginning of the iteration the backlog is reexamined.