Pragmatism is next to Godwinism

by Dan Cutting

In which the act of lazily invoking Hitler during an argument is compared to an appeal for programming pragmatism that shuts down constructive debate. But does “pragmatic” have to be a dirty word?

PLAYERS: JOURNEYMAN, NOOB, BOSSMAN, GREYBEARD

Journeyman — The right way to implement this MacGuffin is to replace the singleton with a factory that makes decorated visitor façades.

Noob — Yeah but we don’t have time for that. Let’s just copy and paste this other method and move on.

Journeyman — That’s not DRY. We’ll end up having to maintain the code in two places.

Noob — Not DRY? Well, factories aren’t KISS.

Journeyman — A craftsman makes beautiful apps with beautiful code.

Noob — We don’t have time to make beautiful code.

Journeyman — Steve Jobs’ father taught him to paint the bits of the fence you’d never see—

NoobDILLIGAF?! We’re not in some ivory tower here, this is the real world and Bossman needs to ship. You’ve got to be pragmatic.

Uh oh, did he just drop the P word?

A powerplay of no-win mediocrity: Journeyman caves, lest she appear obstinate; Noob carries on with tacit support. The team will not take any more time to find a better way because the debate has been short-circuited. Copypasta wins by default.

This reminds me of Godwin’s law which points out that in a long argument, somebody will eventually resort to Hitler name-calling, after which no conversation is possible.

catlover78 — I like cats.

…sixteen pages of cat versus dog…

dogs4eva — Many of the Nazis owned cats, and look how that turned out.

But it doesn’t have to be this way! Like virtually all heated arguments, our developers’ dilemma can be resolved with a patronising Socratic dialogue. Let’s read on…

Journeyman — …suppose that we make Greybeard a party to the argument? Say, Greybeard, should we copy/paste code or architect a convoluted factory?

Greybeard spins around on his Aeron.

Greybeard — Me? I wouldn’t presume to know the answer to that timeless riddle. But I’ll gladly lend an ear. Indeed, I could barely avoid lending an ear already, despite these Sennheisers. Wouldn’t you agree that given enough time, we could implement a great solution?

Noob (warily) — Yes, that sounds possible.

Greybeard — But let’s concede that we’ll never have enough time to implement this Platonic ideal.

Noob — Sure, that’s definitely true! The company wants everything yesterday. They don’t care about Plato at all!

Journeyman — You can say that again.

Greybeard — We should always try to be pragmatic, right? Otherwise we’re just wasting money.

Noob — I agree. The company doesn’t want to pay for over-engineered code, they just want to ship something that works.

Greybeard — And we should respect that. And given that Bossman wants to ship something that works today, doesn’t it follow he’ll want to ship something that works tomorrow, and the day after that?

Bossman (interjecting) — Too true. Isn’t that the point of this “agile” thing anyway? We need this MacGuffin out immediately!

Greybeard — So how should we code the next story?

Noob — Well, Bossman just said he wants it out now. The quickest way is to cut and paste some similar code and hack it until it works. Eat your heart out Plato!

Greybeard — That will work and we could ship it today.

Noob — Hallelujah!

Bossman — Like. 👍🏽

Journeyman grits her teeth.

Greybeard — What about tomorrow’s story?

Noob — Seems like we could just do that again.

Greybeard — This works for a while, but two months in we’re working around the workarounds around our workarounds.

Noob — Well, yeah. We’ll need to tidy up at some point. Maybe take a week or two to refactor.

Greybeard — But Bossman just said he wanted us to ship something that works every day.

Noob — Sure, but this is just a one-off cleanup phase.

Bossman — Why would I sign off on a “cleanup phase” I can’t ship? You’re supposed to be professionals. Why are you coding so badly we can’t deliver anything for a week?

Noob — Because you said you needed it immediately!

Bossman — And now we’re stranded for a week. Thanks for that!

Noob — So “pragmatic” doesn’t mean “do the quickest thing”, it means “do the quickest thing that won’t slow us down later”?

Greybeard — Well, you said it, not me. You don’t have to build the perfect system right away, you just have to make sure you don’t go backwards.

Journeyman — I suppose I could live with that. Maybe one day we’ll get to the ivory tower if we’re always moving in the right direction.

Reason to the rescue again! Is there anything it can’t solve? I mean, seriously, have you ever—

Noob (interrupting) — But how do we know we’re taking a step forward?

Greybeard — Just ask yourself, “What would Hitler do?” I need to get some actual work done today…

P.S. Cats are best.

Hi, I'm Dan Cutting. I mainly write Swift for iOS but love working on Mac apps, web APIs, and programming languages too.

Follow me on Twitter, Micro.blog, or GitHub or subscribe to the feed.