Skip to content

Latest commit

 

History

History
executable file
·
86 lines (73 loc) · 4.99 KB

agile_nontech.md

File metadata and controls

executable file
·
86 lines (73 loc) · 4.99 KB

Agile

Agile is a rapid application software development methodology that focuses on highly iterative design. The term was coined in 2001 with the publication of the Manifesto for Agile Software Development, which was written by a group of software developers who wanted to share what they had learned about project management. Agile is the latest popular example of a lightweight software development method. The first of these were developed in the 1990s as an alternative to the prevailing heavyweight methods, which were heavily micro-managed and rigidly planned. Many of Agile's lightweight predecessors are now considered agile methods.

Agile methodology operates on a number of core principles. Key to these principles is the idea of rapid, iterative design. The agile philosophy is that a product should be broken up into small parts that can be rapidly developed so that results can be shown to the client constantly. If the requirements for any piece of the product or the whole product itself should change at any point, the team can respond quickly to those changes because they haven't been developing something too unwieldy to redesign.

Team management is also critical. Each team must be cross-functional -- that is, a team that can organize and manage itself throughout the entirety of their piece of the project and each iteration of that piece. This means that a single team is continuously working in every step of development, from planning and design, to coding and testing. It can therefore respond quickly to any changes, instead of needing to wait upon another department or team.

Agile development has become the norm. While each company might have their own personalized implementation of agile, the basic principles are incredibly popular. Companies such as Microsoft, Facebook, Amazon, Spotify, and even teams at Google are using agile methodologies to respond to the needs of their clients and to rapidly get products published.

Terms

Co-location is a critical part of agile methodology. This is the idea that a team is all working out of the same space. Face to face communication allows for team building, faster communication and collaboration, and an easier time responding to the iterative process of agile development.

Pair programming is an agile technique that results in a significant improvement to product quality. Two people approaching a task bring with them different backgrounds, experiences, information, and expertise. Open discussion about how to approach and solve a particular problem often leads to a better solution than a programmer working solo, who might try to implement the first solution they devise.

Test-driven development leads to more agile code. The better unit tests are in place, the easier it is to keep code error-free and rapidly iterate upon it. Writing tests before writing code means that all the design work is done first, so that the product will do exactly what it needs to do. Similarly, refactoring is a key principle. Because each piece of code is iterated upon so often in the agile process, constant refactoring is important to keep clutter down and to keep code easy to maintain. With the presence of tests, developers can refactor safely, knowing that their refactoring won't have broken a key aspect of their product.

Continuous integration is the process of integrating newly developed code back into a main branch multiple times a day. With robust enough tests in place, code can safely be merged as soon as even a small feature is complete. This prevents needing to reconcile massive merge conflicts, which can be fairly common if multiple developers were working on multiple feature branches. Resolving these conflicts can sometimes take longer than writing the feature itself.

Alternatives

One of the oldest methodologies is the waterfall method. In the waterfall method, each phase in the development process is fully completed before moving on to the next one. For example, all the planning and design gets done and is approved before any of the coding starts, and all the code gets written before any testing happens. While this does lead to a well-documented, very stable path of development, the process does not lend itself well to any alterations made to the product partway through the process.

Prototyping consists of making multiple prototypes that will eventually be refined towards a final product. This allows a client to provide feedback on these prototypes and get a sense of actually working with the product, instead of having to produce feedback based only on documentation or descriptions.

The spiral method is an iterative design methodology that blends aspects of other methodologies based on risk analysis. Each iteration goes through distinct phases, and repeatedly passes through these phases until completion. Depending on the stage of development and the risk factors involved, the spiral method pulls in elements of the waterfall method, prototyping, or a basic incremental method in which projects are built in small pieces at a time.