Quick Introduction To Agile Software Development
In this article Prerana Patil gives us a rapid overview of the core ideas of Agile Software Development. The article talks of the features of agile, when to adopt it and when not to. It then goes on to describe the agile process and the steps involved in adopting agile in an organization. An easy to understand tutorial that focusses on the key ideas and points in agile adoption without getting into any of the fluff associated.
—
The literal meaning of the word agile, an adjective, is “Characterized by quickness, lightness, and ease of movement.” So this indicates that Agile Software development is about fast delivery of software with more ease of development. Classically, “Agile software development is a style of software development that emphasizes customer satisfaction through continuous delivery of functional software”.
Key Features of Agile Software Development:
- Iterative: Entire application is distributed in incremental units called as iteration. Development time of each iteration is small (couple of weeks), fixed and strictly adhered to. Every Iteration is a mini increment of the functionality and is build on top of previous iteration.
- Active Customer involvement: There is lot of client involvement and face-to-face interaction. Every iteration is tested and approved by client. The feedback obtained is implemented in subsequent iterations; thus minimizing risk and ensuring higher client satisfaction.
- Feature driven: More emphasis is on providing the required features in the application. 80/20 principle is applied to decide the 20% features which would be used 80% of the time.
- Fixed Time: Each iteration has a fixed time span in which it is delivered.
- Priority based delivery: Features are prioritized depending on customer need, development risk etc. High priority features are developed first. After every iteration, the project priorities are re-evaluated.
- Adaptive: The methodology in general is very adaptive, so that the application that is developed can cater to inflow of new requirements throughout its development. Goal is not to remove the uncertainty in the very beginning, but is to adapt to the changing needs.
- Empowered Teams: The project teams are generally small and have lot of interaction and communication. Since entire team is actively involved, team is empowered to take decisions. No separate team to manage project.
- People Centric: More emphasis is on using the adequately skilled people to do the development than on following the processes. The documentation and other non-development activities are minimized and more time is devoted to development and testing.
- Rapid development: Generally the development is done rapidly using light weight development technologies.
- More disciplined: Being rapid, everything has to be delivered correctly first time. So the process involves lot of team and self discipline Thus, it requires highly skilled and organized team members.
- Simplicity: Emphasis is on keeping things as simple as possible and being open to change.
Why should Agile Software Development be considered:
Benefits to the Customer
- Customer is more actively involved, and gets higher priority
- He gets to know regular and frequent status of the application
- Requirements are accepted after each iteration
- Since the methodology emphasizes rapid delivery, time-to-market is less. So the key functionalities can be available to use sooner.
- Delivery is defined by fixed timescale. So customer is assured of receiving some functionality by a fixed time period.
- More Testing is done, so better software quality is delivered
Benefits to the Project Teams
- Project teams are involved more actively in all the stages, have to ask right question. The teams collaboratively take the decisions and are more empowered.
- Since the development is Incremental, teams can focus on the specific requirements at any given point of time.
- More emphasis is on developing the application only, and not on documentation. Simple and minimal documents are used to exchange the views
- The teams receive frequent feedback as the testing is integrated; so the rework is reduced
- Less time is spent in gathering requirements as all the requirements are not gathered upfront and are implemented as and when they arise.
- So less time is required for planning.
- Less cost of development as rework, management, documentation and other non-development work related cost is reduced.
- Teams develop applications collaboratively and in cooperative environment.
Agile vs. Traditional Software development
Table below compares Agile methodology with traditional software development methodology of various parameters:
Parameter |
Traditional |
Agile |
Requirements |
Fixed |
Evolve |
Time & People |
May vary |
Fixed |
Customer Involvement |
Before, After |
During |
Negotiable |
Estimates |
Schedule |
Testing |
After code |
Integrated |
Feedback |
After |
During |
Concentration on |
Processes; reviews |
Workable software |
Focus |
Plan driven |
Value driven |
Stages |
Requirements, Design, Code, Test, Feedback |
(Plan-do-adapt)* |
Challenges involved in Agile Software development
- Agile is difficult as
It Requires more TESTING & active CUSTOMERS involvement
It impacts Management more than Developers. Management had to be more open, be actively involved in development process and more importantly allow the teams to take decisions. - Agile is More disciplined
The code may be integrated continuously, sometime after every update in source code repository. To ensure the application is always in workable state, all the code has to work fine always.
Higher(?) technical and managerial expertise is needed.
Each feature has to be completed before moving on to the next.
Needs teams and self-discipline - More Planning is needed
Since the planning is done frequently (for each iteration), and the plan is updated as and when needed more focused planning needs to be done. The plan has to be adaptive to meet the changing requirements.
When to (not!) use Agile
Before going Agile; Ask
- Is functionality split-able
- Is customer available
- Are requirements flexible
- Is it really time -constrained
- Is team skilled enough
Agile software development methodology is best suited for a project with
- Frequently changing requirements
- Not highly distributed environment
- Client open to lot of involvement and ready to invest time
To implement Agile methodology following support may be needed
- Organization Support:
Culture: open to change
Hierarchy: ready to empower teams
Bureaucratic : less focus on processes & steps - Infrastructure Support:
Preferable the team and the customer should be co-located
Hardware support for continuous integration, pair programming and other practices - Team Support:
Highly skilled & flexible people with passion should be involved
More & frequent testing is needed
Though agile software development is suited for small project, many teams for e.g British Telecom has successfully implemented a huge project, involving several hundred developers situated in UK, Ireland and India, using the Agile Methodology. This indicates the strength of the concept.
The Process of Agile Software Development involves the following:
- Starts with a kick-off meeting
- The known requirements are understood and prioritized. The development is plan is drawn accordingly.
- Relative complexity of each requirement is estimated
- Sufficient design using simple diagrams is done
- Test Driven Development (TDD) approach may be used. TDD emphases on “writing test first and then writing code to pass the test”. It can help in avoiding over-coding.
- Development is done, sometimes in pairs, with lot of team interaction. Ownership of code is shared when pair programming is done.
- The code is tested more frequently. Sometime a dedicated “Continuous Integration” Server/Software may be used to ease the integration testing of the code.
- Depending on the feedback received, the code is refractor. Refactoring does not impact the external behavior of the application but the internal structure may be changed to provide better design, maintainability. Some ways of refactoring may be add interface, use super class, move the class etc.
The iteration life cycle stages are illustrated below:
Using Agile
Some of the artifacts that can be used while doing Agile planning, estimation & designing are:
Domain Model: Domain Model can provide and overview of sample entities involved in the application and their interactions with each other. For an employee working for a department and knowing some skills the domain model would be:
UI Prototype: User Interface Prototype can be created while designing the sample screens. UI prototype can be as simple as screen layouts drawn whiteboard.
Story Board: Story board depicts the application flow between the screens. It can also be called UI Flow Diagram.
The Story board below depicts the various screens accessible to Employee & Admin after Sign in:
User Stories: User Stories are simple statements using which user can tell the features needed in the application. They are the system requirements in user’s words.
For e.g Admin user may want to add employee details as a new employee joins the organization.
Prioritize Once user stories are identified, they are prioritized on the basis of user need, risk involved in developing it etc.
Release Plan: After prioritizing the user stories, a release plan will be decided which would include the number of iterations, features to be included in a Iteration. Release date would be decided on the basis of estimated time needed for the iteration.
Sample release plan can be:
Iteration |
Features |
Release Date |
0 |
Setup envi. |
10-June-08 |
1 |
All priority 1 stories |
23-June-08 |
2 |
All priority 2 stories |
26-June-08 |
3 |
All priority 3 stories |
.. |
4 |
All priority 4 stories |
.. |
Story point Estimate: To estimate the efforts needed for providing the functionality, story points may be allocated against each user story. The story point would indicate the relative complexity of the user stories.
For e.g. Searching an employee details by employee id may need double the efforts than needed for adding or editing an employee.
The time needed for developing a feature of 1 story point an be decided to derive actual estimates.
For e.g if 1 story point would take 3 days, means “Add Employee” functionality can be provided in 3 days.
Table below lists the User Stories, their relative Priorities & associated story points:
User Story |
Priority |
Points |
Add Employee |
1 |
1 |
Edit Employee |
2 |
1 |
Delete Employee |
3 |
1 |
Search Emp by ID |
1 |
2 |
Search by Dept |
3 |
3 |
Search all in a dept knowing a skill |
4 |
5 |
|
Total |
13 |
So all user stories with priority 1 have to be included in iteration 1, then estimated story points covered in Iteration 1 would be 3 and assuming each story point takes 3 days to develop it would take 9 days to release Iteration 1. Other estimation techniques like ‘ideal day’ may be used.
CRC Card : CRC cards indicate the details of Classes, their Responsibilities and their Collaborations with other classes.
Sample CRC Cards may look like:
Many other artifacts like Class diagram, other UML diagrams may be used depending on the need
Various Agile Software development methodologies
Some well known Agile Software Development methods are:
- eXtreme Programming: eXtreme Programming works on the principle of Simplicity, Communication, Feedback and Courage. The application is designed such that it is adaptive to changing requirement and is simple. Lot of client interaction and communication in team are key factors which help in development of adaptive application.
- Scrum: In Scrum, a list of all the deliverables for the project, named backlog, is identified and is continuously updated. Project is divided into small units named sprint, lasting 2-4 weeks generally. Deliverable, which is visible and usable increment, is decided for each sprint. Active communication in the team and follow-up using the backlog help and ease the development.
- Agile Modeling: Agile Modeling is used for modeling and documentation of software systems. It involves the software values, principle and practices which lead to software development in more flexible manner.
- Adaptive Software Development (ASD): Adaptive Software development works on the principle of continuous adaptation. It uses repeated series of speculate, collaborate and learn cycles to develop the application.
- Crystal Clear and other Crystal methodologies: Crystal family of methodologies is people-centric and focuses on enhancing the work of people involved. The logic is to start with small tasks and then build them up into larger ones. The overhead activities are reduced and efforts are diverted to work building. It’s a collaborative process involving tracking and iterations.
- Dynamic Systems Development Methods (DSDM): DSDM is based on Rapid Application Development (RAD) and can be used for projects which have tight schedule and budget. DSDM works on pareto principle-80/20 rule i.e. 80% of the business benefit comes from 20% of the system requirements. Therefore DSDM starts implementing this first 20% of system requirements to meet 80% of the business needs. And then it progresses to cover rest of requirements.
- Feature Driven Development (FDD): The main purpose of FDD is to deliver tangible, working software repeatedly in a timely manner. The development process involves 5 activities: Develop Overall Model, Build Features List, Plan by feature, Design by feature, Build by feature. Milestones are identified and progress is tracked on basis of the achievement of milestone.
- Lean software development: Lean software development is based on lean manufacturing principle. The principles followed are:
- Eliminate waste i.e. anything that does not add value to customer.
- Amplify learning by doing and testing things rather than documenting them and them implementing.
- Decide as late as possible thus keeping all the possible the options open as long as possible in the life cycle.
- Deliver as fast as possible. It works on basis of the fact that sooner the end product is delivered, sooner is the feedback received and sooner it is implemented in next iteration.
- Empower the team by keeping people motivated.
- Build integrity in by keeping the code simple and avoiding repetitions.
- See the whole so the problems can dealt at application level, product level, instead of dealing with them at minute levels.
- Agile Unified Process (AUP): AUP is simplified version of Ration Unified Process (RUP). It distinguishes Development Release iterations from Production Release iterations. It works on building up a model, implementing, testing and deploying it and then followed by configuration management. The focus is on the covering the high-value activities rather than covering every possible thing
Author:Prerana Patil has over 5 years of experience of working with Java and Java Enterprise Applications. She is currently working in Technology Practice group of Oracle Financial Services (formerly i-flex solutions limited). She is a Masters in Computer Science from UOP and loves exploring the new things in software world. She has been involved in various trainings on Java, Java EE and can be reached at prerana.patil AT gmail DOT com
very agile description. thanks for the posting.
Good piece of information in very concise and simple way.Thanks.
very very useful info Prerana. Thanks
Good Info Prerana. Thanks for posting it
beauty with brains like it……..:-)
Thank you! So helpfull article for Agile lifecycle understanding.
Very informative!
Please keep writing.
Hi, I am a student of BS and studying software engineering. It is very helpful for me. Thank you for sharing this.
Short, simple and useful. Enjoyed the article…
simple and precise..
this is indeed a good article about agile! Thanks.
excellent..thanks for such a detailed explanation
Very nice explanation about Agile model with advantages and disadvantages…Thanks alot
Very Good Description of Agile. Thanks a lot for your posting:)
Thank a lot for creating this article….
It is very useful … g8 work
Thank you for writing this great article.
Can i get real world Agile development case study
Great article .. very useful to understand agile for beginners
This is very helpful with the key information to get me started. Thank you.
Excellent. Thank you very much.
The tutorial is very well designed – precise and to the point.
Good one.
-Davist
Is there any standard Process defined for Agile Testing? or a Standard Workflow for Agile Testing?
Good ideas, very true.
Commendable, for a lucid way of presenting the intricacy involved in the subject.
I am sure it is helpful for the fundamental understanding with analysis.
Hi artical is realy good for introductory knowledge..
But it create many question abt agile methdologies.
like abt testing phase, b’coz of some reason we are not able to deliver on present iteration then what we can do wether iteration time is increased or it consider as backlog for next iteration.
as time span is abt 2-3 weeks (in scrum ) if work load increases will it not affect quality of work.
anyways thanks for such good artical..
My earlier comment was misplaced – did not realise you were leading into UTF-8 from UCS-2