Tuesday, May 13, 2008

Agile Planning -- Challenges

Many people who are new to agile software development, particularly recently graduated university students, believe the agile software development method is the “best” development method as it is not plan-driven method. In this case, they just jump into coding process without a thoughtful plan. This is not right. Planning is even more challenging in agile development than traditional development method.

Firstly, let’s understand what agile planning aims to solve. Suppose you want to build a spaceship which takes you to Mars, and you have gotten a beautiful project plan with all the tasks and deliverables scheduled for the next ten years. You stick with this plan and ignore further changes. So when you finally release the product then, are you going to be the first person on the Mars? Then answer is no. During these 10 years, many things will change. Someone maybe ahead of you or you may die tragically in the universe as the victim of a star war. Agile planning is designed to deal with these changes. By planning in an iterative and incremental way, developers can identify and adapt to changes. Only then we build a system that really meets the users’ needs on time and within budget. However, agile planning is more challenging as it appears to be.

The first challenge may come from users. Users always have new ideas about the product and never satisfied with the current one. As a result of this, the develop team must be empowered to make decisions. We should have complete ownership on the project and be able to reject a comparable amount of work in order to make sure the project can be finished on time and within budget. But this doesn’t mean we can ignore the users’ needs and changes. So user involvement is imperative. We must sit down with users several times during the planning stage and try our best to minimize the gap. Remember, in Agile Development, the scope is always variable, not the cost and timescale.

The second challenge is the ability to prioritize features and divide them into small and incremental iterations. Developers always plan project in logical order by functions. But this is not acceptable in agile development. The purpose of agile development is to produce the right product in the shortest time at the minimum cost. The right product means 80% of the product features user will use in the future. If we don’t prioritize features, we may end up running out of time or having built some of the less important features. Developers are also not good at presenting themselves. We knew that everybody in the team worked hard to produce this feature in the most beautiful way. How about users? In their perspectives, the only measure of an effective develop team is the delivery of working product. By working in short iterations, we can deliver working product in a short period of time. This provides concrete evidence that the project team is functioning in an effective manner.
Challenge can also come from developers inside the develop team. Because agile develop team is self-managed, it is important to have the people doing the work actively involved in planning. So that each person can understand the overall structure of the project and accept the schedule. Also people should choose their work. This makes them feel motivated and responsible. If we will use new technology in future projects, training should be planned in order to make sure every project member is familiar with the new technology. These processes ensure that the overall project team can work in a harmony to produce a product effectively and efficiently.

Wednesday, May 7, 2008

Agile and Outsourcing

At first blush, agile methods and outsourcing seem to be somewhat disconnected and irrelevant to each other. On the contrary, they have never been needed more by each other than now.

Benefits of Agile Process
IT Team seeks a number of benefits from Agile Development, such as improvements in time-to-benefits, overall quality and efficiency, team morale, the relationship between IT and business staff, and responsiveness to changes. Using Agile process, many large companies have cut their defect rates almost by 60% and customer satisfaction has increased by 30%.

Benefits of Outsourcing
The benefits of outsourcing map directly to the faster, better and cheaper challenges facing most application development organizations. Result of outsourcing shows approx. 44% increase in productivity, 30% competitive advantage and 20% customer satisfaction

Blending the Two

During the past 24 months, companies have begun to blend Agile process and outsourcing to realize incremental gains. The benefits that teams achieve already doing offshore or teams already doing Agile development are quite different.

  • Injecting Outsourcing into Agile development projects

The culture and geographic distance imposed by offshore outsourcing increases risk even further than just distributing an internal development team. However, offshore development offers opportunities to save money – over and above the benefits teams achieve with Agile development.

  • Injecting Agile processes into Outsourced projects

Properly injecting Agile techniques into an outsourced project can add improved responsiveness and business alignment to the list of outsourced benefits

To make outsourced projects more successful, IT teams have had to dramatically alter or improve their software process. For example, end users have had to learn how to specify their requirements carefully and understand that changing those requirements could cause massive cost and time overruns. Many end users struggle to deal with this rigidity, and their inability to deal with it can negate much of the savings the outsource model has to offer. Here, Agile development process comes handful, as it can actually address these key issues by injecting into this equation, the ability for teams to communicate in a rich way. Communication takes center stage, between the end user, the internal IT staff, and outsources consultants. Short iterations force frequent reviews so end users can approve or reject functionality before too much time or money has been spent on that deliverable.

Key Risks
For a highly complex or strategic projects, they shouldn’t be lend for outsource model, at least for the first few releases. Once major technology risks are addressed, the subsequent releases can incorporate outsourcing


Big names with Outsourced Agile Development process

Wednesday, April 30, 2008

XP Vs Scrum

XP (eXtreme Programming) is broad in scope and well define method of all of the agile methods. XP is the only method of Agile which provides deep and profound disciplines for the developers to do their works, like Test Driven development. It is a collection of techniques for day to day development work. While on the other hand, Agile is lightweight process that can be used to manage and control software and product development using iterative, incremental practices. It produces a potentially shippable set of functionality at the end of every iteration.

XP process
Customers define application features with user stories. To develop the system, Team should follow a common coding standard. Team Develops codes as per requirements in each user stories. Designer develop an automated unit tests to run throughout the system. Team can edit the code design as per the requirements as an iteration or refactoring. Team works in a pair programming. They can exchange their code with others, rather having a repository to place codes and all documents which also provides version control to roll back to earlier versions if required. Team members must have to release their work (code) every few hours, they can't hand in the code more than a day. Customer Representative is always there on-site throughout the development process as a part of a team.

Scrum Process

Scrum Master-Is an experience engineer who is responsible for making quick decision based on incomplete data, also responsible for dealing with hurdles that may come up in progress of Team Members; he acts as an interface between management and scrum team.
Product Backlog-Before you do anything else, you must align your development team with the business, nominate a Product owner who will be responsible for approval of the changes in backlog and also prioritized the work.
Scrum Team - Self organizing, committed to work, responsible to achieve deadlines, size of 5 -10.
Sprint - To develop a deliverable a fixed period is available. It includes design, coding, testing and documentation, Scrum Team can add or remove items in backlog.
Daily Scrum Meeting -15-30 minutes meeting on daily bases to discuss about what was achieved?, what will you achieve before next meeting.
Review - Team present the increment against management, customers, users and product owner, team tell story about their work experience. Scrum is very useful methodology for customize the problem by iterations planning and release planning.

Key Differences
Scrum provide management framework to avoid hurdles on the sprint of team. It in a formal way exposes the development activities of the team to non technical staff; it is a project management process not an engineering process. Scrums wrap the management process for helping and guiding throughout the project. It also explains idea about how team will be secure, and it says about the meetings and what those meeting for.
XP is a collection of techniques for daily development work. XP explains techniques like pair programming, test-driven development, lazy programming, Iterations. It contains all of the management ideas of Scrum and plus it contains engineering practice that is missing from Scrum.

Conclusion
Scrum is a subset of XP. Because many Scrum team accept that in their process of developing they are following XP practices like Acceptance Testing, Pair Programming, and Continuous Integration and Test Driven development.

Wednesday, April 23, 2008

Is Pair Programming Painful?

Key Concepts
The main idea behind pair programming is two developers working on a same coding module. Wherein the roles of the players may switch in fixed durations, also both players do not stand with similar compatibility and knowledge levels, i.e. one of the two would have better programming skills compared to other. This ensures that both programmers are fully aware of what the code is, how it works and why it was thought of this way.

These player's roles change fix durational hours. Generally these roles of players include driver and navigator as in the races. The driver is the primary coder, while navigator sits beside driver and perform reading, checking, some small testing, whilst thinking through problems and where to go next. So when coders lands up in a problem, now we have two people to look for the solution and not only the coder. As the code is being kept constantly reviewed by navigator, its less likely to contain bugs and hacks. Another major advantage of it is, as two people have differing specialities, these skills are transferred between each other.

Positive Aspects of Pair Programming:
1. Problem Solving - Two brains are working instead of one, so if one is doing the programming part, the other brain has already thought off the possible problems it might pop up, and thus it can start thinking for the solution as well
2. Faster Development - While one is at keyboard and coding, other can look for small typographical and silly errors, thus reducing debugging efforts and time.
3. Quality - Having input from two minds definitely improves the design process and reduces the risk of encountering mistakes.
4. Focus - Distractions like surfing on WEB, IM or emails are less likely since that would be rude to the person you are working with. Thus you can have intense focus on your goal, which is a huge difference while working alone.

The Disadvantage of Pair Programming, or rather implementing it in business, is to convince your officials for it, because "Peer Code Review" is other technique in contrast with Pair Programming can also be implemented or can say rather is in used by traditional approach. So if we have code reviewer, why would an organization like to invest more for Pair Programming. Also it demands double hours (i.e. double person for single job, though beneficial in context with effectivity), so it might be thought of as a wastage of resource.

But at the end, I personally would prefer it as a better approach compared to "Peer Code Review", yes though you can say its a waste of resource but at a long run, its NOT, because in "Peer Code Review", it needs to be well studies by someone who was out of the business during coding and thought process, so again reviewer needs to give alot of time to review, which in turn can be more waste of resource compared to Pair Programming.

Tuesday, March 18, 2008

Welcome Agile

Welcome in Agile world, here we talk about agile working with JAVA. Agile Development is a project based technique where you can manage to do Project Development in an small small iterations, based on periodic durations.