Prior to starting Flexiana, I have been implementing “agile” in dozens of companies during my IT & management consulting career. And I have been involved in software development all my life.
As someone who advocated for agile software development so many times, my thinking has shifted.
Let me get straight to the point.
Agility is trying to achieve certain qualities.
And software development as an activity has certain innate qualities. Look at the Agile Manifesto and the principles behind it (https://agilemanifesto.org/principles.html).
And let’s look at some agile values and let’s think about generic best practices of software development.
1. Agile promotes teamwork
And the longer we see the development of this market, the more it shows we need people of multiple disciplines. Analysts, architects, operations people, usability people, test engineers, UX designers, HTML/CSS coders, frontend developers, backend developers, and mobile developers to name a few.
2. Agile promotes flexibility & releasing often
The reality is that any successful organisation, team & product is a subject of ongoing change. Nothing stays the same anymore. I consider “things are changing fast” a cliche, things have been always evolving as fast as it was possible.
As software is quite dynamic, it is possible to iterate fast. Hardware is not that fast and the same practices might not work.
3. Agile promotes cooperation with the customer
Everyone who uses a product does so to get some job done. Communicating this is crucial. We see that in software, but we see marketing research, focus groups, and business idea validation techniques in all fields of new product and service creation. Software is no exception to this rule.
4. Agility promotes high quality
As long as you are not building a one-off utility, writing clean code is a best practice anyway. The same was found in the manufacturing field, for a while popular under names like Total Quality Control, TQM, Six Sigma, and many others. It has been found that constant rework of the product might completely eliminate any profit from a given product and higher quality can drive higher profits.
As most SW systems are developed on an ongoing basis and never really finished, you spend time changing them. This is easier when source code is maintainable and developers aren’t afraid to release new versions.
As you see, as you go point by point of what you see as agile software development, these points are just “something we should have been doing anyway”.
In that matter, I think we gave a name (Agile) to something that is really just the nature of SW development. I am pretty sure there are best practices for tunnel boring, bridge designing, and welding. You don’t have agile tunnel boring, or agile bridge designing.
Well, you can try to create such a thing but you might be just pushing things that aren’t natural.