View on GitHub

Notes

reference notes

Agile software development AKA Rapid software development:

All agile methods have these characteristics in common:

Agile methods

The dissatisfaction with the overheads involved in software design methods of the 1980s and 1990s led to the creation of agile methods in the late 1990s.

Aim:

Agile Manifesto

It values:

Based on the manifesto, all different agile processes share a common set of principles:

Principle Description
Customer involvement Customers should be closely involved throughout the development process. Their role is provide and prioritize new system requirements and to evaluate the iterations of the system.
Incremental delivery The software is developed in increments with the customer specifying the requirements to be included in each increment.
People not process The skills of the development team should be recognized and exploited. Team members should be left to develop their own ways of working without prescriptive processes.
Embrace change Expect the system requirements to change and so design the system to accommodate these changes.
Maintain simplicity Focus on simplicity in both the software being developed and in the development process. Wherever possible, actively work to eliminate complexity from the system.

Applicability

Agile development techniques

Extreme programming (XP)

Adopte a mentality of sufficiency, meaning delivering only what is necessary to meet the requirements and avoid over-engineering. In other words, developers should strive to create the simplest solution that solves the problem at hand without adding unnecessary features or complexity. This approach can help to avoid waste, reduce costs, and increase the speed of development.

Most important aspects of XP:

Lightweight is considered as not overburdening the development process. How is it realized in Agile practice?​

XP values & principles:

How do we accomplish these values?​ here are some XP practices that help us to achieve these values: Practices | Description —|— Test-first development | Write tests for a new feature before writing the code to implement the feature. Sustainable pace | The development team should work at a sustainable pace, not overloading the team with too much work. Small releases | First the important functionality that provide business value is developed. releases of the system are then frequent and small increments. Simple design | The design of the system should be simple and easy to understand. Pair programming | Two developers work in pairs, checking each other’s work. On-site customer | The customer is on-site with the development team, working closely with them to ensure that the system is being developed to meet the customer’s needs. Incremental planning | requirements are recorded on “story cards” and the development team breaks these down into “tasks”. Continuous integration | The development team integrates their code into a shared repository several times a day.(pull request) Collective ownership | The development team owns the code and is responsible for its quality. Refactoring | All developers are expected to refactor the code continuously as soon as possible code improvements are found. This keeps the code simple and maintainable.

See how they align with agile principles: s

XP and agile principles:

Key XP practices

User stories for specification

When an agile team capture requirements they do so from a user’s perspective. This is done by writing a user story. Written on index cards hence the name “story cards”. Each story card describes a feature of the system from the user’s perspective. The story card is written in the following format:

As a < who wants this piece of fuctionality >, I need < what the user wnats > so that < why the user wants it >.

Refactoring

It means to take a piece of code whos design might be suboptimal and restructuring it so that it becomes simple and maintainable.

We change the code but we don’t change the behavior.

When to refactor?​

Test-first development Or Test-driven development

A software development discipline where developers write automated tests cases before writing the code to implement the feature.

How does it work?

What are the benefits of TDD?

What are the agile principles supported by TDD?

How does refactoring work in TDD?

Customer involvement in TDD:

Test automation​:

Problems with test-first development:

Pair programming

Why is it called pair programming?​

What is the benefits of pair programming​?

How pair programming can support the Agile principles​?

Agile project management​

Scrum

An implementation of agile. A project management framework for managing and controlling iterative and incremental projects.

Cycle:

When that cycle is complete we endup with a potentially shippable product.

This process takes 1-3 weeks to complete.

The process is then repeated time and time again reducing the time from planning to development to testing and review.

You end up with several incremental releases called sprints.

3 key rols in scrum:

3 Artifacts in scrum:

3 ceremonies in scrum:

Scrum workflow

  1. Product owner - creates a product backlog with the features that are needed in the product, then proritizes them and bring the list to the team.
  2. Sprint planning - the team, product owner, and scrum master meet to discuss the to priority user stories determing what can go into the next sprint.
  3. Sprint backlog - the output of the sprint planning meeting is a list of user stories that are ready to be worked on for the next sprint.
  4. Sprint - 1-3 weeks of work, the team works on the user stories in the sprint backlog until they are done. during the sprint the daily scrum is held every day.
  5. Outcome - potentially shippable product, the product owner can decide to release the product or not.
  6. Sprint review - the team demos the work that they have done in the sprint to the product owner and other stakeholders.
  7. Sprint retrospective - the team discusses what went well and what didn’t go well in the sprint and what they can do to improve the process going forward.

scrum workflow

Scaling agile methods​

Agile methods have proved to be successful for small and medium sized projects that can be developed by a small co-located team.​

It is sometimes argued that the success of these methods comes because of improved communications which is possible when everyone is working together.​

Scaling up agile methods involves changing these to cope with larger, longer projects where there are multiple development teams, perhaps working in different locations.

Practical problems with agile methods:

Contractual issues:

Agile methods and software maintenance

Most organizations spend more on maintaining existing software than they do on new software development. So, if agile methods are to be successful, they have to support maintenance as well as original development.

Two key issues:​

Problems may arise if original development team cannot be maintained.

Agile maintenance:

Agile vs plan-driven methods

Is it important to have a very detailed specification and design before moving to implementation? ​

Is the incremental delivery strategy, where you deliver the software to customers and get rapid feedback from them, is realistic? ​

How large is the system that is being developed?​

System issues

How large is the system being developed?​(size)

What type of system is being developed?​(complexity)

What is the expected system lifetime?​(lifecycle)

Is the system subject to external regulation?​(regulation)

Scaling up to large systems

Characteristics of Multi-team Scrum​

Resources

Courses

Sites

The Agile Manifesto - This is the foundation of Agile software development, and it outlines the values and principles that guide Agile methodologies.

The Scrum Open Assessment - This assessment is a free online test that allows you to evaluate your understanding of Scrum.

The Kanban Method - This website provides an introduction to the Kanban method and its principles, as well as case studies and guides.

Agile Methodology: A Beginner’s Guide - This guide provides an overview of Agile software development, including its history, principles, and practices.

Books