Systems Development Philosophies

What is Agile?

Agile is a philosophy for the development of any kind of system. When it was first conceived, Agile was meant to be a solution to the painful difficulties that came with the Waterfall methodology; Waterfall projects were plagued with delays and cost overages, a very large ratio of these projects were never finished. Agile focuses on iterative development, so a small team will self-organize and deliver on a project whose end state is not yet well defined or understood. Some of the key differentiating features of agile that separate it from other development philosophies include the emphasis on self-organizing teams with little or no intervention from middle management; there is an iterative nature of the development process where features are delivered and refined cycle after cycle; and the project doesn't need any major upfront planning.

What is Waterfall?

Before there was Agile, there was Waterfall. Waterfall projects follow distinct development steps (the exact number and nature of these steps is subject to some debate), so a project will flow from requirements elicitation, to design, to development, to maintenance. This is the traditional approach to systems development and is often associated with construction or government projects. While this approach can be very effective when working on a construction project, it doesn't apply very well to software, because software projects and architectures have a much shorter lifespan than almost any construction project. This approach is acceptable when a client knows exactly what they're looking for, but such circumstances are not the norm. The key trait of this methodology is that the development proceeds from one phase to another and only in one direction.

There are a few different ways these kinds of projects get off track, the most significant is when the client changes their requirements after the first stage of development. When work is being done in a stage in which it does not belong, there is a high probability of project failure. This isn't meant to blame clients for failed projects, it is just meant to highlight how rarely Waterfall is an appropriate choice for developing software- it is the responsibility of the development team to determine how best to develop systems on behalf of the client.

What is Scrum?

The final philosophy I'll discuss is Agile-Scrum. Scrum is a particular flavor of agile that takes a slightly more prescriptive approach than plain agile. In scrum, development teams do their work in one-to-four-week "sprints" which is the name given to the iterative cycles which characterize agile development. In these sprints, small scrum teams of four to eight individuals choose what work they want to take on for that period during a single meeting at the beginning of the sprint called "sprint planning". At the end of the sprint, everything that the team committed to should have been completed and the work will be discussed in a meeting called a "sprint retrospective"; this is an opportunity for the team to discuss what went well and what could be improved. Everyday of the sprint between the planning meeting and the retrospective, there will be a "daily scrum" or "daily standup" during which the members of the scrum team will talk about what they did the previous day, what they are planning to do that day, and what, if anything, is blocking them from completing their work. All of these meetings will only involve the members of the development team and potentially one member acting as the "scrum master" who facilitates the conversation between the team and the project managers and product owners; this is a very important aspect of scrum: if members do not feel like they can be honest during the meetings, then there is no reason to have these meetings.

More Resources