Saturday, September 6, 2014

What is Agile?

What is Agile?
  • Agile development is what we use to develop software.
  • Waterfall is what competitors use to develop software.
Simple question - simple answer.

Countless development processes have been developed to speed up the development of software.
Examples being: kanban, scrum, xp, lean, SAFe, CMMi, and ScrumXP to name a few

Factoid: Even though discredited, Waterfall was developed to speed up development and improve quality.

1. Question: So what is agile?

Answer: Agile is any process that parallelizes development.

Example:

Let's say you are shipping product X. Your customers give you a list of requirements. One month later they ask why it's taking so long.

1.1. Waterfall Answer:
I'm sorry but first we need to understand the requirements, then build infrastructure, then create the product and then test.

1.2. Standard Agile Answer:
We have broken up your requirements into multiple parts and each team is working in parallel. However, they number of requests you submitted is too much for our team to handle. We either need more time or more resources.

1.3. Super Agile Answer:
Here is what we did. Here is our backlog. If you wish, here are the APIs that we currently use. Please be free to extend the product if you are able and willing to do so.

2. Question: So what is Agile?
Answer: It is a process where you parallelize the work and let many people work on the project at the same time. The more you can separate the tasks into multiple parallel tasks, the more agile you are.

2.1. Open Source Projects:
In my opinion open source projects hosted in repositories such as GitHub are the ultimate in agile, since anyone can fork the work and drive the project in ways no-one who started the project could foresee.

Agile is an evolutionary process that drives the development of a project. Each new contributor is free to add and change things. At the end of the day the best solution wins and is integrated into the main product.

2.2. Never say "By Design"
The key to Agile is the integration of diverse views into a product designed to satisfy the needs of the Customer.

Many developers defend the current state of a product by saying that the feature is by design. That is anti-Agile thinking. Any feature that fails to meet the needs of a customer needs to be removed or redesigned. Any feature that goes against the expectations of a customer Must be removed or redesigned.

It is true that some processes need to work in a certain way for logical reasons. This must be clearly documented and processes that satisfy the customer must be explained. However, just because something has been done one way is no reason why we should continue doing it that way.

Example: Microsoft Excel has a global undo stack. It was created that way from the beginning. However it breaks the encapsulation principle where work on one object shouldn't affect work on another project. Also, it is standard for all document editors to maintain a separate undo stacks for each document. That way, changing one document won't have unexpected effects on another document.

If you ask the Excel developers, they would say that it is by design - however that is a design that can't easily be defended, especially since I have lost work because of that so-called design.

3. Finally

Question:So what is Agile?
Answer: Agile is any process that exceeds (or at least satisfies) the customer's expectation, allowing for a greater revenue stream.