Fortune Favors Big Turds

Donald Norman and Joel Spolsky both had their say on how you can’t sell simple software. It’s my turn to say they’re wrong because they adopt an obnoxiously true-or-false stance based on horrible examples. The situation they’re discussing is too complex to fit into a single blog post and I’m not gonna try to convince you that complexity or simplicity is better. I believe you can do both simultaneously.

I’ll also explain why their observation actually does apply in open source software, but from a completely different perspective. See, I’m gonna lure you in by ranting about Joel and how he uses his piece of shit Wasabi to build a single nasty ass bug tracking product, and then waylay you with what I think.

Man I HATE Boolean Arguments

First off, before I even start talking about these guys can I please get someone to thrash the next programmer who breaks an argument down into only two possible options?

Please? Just smash his legs or something. I feel nausea being near people who use if-statements all day long and think that the whole world can be boiled down into true or false with no options. You damn robots! Wake up and start trying to flex your mind around undefinable concepts for once in your life.

Look, economics and sociology are incredibly difficult to understand. What sells as a product and whether it’s simple or complex are probably completely unmeasurable. There’s cultural differences, class differences, timing, presentation issues, the works. It’s ridiculous to say, “Damn! They like SUVs here! Those are complex! MY GOD KOREANS LOVE COMPLEXITYimage 80/20! 80/20! You wrong biatch! BUY FogBugz!”

Ever seen the Korean alphabet? It’s called Hangul and it is probably the most advanced alphabet humans have right now while also being simpler than most of them at the same time. It can be stacked like Chinese characters, but it’s also built more like ours with an ability to construct unusual vowel sounds. Get this, it was invented in about 1443 AD and even mimicks the way the mouth is constructed. That’s right, the characters actually look like how the mouth, jaw, and glottis form to make the sound. It’s brilliant and a gorgeous piece of work that demonstrates how something simple can also have incredible complexity lurking under the surface.

Did you know that Hangul is so good at mimicking other language constructs that some anthropologists want to use it to record near-extinct languages? It takes an average person about 3 days to learn it, whether they speak Korean or not, and they can use it to write down their own language even if it’s completely different from Korean. It’s that universal. Imagine being able to get native speakers of dying languages to actually write down how their language is pronounced. Now that’s power.

I’ll give you a great example. I was walking around Seoul one day and drinking this soda call “Pocari Sweat” (said so in English on the side). Yeah, it says it’s got sweat in it but damn it was good. I turn to a Korean woman, point at the Hangul on the side of the can, and ask in bad Korean, “Can you say this?” She reads each character of Hangul as:

“poh car ee sw et”

That’s right, the English on the can was mimicked nearly exactly by the Hangul and it made no sense to her either. But, she could read it and we both said the same exact verbal noises even though we read different alphabets. She thought it was funny too.

Now, tell me that a culture which created the most advanced and yet simple of alphabets (at a time when everyone used the Chinese characters) somehow hates simplicity. Go ahead, I’ll stop laughing when you finish saying it. You’re wrong.

This is the first flaw in both Joel’s and Don’s arguments. They’ve made this boolean argument where all software must be simple or complex. What they’ve missed out on is that some systems can be both at the same time, just like Hangul. Hangul is incredibly simple and easily learned by people even if they aren’t Korean. Even the Roman alphabet we use can’t pull that off. Greek’s not even close. Latin blows for this too. All these alphabets are just missing the necessary building blocks to encode all the sounds a human can make.

With one simple set of characters based on human physiological speech principles, the Koreans created a system that’s capable enough to do what no other alphabet can pull off as easily. Its capabilies are complex, but its structure and design are simple.

Oh, but no, software must be complex or simple. No in-between, nuanced analysis or multi-faceted discussion. Nope, just two dudes blabbing about a dumb argument based on a flawed view of another culture. This is why all the big flame wars go on forever. Both sides setup obnoxious boolean arguments and argue about their points, but usually they don’t realize that both of them are right or that there can be tertiary perspectives and options they haven’t considered.

Only 2 Generations of Car Owners

You know why Japan is considering changing its constitution to allow them to fight a war? You see, Japan’s neighbors don’t like Japan too much. There’s this nasty business about World War II and some things Japan has never apologized for properly. Now that North Korea has nukes the Japanese are getting their panties in a bunch. I would too. That dude Kim’s quite crazy.

When the Japanese left Korea they were getting beat back by MacArthur who landed in Inchon and started kicking the shit out of them. Koreans call us “Miguks” (“beautiful nation”) because when we showed up they were being decimated by the Japanese. We saved them at a time when nobody else could or would. This is and our continued occupation is the source of most Korean’s love/hate relationship with us. They love us for saving them, but hate us for staying so long.

Apparently the Japanese left Korea and took an estimated 26,000 girls as “comfort women”, took every tree in the country, and possibly a national treasure or ten. Take a look at pictures from right after the Korean liberation. There’s barely any trees, and the few that remain are damaged soon to die. There’s only a few old growth trees in South Korea because of this.

The Japanese destroyed that country and left nothing behind. Then a civil war broke out and things got even worse. It took a good many years after the establishment of the DMZ before South Koreans even had enough infrastructure to have factories. Even then they had to make roads, military equipment, and other things to support building the military to defend themselves.

Forget about SUVs, washing machines, televisions, or any of the crap Don saw on his trip. They needed to rebuild houses, farming equipment, rifles, and other basic survival goods.

What Don witnessed is the second and third generation of Koreans after WWII experiencing prosperity and novelty. Most of their parents and many of them haven’t had these things before. They don’t know what’s crap and what’s good since they haven’t had much experience with it. Ever been to the grand opening of a Super Walmart? Ok, now you’re getting the idea.

This isn’t an insult on Korea, it’s a testament to how kick ass they are. They came up from near destruction to build a massive powerhouse in the region. Koreans have enough clout in Asia to demand that the World Cup be done fairly between them and Japan. That’s some serious muscle.

However, despite shipping their cars all over the world, until recently Korea had one of the highest vehicular death rates in the world. They make a ridiculous number of cars, but the populace has only been around cars about 50 years. Koreans haven’t acquired as sophisticated a taste yet because it’s all new to them. Everything is cool.

South Korea is also an incredibly complex country, but obviously that wasn’t apparent to Don. Don never asked about reunification, Dok Island, or the Kwangju massacre because that’s not discussed by Koreans unless you ask them. Don never wandered the hills near the old Hwarang schools to see all the austere Buddhist sculptures carved into the mountains. I did and I barely know jack about Korea. How does Don know they only like complex electronics from one or two products in some electronics market?

If you want a taste of what Korea will be like very soon check what this guy Ahn Sang-soo is doing with Hangul and Korean style. Simple, elegant, stylish. Some of his stuff is changing how even the west perceives typography and design. Hell, he’s got the whole country covering one eye for no other reason than he thinks it’s cool. He’s the first person to successfully break Hangul out of its “box prison” as he calls it.

This new Korean sense of self and style is the market to hit with your software and products, not the crap people currently buy. What they’re buying now is novelty, as their tastes mature they’ll start to look for stylish products that fit in with the culture around them currently. They’ll pay a massive premium for things that feel Korean, or hit that cultural chord that guys like Ahn Sang-soo are playing.

Sure there will be some mixing of new and old, that’s normal, but it won’t be shitty SUVs and washers with every feature you can imagine in plain site. It’ll be simple but powerful like the rest of Korean culture.

Shove 80 Up Your Ass And Spin On The 20

I am getting tired of Joel blabbing about his one trick pony FogBugz. I’ve used it and it’s utter total garbage. It’s pain level just happens to be between Trac and a prostate exam from Dr. Edward Scissorhands so some corporations buy it. What’s even more amazing is that he actually manages to sell what is basically a crappy todo list to companies and make some money on it.

Until Joel can learn enough statistics to conduct a usability study that does a task analysis comparing FogBugz to Trac for developers he can shove it. You see, FogBugz sells because it screws developers for the sake of keeping managers and bean counters happy. It’s like every lame ass tool sold to management. Rather than make a time tracking or defect tracking system that developers can use they make a product that managers love. Slap a few fancy charts and reports nobody will use, present it to an accountant or desperate manager, and sold to the man in the funny hat.

Let’s not stop with just that in our demands of Joel. I’d also like to request that he stop using The Pareto Principle in software discussions until there’s some solid scientific experimental evidence backing it at all. When I say “scientific experimental evidence” I don’t mean self-help books disguised as management guides that desperate managers like Joel Spolsky read. I mean real work from a real sociologist with a solid repeatable scientific methodology in an established experimental design form that validates The Pareto Principle is even close to possibly legit.

Here’s why: it was popularized by this business guy named Joseph M. Juran based on an observation by an Italian exiled noble Vilfredo Pareto who made the observation about the distribution of wealth in 1906.

That’s right, Joel is slinging 80/20 like it’s truth from Cthulhu when actually it’s completely made up, 100 years old, created by an aristocrat to talk about the poor he didn’t like, and has no real scientific backing whatsoever. It’s not a fucking rule it’s a lame ass boolean logic analysis coked out managers use to justify all sorts of stupid decisions.

Using 80/20 is again another boolean algebra argument that programmers love. Everything is either “80/20” which means “simple” or it’s “complex”. I’m guilty of it myself in the past but no more! I banish 80/20 from my vocabulary as just more unfounded semi-religious bullshit keeping people in the software industry stupid. Enough!

Gotta Rape That One-Trick Pony

I’m gonna make a brash statement here and say that Mongrel out sells FogBugz by huge margins. First we’ve got Mongrel’s download stats putting the download count at around 93,000 give or take a thousand or so since some folks download in weird ways. A quick survey amongst the main hosting providers using Mongrel puts the number of sites being run by Mongrel into the thousands. Just my quick IRC survey with the big adopters says about 3000 to 4000 domains. That also doesn’t include all the people who use it for their development platform every day.

The number of transactions Mongrel is processing right now is down right staggering when compared with FogBugz. I know I only used FogBugz when I had to use it and that was only to keep a manager happy because he had bought it. Most people I talk to are in the same boat with that product, but people who use Mongrel generally love Mongrel…even if they hate me.

Add to this the fact that Mongrel currently powers Ruby on Rails, Nitro, IOWA, Camping, merb, a few other little frameworks, several one-off custom servers for things like file uploads and you’ve got a power house. What’s even more impressive is I had next to no hand in getting these frameworks and projects operational other than giving advice and writing documentation. Most folks took the software and just ran with it, only asking me questions if they got stuck.

It’s possible that FogBugz does way better than this. I doubt it based on what every developer who uses it says. I would laugh at any claims of sales over maybe 2000 installed paying customers. I’m seriously doubting downloads are over 93k/year. If they have over that then Joel needs to fire his sales team because that’s a conversion rate that’s less than 2% of downloads.

However, the real comparison comes from the size of the two software systems and what people are using them for in the real world. Mongrel powers entire companies who base their business on it as a core component. These are hosting providers, major well funded web sites, government agencies, and universities. If FogBugz went down or had a bug then most people would just keep doing their work. If Mongrel has a major bug people lose lots and lots of money very quickly.

What’s amazing though (even to myself) is that Mongrel’s core feature doing all the work is only about 2500 lines of C, Ruby, and Ragel code. The Ragel code is about 129 lines long, the majority of the code is Ruby with C as a close second. This simple bunch of code somehow ends up being incredibly malleable with people writing custom servers, embedding it in Amarok, basing new frameworks on it, and deploying heavy weight applications with it that I never anticipated.

Mongrel even runs fairly unaltered on Win32, any Unix derivative, AIX, Solaris, and probably systems never reported by users. I’ve heard rumors of people trying to get Mongrel running on cellphones. That rocks.

Joel admits to writing FogBugz in a very advanced, functional-programming dialect of Basic with closures and lambdas in order to make it work. This weird language compiles down to an insane number of other languages just so Joel can have the application run on any operating system. It’s incredibly complex, but it doesn’t have to be since, well, there’s other better bug trackers in use today which don’t require any of this. There’s not much competitive advantage even because Joel admits it’s not used on anything else at the company.

This is where Joel’s writing about software complexity irks me to no end. He’s the master of being for both sides of the boolean argument as long as that draws a crowd. When you critically take a look at his claims about how great his software and his team are you start to see that he’s full of crap. Nobody I know thinks FogBugz is any good. It’s junk. He admits it’s complex and there’s obvious single-quote escaping bugs on the PHP side. The grain of salt I take with Joel’s writing could desiccate a water buffalo.

Mongrel however provides an example of a simple piece of software having hidden complex usages and power. I didn’t start out intending it to run on everything and power all the Ruby web applications out there. It was just so simple and easy to use without a loss of power that people could take it and mold it to their needs. Because of this simplicity people can understand it in about a day, and with that understanding comes new uses.

That means people use Mongrel not only as-is out of the box, but also extend it for their own devious plans. Of the people I know who have FogBugz, none of them extend it farther than adding their projects through its painful interface. Even if they wanted to they probably can’t because they don’t have Wasabi Powers(TM) like Joel. More people “buy” and enjoy Mongrel than FogBugz. Everyone I know who uses FogBugz hates it. It’s designed for managers not developers. Most of the people who use Mongrel love it, since it’s not designed for Managers but rather for developers by a developer.

I’m proud of Mongrel, but don’t let me fool you into thinking I believe it’s perfect. Far from it since there’s a few ugly pieces that are required to work around Ruby’s limitations. But I’ll stand by my comment that it’s a way better piece of work and craftsmanship than FogBugz.

One more thing. How can a functional BASIC be advanced? C’mon. That’s like Faye Dunaway getting a boob job to make her tits look 20 while her face looks 55. Just wrong man. Wrong. Let BASIC die please.

Open Source Also Backs Complexity

Now, I will admit that Mongrel is a fluke in the open source world. Joel and Don are right that people love complex software, programmers especially. I despise it and truly think that my open source efforts are meant to be demonstrations of how a simple system can be insanely effective. I’m trying my best to change the way programmers think about software away from “complex vs. simple” to an understanding of the middle way of Shibumi. I’m trying but it’s hard which is probably why I get a kick out of it.

Open source software however tends to promote complex and difficult to use software in a different way. If open source software is difficult to use then you can give it away but still:

  • make a killing supporting it
  • write books for it
  • get contracting gigs setting it up
  • get gigs fixing the source for new purposes, and
  • even sell commercial support licenses so people don’t panick over
    how shitty the code and documentation has become.

Commercial software can’t seem to do this for very long, but open source can hold this stance for decades. Take a look at Apache as the prime example. I think Apache’s nasty ass configuration file format has employed hundreds of thousands of system administrators by itself. The bizarre ways that modules are configured probably amounts to 1/3 the population of Estonia alone.

Open source software as a business promotes producing complex and crappy software in an effort to boost the potential for consulting gigs. I’ve even overheard people in the open source biz world intentionally design something with tons of complexity in order to boost consulting.

Why? Because guys like Joel and Don scream out to programmers that it’s alright to make complex buggy crap that’s difficult to use. “Complexity sells! Fuck the art let’s make cash.” Well, if that’s how you want it then get ready for the Thomas Kincaid of programming to come. Slap a dab here and move that sucker on out.

How I Know About Korea

I was stationed in Korea for a 1.5 years as a soldier in the US Army and made a determined effort to explore every inch of Korea I could. I even spent a month in Thailand rather than fly back to the US. I also studied Japanese and Korean history as a hobby and martial arts for years.

While I don’t even begin to think I know anything about Koreans, I sure as hell know a lot more than Don or Joel. I’ve been there and ate nearly every damn food they make while trying to absorb every bit of their culture I could. I studied their religions, their history, and made an effort.

You see, I found an interesting culture full of contradictions and struggling to combine its past with its future and desperately wanted to learn about them. Don saw an SUV and thought he knew some shit. He doesn’t, but if he’d taken the time to figure out why this might be rather than believing his own thoughts he might have learned something.

I think the future of software is in things designed like the Korean alphabet. Deceptively simple with incredibly complex powers that you can’t even begin to explore fully. The Japanese call this Shibumi, but I can’t even explain that since I’m not Japanese.

It’s not simple vs. complex, it’s how do you merge the two in an elegant way. That’s where software needs to go, and why guys like Joel and Don piss me the hell off with their boolean logic rants.

Save the if-statement for code dorks.