What is Agile
Agile is the ability to succeed in uncertain and chaotic environments by creating change and responding to it.
What is Agile Software Development
Agile software development is an umbrella term for a set of methods and practices based on the values and principles defined by the Agile Manifesto. Self-organizing, cross-functional teams evolve to solutions using practices that are appropriate for their own environment.
Mainstream agile development frameworks.
Agile is not a specific methodology, process, or framework, but rather a set of values and principles. Development methodologies that conform to agile values and principles include Extreme Programming (XP), Scrum, Lean Software Development, Dynamic Systems Development Method (DSDM), Feature-driven development (FDD), Agile unified process (AUP), Crystal Clear, and many others.
History of agile
Iterative and incremental software development methods can be traced back as early as 1957, with evolutionary project management and adaptive software development emerging in the early 1970s.
During the 1990s, a number of lightweight software development methods evolved in reaction to the prevailing heavyweight methods (often referred to collectively as waterfall) that critics described as overly regulated, planned, and micromanaged. These lightweight methods included: rapid application development (RAD), from 1991; the unified process (UP) and dynamic systems development method (DSDM), both from 1994; Scrum, from 1995; Crystal Clear and extreme programming (XP), both from 1996; and feature-driven development (FDD), from 1997. Although these all originated before the publication of the Agile Manifesto, they are now collectively referred to as agile software development methods.
Already since 1991, similar changes had been underway in manufacturing and management thinking derived from Lean management.
In 2001, seventeen software developers met at a resort in Snowbird, Utah to discuss lightweight development methods. They were Kent Beck (Extreme Programming), Ward Cunningham (Extreme Programming), Dave Thomas (PragProg, Ruby), Jeff Sutherland (Scrum), Ken Schwaber (Scrum), Jim Highsmith (Adaptive Software Development), Alistair Cockburn (Crystal), Robert C. Martin (SOLID), Mike Beedle (Scrum), Arie van Bennekum, Martin Fowler (OOAD and UML), James Grenning, Andrew Hunt (PragProg, Ruby), Ron Jeffries (Extreme Programming), Jon Kern, Brian Marick (Ruby, TDD), and Steve Mellor (OOA). Together they published the Manifesto for Agile Software Development.
In 2005, a group headed by Cockburn and Highsmith wrote an addendum of project management principles, the PM Declaration of Interdependence, to guide software project management according to agile software development methods.
In 2009, a group working with Martin wrote an extension of software development principles, the Software Craftsmanship Manifesto, to guide agile software development according to professional conduct and mastery.
In 2011, the Agile Alliance created the Guide to Agile Practices (renamed the Agile Glossary in 2016), an evolving open-source compendium of the working definitions of agile practices, terms, and elements, along with interpretations and experience guidelines from the worldwide community of agile practitioners.
Advantages and disadvantages of agile development
- Faster delivery of value: Agile is based on value-driven delivery. Project teams should deliver usable products to customers frequently and as soon as possible, and let the products go to market as soon as possible to verify their business models and business value.
- Lower risk: Agile advocates prioritizing the delivery of high-value, high-risk requirements, then high-value, low-risk requirements, then low-value, high-risk requirements, and finally low-value, low-risk requirements. This has the advantage of starting the highest risk requirements early in the project, allowing the earliest discovery of whether the product is viable (usually as little as 1 to 4 weeks). If it fails because of the market, technical or other reasons, the project can be stopped in time to reduce the project risk. Even if the project fails, the cost of this failure is relatively small.
- Embrace change: Accept changes even in the late stages of VUCA iteration development. Because the market is changing, user expectations and requirements are changing, and customer needs are changing with these factors, only by responding to these changes in a timely manner and implementing them as quickly as possible can we help our customers stay competitive and attractive in a rapidly changing market. And Agile can help teams to able to respond to changes quickly in small steps.
- Better quality: Agile promotes a high frequency of delivering valuable products. Daily meetings, iteration planning meetings, iteration review meetings, and iteration retrospective meetings all layer on the quality of the deliverables, as problems/solutions encountered, acceptance criteria, DoD, etc. are discussed frequently in these meetings. Also, project stakeholders are invited to attend iteration review meetings and provide acceptance and feedback on the deliverables so that the team can make timely adjustments to ensure quality.
- Continuous improvement: Agile advocates continuous adjustment and optimization, and in each iteration of the iteration review meeting to analyze, discuss, and summarize the current iteration of the agile development process needs to improve or to enhance, and then improve, adjust and optimize in the next iteration. This is a good opportunity for the whole team members to keep learning and improving their experience and skills. In addition, because Agile emphasizes the importance of customer involvement, the development team will give feedback and feedback to customers in a timely manner, so that both parties can work together better and build a more trustful relationship.
- Higher customer satisfaction: Agile promotes early and frequent delivery of valuable products to customers to ensure higher quality, higher success rates, and early business ROI opportunities for customers.
- Higher Team Satisfaction: Agile promotes servant leadership, where the SM needs to give guidance, help and support to the team and remove problems and obstacles that team members encounter in their work. Valuing and respecting team members' ideas and opinions, empowering the team and guiding team members to self-organize and self-manage. More importantly, team members can decide what to do, how to do it, and when to do it, and monitor and manage work progress themselves, taking responsibility for results; team members can discuss and confirm work protocols together, ensuring that everyone's input is considered and accepted; team members can evaluate story points together; and SM should guide team members to collaborate with each other and promote cooperation. By doing this, team members can work more efficiently, the quality of delivery will improve, and team member satisfaction will be much higher - "A happy employee is a productive employee", isn't it?
- Greater flexibility: Agile is value-driven and its project scope is flexible, which gives project stakeholders a lot of flexibility to continuously adjust the scope of requirements, changes, priorities, etc. based on the market. In addition, Agile advocates frequent communication with teams and customers, and constantly adjusts management methods, requirements process, development process, and O&M process based on feedback and opinions. Also, acceptance criteria, DoD can be adjusted according to the actual situation.
Of course, there are many other advantages of Agile, such as transparency, simplicity, efficiency, earlier access to development, etc., which will not be introduced here.
Disadvantages of Agile
Although Agile brings many improvements, it is once again not for everyone and in all situations. Therefore, it is especially important to understand the shortcomings of agile. By knowing this, you are mentally prepared and will be able to tailor and optimize to avoid or minimize negative impacts.
- Difficulty inaccurate resource planning: Since Agile teams don't know the "final look" of the product from the beginning, but gradually learn the true end state of the product as they explore user needs, this makes upfront planning (cost, time, resources) very challenging (the bigger the project, the more complex the changes). (More detailed).
- It is difficult to define "light" or necessary documentation: Agile advocates working with software as documentation (the core is code as documentation). The documentation for the entire project for product development is not prepared at the beginning (not even RP prototyping), but "just in time" during the process. As a result, we see very simple and often last-minute documentation (this is especially true when it comes to handoffs or problem analysis) that makes it difficult to capture the consistency of the overall product: incremental delivery may help bring the product to market faster, but it is also a major drawback of the agile methodology. Because when teams work on individual components in different cycles, the overall output tends to become very fragmented rather than a tightly assembled whole internally. (This challenge becomes even more pronounced when the project has higher demands on UI and UX).
- It's hard to predict a finite endpoint: Agile requires minimal planning at the beginning, which makes it easy to get sidetracked when delivering new, unexpected features. In addition, this means that there is no finite endpoint for the project, as there is never a clear "end product" look. It's hard to measure effectively: Because agile is delivered in increments, tracking progress requires you to look across cycles. This long game makes it relatively difficult to measure progress.
Agile vs. waterfall
One of the differences between agile software development methods and waterfall is the approach to quality and testing. In the waterfall model, work moves through software development lifecycle (SDLC) phases—with one phase being completed before another can start—hence the testing phase is separate and follows a build phase. In agile software development, however, testing is completed in the same iteration as programming.
Because testing is done in every iteration—which develops a small piece of the software—users can frequently use those new pieces of software and validate the value. After the users know the real value of the updated piece of software, they can make better decisions about the software's future. Having a value retrospective and software re-planning session in each iteration—Scrum typically has iterations of just two weeks—helps the team continuously adapt its plans so as to maximize the value it delivers. This follows a pattern similar to the plan-do-check-act (PDCA) cycle, as the work is planned, done, checked (in the review and retrospective), and any changes agreed upon are acted upon.
This iterative approach supports a product rather than a project mindset. This provides greater flexibility throughout the development process; whereas on projects the requirements are defined and locked down from the very beginning, making it difficult to change them later. Iterative product development allows the software to evolve in response to changes in a business environment or market requirements.
Why is Agile becoming more popular in the enterprise?
It can be briefly expressed in two aspects.
Because of the rapid development of mobile Internet： basically, all industries need to be related to the Internet in order to stay competitive and win the market in this era, so a lot of projects are born, and there is a need for someone to manage the projects, that project management is inseparable from the method, and that Agile is undoubtedly the best choice at the moment ("I feel that Agile is born for Internet is not too much").
- Agile methodology is more in line with the development needs of the current era, it can be better, faster, simpler, and more effective to deal with the VUCA era, and it can make SM/PM more comfortable, calm, and confident to manage the project and improve the success rate of project delivery.
Why do some people in China think agile development doesn't work?
If you think it doesn't work, naturally, because you have tried and failed, you think agile project management doesn't work. As to why it fails, a senior foreign agile coach summed up four reasons in the article "Scrum is difficult to implement in Asia" after an in-depth investigation, which I think is more on point：
- Different education style: people are used to following the system, which is contrary to the "self-organization" and "self-management" of agile thinking
- People are generally introverted, so it is difficult for them to speak in public as Westerners do
- Mistakes in the organization are largely not allowed, which is contrary to the concept of "rapid trial and error" in agile thinking.
- software Outsourcing is ubiquitous, and all behaviors tend to be cost saving
In addition to the above four reasons, there are actually many other factors such as the high quality of the development team's personnel requirements.
There is no denying that there are obstacles to the implementation of Agile in China, but this does not mean that there are problems with Agile thinking itself.
This is because one of the core ideas of agile software development is that self-organizing, cross-functional teams evolve solutions by applying practices that are appropriate to their own environment. This means that there are no fixed rules and procedures for agile, and teams have to evolve their own agile project management methods based on their own practices in their own environment.
So, it's not that agile doesn't work, but that many people don't really understand the idea of agile.
We can also see that in recent years, the popularity of agile project management in China has continued to rise, and BAT and many other first-tier large companies have generally adopted it, and the value and advantages brought by agile project management are discovered by more and more teams.
Agile was introduced to China from abroad, and because the breeding ground is different, there is bound to be a process of adaptation and perfection, and a gradual agile project management model suitable for the domestic environment.
Do you need support software for agile implementation? And if so, what are the best ones?
Do you have to use a professional Scrum management system to implement Scrum? Of course, the answer is not necessary.
If the team is less than 25 people, due to the small size of the information difference is not large, the process is simple, many things pull a meeting, using the general whiteboard or online documents can meet the needs, this time on the tool sometimes will cause obstacles to the efficiency of the team. But when Agile becomes the mainstream development approach for teams of more than 100 people, or for large projects, these technical teams organized on their own ad hoc, or between cross-teams, and daily management of multiple teams, such as whiteboards, spreadsheets, and wikis alone will be difficult to meet the needs. If you want to choose a tool to learn agile, Ping Code (which is also the most standard agile development management tool in China) is the most recommended one. For other agile development management tools, you can also check the 10 famous agile development management software at home and abroad through the end of the article. The above introduction to Agile Software Development.