Throughout time, project methodologies have evolved from “waterfall” or traditional to iterative and, later on, agile. The first generation of methodologies, namely the waterfall ones, were characterized by sequential actions, were strongly plan-driven and relied on the fact that, within the project the tasks are easy to identify, predict and repeat. Software projects however, are characterized by a certain degree of creativity, risk and uncertainty, therefore, the waterfall model proved itself unsuitable and sub-optimal for delivering successful and high quality software solutions. The iterative project methodologies aimed at compensating the shortcomings of their predecessor by introducing smaller, time-boxed iterations, by learning and adapting from one iteration to another and by involving the customer more often into the development process.
Although better, the iterative approach missed to deliver the expected results. As a consequence in the early 2000s, a group of software engineers and leaders brainstormed and come with a better way of working that was summarized under one document – the Agile Manifesto. The ideas exposed in here had a big impact in software development and influenced highly the way IT professionals thought about development, testing and delivering value. Unfortunately, a first problem with the manifesto and Agile project methodologies in general, is that they were defined, written and focused around software development, fact which prevented them from entering other business domains or integrating them at an enterprise level. As a consequence, there are companies even today, activating in the mechanical/automotive markets in which questions such as “why are we guiding our work based on software principles?” or “if it worked in software why does it have to work for us?” are still rather common.
In the followings, I will go through some of the problems that Agile project model has when adopted within organizations but also for IT and software development projects.
Although the Agile model was born and defined around software development, th problems faced even in this area are numerous. Some came either from a poor understanding of the Agile model, lack of training in this area or simply from a mismatch between the company’s culture and the agile principles and practices. One of the problems with Agile project methodologies is that, although they may be easy to understand, it takes time until they’re properly applied (hence, they require proper coaching and a certain level of experience) and they cannot be separated from the changes that occur within an organization or from its philosophy, culture and values. In this direction it is important to mention that Agile will more likely fail unless the company has reached a certain level in the decentralization of decision making; the focus should be on motivating the teams and enabling them to take the right decisions rather than only controlling them and holding the decision process at a different level.
The Agile project methodologies require also the right mindset in order for a project to succeed. So, for many companies that used to have their projects conducted according to the traditional model, “going Agile” can be a big challenge. Hence, this change may be met with resilience: some teams, might be unwilling to give up their old practices or may find it problematic to involve the customer in the development process. On a day to day basis, they may be overwhelmed by the number of items in the backlog, by the level of uncertainty on what shall be delivered or by the number of meetings that some frameworks (for example, Scrum) required.
Also, from a day-to-day operational point of view, Agile project methodologies encourage continuous attention to technical excellence and the promotion of good design practices. This translates into writing and evolving high-quality source code, continuous integration loops and automated tests. However, in parallel to new development, many companies have a significant amount of legacy code that has to be understood, maintained and which can be difficult to refactor or test. So, changing legacy code or getting tests automated is still a problem for many projects and requires not only experienced and skilled personnel but also a significant amount of time.
Also, a common tendency in many Agile projects is the complete focus on learning and adaptation while leaving aside anticipation. This results in poor requirements definition, uncleared architectures and later on, problems integrating with other systems or too much time spent for rewriting and retesting the code. Finding the right balance between adaptation and anticipation is also a very time-consuming process and also something that varies from one project to another.