Anthony Cecchini is the President and CTO of Information Technology Partners (ITP), an ERP technology consulting company headquartered now in Virginia, with offices in Vienna and Herndon. ITP offers comprehensive planning, resource allocation, implementation, upgrade, and training assistance to companies. Anthony has over 20 years of experience in SAP business process analysis and SAP systems integration. ITP is an Appian, Pegasystems, and UIPath Low-code and RPA Value Added Service Partner. You can reach him at [email protected]
Every technology organization today seems to practice the agile methodology for software development, or a version of it. Or at least they believe they do. Whether you are new to agile application development or you learned software development decades ago using the waterfall software development methodology, today your work is at least influenced by the agile methodology.
But what is agile methodology, and how should it be practiced in software development? How does agile development differ from waterfall in practice? What is the agile software development life-cycle, or agile SDLC? And what is scrum agile versus Kanban, SAFe and other agile models?
Lets see if we can answer some of these questions in this month’s blog…
Agile – In The Beginning
Agile began as an approach to software development, which is rapidly becoming a preferred way to tackle other project types. It’s based on a set of values and principles that guide the decision-making process, without being as restrictive as traditional project management methods usually are.
While it provides a framework to work within, Agile remains flexible enough to allow teams to make the ideal decisions in any given situation. By enabling developers to deliver results in small, “bite-sized” increments, Agile also makes it possible to change or correct a course of action before the results are significant.
The spread of Agile’s acceptance across global industries is being driven by the realization that it’s the only way for organizations to manage competently in today’s turbulent, customer-driven marketplace. The concept allows companies to handle continuous change in a world that is increasingly uncertain and difficult to navigate.
By comparison with traditional software engineering methods, the Agile approach is well-suited to situations in which accurate estimates, approved plans, and stable projections are difficult to get. Under this type of circumstances, a project often requires a leap of faith by the owners or sponsors. By breaking it down into incremental and iterative components, though, it’s possible to significantly reduce the risk.
Agile development methods range from adaptive, which focus on rapidly adjusting to changing situations, to predictive, which focus on projecting possible changing scenarios and planning ahead for them. Leaders encourage teamwork and accountability to achieve the project’s goals.
The concept of Agile was formalized in 2001 in a document called The Agile Manifesto, by a group of developers who understood that, in order to find a better way of creating new software, they needed to reverse some of the primary assumptions guiding 20th century-style project management.
The outcome of this process was the Manifesto, which includes four basic guiding principles. The philosophy is that while there is value to be found in the concepts on the right-hand side of the list, Agile teams value those on the left more:
- Individuals and interactions versus Processes and tools
- Working software versus Comprehensive documentation
- Customer collaboration versus Contract negotiation
- Responding to change versus Following a plan
These values aren’t intended to dictate how teams work, but to empower them to think in ways that make constant improvements possible. The points contained in the Manifesto are in direct contrast to the methods and standards of the PMBOK® (Project Management Body of Knowledge).
The guiding practices used to support teams taking an Agile approach fall into main principles; which are collectively know as the 12 principles of Agile:
- To satisfy the customer through early and continuous delivery of valuable software.
- To welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
- To deliver working software frequently, from a couple of weeks to a couple of months, with a preference for a shorter timescale.
- For business people and developers to work together daily throughout the project.
- To build projects around motivated individuals. Give them the environment and support they need and trust them to get the job done.
- That the most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
- That working software is the primary measure of progress.
- That agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
- That continuous attention to technical excellence and good design enhances agility.
- That simplicity–the art of maximizing the amount of work not done–is essential.
- That the best architectures, requirements, and designs emerge from self-organizing teams.
- That at regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
1st Generation Agile
Accepted methodologies follow these principles closely. Scrum, for instance, is a set of meetings, tools, and roles that work together to enable teams to structure and manage their work. Scrum incorporates components called sprints, ceremonies, backlogs, stand-ups and retrospectives, all of which enable teams to organize their work and achieve their goals.
Kanban, on the other hand, focuses on the ability to visualize every stage of a project, with the aim of reducing the time it takes to go from start to finish. Tasks are represented on a Kanban board, which enables everyone to see the status of each item at any given time.
Extreme Programming (XP), is a series of daily practices for teams that places a higher value on adaptability than predictability. Practices are based on traditional engineering methods adapted to be more responsive to customers’ needs, and the principles include feedback, embracing change, and simplicity.
Crystal is a collection of approaches that focuses on people and their interaction during the project. Crystal Clear is one of these, which provides frequent delivery of usable code to users, close communication through co-location and ongoing, reflective improvement.
Other processes include Feature-Driven Development (FDD), Adaptive System Development (ASD), Dynamic Systems Development (DSDM) and Lean Software Development (LSD), which is based on Lean Manufacturing and Lean IT principles applied to the software environment.
The focus on “small teams” worked for small teams. Today, larger organizations want to move toward more agile methods, too. The methods they’re interested in extend the original methodologies to include larger teams, coordination and oversight. They also introduce risk; an experiment that goes wrong for the entire IT department is much more dangerous than for a team that experiments for a few months.
Most large organizations commit to a single software development framework. Companies that don’t — that try to pick and choose the best pieces from each — still want to create a single vision. Either way, making the right choices requires understanding them all, their strengths and weaknesses, when and how they make sense. Large organizations have combinations of several projects that may overlap. Larger projects are built by teams of teams, or teams of teams of teams, that may work in different physical locations. This type of work requires coordination. Larger organizations typically want a loose-tight coupling — giving the teams freedom to innovate while creating just enough shared expectations to make cross-team coordination easier. Managing the work-in-progress, the planned work and the scheduling of when projects start and stop becomes much more complex.
So where does XP or Crystal leave them…..?
SAFe, the Scaled Agile Framework – a framework designed by Scaled Agile, Inc. out of Boulder, Colo. to allow large organizations to move toward a more agile way of working. By large we mean more than a thousand people in IT, and more than 250 in software development, though it can be just as effective for teams of 50–100 people. [Note: SAFe and Scaled Agile Framework are registered trademarks of Scaled Agile, Inc.]
LeSS, Large Scale Scrum – literally scales up the activities in scrum, applying them at the team-of-teams level. In LeSS, large-scale planning takes one or two members from each team to form a second meeting; there is a daily standup that does the same as the daily scrum. The “overall retrospective,” which happens the week after the end a sprint, likewise pulls representatives from each team to discuss large program issues. On top of these, LeSS also adds open space, town hall meetings and other coordination and communication activities.
So, exactly how does taking an Agile approach work? Based on the above 12 principles and guided by the values, one of the most important aspects is that it breaks down the work into small increments. This reduces the amount of planning and design needed before kick-off, which has a number of benefits:
- Financial benefit, because of the lower expenditure required before anything concrete can be done
- Timing benefit, because shorter planning enables the team to produce results faster than if they were waiting for the completion of the design phase
- Reduced overall risk, because changes can be made at an earlier stage if problems are discovered.
For each completed iteration of a development to be a minimum viable product (MVP), it must be in working condition and have the fewest possible bugs, so that the progress can be measured in terms of available, working software.
Teams usually try to have software developers in the same location as the business members, which helps to build a team identity and improves communication. It also fulfills the principles of face to face conversation and working together daily.
As each iteration of the product is completed and released, the team reviews its progress to determine whether changes are required for the next iteration, to keep the project aligned with the needs and goals of the customer.
Another important component in the Agile approach is the use of a daily stand-up or scrum, which is a brief meeting during which team members report on the previous day’s actions taken towards the goals of the current iteration, the plans for the present day, and any concerns they might have.
The Agile Software Development Life Cycle
In spite of Agile having flexible components that don’t occur in sequence, the concept still has a cycle to follow. Some of the stages may happen in parallel, but they need to take place all the same.
First is the planning stage, which is when the project team meets to discuss a viable idea and break it down into iterations. After that, teams typically engage in an analytical process. This involves meeting with managers and users to determine those business requirements of the project that are quantifiable, relevant and detailed. The design phase includes preparing the project blueprint from the requirements identified, the implementation, coding or foundation development, finalization of contracts, preparing of work-spaces, and securing of funding. Testing takes place to determine if the product will solve customers’ needs, and deployment is the delivery of the product to the client for use.
Tools and Techniques
Implementing an Agile approach requires the use of specific tools and techniques to improve the quality and maintain the agility of the team. These include:
- Continuous integration, which is when working copies of the product are merged into a shared facility multiple times each day to avoid one developer overwriting another’s work.
- Automated unit testing of individual program modules with their associated data and procedures, to see if they are ready for release.
- Pair programming, when two developers work together handling different aspects of writing and reviewing the code.
- Test- and behavior-driven development, which focuses on making improvements to resolve specific issues identified during use.
- Code refactoring or the restructuring of existing to code to improve it, without necessarily changing its actual behavior.
Agile is also a notable departure from the Waterfall methodology, which is considered by many to be rigidly linear in its approach.
Agile’s primary advantages are the opposite of those experienced with other frameworks, especially PMBOK® and Waterfall. These include the embracing of change, as opposed to avoiding or resisting it, with a view to using each change as an opportunity to refine and improve the end result.
It’s also useful to use the Agile approach when the end result is an unknown quantity, which often happens as a result of possibilities that emerge during development. Delivery is typically faster and higher quality, because the project is broken down into iterations that are tested individually, and the strong team engagement promotes an environment of ownership and responsibility.
Customers have the opportunity to see the iterations before completion and provide feedback, which teams incorporate immediately instead of waiting until later. This allows for continuous improvement of future iterations.
Needless to say, Agile isn’t without some disadvantages. While the concept’s flexibility is a benefit, it can make it difficult to determine a definite delivery date. Also, the final product might end up being quite dramatically different from the original design, because of the continual updates to the scope.
Teams are typically small, so it’s essential to find team members with a wide range of skills and the time available to commit to the project and to working closely with the customer’s representatives. With less focus on documentation, it’s possible this aspect can be viewed as less important. Even though detailed documentation isn’t essential for success, it’s important to achieve a healthy balance regarding documentation.
One of the great advantages of Agile is that there are so many peripheral frameworks that can also be implemented, including Agile Modeling, Rational Unified Process, Lean Development, Scaled Agile Framework, Rapid Application Development, and the Empirical Control Method. All of these have individual benefits to offer the Agile process, which makes the choice of strategies extremely wide.
Software is playing a mammoth role in changing businesses these days, and the way companies work and the speed at which they can operate is often determined by the rate at which programs can adapt. By managing these changes, companies can enable customers to deliver value efficiently, reduce wastage, and deliver results faster. The snag is that many firms that claim to be Agile are, in fact, not agile, because the concept redefines the way corporations have operated for hundreds of years.
In the final analysis “Going Agile” offers companies the chance to improve the transparency of their software development projects and ensure stakeholders and leaders commit to managing the priorities their development resources support.
Outside the IT environment, the use of Agile methodology offers organizations an interesting shift to a more modern way of doing business that is highly likely to revolutionize the way the world work.