A blog about Information Systems and Software
NodeJS Object Database

Making Cowboy Coding Work

Posted: 22.04.2013 15:16:24  | Category: SOFTWARE ENGINEERING, TALENT  | Tags: Cowboy Coding - Extreme

Cowboy CodingCowboy Coding means assigning a task to a programmer and let him analyze, design and code it the way he wants. The programmer is usually alone and has little communication with rest of the team. So if you are coding this way, this means you have a team of independent programmers. And this is usually referenced as a bad practice of software development because it looks like you have no methodology and no control over what is being developed. And if you have inexperienced programmers, it is mostly likely that some parts of the code will fail. It is also expected that you will have difficulties in controlling and frequently releasing your code as Agile Methodology dictates.

All true and I cannot agree more. But this needs to be discussed, and I think this is still an option in case you have a good team.

Let us not forget a couple of simple facts:

2 programmers can't simply work on the same piece of code, that would not make sense. Let me put it more clearly, a simple function like "calculating the volume of a cube" can not be coded by 2 programmers. But of course assigning a task like "building Order Management Module" requires more attention, more ideas and therefore more programmers. Thus the size of the task matters. If you are capable of distributing reasonable tasks then this can work perfectly.

if you are to give every single detail about what is to be done, then you do not need a programmer you only need someone who can type fast. So you expect a programmer to be at a certain level. This is what I call talent. you can have a talent who can do the job of 10 programmers with no bugs at all, or you can have someone whose code is expected to fail. Then this means the level of talent and what you are assigning to who also matters.

Then an ordinary project manager will not help you solve these problems. Because most of the project managers usually do paper work and business level work, probably he will not be able to judge the talent level and the complexity of the code needed. You actually need someone who is a better coder than all the programmers in the team. If you do have one, then he can coordinate all agile activities, distribute right work to right person and let these people work cowboy style. I also like referring to this as gunslinger methodology.

So let us take 2 teams for example, Company ABC has a development team of 40 people consisting of project managers, analysts, designer/architects and programmers ending up with a total skill score of 800 (20 per person average), and Company XYZ has a development team of 7 gunslinger programmers who can shoot faster than their shadows with a total skill score of 490 (70 per person average). First team costs you 320K$/month (8K$ average), second team costs you 84K$/month (12K$ average)

If you had the luxury to be the boss of either one of these companies, which one would you actually prefer?

I personally would prefer the second one with 7 gunslingers. "The magnificent seven"

Let us look at this from a different perspective, assume that these companies competing over a customer project and there is a deal both are bidding to and both have to win. This is probably where Company XYZ is going to fail. Since XYZ cannot pull out the gun and show case their skills, the one that goes to customer and says we have 40 people in our team will most likely win the deal. Once again Company XYZ becomes the victim of judgement. And this judgement comes from someone who really cannot know anything about what XYZ is actually capable of.

Customer will surely decide only on the physical evidence at hand. He cannot know what the skill matrix is, or how well XYZ can manage this. Usually what happens is that customer will select company ABC, have a taste of failure and high costs and only after that they will realize that it is not only the number of people that matters but it is also the quality of the people that they work with. And they will probably call Company XYZ to solve their problems.

Cowboy coding is not really something about frameworks, methodologies, paper work and etc, it is a direct way of solving the problem. And actually I think all that paper work and formalities are agains the nature of talent. If you are a control freak and do your job by the book, then this is not for you. you are better off to work with traditional methodologies and keep everything under control and accept the fact that your deliverables will take time and will be much smaller.

Here is good article to rate the skills of your developers:

Cheers and get the job done!