Software Development; Programming Methodologies; Coding Techniques
Cowboy coding is a style of software development that frees the programmer from the constraints of formal software-development methodologies. Proponents of cowboy coding maintain it promotes creativity, experimentation, and “outside the box” thinking, while critics maintain it is inefficient and leads to the development of lower-quality software.
Cowboy coding is a style of software development that gives individual programmers complete control of all aspects of the development process. Unlike traditional software-development methodologies such as waterfall development, cowboy coding does not follow a defined approach. Rather, it allows programmers to use any approach when developing software. Cowboy coders may use elements of formal software methodologies in any combination or order, or they may forgo formal methodologies entirely. Cowboy coding is typically used by students, hobbyists, and developers working alone. It can be practiced by individuals within larger development teams on projects using formal methodologies, but cowboy coding practices are typically considered inappropriate and disruptive in such environments.
Cowboy coding is often confused with agile development. Like cowboy coding, agile software development aims to free programmers from constraints imposed by traditional development methodologies. However, unlike cowboy coding, agile development does not dispense with formal methodologies when designing and implementing software architecture. Instead, it focuses on improving and optimizing the use of existing methodologies. For example, rather than abandoning the comprehensive software testing included in many development methodologies, agile development encourages a focus on useful testing that adds value to the development process. In other words, a test should be conducted to achieve a specific purpose, not simply because it is part of a given methodology.
Agile also retains many traditional softwaredevelopment elements, including a focus on proper documentation and requirements identification. These elements are frequently abandoned by cowboy coders. In addition, agile development encourages programmers to work in well-integrated development teams, in contrast to the typically individual focus of cowboy coding.
Cowboy coding encourages programmers to use whatever process, model, or technology works best for them in any given situation. Proponents of this approach believe it promotes creativity, experimentation, and thinking outside the box. They note that its focus on results rather than process often produces innovative solutions in an efficient manner. They stress that cowboy coding does not prohibit the programmer from using established methodologies; it simply frees them to use their own experience and judgment to select which methodologies to use.
Critics of cowboy coding believe that the approach does not work well in a professional software-development environment. They argue that it tends to lead to solutions that are poorly designed and implemented. Lack of a formal planning and design process can lead to project delays, incorrect scheduling, wasted effort, and solutions that are incomplete or do not meet the purpose for which they are designed. Critics also maintain that teamwork is a key component of all but the smallest development projects. If developers work with a high degree of independence, it can be difficult to effectively coordinate their efforts with those of other stakeholders on the types of large, complex projects often faced by professional developers.
While cowboy coding is not typically used in professional software development, it is often used by individual software developers who work in isolation. For example, this approach is frequently used by independent game developers who design and code their own games. Such a scenario minimizes cowboy coding's weaknesses while emphasizing its strengths. The lack of a development team reduces the need for the planning and coordination required with larger projects. The lack of outside customers and other stakeholders reduces the need for agreed-upon benchmark deliverables and dates, detailed project specification documents, scheduled releases, and timely updates.
The principal resource being devoted to a small-scale cowboy coding project is the developer's time. As such, cost overruns and other financial and resource-related risks addressed by formal development methodologies are not as critical, as they only affect the developer. An experienced developer can mitigate the negative effects of cowboy coding by employing elements of standard methodologies and other professional practices. For this reason, cowboy coding is best used by experienced developers who are familiar with such techniques.
—Maura Valentino, MSLIS
Bell, Michael. Incremental Software Architecture: A Method for Saving Failing IT Implementations. John Wiley & Sons, 2016.
Friedman, Daniel P., and Mitchell Wand. Essentials of Programming Languages. 3rd ed., MIT P, 2008.
Jayaswal, Bijay K., and Peter C. Patton. Design for Trustworthy Software: Tools, Techniques, and Methodology of Developing Robust Software. Prentice Hall, 2007.
MacLennan, Bruce J. Principles of Programming Languages: Design, Evaluation, and Implementation. 3rd ed., Oxford UP, 1999.
Scott, Michael L. Programming Language Pragmatics. 4th ed., Elsevier, 2016.
Van Roy, Peter, and Seif Haridi. Concepts, Techniques, and Models of Computer Programming. MIT P, 2004.
Wysocki, Robert K. Effective Project Management: Traditional, Agile, Extreme. 7th ed., John Wiley & Sons, 2014.