Is Agile Software Development Equal to Cowboy Coding?
This is an often asked question. Almost 2-3 people ask me this in each session I conduct – online or face to face. Let’s first look at what is this Cowboy Coding. Cowboy coding is the absence of a defined method : team members do whatever they feel is right. Cowboy Coding is a term used to describe software development where the developers have autonomy over the development process. This includes control of the project’s schedule, algorithms, tools, and coding style.
Anyone who has read even the Agile Manifesto will know that this is not true.
[A] Agile software development re-evaluates plans frequently, emphasizes face-to-face communication, and values working software over use of documents. However, most Agile teams do follow defined (and often very disciplined and rigorous) processes.
[B] Project schedule is not a prerogative of the team in Agile. It is the marketing team/ leadership which takes the call on this important aspect of the project in Agile Software Development.
There are still others who say Agile Software Development is crazy Cowboy Style Programming because:
- There is no documentation.
- There is change – right, left, center.
- There is no method to define the maintenance phase.
Again, all this is an individuals perception and an emphasis on definitive processes for everything. Nothing in Agile stops you from saying no documentation or little documentation – they only ask you to value the cost of the documentation – which is a good thing to do. If there is a value and cost-value graph is good, then documentation should be made. Agile is based on building frameworks and teams which accept change. This is based on a lot of engineering practices like refactoring, unit testing and automated tests [which leads to cohesion and coherence – both desired qualities of a good code anyways] as well as having a good framework for product managers and coders to interact through out the product lifecycle. Rather than working on the principle that changes caught early in the development lifecycle are easier to fix, Agile focuses on creating processes and environment where changes at any stage can be responded to readily : it makes it easy for development team to suggest alternative ways to get quicker to market as well as get feedback quickly. It also enables them to align their code and design from a business standpoint. This along with engineering practices mentioned above, helps the team respond quickly to changes. Also, it is not a question of change or no change but market environment – can any good product manager give you solid no-change requirements for anything longer than 02 months in current business environment anyways? What is best – to have a slow response to these requirements or rapid responses? If your product is now in the market, probably maintenance will be one area you want maximum attention. Nothing in Agile makes you focus less on maintenance and more on new product development. Agile is a value stream – whatever brings you value, inspect/ adapt for that. It emphasis the system as a whole with clearly defined roles – something which Cowboy Coding does not unless the only way you can derive success is by having everything entrusted to group of developers – which can very well be the case during the initial stage of your project.