This article is a quick FAQ of Agile. By reading this you will understand fundamentals of Agile and different ways of implementing Agile.
Part 1 Agile FAQ :-
Can you explain the concept of refactoring?
If you read the XP life cycle one of the things after we implement the task is code refactoring. Refactoring the process of changing the software in such a way that it does not change the behavior of the code but on the other hand improves the internal structure. No code can be perfect with architecture, coding conventions, high reusability at the first level itself. Normally it improves over the time. It helps developers to implement the necessary solution today and improve / make the code better tomorrow. Refactoring is the process of changing the system to improve the internal structure with out changing what the system does. Below are three major activities performed during refactoring.
Simplify complex code
XP is all about light-weight and simplicity. This holds true not only for a process but also for coding. When you see a code can be simplified, discuss the same with your pair developer and implement the same. For instance below is code which was further simplified in to one equation:

Figure: - Simplify Code
Move similar operations in to reusable code.
If we are having similar operations move them to one reusable code. For instance in the below class we have various sort function which sorts by phone, code, name and date. We can combine the same in to one function called as sort and make it simple.

Figure: - Reusable code
Remove duplications and redundancy
When a project has constrained time lines it's very much possible that project can have lot of duplications. So when developers have executed the task they can review for these kinds of duplications. For example the below figure 'Remove duplication' shows how the phone number duplication is removed from the customer table. The customer table had repetitive fields like mobile number, land line and office number. In abstract terms these represent telephone numbers. So we split the customer table in to two tables one is the customer table and the other is customerphone and built a relationship between them.

Figure: - Remove Duplication
Below is again one more scenario where we have an invoice class which has two methods ("GenerateInvNo" and "CreateInvNo") and they do the same thing, generate unique invoice numbers. We can refactor / improve the code by combining these two methods in to one.

Figure: - Code Duplication
No Code is perfect it has to be made perfect
What is a feature in Feature Driven Development?
Feature is a process which adds value to the end customer and it can be planned. In short it has two characteristics:
- We can plan and schedule a feature.
- It should be something that delivers value to the end user.

Figure: - Feature
In short it's not necessary that a feature maps with use case or a user story. It should also be planned and manageable. Feature are delivered in a given time box (we will discuss this in detail in the coming sections).
Can you explain the overall structure of FDD project?
FDD is an iterative methodology to deliver projects. Rather than delivering projects in one go manner we deliver the features with in time limits. So let's understand how the FDD cycle moves. We will have two views one is the over all flow and one is the detail iteration flow.
Below figure '"Structure of FDD project' shows step by step approach for FDD project.
- Identify the features: - In this phase we identify the features in the project. Keep one thing in mind features are not simple user point of view requirements; we should be able to schedule a feature.
- Prioritize the features: - Big bang theory thinking is bad. Many project managers think deliver everything at the first step itself, but that's practically difficult. Rather deliver first the most needed functionalities, then needed and then so called as over the top cream functionalities. To deliver in feature by feature manner we need to prioritize the feature list from the user's angle.
- Define iterations and time boxes: - The first thing which must have clicked your mind is we should deliver in group of features, but that's not the case in FDD. We deliver according to the size of iteration. Iteration is based on "timeboxes" so that we know how long iteration is. Depending on the timeboxes the features can be delivered or not is decided.The below points are looped for every iteration (below sections are covered in more detail in the coming up section).
- Plan Iteration: - At the start of every iteration we need to plan it out, how we are going to execute the plan.
- Create release: - We code, test and deliver according to the plan chalked out in "Plan Iteration" phase.
If everything is ok we move ahead if not we take the next iteration

Figure: - Structure of a FDD project
The above defined FDD cycle is an overall view. Let's go deep in to how every iteration will be executed. Below figure 'Steps in Iteration' shows how an iteration execution happens in a detailed manner.
- Iteration Kick Start: - The length of iteration is already defined but just in case you want to validate it, then this is the phase.
- Plan features for the iteration: - This is the phase where we prepare our WBS. We map the features to work packages in WBS. This plan has to be accepted by the end user.
- Study requirements: - In this section we write detailed requirement document / user story or use cases.
- Design Architecture: - This is the phase where we chalk out the overall architecture of the iteration and features.Once the design is done we review the architecture any issues we iterate to close the review.
- Write test plan: - Before we start coding we write test plans to validate the features of the iteration.
- Execution: - We do the coding according to the design decided in the design phase of the iteration.
- Testing: - Once the execution is done we run the test plans written in the 'Write test plan' phase. In case of any failures we move back to execution and fix the same. We also run the acceptance test plans from the user angle at this phase.
- Deploy: - Finally we are done and we deploy the same at the end customer premises.
- Next Iteration: - In this phase we analyze what features we have delivered and if not we pass it on to the next iteration. If everything is fine we take up the next iteration.

Figure: - Steps in a Iteration
Testing is done at end of each iteration. This ensures frequent checks on each deliverable of every iteration.
Can you explain the concept of time boxing?
Every iteration in FDD has to be limited to some kind of timelines. Deciding the length of timelines for every iteration is termed as time boxing. Same has been explained the previous question in a detailed manner.
When to choose FDD and when to choose XP?
Iteration in XP is small i.e. between 1 to 4 weeks. This iteration sounds good for smaller projects, but when it comes to large projects, iteration go in months. That's where FDD comes under picture. Iterations in FDD can go in months and probably years.
What is SCRUM?
SCRUM is a methodology which believes rapid changes of customer can not be solved by traditional approach. So it adopts an empirical approach where it believes problem can not be understood or defined. Rather concentrate on the team's ability to respond to the emerging requirements.










Sonu ChaudharyPosted Jun 8, 2016, 2:55 PM
good one ..