Breaking the ‘Iron Triangle’ in Software Development
In software development, the ‘iron triangle’ refers to the 3 major factors of speed, quality, and cost in development. The “iron” part of the idea is that it is not possible to win at all 3 within a project, so 1 factor is necessarily sacrificed for the sake of the others. For example, a project delivered quickly will either be expensive or of poor quality.
This line of thought is very common in project management, and it can appear to be a reasonable assumption. This assumption may ipso facto cause certain projects to fall into this pattern, but it is not necessarily a foregone conclusion. Read on to learn about how to break out of this way of thinking and how software can be developed without sacrifice.
Iron triangle thinking in software development
Software development is particularly susceptible to the ‘iron triangle’ thinking because of the very fluid nature of software development. There are multiple approaches to software development and many more ways to actually write code to develop new features. Although tools such as frameworks help provide a structure and cut down on development time, it can still be very difficult to properly scope out ahead of time exactly the time and resources necessary to develop a new product.
Many unforeseen issues can occur that only become apparent once development has already begun. Nevertheless, software development can be a very competitive industry, so there is a lot of pressure to move quickly and get products out the door as soon as possible. A confluence of factors around development time, methodologies, and other outside factors can make it seem like having to choose between speed, quality, and the cost is real pressure, and that trade-offs must be made somewhere.
This is partially explained by the two main approaches to software development: agile and continuous development. These methodologies differ in their priorities with regard to software development and software testing.
Quality over cost & speed: the agile approach
Agile methodology focuses on the completeness, which many see as emphasizing quality over cost and speed. Development time is segregated into sprints, which aim to break complicated projects down into smaller pieces. Adhering to wide-scope project deadlines is de-emphasized in sprints, which are instead focused on breaking down projects into smaller, ‘bite-sized’ pieces of work that take place over short periods of time.
This approach tends to be favored in development teams with heavy end to end (E2E) testing because testing is often performed at the end of a sprint, so it can be given the time it needs to develop and run a proper test suite. Tests are encouraged because there is less pressure on meeting deadlines or making rapid commits.
Too often, testing is considered an inconvenience and not given the proper time needed in other development methodologies. This is especially true with sufficiently mature testing suites that may take several hours or more to run. Thus, it can be suggested that agile methodology is slower and costlier than other approaches because there is a greater emphasis on code and testing quality than speed.
Prioritizing speed & cost: continuous improvement
Continuous improvement advocates for continuous integration and continuous development (CI/CD). In CI/CD, rather than having distinct development and testing phases, each individual commit is instead tested and then integrated into the live codebase. This approach can be seen as emphasizing speed and lowering costs because each additional commit is relatively small and developed rapidly.
This can have the problem of putting a strain on testing. Since CI/CD encourages many small changes over less frequent larger ones, a large test suite can quickly become a bottleneck in a project if it has to be run on every commit. The fewer tests that must be written and maintained, the faster developers can produce new commits ready to be integrated into the live codebase. This helps speed and cost but often comes at the sacrifice of testing and quality.
The new approach: combining agile and CI
A new approach is developing that aims to break free of the ‘iron triangle’. The existence of this software development paradigm is something of a self-reinforcing phenomenon. Everyone acknowledges that the iron triangle exists and that you can’t have all three at once; ergo, it is not possible to have all three at once.
An approach that combines quality with speed and cost would be an ideal outcome for any software company. Teams could be given the time necessary to produce quality code without running over budget or taking too long. With smart enough insight into software, it is possible to identify areas that are most likely to fail and allow developers to focus their attention where it is most needed. By augmenting existing development procedures with artificial intelligence and machine learning processes, teams can focus their attention on crafting quality code without worry about how long it will take to test, allowing them to deliver on quality, speed and cost.
Using AI to make quality, speed, and cost a reality
Tools taking advantage of AI-powered processes are rapidly becoming popular in software development. They can help software companies to break free from the iron triangle by making it possible to have quality, speed, and cost all at once. By analyzing a codebase over time, patterns can emerge that machine learning processes can use in many ways, from creating predictions regarding potential problem areas in code to automatically generating and running test suites.
This makes it so that not every area of an application necessarily needs to be tested on every deployment. Instead, AI can help developers make smart decisions about what needs to be tested and what doesn’t in a codebase, given what matters to users and what’s been updated. Automation testing can prioritize test cases accordingly, which reduces overall execution time. This saves time and lowers costs without reducing code quality.
Code is not the only place that AI is useful to help software companies focus. By analyzing customer usage data and feedback, AI processes can understand and make predictions about the areas customers and clients most care about. This provides software companies with valuable data about where their development and testing efforts should be focused, which also saves time and effort while improving the quality of the software.
There are many different approaches to software development, and it is easy to believe that the ‘iron triangle’ is an inarguable fact and that each approach to software development must come with sacrifices somewhere. However, by using AI-powered tools, software companies can discover valuable insights into their codebase and their clientele, enabling them to focus their efforts where they are best needed. This helps them to simultaneously deliver on quality, speed, and cost in software.
About the author: Erik Fogg is the Chief Operating Officer at ProdPerfect, which is an autonomous E2E regression testing solution that leverages data from live user behavior data.