TABLE OF CONTENT Rapid Application development (RAD) Processes ............................................................................................... 2 Various RAD (Rapid Application Development) Methodologies ........................................................................ 5 1. Agile Software Development ........................................................................................................................ 5 2. Joint Application Development (JAD) ......................................................................................................... 9 3. EXTREME PROGRAMMING (XP) ......................................................................................................... 13 4. Scrum Development Process ...................................................................................................................... 20 5. Lean software development (LD) ............................................................................................................... 24 References ........................................................................................................................................................... 28 1 Rapid Application development (RAD) Processes Today, business moves faster, and clients tend to change their minds more frequently over the course of a project’s development life cycle. Of course, they expect the development team to adapt to their needs and modify the structure of an application quickly. Fortunately, the use of scripting languages like Perl and PHP makes it easy to apply other programming strategies, such as rapid application development (RAD).Rapid Application Development process deals with Software engineering/management field. It refers to the type of Software development process which minimizes the pre planning phase, and results in more rapid software development lifecycle. RAD is a methodology for compressing the analysis, design, build, and test phases into a series of short, iterative development cycles. The idea behind this methodology is to start developing as early as possible so that clients can review a working prototype and offer additional direction. The application then gets built in an iterative process, releasing rich versions in short development cycles. RAD calls for the interactive use of structured techniques and prototyping to define user's requirements and design the final system. Using structured techniques, the developer first builds preliminary data models and business process models of the business requirements. Prototyping then helps the analyst and users to verify those requirements and to formally refine the data and process models. This results in a combined business requirements and technical design statement to be used for constructing new systems. Figure1. Showing two different development process Problem with Traditional style (Structure System Design and Analysis style) RAD has a number of distinct advantages over the traditional sequential development model Figure1. Some of the difficulties faced by the team member using traditional style of development are Applications took so long to build that requirements got changed before the system was complete. Resulting in inadequate or even unusable systems. Another problem was the assumption that a methodical requirements analysis phase alone would identify all the critical requirements, which is not very true. The cause of the problem was identified in the strict adherence to completion of one lifecycle stage before moving on to the next lifecycle stage. Specifically, building an application based on requirements that have been frozen at a point in time means that the longer development takes, the more likely that business needs will change and invalidate the requirements that the system being developed is based upon. 2 Factors for Rapid Development Fast development does not mean a "quick and dirty" process. There should be no compromise between speed of development and quality. Several factors contribute to the success of rapid development by improving both the quality of the delivered system and the speed of delivery. Factors important for rapid development include: * Intensive involvement of the end user in the design of the system. * Use of prototyping, which helps users visualize and make adjustments to the system. * Use of an integrated CASE toolset to enforce technical integrity in modeling and designing the system. * Use of a CASE repository to facilitate the re-use of proven templates, components and systems. * Use of an integrated CASE toolset to generate bug-free code from a fully validated design. * User involvement in the Construction stage, allowing the details to be adjusted if necessary. * Development of a task structure that encourages parallel project activities. Various Stages of RAD Requirements Planning The Requirements Planning stage consists of a review of the areas immediately associated with the proposed system. This review produces a broad definition of the system requirements in terms of the functions the system will support. The deliverables from the Requirements Planning stage include an outline system area model (entity and process models) of the area under study, a definition of the system's scope, and a cost justification for the new system. User Design The User Design stage consists of a detailed analysis of the business activities related to the proposed system. Key users, meeting in workshops, decompose business functions and define entity types associated with the system. They complete the analysis by creating action diagrams defining the interactions between processes and data. Following the analysis, the design of the system is outlined. System procedures are designed, and preliminary layouts of screens are developed. Prototypes of critical procedures are built and reviewed. A plan for implementing the system is prepared. Construction In the Construction stage, a small team of developers, working directly with users, finalizes the design and builds the system. The software construction process consists of a series of "design-and-build" steps in which the users have the opportunity to fine-tune the requirements and review the resulting software implementation. This stage also includes preparing for the cutover to production. In addition to the tested software, Construction stage deliverables include documentation and instructions necessary to operate the new application, and routines and procedures needed to put the system into operation. Implementation The implementation stage involves implementing the new system and managing the change from the old system environment to the new one. This may include implementing bridges between existing and new systems, converting data, and training users. User acceptance is the end point of the implementation stage. 3 Core Elements of Rapid Application Development RAD has many core elements that make it a unique methodology including prototyping, iterative development, time boxing, team members, management approach, and RAD tools. Prototyping A key aspect of RAD is the construction of a prototype for the purpose of jumpstarting design and flushing out user requirements. The objective is to build a feature light version of the finished product in as short an amount of time as possible, preferably days. The initial prototype serves as a proof of concept for the client, but more importantly serves as a talking point and tool for refining requirements. Developing prototypes quickly is accomplished with Computer Aided Software Engineering CASE tools that focus on capturing requirements, converting them to a data model, converting the data model to a database, and generating code all in one tool Iterative Development Iterative development means creating increasingly functional versions of a system in short development cycles. Each version is reviewed with the client to produce requirements that feed the next version. The process is repeated until all functionality has been developed. The ideal length of iterations is between one day (which is closer to Agile Methodologies) and three weeks. Each development cycle provides the user an opportunity to provide feedback, refine requirements, and view progress (in focus group session meetings). It is ultimately the iterative development that solves the problems inherent in the inflexible methodologies created in the 1970's. Time Boxing Time boxing is the process of putting off features to future application versions in order to complete the current version in as short amount of time as possible. Strict time boxing is an important aspect of RAD, because without it scope creep can threaten to lengthen development iterations, thus limiting client feedback, minimizing the benefits of iterative development, and potentially reverting the process back to a waterfall methodology approach. Team Members The RAD methodology recommends the use of small teams that consist of experienced, versatile, and motivated members that are able to perform multiple roles. As the client plays a vital role in the development process, dedicated client resources must be available during the initial Joint Application Development (JAD) sessions as well as Focus Group Sessions conducted at the end of development cycles. Development teams should ideally have experience in Rapid Application Development and should have experience with the Computer Aided Software Engineering tools. Management Approach Active and involved management is vital to mitigate the risks of lengthened development cycles, client misunderstandings, and missed deadlines. Above all management must be stalwart and consistent in their desire to use the Rapid Application Development methodology. In addition to enforcing a strict timeline, management must focus on team member selection, team motivation, and on clearing bureaucratic or political obstacles. RAD Tools One of the primary objectives of the Rapid Application Development methodology developed by James Martin in the late 1980's was to take advantage of the latest technology available to speed development. Clearly the technology of the 1980's is obsolete today, but RAD's focus of the latest tools is as important 4 today as it was when the methodology was initially created. This article has a section dedicated to tools following the process section. Advantages Increased Speed, As the name suggests, Rapid Application Development's primary advantage lies in an application's increased development speed and decreased time to delivery. The goal of delivering applications quickly is addressed through the use of Computer Aided Software Engineering or CASE tools, which focus on converting requirements to code as quickly as possible, as well as Time Boxing, in which features are pushed out to future releases in order to complete a feature light version quickly. Increased Quality, Increased quality is a primary focus of the Rapid Application Development methodology, but the term has a different meaning than is traditionally associated with Custom Application Development. Prior to RAD, and perhaps more intuitively, quality in development was both the degree to which an application conforms to specifications and a lack of defects once the application is delivered. According to RAD, quality is defined as both the degree to which a delivered application meets the needs of users as well as the degree to which a delivered system has low maintenance costs. Rapid Application Development attempts to deliver on quality through the heavy involving of users in the analysis and particularly the design stages. Disadvantages Reduced Scalability, Because RAD focuses on development of a prototype that is iteratively developed into a full system, the delivered solution may lack the scalability of a solution that was designed as a full application from the start. Reduced Feature, Due to time boxing, where features are pushed off to later versions in favor of delivering an application in a short time frame, RAD may produce applications that are less full featured than traditionally developed applications. This concern should be addressed as soon as possible through clear communication with the client as to what will be delivered and when. Various RAD (Rapid Application Development) Methodologies Different types of RAD development methodologies and utilize a selected method for a small project life cycle. 1. Agile Software Development Agile software development methods attempt to offer once again an answer to the eager business community asking for lighter weight along with faster and nimbler software development processes. This is especially the case with the rapidly growing and volatile Interact software industry as well as with the emerging mobile application environment application. Agile software development refers to a group of software development methodologies based on iterative development, where requirements and solutions evolve through collaboration between self-organizing cross-functional teams. Agile methods break tasks into small increments with minimal planning, and do not directly involve longterm planning. Iterations are short time frames ("time boxes") that typically last from one to four weeks. All iterations involves a team working through a full software development cycle including planning, requirements analysis, design, coding, unit testing, and acceptance testing when a working product is demonstrated to stakeholders. This helps minimize overall risk, and lets the project adapt to changes quickly. Stakeholders produce documentation as required. Iteration may not add enough functionality to warrant a market release, but the goal is to have an available release (with minimal bugs) at the end of iteration. An agile software project intends to be capable of releasing new software at the end of iteration. 5 At the end of iteration, the team reevaluates project priorities. Multiple iterations may be required to release a product or new features. Team composition in an agile project is usually cross functional and self-organizing without consideration for any existing corporate hierarchy or the corporate roles of team members. Team members normally take responsibility for tasks that deliver the functionality iteration requires. Agile methods emphasize real-time communication, preferably face-to-face, over written documents. Most agile teams are located in a bullpen and include all the people necessary to finish the software. At a minimum, this includes programmers and the people who define the product such as product managers, business analysts, or actual customers. The bullpen may also include testers, interface designers, technical writers, and management. Agile methods also emphasize working software as the primary measure of progress. An Introduction to Agile Software development Process Studies have shown that traditional plan driven software development methodologies are not used in practice. It has been argued that traditional methodologies are too mechanistic to be used in detail. As a result, industrial software developers have become skeptical about new solutions that are difficult to grasp and thus remain unused. Agile software development methods, “officially” started with publication of the agile manifesto, make an attempt to bring about a paradigm shift in the field of software engineering. Agile methods claim to place more emphasis on people, interaction, working software, customer collaboration, and change, rather than on processes, tool, contract and plans. A number of promising new methodologies claiming conformance to these agile principles have been introduced. Yet, no systematic review of the agile methods has been attempted [1]. Agile methods: Embracing Change Agile methods stress productivity and values over heavyweight process overhead and artifacts. The Agile Manifesto [3], a concise summary of agile values, was written and signed in 2001 although agile methods have existed since the early 90s. Agile methods promote an iterative mechanism for producing software, and they further increase the iterative nature of the software lifecycle by tightening design-code-test loop to at least once a day (if not much more frequently) as opposed to once per iteration [2]. Real Life Examples of Agile Development process A man was hanging Christmas lights and found a way to incorporate test driven development (TDD) and continuous integration (CI) into putting up the lights. He put up his lights, then turned them on and found he had a problem. Here he had broken the first rule of agile development - Test First! Of course, any reasonably competent handyman would have known to try plugging in each strand of lights before beginning the life-threatening task of suspending them from the roof - right? Case study on Agile Development Methods Based on industrial data from one company (Bitonic Solutions Inc. http://www.bitonic.ca/frontpage/index.html), a comparison in the productivity of agile methods with more conventional approaches have been done. Bitonic was using ad-hoc OO software development practices (use cases, UML design, etc.) before adopting agile development techniques. Besides switching to lightweight approaches in 2001, the company context stayed more or less stable over the timeframe providing the data for investigation: the data was gathered from work for the same client on the same product and the team was stable over the time when agile approaches were introduced [9]. 6 Results 5 releases were developed using agile practices, 9 releases followed their original process, 2 releases were in the transition phase and were excluded when we computed the average results below. The results indicate strong productivity increases after adopting agile practices. If productivity is defined based on number of features delivered to the customer, productivity decreases are visible after adopting agile development methods. The summary of the discussion is that Bitonic is now addressing much more complicated features than in the beginning of the project and, hence, would argue that a 4.96% decrease in the number of features delivered to the customer per hour in fact is an increase of their development productivity. Advantages of Agile Software Development Process There are lot of advantages which come along Agile Software Development, following are list of some of them [4]. One huge advantage of Agile Development over all other processes is that it emphasizes on testing as early as possible and as thorough as possible. Revenue, The iterative nature of agile development means features are delivered incrementally, enabling some benefits to be realized early as the product continues to develop. Speed-to-market, Research suggests about 80% of all market leaders were first to market. As well as the higher revenue from incremental delivery, agile development philosophy also supports the notion of early and regular releases, and 'perpetual beta. Quality, A key principle of agile development is that testing is integrated throughout the lifecycle, enabling regular inspection of the working product as it develops. This allows the product owner to make adjustments if necessary and gives the product team early sight of any quality issues. Visibility, Agile development principles encourage active 'user' involvement throughout the product's development and a very cooperative collaborative approach. This provides excellent visibility for key stakeholders, both of the project's progress and of the product itself, which in turn helps to ensure that expectations are effectively managed. Risk Management, Small incremental releases made visible to the product owner and product team through its development help to identify any issues early and make it easier to respond to change. The clear visibility in agile development helps to ensure that any necessary decisions can be taken at the earliest possible opportunity, while there's still time to make a material difference to the outcome. Flexibility / Agility, In traditional development projects, we write a big spec up-front and then tell business owners how expensive it is to change anything, particularly as the project goes on. In fear of scope creep and a never-ending project, we resist changes and put people through a change control committee to keep them to the essential minimum. Agile development principles are different. In agile development, change is accepted. In fact, it's expected. Because the one thing that's certain in life is change. Instead the timescale is fixed and requirements emerge and evolve as the product is developed. Of course for this to work, it's imperative to have an actively involved stakeholder who understands this concept and makes the necessary trade-off decisions, trading existing scope for new. Cost Control, The above approach of fixed timescales and evolving requirements enables a fixed budget. 7 The scope of the product and its features are variable, rather than the cost. Business Engagement/Customer Satisfaction, The active involvement of a user representative and/or product owner, the high visibility of the product and progress, and the flexibility to change when change is needed, creates much better business engagement and customer satisfaction. This is an important benefit that can create much more positive and enduring working relationships. Right Product, Above all other points, the ability for agile development requirements to emerge and evolve, and the ability to embrace change (with the appropriate trade-offs), the team builds the right product. It's all too common in more traditional projects to deliver a "successful" project in IT terms and find that the product is not what was expected, needed or hoped for. In agile development, the emphasis is absolutely on building the right product. More Enjoyable, Active involvement, cooperation and collaboration make agile development team, a much more enjoyable place for most people. Instead of big specs, we discuss requirements in workshops. Instead of lengthy status reports, we collaborate around a task-board discussing progress. Instead of long project plans and change management committees, we discuss what's right for the product and project and the team is empowered to make decisions. In my experience this makes it a much more rewarding approach for everyone. In turn this helps to create highly motivated, high performance teams that are highly cooperative. Disadvantages of Agile Software Development Process There are several advantages and disadvantages for any development process. Here are some of the disadvantages behind Agile software development process [4]. Active user involvement and close collaboration are required throughout the development cycle. This is very engaging, rewarding and ensures delivery of the right product. It's the fundamental principle in agile that ensures expectations are well managed. And since the definition of failure is not meeting expectations, these are critical success factors for any project. However these principles are very demanding on the user representative's time and require a big commitment for the duration of the project. Requirements emerge and evolve throughout the development. This creates the very meaning of agile flexibility. Flexibility to change course as needed and to ensure delivery of the right product. There are two big flip sides to this principle though. One is the potential for scope creep, which we all know can create the risk of ever-lasting projects. The other is that there is much less predictability, at the start of the project and during, about what the project is actually going to deliver. This can make it harder to define a business case for the project, and harder to negotiate fixed price projects. Without the maturity of a strong and clear vision, and the discipline of fixing timescales and trading scope, this is potentially very dangerous. Agile requirements are barely sufficient. This eliminates wasted effort on deliverables that don't last (i.e. aren't part of the finished product), which saves time and therefore money. Requirements are clarified just in time for development and can be documented in much less detail due to the timeliness of conversations. However this can mean less information available to new starters in the team about features and how they should work. It can also create potential misunderstandings if the teamwork and communication aren't at their best, and difficulties for team members (especially testers) that are used to everything being defined up front. The belief in agile is that it's quicker to refractor the product along the way than to try to define everything completely up front, which arguably is impossible. And this risk is managed closely through the incremental approach to development and frequent delivery of product. 8 Testing is integrated throughout the lifecycle. This helps to ensure quality throughout the project without the need for a lengthy and unpredictable test phase at the end of the project. However it does imply that testers are needed throughout the project and this effectively increases the cost of resources on the project. This does have the effect of reducing some very significant risks that have proven through research to cause many projects to fail. The cost of a long and unpredictable test phase can, in my experience of waterfall, cause huge unexpected costs when a project over-runs. However there is an additional cost to the project to adopt continuous testing throughout. Frequent delivery of product and the need to sign off each feature as done before moving on to the next makes UAT (user acceptance testing) continuous and therefore potentially quite onerous. The users or product owner needs to be ready and available for prompt testing of the features as they are delivered and throughout the entire duration of the project. This can be quite time-consuming but helps drastically to ensure a quality product that meets user expectations. Finally, common feedback is that agile development is rather intense for developers. The need to really complete each feature 100% within iteration, and the relentlessness of iterations, can be mentally quite tiring so it's important to find a sustainable pace for the team. 2. Joint Application Development (JAD) JAD (Joint Application Development) is a methodology that involves the client or end user in the design and development of an application, through a succession of collaborative workshops called JAD sessions. The JAD approach, in comparison with the more traditional practice, is thought to lead to faster development times and greater client satisfaction, because the client is involved throughout the development process. In comparison, in the traditional approach to systems development, the developer investigates the system requirements and develops an application, with client input consisting of a series of interviews. Joint Application Development (JAD) is a process used in the Systems Development Life Cycle (SDLC) to collect business requirements while developing new information systems for a company. "The JAD process also includes approaches for enhancing user participation, expediting development, and improving the quality of specifications." It consists of a workshop where “knowledge workers and IT specialists meet, sometimes for several days, to define and review the business requirements for the system [5].” The attendees include high level management officials who will ensure the product provides the needed reports and information at the end. This acts as “a management process, which allows Corporate Information Services (IS) departments to work more effectively with users in a shorter time frame [6].” Basic Components of JAD session Figure 2, shows various components of JAD session. The descriptions of these basic components of JAD session are listed below [8]: Executive Sponsor: The executive who charters the project, the system owner. They must be high enough in the organization to be able to make decisions and provide the necessary resources and support for the project. They might attend the opening and closing session. 9 PROJECT Leader/manager: Generally the leader of the application development team answers questions about the project regarding scope, time, coordination issues and resources. They may contribute to the sessions as long as they do not inhibit the participants. FACILITATOR/SESSION LEADER: Chairs the meeting and directs traffic by keeping the group on the meeting agenda. The facilitator is responsible for identifying those issues that can be solved as part of the meeting and those which need to be assigned at the end of the meeting for follow-up investigation and resolution. The facilitator serves the participants and does not contribute information to the meeting. Scribe/Modeler/Recorder/Documentation Expert: Records and publish the proceedings of the meeting and does not contribute information to the meeting. PARTICIPANTS: Customers in the business area directly or indirectly being affected by this project, who are experts in their field and can make decisions about their work. They are the source of the input to the session. OBSERVERS: Generally members of the application development team assigned to the project. They are to sit behind the participants and are to silently observe the proceedings. Figure 2: A typical JAD meeting room Steps in Performing JAD There are 9 key steps in performing JAD process [7] 1. Identify project objectives and limitations it is vital to have clear objectives for the workshop and for the project as a whole. The pre-workshop activities, the planning and scoping, set the expectations of the workshop sponsors and participants. Scoping identifies the business functions that are within the scope of the project. It also tries to assess both the project design and implementation complexity. The political sensitivity of the project should be assessed. Has this been tried in the past? How many false starts were there? How many implementation failures were there? Sizing is important. For best results, systems projects should be sized so that a complete design - right down to screens and menus - can be designed in 8 to 10 workshop days. 10 2. Identify critical success factors, it is important to identify the critical success factors for both the development project and the business function being studied. How will we know that the planned changes have been effective? How will success be measured? Planning for outcomes assessment helps us judge the effectiveness and the quality of the implemented system over its entire operational life. 3. Define project deliverables, in general, the deliverables from a workshop are documentation and a design. It is important to define the form and level of detail of the workshop documentation. What types of diagrams will be provided? What type or form of narrative will be supplied? It is a good idea to start using a CASE tool for diagramming support right from the start. Most of the available tools have well to great diagramming capabilities but their narrative support is generally weak. The narrative is best produced with your standard word processing software. 4. Define the schedule of workshop activities, Workshops vary in length from one to five days. The initial workshop for a project should not be less than three days. It takes the participants most of the first day to get comfortable with their roles, with each other, and with the environment. The second day is spent learning to understand each other and developing a common language with which to communicate issues and concerns. By the third day, everyone is working together on the problem and real productivity is achieved. After the initial workshop, the team building has been done. Shorter workshops can be scheduled for subsequent phases of the project, for instance, to verify a prototype. However, it will take the participants from one to three hours to re-establish the team psychology of the initial workshop. 5. Select the participants these are the business users, the IS professionals, and the outside experts that will be needed for a successful workshop. These are the true "back bones" of the meeting who will drive the changes. 6. Prepare the workshop material before the workshop, the project manager and the facilitator perform an analysis and build a preliminary design or straw man to focus the workshop. The workshop material consists of documentation, worksheets, diagrams, and even props that will help the participants understand the business function under investigation. 7. Organize workshop activities and exercises, Facilitator must design workshop exercises and activities to provide interim deliverables that build towards the final output of the workshop. The preworkshop activities help design those workshop exercises. 8. Prepare, inform, and educate the workshop participants, all of the participants in the workshop must be made aware of the objectives and limitations of the project and the expected deliverables of the workshop. Briefing of participants should take place 1 to 5 days before the workshop. This briefing may be teleconferenced if participants are widely dispersed. The briefing document might be called the Familiarization Guide, Briefing Guide, Project Scope Definition, or the Management Definition Guide or anything else that seems appropriate. It is a document of eight to twelve pages, and it provides a clear definition of the scope of the project for the participants. The briefing itself lasts two to four hours. It provides the psychological preparation everyone needs to move forward into the workshop. 9. Coordinate workshop logistics, Workshops should be held off-site to avoid interruptions. Projectors, screens, PCS, tables, markers, masking tape, Post-It notes, and lots of other props should be prepared. What specific facilities and props are needed is up to the facilitator. They can vary from simple flip charts 11 to electronic white boards. In any case, the layout of the room must promote the communication and interaction of the participants. Example of JAD process For example, for a Business Area Analysis, what is appropriate? A decomposition diagram, a high-level entity-relationship diagram, A normalized data model, A state transition diagram, A dependency diagram, All of the above, None of the above. It is important to define the level of technical diagramming that is appropriate to the environment. The most important thing about a diagram is that the users must understand it. Once the diagram choice is made, the facilitator designs exercises into the workshop agenda to get the group to develop those diagrams. A workshop combines exercises that are serially oriented to build on one another, and parallel exercises, with each sub-team working on a piece of the problem or working on the same thing for a different functional area. High-intensity exercises led by the facilitator energize the group and direct it towards a specific goal. Low-intensity exercises allow for detailed discussions before decisions. The discussions can involve the total group or teams can work out the issues and present a limited number of suggestions for the whole group to consider. To integrate the participants, the facilitator can match people with similar expertise from different departments. To help participants learn from each other, he can mix the expertise. It's up to the facilitator to mix and match the sub-team members to accomplish the organizational, cultural, and political objectives of the workshop. A workshop operates on both the technical level and the political level. It is the facilitator's job to build consensus and communications, to force issues out early in the process. There is no need to worry about the technical implementation of a system if the underlying business issues cannot be resolved [7]. Advantages of JAD If the above guidelines are followed closely, chances are, the JAD will be successful. A successful JAD session should provide these benefits [8]: Reduced system development time, In JAD, information can be obtained and validated in a shorter time frame by involving all participants (or at least a representative set of participants) who have a stake in the outcome of the session. JAD eliminates process delays and has been shown to reduce application development time between 20% to 50%. Improved system quality and productivity, much of the system’s quality depends on the requirements gathered. JAD involves users in the development life cycle, lets users define their requirements, thus ensures that the system developed satisfies the actual activities of the business JAD is quoted the best method for collecting requirements from the users, customers, or customer advocates. Reduced system cost, much of the system development cost is in terms of man-hours of both system developers and business users involved. Reduced development time reduces the labor cost for developers, as well as users. Important process like requirement gathering requires the involvement and commitment of business area experts. The cost of taking them away from their daily operation is very high. JAD can reduce the involvement time of these business experts and hence reduce the cost further. Cost is also reduced by catching errors, misunderstandings and mistakes early in the development phrase. Studies have found that a majority of system errors result from early analysis errors, and the earlier these errors are corrected, the much less they will cost. The JAD sessions let designers and users work together in the very early of the development cycle, defining the scope, requirements of projects, resolving conflicts 12 among different user groups. It put many efforts early in the life cycle in order to improve the quality and increase productivity and to reduce cost. Enhanced communication and relationship, JAD helps in building good relationships between business end-users and IT personnel. Cultivate ownership, Easier acceptance (buy-in) and stronger commitment by users. The involvement of business end-users is no longer on advisory or consultation spectrum. It is the participation and contribution in the project development life cycle. The more users contribute to the system, the easier for them to accept it and commit to it. Reduced function creep, is one of the best ways to reduce function creep, most of which results from poor initial requirements. Enhanced education for participants and observers, By participating in JAD and be the medium between other users and IT, the business end-users will be kept fully informed about the progress of the system development. Disadvantages of JAD JAD is very useful development process, but it also has some negative point like as follows: It opens up a lot of scope for inter-personal conflict. More expensive and can be cumbersome. 3. EXTREME PROGRAMMING (XP) Extreme Programming (XP), the methodology takes its name from the idea that the beneficial elements of traditional software engineering practices are taken to "extreme" levels, on the theory that if some is good, more is better. It is unrelated to "cowboy coding", which is more free-form and unplanned. It does not advocate "death march" work schedules, but instead working at a sustainable pace. XP is a software engineering methodology which is intended to improve software quality and responsiveness to changing customer requirements. As a type of agile software development (discuss above), it advocates frequent "releases" in short development cycles (time boxing), which is intended to improve productivity and introduce checkpoints where new customer requirements can be adopted. Other elements of Extreme Programming include: programming in pairs or doing extensive code review, unit testing of all code, avoiding programming of features until they are actually needed, a flat management structure, simplicity and clarity in code, expecting changes in the customer's requirements as time passes and the problem is better understood, and frequent communication with the customer and among programmers. Extreme Programming is successful because it stresses customer satisfaction. Instead of delivering everything you could possibly want on some date far in the future this process delivers the software you need as you need it. Extreme Programming empowers your developers to confidently respond to changing customer requirements, even late in the life cycle. Extreme Programming emphasizes teamwork. Managers, customers, and developers are all equal partners in a collaborative team. Extreme Programming implements a simple, yet effective environment enabling teams to become highly productive. The team self-organizes around the problem to solve it as efficiently as possible. Contrary to 13 what many think, extreme programming has nothing to do with large, difficult, or complex projects. Extreme Programming, or XP, is a lightweight discipline of software development based on principles of simplicity, communication, feedback, and courage. XP is designed for use with small teams who need to develop software quickly in an environment of rapidly-changing requirements. XP Practices XP can be summed up in twelve “practices” [10], they are described as follow The Planning Process, The XP planning process allows the XP “customer" to define the business value of desired features, and uses cost estimates provided by the programmers, to choose what needs to be done and what needs to be deferred. The effect of XP's planning process is that it is easy to steer the project to success. Small Releases, XP teams put a simple system into production early, and update it frequently on a very short cycle. Every release should be as small as possible containing the most valuable business requirements. Small releases provide the sense of accomplishment that is often missing in big projects. Metaphor, XP teams use a common “system of names" and a common system description that guides development and communication. Metaphors help in making the technology more understandable in human terms, especially to clients. At one level metaphor and architecture are synonyms – they are both intended to provide a broad view of project’s goal. XP uses metaphors in an attempt to define an overall coherent theme to which both developers and business clients can relate. Simple Design, A program built with XP should be the simplest program that meets the current requirements. There is not much building for the “future". Instead, the focus is on providing business value. Of course it is necessary to ensure that you have a good design, and in XP this is brought about through “refactoring”. Simple design has two parts: One, design for the functionality that has been defined; Second, to create a best design that can deliver that functionality. Testing, XP teams focus on validation of the software at all times. Programmers develop software by writing tests first, and then software that fulfills the requirements reflected in the tests. Customers provide acceptance tests that enable them to be certain that the features they need are provided. XP uses two types of testing: unit & functional. Unit testing determine whether a given feature works as intended. A programmer writes as many automated tests as they can think of that might "break" the code; if all tests run successfully, then the coding is complete. Every piece of code that is written is tested before moving on to the next feature. Refactoring, XP teams improve the design of the system throughout the entire development. This is done by keeping the software clean: without duplication, with high communication, simple, yet complete. It is ongoing redesign of software to improve its responsiveness to change. Pair Programming, XP programmers write all production code in pairs, two programmers working together at one machine. Pair programming has been shown by many experiments to produce better software at similar or lower cost than programmers working alone. Pair programming is a software development technique in which two programmers work together at one work station. One types in code while the other reviews each line of code as it is typed in. The person typing is called the driver. The person reviewing the code is called the observer or navigator. The two programmers switch roles frequently (possibly every 30 minutes or less).While reviewing, the observer also considers the strategic 14 direction of the work, coming up with ideas for improvements and likely future problems to address. This frees the driver to focus all of his or her attention on the "tactical" aspects of completing the current task, using the observer as a safety net and guide. Collective Ownership, All the code belongs to all the programmers. This lets the team go at full speed, because when something needs changing, it can be changed without delay. XP provides collective ownership as practice that anyone on the project can change any of the code at any time. Continuous Integration, XP teams integrate and build the software system multiple times per day. This keeps all the programmers on the same page, and enables very rapid progress. Perhaps surprisingly, integrating more frequently tends to eliminate integration problems that plague teams who integrate less often. 40-hour Week, Tired programmers make more mistakes. XP teams do not work excessive overtime, keeping them fresh, healthy, and effective. Programmers go home on time. In crunch mode, up to one week of overtime is allowed. But multiple consecutive weeks of overtime are treated as a sign that something is very wrong with the process. On-site Customer, An XP project is steered by a dedicated individual who is empowered to determine requirements, set priorities, and answer questions as the programmers have them. The effect of being there is that communication improves, with less hard-copy documentation - often one of the most expensive parts of a software project. Development team has continuous access to a real live customer, that is, someone who will actually be using the system. For commercial software with lots of customers, a customer proxy (usually the product manager) is used instead. Coding Standard, for a team to work effectively in pairs, and to share ownership of all the code, all the programmers need to write the code in the same way, with rules that make sure the code communicates clearly. XP practices are supportive of each other. For example if you do pair programming and let anyone modify the communal code, then coding standards would need to be necessity. XP Principles Basic Principles, describe below [11]: Rapid Feedback, Extreme Programming sees feedback as most useful if it is done rapidly and expresses that the time between an action and its feedback is critical to learning and making changes. Unlike traditional system development methods, contact with the customer occurs in more frequent iterations. The customer has clear insight into the system that is being developed. He or she can give feedback and steer the development as needed. So whether it’s hourly builds or frequent functionality testing with the customer, XP embraces change by frequent feedback. Whether it’s a fixing an object that failed a test case or refactoring a design that is resisting a change, high change environment requires a much different understanding of feedback. Unit tests also contribute to the rapid feedback principle. When writing code, the unit test provides direct feedback as to how the system reacts to the changes one has made. If, for instance, the changes affect a part of the system that is not in the scope of the programmer who made them, that programmer will not notice the flaw. There is a large chance that this bug will appear when the system is in production. Assume simplicity, XP ask each team member, “What is the simplest thing that could possibly work”. XP believes in making it simple today and create an environment in which the cost of change tomorrow is low. This is about treating every problem as if its solution were "extremely simple". Traditional system 15 development methods say to plan for the future and to code for reusability. Extreme programming rejects these ideas. The advocates of Extreme Programming say that making big changes all at once does not work. Extreme Programming applies incremental changes: for example, a system might have small releases every three weeks. When many little steps are made, the customer has more control over the development process and the system that is being developed. Embracing Change, The principle of embracing change is about not working against changes but embracing them. For instance, if at one of the iterative meetings it appears that the customer's requirements have changed dramatically, programmers are to embrace this and plan the new requirements for the next iteration. XP Values Communication, XP focuses on building person to person, mutual understanding of the problem environment through minimal formal documentation and maximum face to face interaction. Everyone is part of the team and we communicate face - face daily. We will work together on everything from requirements to code. We will create the best solution to our problem that we can together. Building software systems requires communicating system requirements to the developers of the system. In formal software development methodologies, this task is accomplished through documentation. Extreme programming techniques can be viewed as methods for rapidly building and disseminating institutional knowledge among members of a development team. The goal is to give all developers a shared view of the system, which matches the view held by the users of the system. To this end, Extreme Programming favors simple designs, common metaphors, collaboration of users and programmers, frequent verbal communication, and feedback [12]. Simplicity, Extreme programming encourages starting with the simplest solution. Extra functionality can then be added later. The difference between this approach and more conventional system development methods is the focus on designing and coding for the needs of today instead of those of tomorrow, next week. This is sometimes summed up as the "you're not going to need it" approach. Proponents of XP acknowledge the disadvantage that this can sometimes entail more effort tomorrow to change the system; their claim is that this is more than compensated for by the advantage of not investing in possible future requirements that might change before they become relevant. Coding and designing for uncertain future requirements implies the risk of spending resources on something that might not be needed. Related to the "communication" value, simplicity in design and coding should improve the quality of communication. Most programmers in the team could easily understand a simple design with very simple code [12]. Feedback Within Extreme Programming, feedback relates to different dimensions of the system development: Feedback from the system: by writing unit tests, or running periodic integration tests, the programmers have direct feedback from the state of the system after implementing changes. Feedback from the customer: The functional tests (aka acceptance tests) are written by the customer and the testers. They will get concrete feedback about the current state of their system. This review is planned once in every two or three weeks so the customer can easily steer the development. Feedback from the team: When customers come up with new requirements in the planning game the team directly gives an estimation of the time that it will take to implement. Feedback is closely related to communication and simplicity. Flaws in the system are easily communicated by writing a unit test that proves a certain piece of code will break. The direct feedback from the system tells programmers to recode this part. A customer is able to test the system periodically according to the functional requirements, known as user stories [12]. 16 Courage Several practices embody courage. One is the commandment to always design and code for today and not for tomorrow. This is an effort to avoid getting bogged down in design and requiring a lot of effort to implement anything else. Courage enables developers to feel comfortable with refactoring their code when necessary. This means reviewing the existing system and modifying it so that future changes can be implemented more easily. Another example of courage knows when to throw code away: courage to remove source code that is obsolete, no matter how much effort was used to create that source code. Also, courage means persistence: A programmer might be stuck on a complex problem for an entire day, then solve the problem quickly the next day, if only they are persistent. Respect The respect value manifests in several ways. In Extreme Programming, team members respect each other because programmers should never commit changes that break compilation, that make existing unit-tests fail, or that otherwise delay the work of their peers. Members respect their work by always striving for high quality and seeking for the best design for the solution at hand through refactoring. Adopting the four earlier values leads to respect gained from others in the team. Nobody on the team should feel unappreciated or ignored. This ensures high level of motivation and encourages loyalty toward the team, and the goal of the project. This value is very dependent upon the other values, and is very much oriented toward people in a team [12]. XP Activities The four basic activities of Extreme Programming are: Coding, You code because if you don't code, at the end of the day you haven't done anything. XP says that the only truly important product of the system development process is code. Without code you have nothing. Coding can be drawing diagrams that will generate code, scripting a web-based system or coding a program that needs to be compile d. Coding can also be used to figure out the most suitable solution. For instance, XP would advocate that faced with several alternatives for a programming problem, one should simply code all solutions and determine with automated tests (see below) which solution is most suitable. Coding can also help to communicate thoughts about programming problems. A programmer dealing with a complex programming problem and finding it hard to explain the solution to fellow programmers might code it and use the code to demonstrate what he or she means. Testing, You test because if you don't test, you don't know when you are done coding. One cannot be certain of anything unless one has tested it. Testing is not a perceived, primary need for the customer. A lot of software is shipped without proper testing and still works (more or less). In software development, XP says this means that one cannot be certain that a function works unless one tests it. You can be uncertain whether what you coded is what you meant. To test this uncertainty, XP uses Unit Tests. These are automated tests that test the code. The programmer will try to write as many tests he or she can think of that might break the code he or she is writing; if all tests run successfully then the coding is complete. You can be uncertain whether what you meant is what you should have meant. To test this uncertainty, XP uses acceptance tests based on the requirements given by the customer in the exploration phase of release planning. Listening, You listen because if you don't listen you don't know what to code or what to test. Programmers do not necessarily know anything about the business side of the system under development. The business side determines the function of the system. For the programmers to find what the 17 functionality of the system should be, they have to listen to business. Programmers have to listen to what the customer needs. Also, they have to try to understand the business problem, and to give the customer feedback about his or her problem, to improve the customer's own understanding of his or her problem. Communication between the customer and programmer is further addressed in The Planning Game. Designing, and you design so you can keep coding and testing and listening indefinitely (good design allows extension of the system with changes in only one place). From the point of view of simplicity, one could say that system development doesn't need more than coding, testing and listening. If those activities are performed well, the result should always be a system that works. In practice, this will not work. One can come a long way without designing but at a given time one will get stuck. The system becomes too complex and the dependencies within the system cease to be clear. One can avoid this by creating a design structure that organizes the logic in the system. Good design will avoid lots of dependencies within a system; this means that changing one part of the system will not affect other parts of the system. Figure 3 Describes flow chart of XP Figure 3 shows how Extreme Programming's rules work together. Customers enjoy being partners in the software process, developers actively contribute regardless of experience level, and managers concentrate on communication and relationships. Unproductive activities have been trimmed to reduce costs and frustration of everyone involved. Examples on Extreme Programming A longitudinal case study evaluating the effects of adopting the Extreme Programming (XP) methodology was performed at Sabre Airline Solutions™. The Sabre team was a characteristically agile team in that they had no need to scale or re-scope XP for their project parameters and organizational environment. The case study compares two releases of the same product. One release was completed just prior to the team’s adoption of the XP methodology, and the other was completed after approximately two years of XP use [13]. Results Comparisons of the new release project results to the old release project results show a 50% increase in 18 productivity, a 65% improvement in pre-release quality, and a 35% improvement in post-release quality. These findings suggest that, over time, adopting the XP process can result in increased productivity and quality [13]. Advantages of XP (Extreme Programming) Customer focus, Customer focus increase the chance that the software produced will actually meet the needs of the users Decrease Risk, The focus on small, incremental release decreases the risk on your project: by showing that your approach works and by putting functionality in the hands of your users, enabling them to provide timely feedback regarding your work. Testing, Continuous testing and integration helps to increase the quality of work. NO Process, XP is attractive to programmers who normally are unwilling to adopt a software process, enabling your organization to manage its software efforts better. For developers, XP allows you to focus on coding and avoid needless paperwork and meetings. It provides a more social atmosphere, more opportunities to learn new skills, and a chance to go home at a decent time each night. It gives you very frequent feelings of achievement, and generally allows you to produce code that you feel good about. For the Customer, XP creates working software faster, and that software tends to have very few defects. It allows you to change your mind whenever you need to, with minimal cost and almost no complaining from the developers. It produces reliable estimates so you can coordinate your schedule easier. For management, XP delivers working software for less money, and the software is more likely to do what the end users actually want. It cuts risk in a couple ways: 1) It allows you to "pull the plug" on development at almost any time, and still have highly valuable code, and probably even a valuable working (if incomplete) application. 2) It reduces your dependence on individual superstars, and at the same time can improve employee satisfaction and retention. Disadvantages (XP Extreme Programming) XP is geared toward a single project, developed and maintained by a single team. XP will not work in an environment where a customer or manager insists on a complete specification or design before they begin programming. XP will not work in an environment where programmers are separated geographically. XP has not been proven to work with systems that have scalability issues (new applications must integrate into existing systems). The biggest disadvantage: Extreme Programming is hard to do. It's difficult to get many developers to accept the practices, and it takes a lot of discipline to keep doing them all. Customers may not like the idea of having to be so involved. Management may have trouble adapting to a process that, itself, adapts to the changing needs of the business. 19 XP calls for a family of new management methods but does not provide the management training and guidance needed for these methods to be accepted and effectively practiced. 4. Scrum Development Process Scrum is an iterative incremental framework for managing complex work (such as new product development) commonly used with agile software development. Although Scrum was intended for management of software development projects, it can be used to run software maintenance teams, or as a general project/program management approach. The stated, accepted philosophy for systems development is that the development process is a well-understood approach that can be planned, estimated, and successfully completed. This has proven incorrect in practice. SCRUM assumes that the systems development process is an unpredictable, complicated process that can only be roughly described as an overall progression. SCRUM defines the systems development process as a loose set of activities that combines known, workable tools and techniques with the best that a development team can devise to build systems. Since these activities are loose, controls to manage the process and inherent risk are used. SCRUM is an enhancement of the commonly used iterative/incremental object-oriented development cycle [14]. Figure 4 Scrum developments Process Artifacts of Scrum Process Product backlog (Figure 4), the product backlog is a high-level document for the entire project. It contains backlog items: broad descriptions of all required features, wish-list items, etc. prioritized by business value. It is the "What" that will be built. It is open and editable by anyone and contains rough estimates of both business value and development effort. Those estimates help the Product Owner to gauge the timeline and, to a limited extent, priority. For example, if the "add spell-check" and "add table support" features have the same business value, the one with the smallest development effort will probably have higher priority, because the Rate of interest (ROI) is higher. The product backlog is property of the Product Owner. The Product Owner sets business value. Development effort is set by the Team [15]. 20 Sprint backlog (Figure 4), the sprint backlog is a document containing information about how the team is going to implement the features for the upcoming sprint. Features are broken down into tasks; as a best practice, tasks are normally estimated between four and sixteen hours of work. With this level of detail the whole team understands exactly what to do and anyone can potentially pick a task from the list. Tasks on the sprint backlog are never assigned; rather, tasks are signed up for by the team members as needed, according to the set priority and the team member skills. The sprint backlog is property of the Team. Estimations are set by the Team. Burn down, the Sprint burn down chart is a publicly displayed chart showing remaining work in the sprint backlog. Updated every day, it gives a simple view of the sprint progress. It also provides quick visualizations for reference. There are also other types of burn down, for example the Release Burn down Chart that shows the amount of work left to complete the target commitment for a Product Release (normally spanning through multiple iterations) and the Alternative Release Burn down Chart, which basically does the same, but allows to show clearly scope changes into a Release Content, by resetting the baseline. Roles The Scrum team performs the actual work of problem solvers and designers. The team normally consists of 5-9 people – a group size that experience and research has shown to be best for this type of work. T he team members decide how the work is arranged and how assignments are distributed. There are no set project roles – everyone should be able to swap tasks with another member. Naturally, this does not prevent individual members from being experts in a field [15]. Product owner represents the voice of the customer and ensures that the Scrum Team works with the right things from a business perspective. The Product Owner administers a Product Backlog – a current to-do list where all the specifications for a product are listed according to how profitable they are deemed to be. The document is visible to the entire organization so that everyone is aware of what to expect in future releases of the product. The Product Owner is often a customer, but can also be part of the internal organization. The task requires comprehensive knowledge about engineering, marketing and business processes. Scrum master is a combination of coach, fixer and gatekeeper. The Scrum Master meets with the team every day in brief meetings, Daily Scrums. When someone outside the project has an important issue to discuss with the team, the Scrum Master tries to ensure that the designers are disturbed as little as possible in their work. The Scrum Master always adopts a here and-now perspective to the work. The focus is always on providing the team with the best possible circumstances for realizing the goals fixed for the Sprint. After each Sprint, the Scrum Master holds an Evaluation Meeting with the Scrum team – a Sprint Retrospective – during which experiences and conclusions are reviewed. The purpose is to elevate the team’s level of knowledge and heighten motivation prior to the next Sprint. PROCESS Creating a backlog The Product Owner compiles all the requests and specifications that are the basis of the changes of the product, such as new functions and bug fixes. After the goals have been defined, the entirety is broken down into segments. Each such segment should in part create business value and in part be subdeliverable. A prioritized list is made at the same time – the Product Owner personally makes the decisions at this point. In what order should the changes be made and delivered? The result is a to-do list 21 arranged according to how the market’s demands and customer’s requests change over time. When it is time to start a new Sprint, the Product Owner “freezes” the foremost items on the to-do list and summons the Scrum Team to a meeting [15]. The sprint phase Of the Sprint’s 30 calendar days, the first are set aside to create a Sprint Backlog. When the tasks and required time has been determined, the Product Owner lets go. As of now the Scrum Team works under its own responsibility. If the group has been properly composed, the work will be self organizing. Daily Scrum Every day, at the same time, the Scrum Master and the Scrum Team have a brief meeting. The purpose is to eliminate all speed impediments for the group. Each of the participants should in some way answer three questions [15]: • What have you done since the last meeting? • What will you do between now and the next meeting? • Is there anything preventing you from doing what you have planned? The first two questions give the meeting participants full insight into how the project is progressing. The third question provides a basis for problem solving – ranging from a new computer mouse to organizational changes at the company. Anyone may attend and listen at the meeting, but only the Scrum Master and the team members may speak. SCRUM CHARACTERISTICS SCRUM projects have the following characteristics [14]: Flexible deliverable, the content of the deliverable is dictated by the environment. Flexible schedule, the deliverable may be required sooner or later than initially planned. Small teams, each team has no more than 6 members. There may be multiple teams within a project. Frequent reviews, team progress is reviewed as frequently as environmental complexity and risk dictates (usually 1 to 4 week cycles). A functional executable must be prepared by each team for each review. Collaboration, intra and inter-collaboration is expected during the project. Object Oriented, each team will address a set of related objects, with clear interfaces and behavior. SCRUM Methodology The system development process is complicated and complex. Therefore maximum flexibility and appropriate control is required. Evolution favors those that operate with maximum exposure to environmental change and have optimized for flexible adaptation to change. Evolution deselects those who have insulated themselves from environmental change and have minimized chaos and complexity in their environment. An approach is needed that enables development teams to operate adaptively within a complex environment using imprecise processes. Complex system development occurs under rapidly changing circumstances. Producing orderly systems under chaotic circumstances requires maximum flexibility. The closer the development team operates to the edge of chaos, while still maintaining order, the more competitive and useful the resulting system will be. Langton has modeled this effect in computer simulations and his work has provided this as a fundamental theorem in complexity theory. Methodology may well be the most important factor in determining the probability of success [14]. Methodologies that encourage and support flexibility have a high degree of tolerance for changes in other 22 variables. With these methodologies, the development process is regarded as unpredictable at the onset, and control mechanisms are put in place to manage the unpredictability. Figure5. SCRUM Methodology [14] Characteristics of SCRUM Methodology are: • First and last phases (Planning and Closure) consist of defined processes, where all processes, inputs and outputs are well defined. The knowledge of how to do these processes is explicit. The flow is linear, with some iteration in the planning phase. • The Sprint phase is an empirical process. Many of the processes in the sprint phase are unidentified or uncontrolled. It is treated as a black box that requires external controls. Accordingly, controls, including risk management, are put on iteration of the Sprint phase to avoid chaos while maximizing flexibility. • Sprints are nonlinear and flexible. Where available, explicit process knowledge is used; otherwise tacit knowledge and trial and error is used to build process knowledge. Sprints are used to evolve the final product. • Project is open to the environment until the Closure phase. The deliverable can be changed at any time during the Planning and Sprint phases of the project. The project remains open to environmental complexity, including competitive, time, quality, and financial pressures, throughout these phases. • Deliverable is determined during the project based on the environment. Case Study In July 2007, a Senior Engineer from the then new Events 2.0 project team recommended implementing development using the Scrum approach. Although we were enthusiastic, we were not prepared. As is typical for XING, we quickly sought out an available Scrum Master and began our Scrum experiment. Results Our conclusion so far: Introducing Scrum is not easy and requires substantial modifications to the organization and product development processes. For us, it has already paid off because of the capability to react quickly and adeptly to dynamic requirements on our platform and better usage of our skill potentials. We feel well prepared as we look to the future. Advantages There many advantages of using Scrum in an organization some of them are listed below [14]: Traditional development methodologies are designed only to respond to the unpredictability of the external and development environments at the start of an enhancement cycle. Such newer approaches as the Boehm spiral methodology and its variants are still limited in their ability to respond to changing 23 requirements once the project has started. The SCRUM methodology, on the other hand, is designed to be quite flexible throughout. It provides control mechanisms for planning a product release and then managing variables as the project progresses. This enables organizations to change the project and deliverables at any point in time, delivering the most appropriate release. The SCRUM methodology frees developers to devise the most ingenious solutions throughout the project, as learning occurs and the environment changes. Small, collaborative teams of developers are able to share tacit knowledge about development processes. An excellent training environment for all parties is provided. Object oriented technology provides the basis for the SCRUM methodology. Objects, or product features, offer a discrete and manageable environment. Procedural code, with its many and intertwined interfaces, is inappropriate for the SCRUM methodology. SCRUM may be selectively applied to procedural systems with clean interfaces and strong data orientation. Disadvantages Every development process has some advantages and some disadvantages, so here we are mentioning some of the downside of using Scrum: Scrum is not effective for small projects Expensive to implement Training is required Scrum also means you have to be in close contact with your external stakeholders so all-important things are on your backlog. This is not always feasible and may delay or upset them. 5. Lean software development (LD) “Lean technology is a philosophy of making a conscious choice to radically redefine and dynamically optimize strategy, systems, processes and services and add value to clients, employees and shareholders”. Lean software development is a translation of lean manufacturing principles and practices to the software development domain. . Adapted from the Toyota Production System, a pro-lean subculture is emerging from within the agile Software development community. Lean manufacturing or lean production, which is often known simply as "Lean", is a production practice that considers the expenditure of resources for any goal other than the creation of value for the end customer to be wasteful, and thus a target for elimination. They may be clearly identified, but are poorly acknowledged. The problems of the software development planet are responsible for most of the project failures that force managements worldwide to put more rigid processes in place to ensure compliance. More stringent processes at each stage are making the whole process a “Concrete-Life jacket”. By using Lean Production/Manufacturing principles not only quality concerns and other issues can be resolved, but also a continuous improvement cycle can be built in to the process. This can help in improving the quality of the software solutions/products each time a new software solution/product is built [17]. In software industry, developers often say, “Life would be so much easier if customers would just stop changing their minds”. In fact, there is a very easy way to keep customers from changing their minds – give them what they ask for so fast that they don’t have the time to change their minds. The idea behind lean thinking is exactly this, let customers delay their decisions about exactly what they want as long as possible, and when they ask for something, give it to them so fast they don’t have time to change their minds. The way to deliver things rapidly is to deliver them in small packages. The bigger the increment 24 of functionality you try to deliver, the longer it takes to decide what is needed and then get it developed, tested, and deployed. Maintenance programmers have known this for years. When a piece of production code breaks, they find the cause, create a patch, test it rigorously, and release it to production – usually in the space of a few hours or days [16]. Principles of Lean Software Development Process There are seven principles of Lean Software Development, drawn from the seven principles of Lean Thinking. These principles are not cookbook recipes for software development, but guideposts for devising appropriate practices for your environment. Eliminate waste The first step in lean thinking is to understand what “value” is and what activities and resources are absolutely necessary to create the value. Since no one wants to consider what they do as waste, the job of determining what value is and what adds value is something that needs to be done at a fairly high level. All lean thinking starts with a re-examination of what waste is and an aggressive campaign to eliminate it. Quite simply, anything you do that does not add value from the customer perspective is waste. The seven wastes of software development are [16]: → Partially Done Work (the “inventory” of a development process) → Extra Processes (easy to find in documentation-centric development) → Extra Features (develop only what customers want right now) → Task Switching (everyone should do one thing at a time) → waiting (for instructions, for information) → Handoffs (tons of tacit knowledge gets lost) → Defects (at least defects that are not quickly caught by a test) Amplify learning Software development is a continuous learning process with the additional challenge of development teams and end product sizes. The best approach for improving a software development environment is to amplify learning. Running tests as soon as the code is written should prevent the accumulation of defects. Instead of adding more documentation or detailed planning, different ideas could be tried by writing code and building. Presenting screens to the end-users and getting their input could simplify the process of user requirements gathering. The learning process is sped up by usage of short iteration cycles – each one coupled with refactoring and integration testing. Increasing feedback via short feedback sessions with Customers helps when determining the current phase of development and adjusting efforts for future improvements. During those short sessions both Customer representatives and the development team learn more about the domain problem and figure out possible solutions for further development. Thus the Customers better understand their needs, based on the existing result of development efforts, and the developers learn how to better satisfy those needs. Another idea in the communication and learning process with a Customer is set-based development – this concentrates on communicating the constraints of the future solution and not the possible solutions, thus promoting the birth of the solution via dialog with the Customer. Empower those who add value A basic principle of Lean Production is to drive decisions down to the lowest possible level, delegating decision-making tools and authority to the people "on the floor." Often when software development environments under-perform, the instinctive reaction is to impose more rigid processes, specifying in greater detail how people should do their jobs. Lean Production principles suggest exactly the opposite approach. When there are problems in manufacturing, a team of outside experts is not sent in to document in more detail how the process should be run. Instead, people on the manufacturing floor are given tools 25 to evaluate and improve their own areas. They work in collaborative teams with the charter to improve their own processes and the links to nearby processes for which they are suppliers or customers. Their supervisors are trained in methods of forming and encouraging work teams to solve their own. Another mistaken belief has been the consideration of people as resources. People might be resources from the point of view of a statistical data sheet, but in software development, as well as any organizational business, people do need something more than just the list of tasks and the assurance that they will not be disturbed during the completion of the tasks. People need motivation and a higher purpose to work for – purpose within the reachable reality, with the assurance that the team might choose its own commitments. The developers should be given access to Customer; the team leader should provide support and help in difficult situations, as well as make sure that skepticism does not ruin the team’s spirit [17]. Build Integrity In There are two kinds of integrity – perceived integrity and conceptual integrity. Software with perceived integrity delights the customer – it’s exactly what they want even though they didn’t know how to ask for it. Conceptual integrity means that all of the parts of a software system work together to achieve a smooth, well functioning whole. Software with conceptual integrity presents the user with a single metaphor of how a task is to be done. You don’t have one way of buying airline tickets if you are paying with cash and a totally different way if you are using frequent flier miles. You don’t use kilometers in one module and miles in another. Conceptual integrity is achieved through continuous, detailed information flow between various technical people working on a system. There is only one way to achieve this, people have to talk to each other, early and often. There can be no throwing things over the wall, no lines between supplier, development team, support team, customer. Everyone should be involved in detailed discussions of the design as it develops, from the earliest days of the program [17]. Deliver as fast as possible The goal is to let your customer take an options-based approach to making decisions, letting them delay their decisions a long as possible so they can make decisions based on the best possible information. Once your customers decide what they want, your goal should be to create that value just as fast as possible. This means no delay in deciding what requests to approve, no delay in staffing, immediate clarification of requirements, no time-consuming handoffs, no delay in testing, no delay for integration, no delay in deployment. In a mature software development organization, all of this happens in one smooth, rapid flow in response to a customer need. Maximizing flow In lean software development, the idea is to maximize the flow of information and delivered value. In lean production, Maximizing flow does not mean automation. Instead it means limiting what has to be transferred, and transferring that as few times as possible over the shortest distance with the widest communication bandwidth. Similarly in software development the idea is to eliminate as many documents and handoffs as possible. In the lean software development emphasis is to pair a skilled development team with a skilled customer team and to give them the responsibility and authority to develop the system in small, rapid increments, driven by the customer priority and feedback. Delay Commitment Delaying commitment means keeping your options open as long as possible. The fundamental lean concept is to delay irreversible decisions until they can be made based on known events, rather than forecasts. Economic markets develop options as a way to deal with uncertainty. See the Whole 26 When you look at them closely, most theories of how to manage software projects are based on a theory of disaggregation: break the whole into individual parts and optimize each one. Lean thinking suggests that optimizing individual parts almost always leads to sub-optimized overall system. The best way to avoid sub-optimization and encourage collaboration is to make people accountable for what they can influence, not just what they can control. This means measuring performance one level higher than you would expect. Measure the team’s defect count, not that of individuals. Make testing as accountable for defect- free code as developers. To some it seems unfair to hold a team accountable for individual performance, but lean organizations have found that individuals are rarely able to change the system which influences their performance. However a team, working together and responsible for its own processes, can and will make dramatic improvements. Case study Develop a small business loan processing system in twelve months with minimum initial investment. Factors such as meeting international requirements, a technology base that was new to the company, and utilizing an internationally dispersed work force added to the complexity of the project. This company abandoned the time tested waterfall development approach and embraced new Lean Software Development principles. Small cross functional teams including end-users were created, trained and empowered to deliver the end product in incremental phases called iterations. Adopting new techniques necessitated changes to the traditional project management, tracking and reporting [19]. Results Within three months the team delivered the first functional system for user acceptance testing. Thereafter monthly iterations were delivered to expand the features and capabilities of the system. The full feature set was delivered within the twelve-month period and maintained the original budget. Development time and initial investment was reduced by over 50% compared to similar products [19]. Advantages Organizations that understood and applied lean values, principles, and processes have experienced very significant benefits such as the following: Lead time reduction of up to 75% On time delivery rate up to 100% Productivity improvements of over 80% Scrap reductions of up to 95% Space utilization improvements of over 25% Set-up time reductions of over 85% Machine down time reductions of 70% Total project time reduced by 70-90% Project rework reduced by 60-90% Project costs reduced by 50-70% Customer Focus, Waste is anything that does not provide timely customer value. Have you identified who your customers are? Do you know what these customers really want? Do you know how long it takes to deliver that value? To find out how well your organization delivers customer value, Lean development process takes care of all of these by starting analyzing the value stream. Process Flow, An agile software development team can add features in any order and can release a working version of the software at the end of any iteration. When manufacturing plants learned how to make any product in any order, Just-in-Time manufacturing became practical. Now that software 27 developers have learned to add any feature in any order, and deliver working software in two-weeks or thereabouts, Just-in-Time software development is possible with Lean development process. Local Responsibility, In Lean development developers and domain experts who jointly develop a deep understanding of the domain design the best software. Data Based Decisions, When the goal is to hit a moving target, learning-based software development is the approach to use. Experienced development teams can implement individual features in any order and deliver deployable code in less than a month. Learning-based software development deploys small feature sets in priority order, providing both rapid feedback and immediate business value. Successful software companies have used this approach for many years. Lean Thinking, for Software Development is all about driving down this risky inventory and putting it to work providing customer value as quickly as possible. Disadvantages The Lean model ignores the social part of complex systems. The main drawback of using Lean alone as a process improvement methodology is lack of strategic supply chain direction. Lean efforts will certainly yield results but can lead to islands of excellence within an organization if used alone and the time from effort to any significant results can be long REFERENCES [1] Agile Software Development Methods Review and Analysis. Pekka Abrahamsson, Outi Salo & Jussi Ronkainen; University of Oulu VTT Electronics, VTT Publication 478. http://www.vtt.fi/inf/pdf/publications/2002/P478.pdf [2] An Introduction to Agile Software Development; Victor Szalvay, co-founder Danube Technologies, Bellevue, WA 98005 http://www.danube.com/docs/Intro_to_Agile.pdf [3] The Agile Manifesto; http://www.agilemanifesto.org/ [4] Agile Software Development made easy http://www.agile-software-development.com/2007/06/10-good-reasons-to-do-agile-development.html [5] Haag, Stephen; Maeve Cummings, Donald J. McCubbrey, Pinsonneult, and Donovan (2006). "Phase 2: Analysis". Information Management Systems for the Information Age. McGraw-Hill Ryerson. ISBN 978-0072819472. [6] Jennerich, Bill (November 1990). "Joint Application Design: Business Requirements Analysis for Successful Re-Engineering". http://www.bee.net/bluebird/jaddoc.htm. Retrieved 2009-02-06. [7] Joint Application Design; Wikipedia http://en.wikipedia.org/wiki/Joint_application_design [8] Mei C.Yatco. “Joint Application Design/Development” http://www.umsl.edu/~sauterv/analysis/JAD.html [9] Frank Maurer & Sebastien Martel Agile Software Development: An Industrial Case Study University of Calgary Department of Computer Science http://fc-md.umd.edu/projects/Agile/Maurer.htm 28 [10] Mike Grant: Introduction to extreme Programming http://www.acm.jhu.edu/peer-teach/xp/xp.pdf [11] Jim Highsmith: Extreme programming [12] Extreme Programming: Wikipedia http://en.wikipedia.org/wiki/Extreme_Programming [13] Lucas Layman , Laurie Williams, Lynn Cunningham North Carolina University, Computer Science Department http://collaboration.csc.ncsu.edu/laurie/Papers/ADC.pdf [14] Ken Schwaber ; SCRUM Development Process http://jeffsutherland.com/oopsla/schwapub.pdf [15] Scrum in five minutes http://www.softhouse.se/Uploades/Scrum_eng_webb.pdf [16] Mary Poppendieck: Lean Software Development (left) http://www.poppendieck.com/pdfs/Lean_Software_Development.pdf [17] Desari Ravi Kumar: Lean Software Development ( right) http://www.projectperfect.com.au/downloads/Info/info_lean_development.pdf [18] Lean Software Institute: Introduction to Lean Software Development http://www.leansoftwareinstitute.com/art_ilsd.php [19] Case study| Lean Software development http://www.guidonps.com/ideas-and-resources/case-studies/information-technology/Loan%20Software%20Case%20Study.pdf 29