Tending Your Software Garden

November 30, 2008

Software: do you write it like a book, grow it like a plant, accrete it like a pearl, or construct it like a building? As Steve McConnell notes in Code Complete 2, there's no shortage of software development metaphors:

A confusing abundance of metaphors has grown up around software development. David Gries says writing software is a science (1981). Donald Knuth says it's an art (1998). Watts Humphrey says it's a process (1989). P. J. Plauger and Kent Beck say it's like driving a car, although they draw nearly opposite conclusions (Plauger 1993, Beck 2000). Alistair Cockburn says it's a game (2002). Eric Raymond says it's like a bazaar (2000). Andy Hunt and Dave Thomas say it's like gardening. Paul Heckel says it's like filming Snow White and the Seven Dwarfs (1994). Fred Brooks says that it's like farming, hunting werewolves, or drowning with dinosaurs in a tar pit (1995). Which are the best metaphors?

I think we're leaving one metaphor on the table which more accurately reflects the way software is built in the real world: flail around randomly and pray you succeed by force of pure dumb luck. Sometimes it even works. Not very often, but just enough to confuse people who should know better into thinking they're smart, when what they really were is lucky.

The answer, of course, is whichever metaphor helps you and your team get to the end of the project. Personally, I see them as more of a battle cry, a way for a team to communicate a shared vision and a set of values. They're heavy on imagery and metaphor, and light on specific, concrete advice.

Even as Steve McConnell argues that most software development metaphors come up short, he quite clearly picks a favorite, and spends quite a bit of time defending his choice. It's not exactly a secret, as it's in the subtitle for the book: Code Complete: A Practical Handbook of Software Construction.

As much as I respect Steve, my software project experience to date doesn't match the controlled construction metaphor. I agree with Thomas Guest; software is soft; buildings aren't. I'm more partial to the model that Andy Hunt and Dave Thomas promote, what I call tending your software garden.

American Gothic, a painting by Grant Wood

Programers as farmers, if you will.

All the best software projects I've worked were, for lack of a better word, alive. I don't mean that literally, of course. But the software was constantly and quite visibly growing. There were regular, frequent release schedules defining its evolution. There was a long term project commitment to a year out, five years out, ten years out.

To me, the parallels between farming and software development are strong and evocative. Steve disagrees.

The weakness in the software-farming metaphor is its suggestion that you don't have any direct control over how the software develops. You plant the code seeds in the spring, Farmer's Almanac and the Great Pumpkin willing, you'll have a bumper crop of code in the fall.

To be clear, all these metaphors are abstract and therefore heavily subject to interpretation (and/or useless, take your pick), so I don't want to get too wrapped up in defending one.

That said, I disagree with Steve's dismissal. The strength of the farming metaphor is the implied commitment to the craft. Farming is hard, unforgiving work, but there's a yearly and seasonal ritual to it, a deep underlying appreciation of sustainible and controlled growth, that I believe software developers would do well to emulate. I also think Steve was a bit unfair in characterizing farming as "no direct control". There's plenty of control, but lots of acknowledged variables, as well -- which I think more accurately represents the shifting sands of software development. Farmers do their best to control those variables, of course, but most of all they must adapt to whatever conditions they're dealt. Next season, next year, they know they'll be back with a renewed sense of purpose to try it all again and do better. Not so coincidentally, these are also traits shared by the best software developers I've known.

In particular, the rise of the web software development model has made the farming model more relevant. Where traditional software like Office might go through a bunch of monolithic, giant construction project updates every two to three years -- from Office XP, to Office 2003, to Office 2007 -- websites can be deployed far more often. Seasonally, if you will. Some websites even "harvest" monthly, organically growing new features and bugfixes each time. The guys at 37Signals apparently noticed this, too.

It recently dawned on me that software grows much in the same way that plants grow. New features are the flowers of the software world. And just as most plants aren't flowering all year long, software isn't sprouting features all year long. There's flowering season. There's new feature season. There's infrastructure season.

Sometimes software is working on its roots. Bolstering its infrastructure. It's growing underground where the public can't see it. It looks like nothing's happening, but there's really a lot going on. Without those roots new features can't sprout.

And sometimes it's rest time. Plants rest in the winter. Software often rests in the summer (it's too nice to work too hard in the summer). Everything can benefit from a deep breath, relaxation, and sleep. Chaotic constant growth and change doesn't make room for order and organization. Growth requires new energy and new energy requires rest.

Another thing I've noticed is that tending to websites, which usually have community features and user-generated content at the forefront, feels a heck of a lot like weeding your garden. You grow a lot of content, but not all of it is exactly what you had in mind.

I scrutinize every comment, and I remove a tiny percentage of them: they might be outright spam, patently off-topic, or just plain mean. I like to refer to this as weeding my web garden. It's a productivity tax you pay if you want to grow a bumper crop of comments, which, despite what Joel says, often bear such wonderful fruit. The labor can be minimized with improved equipment, but it's always there in some form. And I'm OK with that. The myriad benefits of a robust comment ecosystem outweighs the minor maintenance effort.

And when you don't weed your garden? The weeds threaten to choke out your crops. Eventually, your software garden looks neglected, and then abandoned.

web weeds

As Steve says, some software development metaphors are better than others. But when it comes to web development, at least, you could certainly do a lot worse than tending to your software garden.

Posted by Jeff Atwood
87 Comments

Jeff, your blog used to be interesting. Since you've started your new project it's gone way down hill. This post is a case in point - like the poster above me says: So what?

You used to write about things I could actually put into practice straight away, and I looked forward to new posts, but over the last few months I find less and less value in your blog and it seems you have dissapeared up the arse of the blogoshpere like too many other previously interesting people.

Today I have decided to stop reading you blog.

Mark on December 1, 2008 1:07 AM

You scared me. I saw Code Complete 2 and thought Steve McConnell wrote another must read book. But I clicked the link and realized that it was just the second edition. I was about to have to read another book and I just don't have the time for that :-)

mark brents on December 1, 2008 1:19 AM

Here's an idea: Stop making metaphors and start making plans.

WurdBendur on December 1, 2008 1:33 AM

I treat programming as like every other engineering discipline. Works great for me, I'm sure it doesn't work the same for everybody though.

Aram on December 1, 2008 1:35 AM

Construction is a better metaphor, except it is generally better managed.

We would most likely have a bad reputation like the building industry if people understood (or was interested in) our industry.

bob on December 1, 2008 1:42 AM

I see software as like sculpture. Removing redundant information until all you are lef with is the essential product.

Peter Maxwell on December 1, 2008 1:42 AM

Ever experienced the reverse, wherein software development becomes the metaphor for things in everyday life?

I think it's helped me keep my house neat.


All the time, i just refactored my house by knocking down a wall between my kitchen and living room.

Joe Beam on December 1, 2008 2:20 AM

Definitely agree with resting, I get bored of software projects after a while and try to find a new challenge. When I do come back to the original project I am usually ready to go with fresh ideas.

pete on December 1, 2008 2:30 AM

@Greg H:

Software development is a skilled discipline full of unique (relatively minor repetition), mentally hard but physically easy labour.

Farming is a skilled discipline full of repetitive, mentally average and physically hard labour.

Typistry is a marginally skilled discipline full of repetitive, mentally and physically easy labour.

Garbage disposal and traffic light cleaning are unskilled disciplines full of repetitive, mentally and physically easy labour.

Godhood is an indescribably skilled discipline full of indescribably easy tasks (for those so skilled) which are repetitive by virtue of being absolutely predictable.

Farming and Software Development come out smelling like roses in the comparisons. Although farmers more often smell like shit and software developers more often smell like Cheetos.

Ens on December 1, 2008 2:42 AM

As someone having experienced both career paths, farming and software development are not really alike. In farming, your costs are relatively well known, and easy to predict (both in dollars time). It's your revenue that's hard to predict (yield dollar value).

If I want to start farming a new field (buy a new tract of land), I know how many man hours dollars it will take to put the crop in. I can give an accurate number of man hours dollars (+/- 10%) in maybe 15 minutes of crunching numbers. Software doesn't work like that.

Wyatt on December 1, 2008 2:55 AM

Coding isn't like farming... the best analogy I have heard thus far is GENE SPLICING.

http://bexhuff.com/2008/07/software-design-is-gene-splicing

Many projects go astray because people believe there is a right way to do software... probably because they bought into the concept of it being similar to designing a building, or slapping gears together.

Software design is vastly different... we're more like MAD SCIENTISTS. Good software designers understand the potential for chaos, and use techniques to control it.

This is especially true for distributed teams, or integrating multiple applications across a network.

bex on December 1, 2008 3:15 AM

Perhaps you could even take a specific trade of gardening to better refine the example.

For instance, gardening olive trees takes quite a bit of grafting and care; without such planning and care, the plants grows wildly out of control and produces unsuccessful fruit. I like the idea of grafting as well as we often do take existing modules from applications and graft them into other applications.

Mike Murray on December 1, 2008 3:22 AM

Gardening is a close metaphor because it's a very organic process, but I'd rather prefer something more biological like genetic engineering. You build little objects or classes, which become the basis for more sophisticated ones; other classes can 'consume' the outputs; etc. And if you mess with the genetic code of a perfectly good working class you can easily cause a cancer which degrades, possibly kills, the whole organism.
Good thoughts, Jeff, good discussion.

The Magic Rabbit on December 1, 2008 4:50 AM

Brooks' The Mythical Man-Month came out in 1975 not 1995.

Bill on December 1, 2008 4:59 AM

Maybe because I grew up on a farm and one of my summer jobs was to clean out the stalls in the barn. No automation here, it was pitchfork and wheelbarrel. Today farm equipment is equipped with technology that records GPS location, crop yield, and soil data. Technology is heavily integrated into each piece of farm equipment, input/output is closely monitored, and changes immediately applied. Every acre, every animal is a product. Even cattle are GPS monitored to check their grazing patterns, not only to check their intake of water and food, but also the impact on the surrounding environment (i.e., erosion and water pollution). Agribusiness is very technical.

The whole garden metaphor reminds me too much of Stephen R Covey and his 7 habits... barf :-O

A lot can be learned from Deming, Drucker, and Weinberg. The later, Becoming a Technical Leader: An organic problem solving approach.

Seed manufacturering trend, among many, is to turn on the terminator gene, which renders the seed sterile (seed from the parent will not grow). They also manufacturer their seed to work with other products they produce (i.e., insect repellent). I suppose this could be similar to buying a library without source, that will only communicate with the developer's other products ;-)

dj on December 1, 2008 5:41 AM

I also think of it has gardening, to a point.
If you are in a point where you can analyze the actual growth of a project (4-6 months at least), from design to finish ( although i never consider any of the projects i was involved at that state, everything evolves ), with all the charts, task lists, to-do's and every single byte you write/direct you do get that feeling.
there was even a project my team finished a couple of months ago that remembered me my dear little bonsai. It grows, and sometimes takes paths not expected ( even wildly ), but i tend to it and the result usually is within my parameters ;)

Joe on December 1, 2008 6:08 AM

This doesn't work for me, since I develop on my own, and I am my own costumer in most cases. It's more like I'm the plant, and I have to work on extending the roots and building the leaves on my own, then stand back and look at myself.

Andy Chase on December 1, 2008 6:44 AM

I like the sculpture metafor mentioned earlier. You have an end product in mind, with some specs. You start forming the basic structure and slowly chip away at the finer details, so that a finished product begins to emerge. If your initial structure was wrong you may find the end product is unachievable and you either adapt the end product to match what you have so far created or you throw it all away and start again. And because there are too many variables and ways to skin a software cat, with no one precscribed recipe, the process does indeed approach art.

Glenn on December 1, 2008 7:21 AM

Nice post, Jeff, and it inspired an unscheduled post of my own explaining my metaphor for programming:

http://moffdub.wordpress.com/2008/12/02/runaway-train-of-execution/

MoffDub on December 1, 2008 8:13 AM

I like the garden metaphor, and I first heard it when Dan Bricklin started his company Software Garden in the 80s. His products Demo (the first RAD tool, IMO) and Page Garden were must-haves for developers of custom DOS apps in those days.

Doug on December 1, 2008 8:32 AM

Credit world does rock, though.

Moschops on December 1, 2008 9:10 AM

This is the first I've heard of the garden metaphor for software development.

In my case however, I would be moisture vaporator farming on Tatooine. :)

David S on December 1, 2008 9:21 AM

In the 37signals example, the developers are determining how the plant grows, when it flowers, and what the plant looks like. In that case they are more Gods than farmers.

But anyway, yes we are just farmers, we are just typists. What's your next article, that we are just garbage men or those guys that clean your windows at traffic lights?

Greg H on December 1, 2008 9:55 AM

Gardening is a reasonable metaphor, it's just more like bonsai than growing vegetables in your back yard.

Joe Ludwig on December 1, 2008 9:59 AM

In that case they are more Gods than farmers.

That would be the Programmers are just playing Populous post..

Berserk on December 1, 2008 10:05 AM

I tend to agree more and more with this point of view the longer I work in the field. In fact, over the last few weeks I've been changing the title I give myself in my head from software craftsman to software gardener. On the rare occasion that I have to opportunity to write a tightly-focused library from scratch, I see the work as most analogous to my woodworker grandfather crafting objects in his workshop. But at my day job, where I gradually weed out cruft, plant the seeds of strangler vines to replace deprecated systems, and trim overgrown methods - there the most apt metaphor is definitely gardening.

Avdi on December 1, 2008 10:06 AM

As a farmer-turned-programmer, I agree with the farming metaphor!

Tom Grochowicz on December 1, 2008 10:28 AM

What's your next article, that we are just garbage men or those guys that clean your windows at traffic lights?

In this case, it's just a comparison of all the different software development metaphors out there (and boy there are a lot of 'em -- click the links in the first McConnell quote!). Everyone has a favorite; I favor the gardening/farming one.

Jeff Atwood on December 1, 2008 10:28 AM

I've been spending some time with Lean Thinking and I like their very general principles and complete lack of metaphor. I dismissed Lean for a long time because manufacturing isn't like software. What I've learned since is mass manufacturing isn't like software. Mass manufacturing is a bad idea with a lot of momentum, even in manufacturing.

Lean manufacturing is a completely different animal which resembles good (agile) software practices so closely I found it spooky.

That said, Mary Poppendieck's paper which relates Lean to software is just ok. It piqued my interest, for which I'm grateful, but the paper draws some trite analogies which really irked me. Reading Lean Thinking and relating the principles back to software myself was good use of my time.

Darrin Thompson on December 1, 2008 10:34 AM

Ever experienced the reverse, wherein software development becomes the metaphor for things in everyday life?

I think it's helped me keep my house neat.

Evan on December 1, 2008 10:39 AM

Ever experienced the reverse, wherein software development becomes the metaphor for things in everyday life?

http://stackoverflow.com/questions/168805/what-real-life-good-habits-has-programming-given-you

Jeff Atwood on December 1, 2008 10:41 AM

So, would Easter eggs be the hemp of the software world ?

v.i.lenin on December 1, 2008 11:08 AM

Jeff,

I really like your blog but it would be very nice if you had pretty urls. In any of your posts there are a dozen of links pointing to other articles and I tend to just hover to see the title, but instead get some number.html.

Emil Ivanov on December 1, 2008 11:12 AM

The gardening metaphor is nice. My only problem with is that it implies that you can see the whole thing (that is: the project/program) which clearly makes it easily manageable.

It seems that great deal of the difficulties of programming are due to us not being to see everything in it, let alone understand all the relationships between the moving parts. This does not relate only to the source code per-se. If your program takes information from an external service, a web-site, or a remote server, then these are also parts that make up the whole.

I first heard about software as a *city* in a talk describing the notion of a href=http://www.dreamsongs.com/Feyerabend/Breathturn2006.htmlUltra large scale systems/a. It strikes me as an excellent metaphor: you can't plan a complete big city in advance. It is just too big. You also don't want to do that: you'll have a better city if you do it piece by piece, see its current status and react to it.

I guess I ought to blog about it someday, as it is my favorite metaphor.

Itay Maman on December 1, 2008 11:22 AM

It's not like building a house (at least not anywhere with gravity), if it were I couldn't have started, for instance, with the roof, then build the fundament, install electricity, add some walls, dig out the fundament, build a terrace, add doors, build doorframes. ;)

The beauty of software is that it's NOT physical you can do different parts in (almost) whatever order you like and still have something testable while doing it. You can even start using the software with some components still missing, and even replace the fundament (for instance the database) without destroying the construction.

Qvasi on December 1, 2008 11:34 AM

We've all heard of growing software, but I've never heard it described as farming before. It's a much better metaphor really, I like it.

Matthew Gallant on December 1, 2008 11:39 AM

If we're being agricultural about it, I'd prefer 'gardening' over 'farming'. Farming, for me at least, evokes something more macro-scoped and less hands-on. Gardening, for me, is someone on their hands and knees tending individual plants and small plots of earth instead of mass-planting acres at a time with machinery and mass harvesting with little to no attention to the individual plants involved.

'Farming' matches up with the no-direct-control disagreement, while 'gardening' leaves room for lots of direct involvement at a lower level with more attention to detail.

Bonsai tree growing sounds more like project management to me. You create the framework around which the project grows and you trim, bend, block what needs to be adjusted to direct the project over time.

Maybe a good extension of this gardening metaphor is actually home-garden-grown salad-making. You grow the fruits and vegetables (the methods and classes) in your garden (the framework) to produce the salad (the software package) you want. And then digestion would be the user experience. And so on... Maybe?

msbmsb on December 1, 2008 11:44 AM

Not to be overly critical, but so what? :S

Corey Furman on December 1, 2008 12:07 PM

Except you can't wear gardening gloves and type...

Steve on December 1, 2008 12:13 PM

God, what a series of numb and tasteless posts.

Andr on December 1, 2008 12:39 PM

Coincidentally, I wrote a software project metaphor a couple of days ago. It's like building a wagon wheel.

http://commadot.com/the-ux-of-wagonwheel-projects/

It's actually just one circumstance, but it felt relevant.

Glen Lipka on December 1, 2008 12:48 PM

Software development is a bloody pain.
Never in the field of professional endeavour has so many people with so much talent produced so much crap.

Sam on December 1, 2008 12:59 PM

In Tad Williams science fiction novel 'Otherland', volume 1 - he makes the exact same reference to tending the garden, from a software / hacker / VR / future sense. Can't remember the exact chapter (read it about 10 years ago), but it's one of my favourite passages of all time and I always think of it when developing stuff I'm into.

Bill on December 2, 2008 1:18 AM

I stroke my software, like a cat. Sometimes it purrs. Sometimes it bites my hand and poops on the floor. But there’s always, always fur all over the place. And it smells of cat.

Paul D. Waite on December 2, 2008 1:19 AM

Yeah, I love the blog but the posts here lately, this one in particularly, have really sort of smacked of the all too common pseudo-intellectual blogosphere jibber jabber.

Charles on December 2, 2008 2:13 AM

Best metaphor I adopted so far is that building software is like carving a sculpture. At first you erect something that barely resembles desired output, and then carve, and look at it, and carve, and look at it, to determine what places need further carving. At some point you let viewers to look at it, and touch it, and they complain, that something does not look the way they like or that they have cut themselves on some sharp edge. And then you carve and polish some more. It's hard to satisfy your viewers because they not only look, but also use your sculpture to do useful things. They open beer with it. They use holes in your sculpture to keep their stuff. So you carve. And all you have, is your eyes, mind, hands, and your trusty chisel.

Kamil Szot on December 2, 2008 4:03 AM

have really sort of smacked of the all too common pseudo-intellectual blogosphere jibber jabber.

Did you click on the links in the first quote? Do you know who those people are, and why they've established those metaphors for software development? The answers might surprise you. And who knows, you might even learn something about some other well respected software developers, or, y'know, writing software.

Also, is our children learning?

If we're being agricultural about it, I'd prefer 'gardening' over 'farming'

On gardening vs. farming -- isn't gardening just small-scale, boutique farming?

Jeff Atwood on December 2, 2008 5:02 AM

Re Knuth and The Art of Computer Programming - it's 1968, not 1998

Vic on December 2, 2008 5:32 AM

I always think of the movie Caddy Shack:

Be the ball.

Be the computer.

After all, you have to be the computer to write code.

Mikey on December 2, 2008 5:48 AM

I like the Hunting Werewolfs metaphor :)

Robert on December 2, 2008 5:55 AM

One thing I like about the farming analogy is that it captures the distribution of a farmer's time.

A farmer spends a lot of their day not tilling the earth or planting or watering, but mending fences, maintaining tools and equipment, generally keeping up and improving the infrastructure that supports farming.

Alex on December 2, 2008 5:56 AM

Did you click on the links in the first quote? Do you know who those people are, and why they've established those metaphors for software development? The answers might surprise you. And who knows, you might even learn something about some other well respected software developers, or, y'know, writing software.

You are _not_ Steve McConnel...not even close, Jeff.

The phrase 'empty vessels' springs to mind. ;-/

AProfessionalDev on December 2, 2008 5:57 AM

That's right all you Jeff haters - Keep coming here with your nerd rage and bumping up Jeff's ad revenue. That'll show him!!

Anyways, interesting post. Glad to see SO didn't make this blog die.

HB on December 2, 2008 6:11 AM

If programmers are just farmers then beware the competition from the Amish.

Robert S. Robbins on December 2, 2008 6:13 AM

I like the garden or farming metaphor. We even have droughts, floods, and lots and lots of, uh, fertilizer flung around.

Jeff Schwandt on December 2, 2008 6:52 AM

It seems that comparing programmers to farmers seems to have touched a nerve with a lot of people...

I guess I just don't understand the notion of JUST a farmer, as if they are somehow not as good as other people.

I actually think farming is a great metaphor. Farming is actually a complicated science.

TM on December 2, 2008 7:01 AM

I have got good news for you
Im a gdi 10$ business man are you interested in internet marketing business?

“Whether you think you can, or you think you can’t… you are right.”

I hope that we'll have a successful business venture together


http://freedom.ws/cshak25

sunghak on December 2, 2008 7:33 AM

Several metaphors could apply for different scenarios, I just read that chapter 2 of code complete recently to write a post about it and now I found your post.

I'd never think about the farming approach with web development but it seems very nice, what about software is like a tamagochi, it never stops you to ask you for something, demanding your time, its not a alive but it looks like… _ just kidding.

So if we are farmers which is the best tractor to work on?? VS2008??

Rulas on December 2, 2008 9:06 AM

Software engineering is like what you make it to be. There are gardeners, but there are also major food industry corporations.

Silvercode on December 2, 2008 9:50 AM

Software development is like...software development. The reason we have so much trouble finding a good metaphor for it is because it isn't like anything else. Sure, it's sort of like construction because we 'build' the software, and it's sort of like gardening gardening because our code keeps growing and... well, you get the picture.

The truth is, the only thing that software development resembles is more software development. It is a thing unique in the world, and it attracts a unique cast of characters. Still often more art than science, and more often driven by hope, fear or money pressure than reality, still it works more often than not (although with enough horrors to fill the pipeline of sites like The Daily WTF a hundred times over).

The fact that Code Complete is still relevant is not so much because of the underlying metaphor, but because it is full of common sense. Coding mantra's will come and go, and our tools will continue to change and evolve, but as long as we have human programmers cutting code, the same simple rules of code crafting will still apply. So use a metaphor if it helps. Just don't carry it too far.

Zorro on December 2, 2008 10:09 AM

Sorry to disagree, Coding is like Poetry. Real Poetry, not the free verse crap that is seen so much these days. Look at poetry, you take words and combine them into lines that both have to convey both meaning and at the same time have a rhythm and a flow. The lines tend to pack a extreme amount of meaning in a very small space.
Like Coding, if the line structure is changed in poetry, both the meaning and how quickly(the flow of the words together) the lines can be read without the words spilling over on one another.
I don't think that it was chance that the first programmer, Lady Lovelace, was the daughter of one of the most famous English Poets, Lord Byron.

Mark on December 2, 2008 10:17 AM

Jeff Atwood wrote
---------------------------------
Did you click on the links in the first quote? Do you know who those people are, and why they've established those metaphors for software development? The answers might surprise you. And who knows, you might even learn something about some other well respected software developers, or, y'know, writing software.
------------------------------------------

Yes, I know very well who they are and have read Code Complete. That's just playing the appeal to authority game. There is a point at which the discussion is not really useful and simply becomes a mindless meta discussion, another far too used phrase in the blogosphere. As for the response, should we all just buy into mysticism and alchemy just because Isaac Newton wrote more about that then anything on actual physics?

Charles on December 2, 2008 10:27 AM

If code is like plants, am I the farmer or the fertilizer?

Grant on December 2, 2008 10:40 AM

I always thought it was more like calculus and writing put together. It doesn't really make a coherent metaphor, but it describes the process well.

Practicality on December 2, 2008 11:39 AM

I see some non-gardeners are posting. As a gardener/coder I agree it's a good metaphor. I would back off slightly from focus on a single plant though. Coding to me IS like gardening. You have to plan, plow, seed, weed, stake, and water. A WHOLE garden is the sum of its plants. A badly written... ummm tended.. garden is chaotic, weed-choked, and the wrong plants are getting shaded, crowded, or over-fertilized. A well tended garden is a thing of beauty with grace, elegance, and abundance. The plants work together and really a good garden grows and evolves and is alot like a piece of poetry or beautiful mathematics or great code, whichever metaphor hits you best.

Dennis on December 2, 2008 11:46 AM

I've allways said that we are more like plumbers...

voyager on December 2, 2008 12:06 PM

I think the word you're looking for is cultivate. It's more accurate than farmer or gardener.

But I hate software metaphors and similes. Building software isn't like anything else but building software.

Metaphors are only useful when you're trying to describe how we build programs to non-techs, and in that case an anti-metaphor is probably better. i.e. Software is not like building a bridge because ....

anonymous cowherd on December 2, 2008 12:36 PM

PG compares hackers to painters.

I like the comparison. I've found far more similarities between developers and artists (painters, musicians, writers) than any engineer. For me it's a little like gardening, but it's less organic since code doesn't really grow in and of itself - everything must be synthesized, torn apart, re-built, simplified, beautified, and obsessed over. Think Guns n Roses' Chinese Democracy album, or [insert delayed Microsoft product here].

YComb_yourhair on December 2, 2008 12:48 PM

Ahem.

If you use the words like, or as, it's a Simile, not a Metaphor.

E.g., That blog is LIKE a trainwreck vs That blog IS a trainwreck.

Metaphors are normally stronger than Similes. An Allegory is an extended Metaphor.

Parables are used not to be true to fact except to drive home a single point.

All of these are known as Figures of Speech. At one time around 240 were catalogued (prior to the Dark Ages). Some 212 are found in the Bible. Ask an English Phd how many they are required to know.

To say programming is just like gardening would probably be a rather incorrect Simile.

Steve on December 2, 2008 12:56 PM

I'm not sure about the gardening comparison. My mother has a beautiful garden, she is a great gardener. But it is always the same, she has too many other interests (bridge, travelling, golf, bicycling, internet and visiting art museums) to really have the time and energy to change it and to improve it.

If a developer never improves his or her 'garden' he/she will be running out of business.

Theo on December 3, 2008 1:20 AM

I thought it had long since turned into shopping at the mall. Its all pushing your trolley down the infinite aisles of prepackaged libraries and frameworks. I seem to recall Jeff being harassed for not getting his HTML validator out of a can.

paperhorse on December 3, 2008 2:10 AM

I usually use the software angle on life, and it helps me see things better. This is a new metaphore baout software that I have heard, its nice metaphone, nothing wrong with it, sounds good. I kind of thought that software development on the whole is like assembling an automobile, its all nuts and bolts, the size of nuts and bolts may differ, parts of the automobile reamin the same, the varius tools that one might use, but in the end it still amounts to the basic nuts, bolts, wrench etc. Or its like cooking either you cook for yourself, or for others, or make something from the leftovers. I think programming is art of communication with the computer, you are taking to the computer to usign your language to get the necessary output.

Anand.V.V.N on December 3, 2008 2:11 AM

The farming metaphor is great because everything that Jeff said makes sense and both have to deal with bugs. As a software farmer you have to spay some virtual pesticide (unit testing) all over the place to help make sure they don't cause your crops to fail.

Crackerjack on December 3, 2008 3:32 AM

Jeff has been very defensive of his blog posts lately. Launching into attacks:

Did you click on the links in the first quote? Do you know who those people are, and why they've established those metaphors for software development? The answers might surprise you. And who knows, you might even learn something about some other well respected software developers, or, y'know, writing software.

Anonymous on December 3, 2008 3:34 AM

no, farmers make a _living_ from farming. gardening doesn't even com close. a romantic view, perhaps.

fred on December 3, 2008 5:07 AM

doh, come

fred on December 3, 2008 5:08 AM

I agree with voyager...

Software building is like plumbing you just have to get from point a to b and there are many different routes to get there, some better than others.

In plumbing there are are are only 3 rules; hot is on the left, cold is on the right, and sh!t don't run uphill.

Syama das on December 3, 2008 5:50 AM

My favourite:

Software development is like...playing with lego.

Kramii on December 3, 2008 8:42 AM

Dude, calibri stinks on chrome - get with it, cross browser - why not stick to Arial?

Steve P on December 3, 2008 12:57 PM

Zorro, Charles and Anonymous Cowherd are about spot on.

Metaphors (Eng. Lang. pedantry notwithstanding) _can_ be useful _sometimes_ when explaining a design to someone, although the number of stretched-so-thin-they-squeak metaphors I've heard used (please don't ask about me about the 'bouncers, tickets and cat swinging' metaphor used by a colleague of mine) is somewhat depressing to think about.

When an industry is so insecure that it has to cast around for some descriptions to name the activities it performs then I think that industry needs rather to concentrate on getting those activities right and worry about metaphysics later. As Zorro implied, Code Complete is not holy scripture, just full of common sense and good ideas that we can use now.

AProfessionalDev on December 3, 2008 12:59 PM

BTW: Software development is like a Lady Garden,you're always dying to get down into it, but when you do,you often end up feeling a bit lost.

Steve P on December 3, 2008 12:59 PM

You know, the more I think about the world and the times we live in, the more attractive farming becomes. I could stand working outside all day instead of in a stuffy office listening to blabber all day.

Thanks for re-invigorating my desire to be a farmer yet again.

Mark S. on December 4, 2008 11:00 AM

I truly enjoyed this post. I come from a long line of west Texas farmers and have always considered what I do to be very similar to cotton farming. It's good to know that I'm not alone in this thinking.

One universal law for farmers and ranchers here in Texas is:

Leave the gate the way you found it...

This is one axiom that I've found true in programming as well when dealing with other peoples code. Anyway, thanks for the article.

John Swaringen on December 5, 2008 9:11 AM

First, let me say great post and this is a great blog!

The garden metaphor is a great example of how software development feels. The construction metaphor is extremely effective for communicating with people who depend on software but don't understand development. I can only imagine the reaction working in a software company when explaining that the release will grow organically with different flowers and plants, and it will be beautiful but we won't know what worked and what didn't until spring. It's much easier to say the team is pouring cement and adding plumbing and soon we'll be ready to talk about painting walls and designing the entry way.

That said, I'd much rather work at the company where people saw software like a garden, and I do believe that a culture that supports creativity leads to better products. That might require a corporate culture change however (like how about not putting my release date in your financial projections so that I don't impact the stock when I am just trying to make a better product). Let my garden grow!

I think this topic would make a great interview question for marketing and product management teams. Do you see developing software like growing a garden or building an office building and why?

OK, one last thought which you should put in the something to think about category. People like to walk in gardens and look at gardens, but they live in houses and work in buildings. If your software is something that people must rely on, then does the garden metaphor really work? I like the smell of plants and the colors and all, but I NEED the lights on and the roof to stay over my head and those aspects I can not leave up to the chance of organic growth.

Bob Benedict on December 5, 2008 9:30 AM

I got a bunch of crab grass in my code and the varmint cong is eating all my memory, any code gardeners know how to get rid of it?

Jon Raynor on February 6, 2010 10:14 PM

At my next status meeting I'll be thinking, Farmers spread manure, too.

Jon on February 6, 2010 10:14 PM

Except that farmers don't insult each other for failed crops or pick each other apart over dates and grammar. We need to find some parallel that has more of an "Asshole" factor to it.

Nice post as usual.

Burkeholland on August 8, 2011 6:20 PM

The comments to this entry are closed.