Tuesday, October 6, 2015

What is agile software development?

The literal meaning of the word  Agile - Ability to move quickly and easily.


Agile software development is a philosophy for delivering software to customers in a continuous and incremental manner.


What does continuous amount to, in practice?
It could be any interval from 1 day ( defect fix ) to one week (an enhancement) to a month (new feature) to 3 months (multiple features) or anything in between or more in extreme cases.
What do we mean by incremental? A software increment of value to customers. (Minimal viable product, a new feature or a new enhancement or a defect fix).


Agile software development can be adopted for all forms of software products. Be it a mobile application or e-commerce website or an enterprise software as a service (SAAS) product or a product that only deploys in enterprise customer IT environments.


There is no such thing as an agile software development team in isolation. True agile software development and delivery requires engineers and everyone in between engineers and customers to adopt an agile approach in serving customers. i.e. The entire organization has to adopt the agile philosophy.


To transition to agile, the organization has to absolutely clear on this simple and critical outcome of agile: Continuous and incremental delivery. The team has to then work backwards, and determine the systems, teams & business processes that need to be put in place to complete the transition.


Agile methodology can itself be adopted in an agile manner.
Agile methodology is most effectively adopted using a top down approach; from leaderdship to every ground level team member in every function; engineering, product management, marketing or sales.
Agile methodology is most effectively adopted from right to left in the value chain from engineer to customer; From customer facing functions back to the internal functions or departments and engineering teams.


Traditional businesses have been using the agile philosophy for setting up and running businesses for ages. Lets consider an example
You are an expert at baking cakes and have decided to build a business around it.You could initially start by testing your concepts with your family & friends, then identify a restaurant that is willing to add your cakes to their dessert menu. If your cakes are well received, you could then decide to extend your production capabilities to scale to a few more restaurants. At some point you might decide to setup your own outlet... and so on.


With the advancement, growth and commoditization of technology and connectivity, the software industry now has the same opportunity.
Here is an example of an continuous iterative technology product delivery to customers.
Lets consider businesses like MagicBricks.com or Housing,com which host websites to enable customers to rent or purchase apartments.
Once the business idea is validated, the first product deliverable can be the minimal capability required for owners to register and publish apartments available on rent, and seekers to register and express interest in taking up an apartment on rent, and exchange contact information with apartment owners to engage and go through with the transaction.

With this minimal product capability in place, the product can be launched in an agile and iterative manner across geographic areas, one city at a time. This approach can enable the business to focus on getting the product right in one city, and also ensure that the product (website) is not overloaded with traffic that it is not yet capable of handling. Once the product team has validated the product for a single location, it can then choose to build the right scale in the product to enable it to take on higher traffic and handle larger data sets in the backend systems. It is now in a position to rapidly iterate and expand across geographic locations.

As a second iteration, the product team can then go on build product capabilities for enabling customers to purchase new apartments and work with builders to register new projects and enable customers to discover apartments that match their needs.

At every stage of continuous engagement with customers (builders as well apartment seekers), the product team can use the opportunity to listen and take feedack from customers to continuously refine the product experience for the customer to get it to be as intutive as possible.

The product team can continue to add more capabilities to the product that continually add value to customers, and help the product and business in staying ahead of the competition.


This is too obvious an example and you dont have to be a software engineering professional to understand it. Agile software development is all about the art of making technology & software development transparent to the business or customers or shareholders. The organization should only have to focus on what value it has to deliver to customers, and software delivery systems, processes and teams should enable effective delivery of required capabilities in an continuous and incremental manner.


The transition of a traditional technology company or a technology enabled company from traditional product delivery mechanisms to agile product delivery can be challenging, but  tremendously rewarding for customers, organization and engineers.

No comments:

Post a Comment