Agile software development includes a set of software development methods focused on an iterative approach to building software (as opposed to software development methods that focus on rigorous planning and scheduling in advance). Agile development means that tasks are broken into small pieces, and evaluated and built on as they are completed, with users and other stakeholders able to frequently see small, completed results.
Classically, the approach to software design and system development has been planned in advance, and done in a strict sequence. This has the advantage of predictably delivering a project on time, and letting stakeholders know in advance what to expect with minimal further input needed.
However, ultimately the waterfall method may result in more overhead, as initial specifications can’t respond to findings as software is built - for example, a new need emerging, an unexpected interaction occurring, or system architecture changes that can be taken advantage of. Once a stage is done in the waterfall method, making future changes is very costly, since it involves reevaluating the entire project and signing off a new set of specifications or requirements before further work can proceed.
Agile development does several things. It allows projects to adapt quickly, since changes are expected in advance. It minimizes risk, since users and other stakeholders are able to frequently evaluate results and change their desires. It also accelerates development, since superfluous requirements can be dropped early in the development cycle. Ideally, in an agile environment, even between official iterations the changes of many developers might be merged into the product and released nightly, or even continuously.
Facebook, for example, changes its codebase many times daily. It also emphasizes keeping software working throughout the development process. Continuous attention to high-quality software, and usable design, helps ensure a higher-quality product. At regular intervals, the agile developer team can also tune and adjust its behavior to improve future work. It also allows easier completion of much more complex products, with smaller teams that function as independent cells. Having a launchable product at the end of each small work unit also makes sure that bugs are eliminated quickly and early, making future development more efficient, and increasing flexibility at design and implementation time.
But new products are necessary to take advantage of agile development - for example, continuous integration tools, automated testing, and flexible databases. SQL databases, which require a schema defined upfront and subsequent (and costly) database migrations as schemas change, are more difficult to use with agile methods and impossible to use in a continuously integrated environment without significant additional engineering.
Databases that allow the storage of unstructured data, such as the NoSQL databases, support agile development by freeing developers from upfront and evolving schema specification.
MongoDB and Agile Development
MongoDB is built for agile development. It has dynamic schemas, which can evolve as applications evolve without requiring expensive migrations. In addition, MongoDB stores data using JSON-like documents, which map naturally to object-oriented programming.
MongoDB also includes automatic horizontal scaling, native replication and automated failover, rich queries with full index support, and more, delivering faster time to market and higher developer productivity. Read our MongoDB overview to learn more.