Coding Horror

programming and human factors

Software Development: It's a Religion

It's Monday, and Steve Yegge still hates Agile software development. How much does he hate it? Approximately 11,000 words' worth. I think I could start a cottage industry producing Cliff's Notes versions of Steve Yegge posts. Here's my condensed version of Steve's latest:

  • Steve didn't intend to promote Google's software development process as the One True Method of software development. It's just an example of one possible alternative to Agile.
  • Agile software development methodologies only work because any software development methodology works if you have reasonably talented engineers trying hard enough.
  • There's no empirical, scientific way to prove that Agile is any better than any other software development methodology. Thus, the promotion of Agile is a superstition.

The repeated use of the word "superstition" is a key point. In his previous post, he referred to Agile as a religion:

So the consultants, now having lost their primary customer, were at a bar one day, and one of them (named L. Ron Hubbard) said: "This nickel-a-line-of-code gig is lame. You know where the real money is at? You start your own religion." And that's how both Extreme Programming and Scientology were born.

Steve says "religion" like that's a bad thing.

bar code Jesus

But software development is, and has always been, a religion. We band together into groups of people who believe the same things, with very little basis for proving any of those beliefs. Java versus .NET. Microsoft versus Google. Static languages versus Dynamic languages. We may kid ourselves into believing we're "computer scientists", but when was the last time you used a hypothesis and a control to prove anything? We're too busy solving customer problems in the chosen tool, unbeliever!

The fundamental cultural problem with superstition arises when people don't know how to differentiate between reliable and unreliable data-verification sources, so they treat non-science as science. If they don't recognize or admit that they're being superstitious, then they'll feel no qualms at all about trying to propagate their beliefs to YOU.

Did Steve Yegge prove that Google's software development methodology is any better than big-a Agile? No, but he strongly believes it to be so in his heart of hearts. You might even say he's religious about it. And so what? There's nothing wrong with a religion that preaches solid engineering. If you're a true believer in the church of Google methodology, you'll become a better developer. When Steve evangelizes the glory of Google's methodology so eloquently, it gets other developers excited about what they're doing and makes them better developers, too. Before you know it, the whole team is juiced because everything is coming together on this totally awesome plan that they all believe in-- whether it's big-a Agile, Google, Scrum, or whatever.

In order for programmers to be effective, they have to believe in what they're doing. Whether that belief is scientifically and empirically provable is completely irrelevant. It's Peopleware 101. Steve is so hell-bent on proving his own methodology athiesm that he undermines his own point. It's all religion, as Jef Raskin points out:

Computer systems exhibit all the behaviors best suited to create superstitious responses. You will try something, it won't work, so you try it again -- the exact same way -- and this time it works, or not. That's random reinforcement. The effectiveness of many programming and management practices thus are not measurable. Most of the principles of "extreme programming," for example, seem reasonable to me, and I was using many of them long before they had acquired their present absurd name. The people who promulgate the idea, however, are also those who created the paradigm. Most reported results aren't even single-blind, much less double-blind. We rarely understand, in any detail, the processes going on behind the tasks we do with computers. We're using megabytes of code written by others, code that is indifferently documented and inadequately tested, and which is being used in ways and in combinations unforeseen by its creators.

Software methodology religion, in and of itself, isn't dangerous. There's always the risk of religious persecution, but the only truly dangerous people are the religious nuts who don't realize they are religious nuts. I don't like resorting to name-calling, but I just can't see how Steve could otherwise be so glib:

But rather than enumerating all the non-Agile teams and companies as special cases, let's get straight to the rule: Most great software developers around the world don't use Agile. They just work hard, they stay lightweight, and they ship great stuff. Most developers still have no idea what Agile even is. Think of that!

  1. How exactly is "staying lightweight" different from Agile? Isn't Agile the Church of Lightweight? Steve may disagree with specific tenets of the church, (pair programming, etc), and that's fine. Nobody prays exactly the same way, and not everyone is a zealot. But you always have a set of shared, core beliefs. And lightweight development is clearly a core Agile belief.

  2. It's true that most developers don't use agile software development. But it's not by choice. They weren't given a choice. They're usually stuck in organizations that don't allow them the luxury of "staying lightweight". They're peons trapped in a sausage factory.

  3. Steve talks about "staying lightweight" as if it's the easiest thing in the world, like it's some natural state of grace that developers and organizations are born into. Telling developers to stay lightweight is like telling depressed people to cheer up.

I'm not sure why Steve is so uncomfortable with the idea of software development as a religion, as a set of shared beliefs with very little "basis [in] scientific experiment or pure deductive reasoning." Because he's surely one of the best evangelists I've ever read.

Written by Jeff Atwood

Indoor enthusiast. Co-founder of Stack Exchange and Discourse. Disclaimer: I have no idea what I'm talking about. Find me here: http://twitter.com/codinghorror