Cowboys and Farmers

Dec 09, 2018

When it comes to software engineering, I believe there are two different mindsets an individual can have: some take the disciplined approach of farmers, others adopt the more free-wheeling attitude of cowboys.

Like the archetypal cowboy who loves his wide open spaces, some programmers thrive when working with ambiguity. Whether it's starting a greenfield project, learning a new framework still in beta, or working at a startup on a challenging problem, cowboys want novelty in their day-to-day activities. Cowboy programmers work well under pressure, and you can count on them to come up with a solution in a pinch.

However there is a reason being a "cowboy coder" has some negative connotations. Embracing the cowboy lifestyle might lead to writing code that might be clever, but ultimately unmaintainable. Cowboys can grow restless when given more routine work, and can be more prone to phone it in when they feel they aren't being challenged.

Farmers understand that they reap what they sow. Unlike the cowboys who seek novelty, farmers embrace their daily chores, understanding that their disciplined work ultimately determines the overall success or failure of their projects. Programmers with the farmer mentality carefully consider the code they write, how it fits into the overall architecture, and how it can be improved or refactored in the future. Farmers can be counted on for their consistent effort, even for the more boring parts of the business such as standups, estimation, etc. The farmers' steady hands can be valuable in mid-size or enterprise businesses, where a mature codebase is already in place and correctness is paramount.

However, many of the challenges larger software businesses face can be partially attributed to the farmer mentality. Fear of change is the biggest weakness of the farmer, who is hesitant to deviate from what he or she already knows. New ways of doing things are left untried, in favor of a safe and steady approach that is already known. With technology, learning and innovation is a necessity, so staying on the farm while the outside world changes isn't a viable option in the long term.

One of these two styles probably resonates more with you than the other. However no programmer is 100% a cowboy or 100% a farmer; we are all a mix a both, and it is likely to change over time.

At the beginning of my career, I was primarily a cowboy (probably because I didn't know any better). As my knowledge grew, I transitioned to the farmer mentality, obsessing over clean architecture, refactoring, and maintainability. While this has made me a better overall engineer, I'm deliberately trying to regain a bit of that cowboy mindset. I want to push myself out of my comfort zone, and challenge myself to see how much I can accomplish out on the range.



Return to Blog