Historically, software development has been a tedious and complex task, where many times the profitability of it was well below its cost. They were times of endless developments, of infinite lines of code where any change in the initial project was a real headache for the developer. The little (or no) tolerance and / or foresight to changes, archaic programming methods, etc. did not contribute to generating an adequate ecosystem for the correct software development.
Margaret Hamilton, director of software engineering of the Apollo project posing next to the printed code of the project
Over the years, new programming languages (in theory simpler…), friendlier environments, frameworks that made many tasks easier, concepts that software development companies quickly embraced to improve the quality and delivery times of their projects. But is this enough at present?
In such a changing world, where time and profitability predominate, companies often forget the third fundamental factor… quality. But is it possible to put these three variables into the equation and get a positive result?
If we review the history a little, in 2001, a group of experts, at the request of engineer Kent Beck (creator of the XP and TDD methodologies), met to discuss the situation of software development and coined the expression “agile methodologies”. The expression referred to a framework in which it was possible to increase the quality of development, reduce time, eliminate uncertainty, accept tolerance to changes … in short, increase customer satisfaction.
Those attending the meeting signed the following brief:
“We are discovering better ways to develop
software both from our own experience and
helping third parties. Through this work we have
learned to value:
Individuals and interactions about processes and tools
Software running on extensive documentation
Collaboration with the client on contractual negotiation
Responding to the change about follow a plan
That is, although we value the elements on the right,
we value those on the left more.”
Which gave rise to the 12 principles of the Agile Manifesto
1. Our highest priority is to satisfy the customer through the early and continuous delivery of software with value.
2. We accept that requirements change, even at late stages of development. Agile processes take advantage of change to provide competitive advantage to the customer.
3. We deliver functional software frequently, between two weeks and two months, preferably in the shortest possible period of time.
4. Business managers and developers work together on a daily basis throughout the project.
5. The projects are developed around motivated individuals. You have to give them the environment and the support they need, and entrust them with the execution of the work.
6. The most efficient and effective method of communicating information to the development team and among its members is face-to-face conversation.
7. Running software is the main measure of progress.
8. Agile processes promote sustainable development. Promoters, developers and users must be able to maintain a constant pace indefinitely.
9. Continuous attention to technical excellence and good design improves Agility.
10. Simplicity, or the art of maximizing the amount of work not done, is essential.
11. The best architectures, requirements and designs emerge from self-organized teams.
12. At regular intervals, the team reflects on how to be more effective and then adjusts and perfects its behavior accordingly.
Therefore, the three variables are perfectly associated in the equation “agile methodologies”, which means that a company dedicated to software development that does not opt for an agile methodology will hardly be able to survive the current environment but, above all, the new times that are coming.
That is, the question should not be is it necessary to use an agile methodology to develop software? The question, rather, should be which agile methodology do I choose to develop software?
Some of the main options, today, are:
1. Scrum: “Scrum is a framework for developing, delivering and maintaining complex products.”
2. eXtreme Programming (XP): “Extreme Programming (XP) is an agile software development framework that aims to produce higher quality software and a better quality of life for the development team.”
3. Kanban: “Information system that harmoniously controls the manufacture of the necessary products in the quantity and time required in each of the processes.”
4. Scrumban: methodology that uses the best of scrum and kanban.
5. Read“Originating in the Toyota Production System, this method offers a solid theoretical framework based on experience for agile management practices.”
6. Feature-Driven Development (FDD): “Feature-Driven Development (FDD) is an agile methodology based on quality and constant monitoring of the project.”
7. Test-Driven Development (TDD): “Test-Driven Development is a software development process that is based on the repetition of a very short development cycle: the requirements are converted into very specific test cases, then the software is improved to pass the new tests.”
In the following graph, the current trend (2017) regarding the use of agile methodologies can be observed.
Companies that do not adopt an agile methodology for software development will have a very difficult time surviving in today’s world. It is true that, implementing an agile methodology in a traditional company, is not a simple task but, without a doubt, it is worth making this effort (investment) to face the future with guarantees.