Are You A Cowboy Coder Or Agile Software Developer?
Software Developers facing a new programming project sometimes start coding before thinking through or planning an approach.
Coding without first planning or thinking through is a programming method known as cowboy coding.
Cowboy coders approach work with the mindset of coding without estimating or planning.
And they are at a complete lost when the results achieved by their cowboy coding tactics does not meet expectations.
Cowboy Coding Is Dead, Long Live Cowboy Coding
While many programmers publicly ridicule cowboy coding, they privately practice cowboy coding because it is the easier thing to do.
Look around you for cowboy coders. They exhibit some of the following tell-tale signs:
They do not estimate the work required for a software development project before coding because that is too difficult or unnecessary for them
They hack away at code instead of taking time to find the best algorithmic or coding approach for solving a programming challenge
They frequently under-estimate the complexity of software development projects and so they work late nights, weekends or even holidays in a bid to catch up with late deliverables
They dislike working with system architects, business analysts and project managers because the only work that matters to them … is that of writing code
They can’t find time to sharpen or improve their programming skills because all their time must be spent on coding
They get stuck in their code or hit dead walls because they under-estimate the complexity or difficulty of working with technology
Cowboy Coders get frustrated because their programming projects always seem to take a longer time to market than they estimated.
Unable to see the complexity of their code ahead of time, they are stumped when their efforts fail to produce working software on time or under budget.
Cowboy Coders bite off more than they can chew by embarking on projects that are too large for such tactics.
Since they do not take time to understand the complexity of their code, they are also likely to under-estimate the time or effort required.
Cowboy Coders develop poorly designed, buggy, unreliable software because of a lack of proper architecture and a lack of a software development methodology
Cowboy Coders produce poor quality software because of a lack of unit testing skills or good co-ordination with other software testers or quality assurance professionals
We Are Cowboys
Despite the superiority of iterative, agile or even Waterfall software development, Cowboy Coding is very much alive and well … and here are the reasons why:
Software Developers resort to cowboy coding because structured software development including Agile or Waterfall methods requires more thinking and planning skills from the developers.
Formal software development practice is more of an art than a science.
And it requires additional formal training, education or discipline beyond that of just learning a programming language.
Agile or waterfall software development methods places an initial burden or responsibility on the programmer to think or plan their work first before coding.
This goes against the natural habit of undisciplined cowboy coders.
Asking cowboy coders to go Agile hurts their feelings because it suggests that they cannot instantly, easily or intuitively come up with the best code for a programming challenge
Agile and Waterfall software development methods require more planning, design and architecture skills which are harder to come by or less intuitive than simply coding before thinking or cowboy coding.
Developers Go Agile!
Why the Waterfall model may seem like the next step up from Cowboy Coding, I recommend that developers bite the bullet and go agile for the following reasons
Faster Time To Market:
Agile developers work for their clients or customers.
Customer As King:
Agile software developers work for the customer and not for the development process.
They are empowered to focus, respond and adapt to the customer’s needs with the end goal of giving the customers what they want!
Agile Project Management:
Agile project managers focus on the current iteration or use it to make better estimates for the next one.
Agile software developers have better, more realistic or more accurate project plans to work with because they are only tasked with producing working software for the current iteration and not for the entire project at once!
Agile Software Testing:
Agile software testers work with software developers to produce high-quality software a the end of each iteration instead of waiting for the entire project to complete before testing!
Testing for bugs at the end of each iteration, reduces the chances of producing unreliable, buggy software at the end of the entire project unlike the waterfall model.
Case Study: An Agile Developer Breaks The Cycle Of Unemployment
Here is a real-life case study of how I helped a C/C++ programmer break the cycle of un-employment using Agile Programming techniques.
Un-employed C/C++ Programmer
Sometime ago, I was approached by a C/C++ programmer with a college degree who had been unemployed for a couple of years.
Transition From C/C++ Programming
Instead of just re-writing the programmer’s resume, I counseled the C/C++ programmer to learn a new programming language and database platform from scratch.
Agile Hands-ON ExperienceFor acquiring hands-on experience in the new programming language, I gave the C/C++ programmer an iterative software development project to build from scratch.
I also tasked the programmer with building a working release of the project very early in the lifecycle and then presenting that to hiring managers immediately.
Guess what happened, including the agile development experience in a resume, got the developer hired in the very first job interview and with only 1 month of software development experience in a new programming language!