Let’s break down, in a very simple manner, what all of these terms mean within the context of principles, processes, and methodologies in software engineering.
Agile
Agile is a set of principles, even called a philosophy or mindset. It emphasizes flexibility and adaptability, collaboration between all parties involved, frequent feedback and continuous improvement among others. For an overview of all these principles, please check the Agile Manifesto. Agile is an umbrella term that encompasses various methodologies, such as Scrum, Kanban and Lean.
Scrum
Scrum is a specific framework that implements Agile principles. It focuses on delivering small, incremental releases of working software. It defines roles, ceremonies, and artifacts, such as the Product Owner, Scrum Master, Development Team, Daily Standup, Sprint Planning, Sprint Retrospective, User Story, or Backlog, to guide teams in delivering software in short, time-boxed iterations called Sprints. Scrum values transparency, inspection and adaptation with a focus on continuous improvement and delivering value to the customer.
Kanban
Kanban is another agile methodology for software development that emphasizes visualizing work, limiting work in progress, and delivering work as soon as it is ready. It refrains from producing a surplus and thus eliminates waste, with developers pulling work instead of it being fed from a to do list or conveyor belt. Kanban is often used in situations where there is a continuous flow of work, rather than iterative time-boxed sprints. Kanban doesn’t have formal roles or ceremonies, it focuses more on managing flow and flexibility in terms of how the team works together.
Lean
Lean is a methodology that borrows heavily from Kanban, it focuses on optimizing flow and minimizing waste in all aspects of a process. This includes identifying and eliminating activities that do not add value to the end product, such as excess documentation, overproduction of features, and unnecessary waiting times. Lean encourages a continuous improvement cycle, fostering a culture of engagement, collaboration and constant learning. Lean is also less prescriptive than other Agile methodologies, and does not have formal roles, ceremonies, or artifacts.
Waterfall
Waterfall is a traditional software development methodology that is characterized by a linear, sequential approach. In this model, each phase of the development process is completed before moving on to the next phase. Unlike other methodologies, it is not iterative or incremental in nature, and it is also less flexible, as progress flows in one direction through phases that have dependencies on each sequential step of the cascade. Waterfall may be recommended when requirements are well understood, defined and not likely to change.
Extreme programming (XP)
Extreme programming is a methodology with an emphasis on practices such as continuous integration, test-driven development, pair programming, and frequent releases. It focuses mainly on the technical parts at the expense of project management and customer involvement, but can be an effective approach for teams that prioritize technical excellence, adaptability and collaboration.
Based on my experience, many workplaces do not have a strict requirement for which software development methodology to use, and a customized or hybrid approach that meets the specific needs of a project or organization is often the best choice.


