Sometimes it’s easy to fall into myopic ways of seeing the world.
Let’s talk about my favorite recent example, which is the so-called “cowboy developer”. The cowboy developer, the thinking goes, is an organizational problem child because he (or she) adds unplanned features, commits code past the code freeze and generally works outside the control structures that management has put in place to keep development manageable.
These are harmful, right? Cowboys are bad. Right?
Well, it turns out that context matters.
One man’s emergency release is another man’s continuous delivery. Big batch releases and code freezes aren’t ends in themselves. They’re rather a way to achieve acceptable quality in a context where regression testing is expensive (usually because it’s mostly manual), and so features need to be batched up into releases so that we can do one or two regression runs instead of twenty. But as you drive those costs down, it becomes more and more feasible to run regression test suites against feature-level changes. Now there’s no more need for code freezes, and the cowboy looks a little less like Black Bart. He starts to look a little more like a guy who can put a feature/fix together and get it out to the user quickly, with high quality and a minimal of fuss.
Developers don’t like being constrained by code freezes, and testers don’t like it when commits come in after the freeze. But both roles are in a fantastic position to solve the problem, and the solution isn’t better schedule discipline. It’s better testing discipline. Developers need to have comprehensive unit and integration tests in place. Testers need to expand and automate their functional and system test suites.
By May 29, 2012 - 1:23 pm
I find this a little wanting. If it were truly a “testing” problem, then unit/integration tests could certainly be written to fix all of this. But that’s not it is it? Seems to over-simplify what is actually a very complicated organizational and trust-based problem.
The truth I think is that organizations don’t trust engineers (QA and Dev). All of the processes put in place are there only to make sure everyone is under some kind of control.
I think in cases where you have a “cowboy” you more than likely process heavy. Which might have been a process light system and as mistakes were made more process were added in order to prevent mistakes. But processes never get cleaned out. Are all those process really -truly- needed anymore?
Why couldn’t process be removed and by definition also remove the “cowboy”?
By Willie Wheeler May 29, 2012 - 1:45 pm
Hey Clint. We may be saying similar things here.
We’re both in agreement that process heavy-handedness reflects a deeper trust issue. And that’s a fundamental problem.
But there has to be a basis for that trust, and it’s not just that we think the developers and testers are swell people. There has to be something in place to make it hard for things to go wrong.
Heavy test automation is a solid basis for that trust. If your build breaks when somebody creates a bug, then you have a great basis for trust.
In that context, the negative connotations around being a cowboy disappear, because you’re working within a framework where the process is more in the background. You’re not trying to figure out how to get a build out there without running tests against it, for example. The tests just happen automatically and you’re OK with it because it makes sense.
If anything of the “cowboy” remains, it’s the idea that somebody can decide to work on something and get it out there without needing major planning, coordination and verification efforts to achieve the required level of quality. In that latter sense we should all aspire to be cowboys.
By James December 18, 2012 - 6:54 am
I think you’re missing the point. A cowbody coder isn’t so named because he’s good but “outside the rules”; the name comes from the same root as cowboy trader – a workman that doesn’t care about how well a job he does, or whose lives he makes difficult because of his actions.
In short a cowboy coder is someone who is not a team player and doesn’t even care about the team. Just his job and the paycheck it entails.
Your analogy is more like saying in a society without any heavy handed morality rapists aren’t that bad as they increase the population size.