Software Development Lifecycle (SDLC) SDLC Phases 1) Planning Stage 2) Requirement Gathering and Analysis 3) Design 4) Implementation or Coding 5) Testing 6) Deployment 7) Maintenance 1.Planning Stage The planning stage (also called the feasibility stage) is exactly what it sounds like: the phase in which developers will plan for the upcoming project. It helps to define the problem and scope of any existing systems, as well as determine the objectives for their new systems. By developing an effective outline for the upcoming development cycle, they'll theoretically catch problems before they affect development. And help to secure the funding and resources they need to make their plan happen. Perhaps most importantly, the planning stage sets the project schedule, which can be of key importance if development is for a commercial product that must be sent to market by a certain time. 2.Analysis Stage The analysis stage includes gathering all the specific details required for a new system as well as determining the first ideas for prototypes. Developers may: • Define any prototype system requirements • Evaluate alternatives to existing prototypes • Perform research and analysis to determine the needs of end-users Furthermore, developers will often create a software requirement specification or SRS document. This includes all the specifications for software, hardware, and network requirements for the system they plan to build. This will prevent them from overdrawing funding or resources when working at the same place as other development teams. 3.Design Stage The design stage is a necessary precursor to the main developer stage. Developers will first outline the details for the overall application, alongside specific aspects, such as its: • User interfaces • System interfaces • Network and network requirements • Databases They’ll typically turn the SRS document they created into a more logical structure that can later be implemented in a programming language. Operation, training, and maintenance plans will all be drawn up so that developers know what they need to do throughout every stage of the cycle moving forward. Once complete, development managers will prepare a design document to be referenced throughout the next phases of the SDLC. 4.Development Stage The development stage is the part where developers actually write code and build the application according to the earlier design documents and outlined specifications. Product program code is built per the design document specifications. In theory, all of the prior planning and outlined should make the actual development phase relatively straightforward. Developers will follow any coding guidelines as defined by the organization and utilize different tools such as compilers, debuggers, and interpreters. Programming languages can include staples such as Java, PHP, Pythin, React and more. Developers will choose the right programming code to use based on the project specifications and requirements. 5.Testing Satge Building software is not the end. Now it must be tested to make sure that there aren’t any bugs and that the end-user experience will not negatively be affected at any point. During the testing stage, developers will go over their software with a fine-tooth comb, noting any bugs or defects that need to be tracked, fixed, and later retested. It’s important that the software overall ends up meeting the quality standards that were previously defined in the SRS document. Depending on the skill of the developers, the complexity of the software, and the requirements for the end-user, testing can either be an extremely short phase or take a very long time. 6.Implementation and Integration Stage After testing, the overall design for the software will come together. Different modules or designs will be integrated into the primary source code through developer efforts, usually by leveraging training environments to detect further errors or defects. The information system will be integrated into its environment and eventually installed. After passing this stage, the software is theoretically ready for market and may be provided to any end-users. 7. Maintenance Stage The SDLC doesn’t end when software reaches the market. Developers must now move into a maintenance mode and begin practicing any activities required to handle issues reported by endusers. Furthermore, developers are responsible for implementing any changes that the software might need after deployment. This can include handling residual bugs that were not able to be patched before launch or resolving new issues that crop up due to user reports. Larger systems may require longer maintenance stages compared to smaller systems. Software Development Lifecycle (SDLC) Software Development Life Cycle Models 1) Waterfall Model 2) V-Shaped Model 3) Prototype Model 4) Spiral Model 5) Iterative Incremental Model 6) Big Bang Model 7) Agile Model 1.Waterfall Model The waterfall model is the oldest of all SDLC methodologies. It’s linear and straightforward and requires development teams to finish one phase of the project completely before moving on to the next. Each stage has a separate project plan and takes information from the previous stage to avoid similar issues (if encountered). However, it is vulnerable to early delays and can lead to big problems arising for development teams later down the road. 2. Iterative model In the iterative process, each development cycle produces an incomplete but deployable version of the software. The first iteration implements a small set of the software requirements, and each subsequent version adds more requirements. The last iteration contains the complete requirement set. 3. Spiral Model Spiral models are flexible compared to other methodologies. Projects pass through four main phases again and again in a metaphorically spiral motion. It’s advantageous for large projects since development teams can create very customized products and incorporate any received feedback relatively early in the life cycle. 4. V- Model The V-model (which is short for verification and validation) is quite similar to the waterfall model. A testing phase is incorporated into each development stage to catch potential bugs and defects. It’s incredibly disciplined and requires a rigorous timeline. But in theory, it illuminates the shortcomings of the main waterfall model by preventing larger bugs from spiraling out of control. 5. Agile The agile methodology produces ongoing release cycles, each featuring small, incremental changes from the previous release. At each iteration, the product is tested. The agile model helps teams identify and address small issues in projects before they evolve into more significant problems. Teams can also engage business stakeholders and get their feedback throughout the development process. 6.Lean The lean methodology for software development is inspired by lean manufacturing practices and principles. The lean principles encourage creating better flow in work processes and developing a continuous improvement culture. The seven lean principles are: • Eliminate waste • Amplify learning • Make decisions as late as possible • Deliver as fast as possible • Empower your team • Build integrity in • Build holistically Agile What is Agile? What is Agile Software Development? Agile is a Mindset What are Agile Methodologies? 12 Agile Manifesto principles: a culture, defined Manifesto for Agile Software Development What is Agile Agile is an iterative approach to project management and software development that helps teams deliver value to their customers faster and with fewer headaches. Instead of betting everything on a "big bang" launch, an agile team delivers work in small, but consumable, increments. Requirements, plans, and results are evaluated continuously so teams have a natural mechanism for responding to change quickly. Whereas the traditional "waterfall" approach has one discipline contribute to the project, then "throw it over the wall" to the next contributor, agile calls for collaborative cross-functional teams. Open communication, collaboration, adaptation, and trust amongst team members are at the heart of agile. Although the project lead or product owner typically prioritizes the work to be delivered, the team takes the lead on deciding how the work will get done, self-organizing around granular tasks and assignments. The original Agile Manifesto didn't prescribe two-week iterations or an ideal team size. It simply laid out a set of core values that put people first. The way you and your team live those values today – whether you do scrum by the book, or blend elements of kanban and XP – is entirely up to you. What is Agile Software Development? Agile software development is more than frameworks such as Scrum, Extreme Programming, or Feature-Driven Development (FDD). Agile software development is more than practices such as pair programming, test-driven development, stand-ups, planning sessions, and sprints. Agile software development is an umbrella term for a set of frameworks and practices based on the values and principles expressed in the Manifesto for Agile Software Development and the 12 Principles behind it. When you approach software development in a particular manner, it’s generally good to live by these values and principles and use them to help figure out the right things to do given your particular context. One thing that separates Agile from other approaches to software development is the focus on the people doing the work and how they work together. Solutions evolve through collaboration between self-organizing cross-functional teams utilizing the appropriate practices for their context. There’s a big focus in the Agile software development community on collaboration and the self-organizing team. Agile is a Mindset Ultimately, Agile is a mindset informed by the Agile Manifesto’s values and principles. Those values and principles provide guidance on how to create and respond to change and how to deal with uncertainty. You could say that the first sentence of the Agile Manifesto encapsulates the whole idea: “We are uncovering better ways of developing software by doing it and helping others do it.” When you face uncertainty, try something you think might work, get feedback, and adjust accordingly. Keep the values and principles in mind when you do this. Let your context guide which frameworks, practices, and techniques you use to collaborate with your team and deliver value to your customers. Agile Subway map Key Agile Concepts Below are a few key Agile concepts. 1.User Stories: In consultation with the customer or product owner, the team divides up the work to be done into functional increments called “user stories.” Each user story is expected to yield a contribution to the value of the overall product, irrespective of the order of implementation; these and other assumptions as to the nature of user stories are captured by the INVEST formula. A good user story should be: “I” ndependent (of all others) “N” egotiable (not a specific contract for features) “V” aluable (or vertical) “E” stimable (to a good approximation) “S” mall (so as to fit within an iteration) “T” estable (in principle, even if there isn’t a test for it yet) 2.Daily Meeting: Each day at the same time, the team meets so as to bring everyone up to date on the information that is vital for coordination: each team members briefly describes any “completed” contributions and any obstacles that stand in their way. Usually, Scrum’s Three Questions are used to structure discussion. The meeting is normally held in front of the task board. The daily meeting is structured around some variant of the following three questions: 1. What have you completed since the last meeting? 2. What do you plan to complete by the next meeting? 3. What is getting in your way? This meeting is normally timeboxed to a maximum duration of 15 minutes, though this may need adjusting for larger teams. To keep the meeting short, any topic that starts a discussion is cut short, added to a “parking lot” list, and discussed in greater depth after the meeting, between the people affected by the issue. 3. Personas: When the project calls for it – for instance when user experience is a major factor in project outcomes – the team crafts detailed, synthetic biographies of fictitious users of the future product: these are called “personas.” 4. Team: A “team” in the Agile sense is a small group of people, assigned to the same project or effort, nearly all of them on a full-time basis. A small minority of team members may be part-time contributors, or may have competing responsibilities. The notion of team entails shared accountability: good or bad, the outcomes should be attributed to the entire team rather than to any individual. The team is expected to possess all of the necessary competencies, whether technical (programming, designing, testing) or business (domain knowledge, decision making ability). Roles and responsibilities do not matter as much as results: a developer may test, perform analysis or think about requirements; an analyst or domain expert can suggest ideas about implementation, and so on. 5. Incremental Development: Nearly all Agile teams favor an incremental development strategy; in an Agile context, this means that each successive version of the product is usable, and each builds upon the previous version by adding user-visible functionality. These are called “vertical” increments (that is, difference between successive product versions), as opposed to the opposite strategy which successively delivers complete technical components: for instance, creating a database schema, then building business rules on top of that, and only then implementing a UI. 6. Iterative Development: Agile projects are iterative insofar as they intentionally allow for “repeating” software development activities, and for potentially “revisiting” the same work products(the phrase “planned rework” is sometimes used; refactoring is a good example). 7. Milestone Retrospective: Once a project has been underway for some time, or at the end of the project, all of the team’s permanent members (not just the developers) invests from one to three days in a detailed analysis of the project’s significant events. Even more than an iteration retrospective, this should be a facilitated meeting, adhering to a structured format that varies according to objectives but will be specified in advance. The Agile Manifesto The Agile Manifesto We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan 12 Principles 1 Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. 4 Business people and developers must work together daily throughout the project 2 Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage. 5 Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done. 3 Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale. 6 The most efficient and effective method of conveying information to and within a development team is face-to-face conversation. 7 Working software is the primary measure of progress. 10 Simplicity–the art of maximizing the amount of work not done–is essential. 8 Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely. 11 The best architectures, requirements, and designs emerge from selforganizing teams. 9 Continuous attention to technical excellence and good design enhances agility. 12 At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly. Scrum Scrum Overview Sprints Sprint Planning Ceremonies Backlogs Backlog Refinement Standups Retrospective Roles Overview Of Scrum Scrum is an empirical process, where decisions are based on observation, experience and experimentation. Scrum has three pillars: transparency, inspection and adaptation. This supports the concept of working iteratively. Think of Empiricism as working through small experiments, learning from that work and adapting both what you are doing and how you are doing it as needed. The Scrum Values of Courage, Focus, Commitment, Respect, and Openness, are all important elements that Scrum Team members must consider when working together. The Scrum Values are particularly important in environments where experimentation is core to making progress. SCRUM Values In a nutshell, Scrum requires an environment where: • Increments of valuable work are delivered in short cycles of one month or less, which are called Sprints. Ongoing feedback occurs during the Sprint, allowing for inspection and adaptation of the process and what will be delivered. • The Scrum Team has a Scrum Master, a Product Owner and Developers, who are accountable for turning the selection of the work into an Increment of value during a Sprint. • The Scrum Team and other members of their organization, business, users or customer-base known as stakeholders, inspect the results of the Sprint and adjust for the next one. Scrum Accountabilities The people on the Scrum Team Scrum Master - the person on the Scrum Team who uses their knowledge of Scrum to help the team and organization to be as effective as they can be; they do so by taking approaches like coaching, teaching, facilitating and mentoring Product Owner - the person on the Scrum Team who makes sure that the team is creating the most valuable product they can create Developers - the people on the Scrum Team who work together to create the product Scrum Events Events that create regularity and minimize other meetings Sprint - short cycles of one month or less, during which the work is done; the Sprint contains all of the other Scrum events; a new Sprint starts immediately after the conclusion of the previous Sprint Sprint Planning - event dedicated to planning out the work that will take place during the Sprint Daily Scrum - event held every day where the Developers inspect the progress toward the Sprint Goal, uncover anything that may be getting in their way and adapt accordingly Sprint Review - event held at the end of the Sprint where the Scrum Team and key stakeholders review what was accomplished in the Sprint and what has changed in their environment; next, attendees collaborate on what to do next Sprint Retrospective - the Scrum Team gets together during this event to talk about how the last Sprint went and identify the most helpful changes to improve their effectiveness Scrum Artifacts The plans and work which are transparent and can be inspected allowing for future adaptation; Each artifact has its own Commitment which helps the team understand if they are making progress Product Backlog - an evolving, ordered list of what is needed to improve the product; it is the single source of work undertaken by the Scrum Team Commitment: Product Goal - the target the team plans against Sprint Backlog - a highly visible list of work that is the Developer’s plan for the Sprint, which may evolve as they learn Commitment: Sprint Goal - the single objective of the Sprint Increments - small pieces of work that serve as concrete stepping stones toward the Product Goal. You can deliver as often as needed during the Sprint and are not limited to only one release per Sprint. Commitment: Definition of Done - the description of what it takes for an Increment to be considered complete Prioritization Techniques What is prioritizing? Prioritizing means dealing with tasks, items, or work based on their importance. In order to successfully prioritize, it’s essential to list or rate tasks in order of importance. The more important a task is (whether this is due to deadline or impact), the higher of a priority it becomes. Why is prioritizing important? Task prioritization is important for 3 reasons: 1. Creates transparency into everything that needs to be done. 2. Determines the speed at which tasks need to be completed. 3. Ensures that you have enough time to complete every task for which you are responsible. Prioritizing tasks can also help maintain a healthy work-life balance, in addition to improving productivity and time management skills Priority levels for tasks Priority levels for tasks Critical Anything classified critical is considered urgent. Critical tasks are usually time-sensitive, and teams are expected to stop what they’re doing and attend to the immediate task at hand. If not, critical tasks can create risk and cost the business. Qualities of critical tasks: Ad hoc and time-sensitive Poses a risk if not handled immediately The deadline can be either ASAP, same-day, or next-day turnaround High priority These tasks are very important and must be completed ASAP. Because these tasks are not timesensitive, this type of task comes second on the priority scale after critical tasks. Qualities of high-priority tasks: Important but not time-sensitive Can be handled after any critical tasks Deadline can be within a couple of days or end of the week Neutral Neutral tasks are important, but they can usually wait to be done. Neutral tasks fall third to critical or highpriority issues. Qualities of neutral tasks: No immediate deadline, but should still be completed Fall third to critical and high-priority tasks Deadlines are outlined Low priority These tasks are usually items that can wait to be done. This type of task is great for filling up any free time. An example of low-priority tasks is those that your team can address when all other priorities are finished. Qualities of low-priority tasks: Completed when teams have time Floating deadlines move up or down depending on additional work Unknown These are tasks that pop up and are relegated to the backlog. Teams don’t usually have a deadline for these types of tasks but understand that they will be done eventually. Once teams have time, they will determine how to prioritize the task. Qualities of low-priority tasks: Backlog tasks with no estimated or outlined deadline Prioritization is determined when more information is available Kano Model Kano Model The Kano agile product development prioritization model takes into consideration actionable product feedback from users in development. That information is then used to assess which features should be prioritized in product development. When using the Kano Model, you have to determine the impact of each feature. Must-be: The customers consider the product functional only if these features are included. One-dimensional: These features have a dual nature. While they aren’t a must for a product to work, they remain extremely desirable to customers. The category is closely related to foreseeing customer needs and expectation. When a product includes what customers would be happy to get, they stay satisfied. But if you fail to deliver them, users are more likely to experience disappointment. Attractive: Features in this section add extra satisfaction, or even enjoyment and gratification. Basically, they are unexpected but nice-tohave features. On the other hand, their absence doesn’t leave customers dissatisfied. Indifferent: The attributes here represent the least possible impact on customers satisfaction. In a nutshell, they have no value. Reverse: The features falling into this category are considered to be the most annoying. Their presence has a rather negative effect on customer satisfaction. Alternatively, when they are not introduced, customers consider it a plus. Pros of the Kano model Highlighting the potential strengths and weaknesses of a product. One of the most valuable features of the Kano model is user feedback. The results of the Kano questionnaire help realize the future product’s advantages and disadvantages. It allows product managers to specify the product/market fit early in development. Ranking product features by their value for customers. The Kano model helps rate the product properties from the value proposition standpoint and tailor it to user needs. Cons of the Kano model Provides no details on resources required. Although the Kano model gives a more comprehensive picture on how to establish the priorities from the customer vantage point, it doesn’t account for time and costs that are necessary for a given release or a particular feature. Time-consuming practice. Since the Kano model originally involves the Kano survey – which may target a lot of potential customers – the efforts to process and estimate the results might be quite significant. It slows down the time-to-market and, consequently, distracts the team from execution. When assessing what to prioritize using the Kano Model, you use an X and Y-axis to determine the significance of each feature. As a result, you get a visual representation of what needs to be prioritized. It can also be more visually aesthetic for presentations. It is one of the simplest prioritization models that can help bring in team cooperation as everyone knows what they have to prioritize. Stack Ranking Stack Ranking Stack Ranking is one of the most popular forms of prioritization techniques that is currently used by a lot of software companies. It is also one of the easiest techniques that allow prioritization based on the user story. The technique considers each user story and then places it in an order of priority, ranking each task from the most important placed on the top of the tack to the least important placed on the bottom. This gives the company a setlist of priorities focusing on the most important feature to the least. MoSCoW Model MoSCoW Model Mo stands for Must be, which are features that the product cannot do without and must be included. S stands for Should have, which are features that should be included but are not that critical. C stands for Could have, which are features that just improve the experience but are not critical to the operation and functionality of the product. W stands for Won’t have, which are features the stakeholders have ruled against and won’t be part of the product. By prioritizing features using the work MoSCoW, you can prioritize the most important aspects first, which is the main objective of prioritization in agile product development. Essentially, products that are under M and S should be your priorities whereas, C is not that much of a priority. W is a canceled or a delayed feature to a later version, not the one you’re working on. Pros of MoSCoW prioritization Given such operational friendliness, the benefits of MoSCoW prioritization are quite obvious. Simplicity. The MoSCoW method doesn’t require deep understanding or complicated calculations. So, it’s easy for a team to keep in line with the whole prioritization process using a simple language. This promotes mutual understanding between team and stakeholders. Scheduling with MoSCoW is fast and transparent. Agility for scheduling and implementation. Since this prioritization method has no strict time limits, except for the Must-have category, it allows for changing suitable timeframes per feature. That way, a team can adjust feature deliveries or releases on favorable terms. Cons of the MoSCoW approach With such simplicity come some challenges. Lacks a clear consistency of implementation. Though the priorities may be easily set, the MoSCoW method does not introduce any sequencing of tasks and lacks planning. At the end of the day, it might put the entire release at risk. Lack of big picture focus. With MoSCoW suggesting the most-to-least critical requirements or features, the stakeholders still might not see a full picture of priorities. If the focus must be concentrated on key features that are important for a business, MoSCoW may mislead the team. So, the stakeholders have to allocate business goals by themselves. Creates imbalance between the required and slightly desirable. Often, the blurred lines between categories make it hard to decide on features that go into, say, Must and Should lists. That’s why floating tasks between all categories should be approached with great thought and care.