Thinking About Programming

A Programmer Metaphor: The Farmer and the Cowboy

Posted: 06/03/2007, Readers: 5663 Perm Link


In all the years that I have been working as a programmer, I've seen other programmers and the companies that hire them fall into two camps: farmers and cowboys.

In real life farmers keep a regular schedule (wake up early, milk the cows, etc), are suspicious of new things, keep a long term view, and understand the need for a plan and to work as a team.

Cowboys have an independent character, take risks, solve problems on the fly using whatever is available, look for the immediate solution (the calf is being attacked by a wolf, do something) and generally do things their own way.

Programmers may have a mix of these two somewhat disparate viewpoints but from my experience tend to orient themselves one way or the other. So what does this metaphor mean?

Before I continue let me say I don’t intend to look down on either type, sometimes the terms can be tied up with people’s negative stereotypes of the words (cowboys are crude, farmers are bumpkins). I could have used political terms like liberal and conservative, but those words are even less likely to be context-free!

Most of the jobs these days (especially in the corporate world) require teamwork, following methodologies, using predetermined standards and sticking to the plan. I remember an interview at an airline here where they bragged about how their architects never wrote code, the project leaders only designed api’s and the coders only filled them in. One job I had (frequently referenced in various posts) had a formal architecture review board, a detailed methodology (that did change almost every day) and endless schedule extensions. Only someone with a farmer mentality can survive in this kind of environment which expects you to work within the system (good or bad).

A cowboy programmer (again, get over the word) is not going to enjoy working in an environment where everything is pre-determined, pre-planned, team oriented and long term. Cowboys need to be creative and inventive and feel the thrills of coding without a net. As in real life, tying a cowboy to a farm is asking for trouble; likewise expecting a farmer to deal daily with whatever is over the next hill is not going to work.

A farmer is more likely to learn a set of technologies and use them well, undistracted from worrying about the next big thing. This is what most mature companies are looking for in a resume, 3-5 years doing the same thing (.Net, Java EE, etc) over and over. It makes sense if you are looking for someone to fit into a slot and deliver useful code in your fairly static environment.

Cowboys are more likely to be found (and desired) in smaller more dynamic companies, especially in start up environments where there is no status quo and invention is the reason for their existence. Here you want people who can try new things easily, are unlikely to be fazed by failure, and have a burning desire to figure out what’s next.

I can see that people are sometimes forced to work as farmers but come home to program as cowboys to stay sane; I’ve been there. There is no doubt in my mind however that I am a cowboy, which might explain my lack of excitement with the jobs available in the D-FW area in Texas I live in, which is prime farmer country (lots of big conservative companies). Looking at Silicon Valley (where I spent a year once) you can see a lot more cowboy opportunities.

So don’t be concerned if you identify with one or the other, both are necessary in the right places. I’ve known smart people in both worlds (and dumb ones for that matter) so it’s not like one is better or worse. The important thing is to find a place where you feel comfortable and contribute well. The important thing for an employer is to find the right kind of employee.

The important thing for me is to find a horse, giddy up and get coding.

Tags: programmer, essay
Derrick 06/04/2007 06:39

Personally I think I'm more of a cowboy type.

I think the two types of people aren't only found in coding, but in almost all areas. There are people who prefer taking risks and people who prefer the pre-planned regular schedule. I tend to lean towards the former, as they are more likely to come up with something new and bring society forward.

Tone 06/04/2007 07:27

I am a wanna-be cowboy. I certiantly yee-haw at home but I know that the farmer mentality is what I need to survive at work. To be successful and get on projects are may be a little more exciting this is where I need to be.

What I do though is cowboy at home and bring in my ideas and see if the stick. It is a process and always hit or miss.

Jesse 06/04/2007 07:28

Nice article and a cute metaphor.

I work with a bunch of cowboys. It's strange to be the most farmer-ish programming of the lot, advocating things like staging, testing, etc.

I think mostly it's an issue of cost/benefit. Let's say that a program can be tested or planned on a scale from 0% to 100%. I find that the first 20% of planning and testing has a very high payoff. A little thought now about how to make your architecture general and making sure you don't have any stupid bugs goes a long way to saving you hours of work later.

But meetings are the death of productivity. I work on a five-man team and we regularly meet with huge companies in the same industry with a whole development staff amazed that we can write in a few days what it would take them weeks or months to do.

Racer X 06/04/2007 10:00

Dunno. I think that version control and good staging/test environments are great practices for cowboys. It's nice to have the feeling that you can wreck your test environment and start all over quickly.

Josh 06/04/2007 11:11

Great article. I also feel that as time goes on Cowboys find themselves falling into the Farmer type role. An interesting proposition as I find myself, truly a Cowboy at heart, wanting to saddle up my horse and ride out of town six guns a blazing.

Kai MacTane 06/04/2007 11:26

@RacerX: I totally agree. I'm not sure if I'm more of a cowboy or a farmer (when presented with either/or dichotomies, I tend to pick "yes"), but I absolutely love working with source control. Knowing that if I shoot myself in the foot, I can just grow a new set of toes makes me much less stressed.

Matthew Reinbold 06/04/2007 11:59

I will agree that your observation of the two different types of developer are apt. However, applying the 'farmer' and 'cowboy' labels is mostly inaccurate. I grew up in a farm/ranch town and still have a host of extended family trying to eek out a living in a economy that has long since past agrarian. Labeling farmers as 'team based' and 'process driven' is incorrect. Living everyday needing to be agile enough to account for sudden weather changes or equipment breakdowns means continuous 'fly by the seat' operation style. Labeling cowboys as creative loaners has never seen a drunk one try and belt out Barbra Streisand's "People" during a barn dance karaoke.

If you must divide programmers into two camps how about using something more accurate - something like 'day traders' verses 'portfolio managers'? A place where a solo person is reacting instinctually to the situation verses a team-based, process driven means of investing?

Christoph Schmitz 06/05/2007 02:28

@Matthew,

I guess that was what Peter meant when he said "the terms can be tied up with people’s negative stereotypes", and that he doesn't "intend to look down on either type", and finally "again, get over the word". ;-)

It is not a matter of the right labels, it is a matter of the difference...

James Cox 06/05/2007 12:00

There are two types of people in this world; Those that think the world can be divided into two types of people, and those who know better.

  • Tom Robbins
Sandy 06/05/2007 14:13

I just want to know why I always get stuck managing the Cowboy's code after his attention has flitted, monkey-on-crack-like, to the latest shiny thing, and I have to debug the undifferentiated spaghetti he left behind.

Kociub 06/05/2007 14:53

I think some people here are missunderstanding the cowboy figure presented by Peter ( or I am :) ). In my opinion a cowboy is not someone who writes code with no tests, and doesn't use source control. It's someone who always needs a new challenge. I think I am the cowboy type. But I must admit that I admire the farmer type, because if I get a steady, planned out assignment I have to force myself on working on it, and that makes my efficiency low.

kilo 11/24/2008 07:25

from the book 'zen and the art of motorcycle maintenance' comes a similiar comparison 'maintenance welder/production welder' .. I've found it very interesting and have found that I am both at different times, never only one....