Home About The Codist RSS Feed

A Programmer Metaphor: The Farmer and the Cowboy
Jun 03, 2007 20:04 perm link Readers: 5195

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.

My Tags:

  • Derrick: Jun 04, 2007 04: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: Jun 04, 2007 05: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: Jun 04, 2007 05: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: Jun 04, 2007 08: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: Jun 04, 2007 09: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: Jun 04, 2007 09: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: Jun 04, 2007 09: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: Jun 05, 2007 00: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: Jun 05, 2007 10: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: Jun 05, 2007 12: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: Jun 05, 2007 12: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.

  • Add Comment

Name:


Optional URL:


Comment:


Save Cancel

Copyright © 2007 By Andrew Wulf