Modern agile embraces the concept of not estimating work, and one of the key reasons behind this lies in the infinite complexity inherent in software development. When we refer to 'infinite complexity,' we acknowledge that neither we nor the users possess a clear understanding of the eventual outcome. Attempting to speculate or plan without practical experimentation leads to an overwhelming number of potential outcomes. Consequently, many renowned software developers worldwide recognized that the traditional waterfall approach simply couldn't meet their needs.
Infinite Complexity
In certain engineering fields, there are defined limits to knowledge, allowing individuals to become true experts. For instance, in bridge construction, there are specific materials to be used, considerations for various soil types, and established methodologies to follow. Building a bridge has a finite nature, enabling us to accurately determine the requirements for constructing a bridge from point A to point B. Mathematical calculations come into play here. While the process is undoubtedly complex, it is still inherently definable. However, software development is fundamentally different. Its complexity is theoretically infinite even before we embark on the project. This is because software development is an amalgamation of users' desires, constantly evolving and impossible to fully define or estimate upfront. Even the users themselves struggle to articulate their needs until they witness or experience the software firsthand. They often change their minds because humans are incapable of envisioning all the potential possibilities and the impact the user interface ( UI) may have on their work. Interestingly, if you were to deliver exactly what they initially requested, it is likely they would express dissatisfaction.
It's in the doing of the work that we discover the work we must do - Woody Zuill
Earlier, we discussed how mathematical calculations can be applied to bridge construction, providing a sense of certainty. However, when it comes to accounting for an individual's desires, attempting to quantify them with math becomes an impossible task. Now, imagine the complexity of trying to accommodate the desires of an entire group of people. It quickly becomes apparent that this endeavor is laughable and unfeasible. This is precisely why agile methodologies thrive in software development, while waterfall approaches fall short. Engaging in extensive estimation practices only squanders valuable time that could be better spent on understanding and addressing the true needs of the users throughout the development process. I have personally witnessed months of planning efforts being wasted when the team could have started building and learning from the users directly.
Agile methodologies address the challenge of planning for potentially infinitely complex software by embracing a 'go with the flow' approach. By iteratively demonstrating and delivering what we believe the users want, we actively learn what they truly desire, effectively diminishing the notion of infinite complexity. This incremental process begins shortly after our initial 'Hello World' deployment to production, as we embark on a series of small, synchronized steps. Instead of frantically scrambling to adapt when a user changes their mind, we gracefully adjust and align with their evolving needs in a granular and coordinated manner.
Simplifying Our Work via Iteration
In a captivating video, Dave Farley, one of the pioneers behind the creation of DevOps, brilliantly elucidates the power of iteration, making these concepts accessible to individuals from all backgrounds. Dave, renowned for his insightful books on the subject, effortlessly articulates ideas that often seem obvious to us developers but can be challenging to convey to managers. It is not uncommon for managers, who may lack technical expertise or hands-on experience, to struggle with comprehending these concepts fully. However, this video serves as an invaluable resource, bridging the knowledge gap and offering managers a profound understanding of the need for agility. I wholeheartedly recommend it as a valuable tool for managers seeking to grasp the significance of iteration in our work.
Make It Easy
An intriguing aspect of all this is that if organizations allow technical professionals to form self-organizing teams, much of the agile and DevOps principles discussed here would naturally fall into place. The challenge often lies in the transition to self-organization, as some staff members may lack a comprehensive understanding of agile or DevOps. However, with proper guidance, including training and a collective effort to read the Continuous Delivery book, achieving self-organization becomes feasible. It's important to note that no amount of training or reading can transform someone who fundamentally favors rules, regulations, and rigid planning into an advocate for agile methodologies. Those who resist the notion of embracing agility and flexibility are unlikely to adopt agile practices in the near future.