Coding Horror

programming and human factors

Three Things

I've expressed my disillusionment with to-do lists before.

But let's try something simpler, a little experiment. What do you use to keep track of what you need to do? Hold it up, so I can see it. Humor me.

Seriously! No no no, hold it closer, near the screen here. Let me look at it. Let me get a good, long look at it.

Now imagine me slapping this thing out of your hand.

don't go there

I just want to make a point, not break your fancy whatchamacallit. So pretend I slapped it into a soft fluffy pillow on the ground, not the hard concrete of the sidewalk. Though I probably should have.

Whatever that thing is, it's a crutch. You don't need it. It's hurting you more than it is helping. Get rid of it.

Instead, ask yourself this:

What three things do you need to do today?

You should be able to instantly answer this simple question, each day, every day, for the rest of your life. Without any tools other than the brain you were born with.

If you don't have this skill, develop it. Practice, starting today. Right now.

What are you doing right now? Is it going to somehow result in one of those three things getting done today? Will this you get you to where you need to be by the end of the day?

I'm not asking you to admonish yourself or to make any changes to your routine. Just keep it simple, focus on the important things, and add a little layer of awareness.

So. Two items left. I'm doing pretty good today.

[advertisement] Hiring developers? Post your open positions with Stack Overflow Careers and reach over 20MM awesome devs already on Stack Overflow. Create your satisfaction-guaranteed job listing today!
Discussion

Please Read The Comments

I find the Don't Read The Comments movement kind of sad.

In 2006 I said that a blog without comments is not a blog and I stand behind that statement. There have been brief periods where my own blog has been temporarily without comments, but they will always come back as long as I'm in charge here.

I'm a fan of comments, warts and all. They're noisy, sure, but in my experience they reliably produce crowdsourced knowledge in aggregate. I understand being pressed for time, but if you want the complete picture, in the same way that you should follow all those little citation links in Wikipedia articles, you should read the comments.

I empathize with the complaint, believe me:

I used to believe that as an online writer, I had an obligation to read the comments. I thought that it was important from a fact-checking perspective, that it somehow would help me grow as a writer. What I’ve learned is that if there’s something wrong or important or even, sometimes, good about a story, someone will let you know. I’ve over the years amassed an amazing community of Salon readers who engage via email, who challenge me, who inspire new stories, who are decent people and treat me like one in return. What I was getting in the comments was a lot of anonymous “You suck, bitch.”

I admit it’s depressing for one who’s invested almost her entire career in online community to throw in the towel on it in this way. I want it to be better. But it’s just not. As a colleague once observed, “I just can’t take another letter from Angry Bad Divorce Guy.”

But that's so many pesky words, isn't it? TL;DR. Allow me to illustrate with a graph that your brain can absorb in milliseconds:

comments and esteem for humanity

What is wrong with people, amirite?

I humbly submit that this is asking the wrong question.

What is wrong with us?

I agree with Anil Dash. If your website is full of assholes, it's your fault.

As it turns out, we have a way to prevent gangs of humans from acting like savage packs of animals. In fact, we've developed entire disciplines based around this goal over thousands of years. We just ignore most of the lessons that have been learned when we create our communities online. But, by simply learning from disciplines like urban planning, zoning regulations, crowd control, effective and humane policing, and the simple practices it takes to stage an effective public event, we can come up with a set of principles to prevent the overwhelming majority of the worst behaviors on the Internet.

If you run a website, you need to follow these steps. if you don't, you're making the web, and the world, a worse place. And it's your fault. Put another way, take some goddamn responsibility for what you unleash on the world.

In other words, if you are unwilling to moderate your online community, you don't deserve to have an online community. There's no end of websites recreating the glorious "no stupid rules" libertarian paradise documented in the Lord of the Flies in their comment sections, from scratch, each and every day. This ends exactly as you would expect it to.

Libertarians make bad lifeguards

However, demanding that every online community, every comment section, have active moderation is a tough sell:

  • Skilled moderators are difficult to find. A bad moderator is often worse than no moderator.
  • Do you have the budget to pay full time moderators?
  • Are your moderators around 24/7?
  • If you have a single moderator making unilateral decisions, who appeals their decisions? If you have multiple moderators, how do they resolve disagreements?
  • What happens when your moderators inevitably burn out or move on?

One of the reasons I launched the Discourse project was due to the utter lack of understanding of how you build software to help online discussion communities moderate themselves. Their survival depends on it.

What I learned building Stack Overflow, more than anything else, is this: the only form of moderation that scales with the community is the community itself. We became quite skilled at building systems for self governance of online communities, and one of the things I'm proudest of is that – if we did our jobs well – decades from now Stack Exchange will still be a network of viable, functioning, entirely self-governing communities.

It's always a people problem. This is absolutely true. But it's also true that software can profoundly affect people's behavior, and provide tools for encouraging positive behaviors while modifying and mitigating negative behaviors. All that stuff Anil Dash described as your responsibility? Discourse handles it automatically, even if the owner installs and then walks away forever.

These are the principles of civilized discourse that Discourse is founded on, that our discussion software is designed around. Civilization begins with software that actively works to help you create safe environments for having reasonable conversations with other human beings. On the Internet, even!

discourse

This is all a very long winded way of saying that effective immediately, Coding Horror is using Discourse to power its discussions.

You may have questions, so I will attempt to answer them:

  • This blog is now hosted on Ghost, which doesn't natively support comments. All previous TypePad comments were converted into Discourse. To the best of our ability, nothing was lost.

  • Discourse is still beta, but late beta. Expect changes and improvements as we make our way to 1.0.

  • Discourse is a companion area to this blog, a clubhouse for the community. You can visit there directly at discourse.codinghorror.com

  • Every new blog post here results in a corresponding topic being automatically created in the Discourse discussion area.

  • I do not, and will not, offer in-page commenting here. If you want to reply with a comment, you go next door to the community clubhouse. There's a fairly strong, but permeable, membrane between the editorial area here and the community area there. This is intentional.

  • At the bottom of each blog entry here you will find read only versions of all replies to the Discourse topic associated with this blog entry. I might eventually switch that to a "best of" algorithm so readers see the best comments without having to wade through dozens or hundreds of replies.

If you like what you see, Discourse is 100% free open source software, so you can easily set up the same system for your own blog. We even have a WordPress plugin to assist.

Now who's ready for some dogfooding?

[advertisement] Stack Overflow Careers matches the best developers (you!) with the best employers. You can search our job listings or create a profile and even let employers find you.
Discussion

The Trap You Set For Yourself

The Dan Ariely books Predictably Irrational and The Upside of Irrationality profoundly influenced the way I design my massively multiplayer typing games. These books offer science in the small about human behavior, and stark insights into user behavior — and by that I mean our own behavior.

The Long Goodbye

All detectives are by definition students of human nature. As the famous fictional detective Philip Marlowe is fond of noting:

There is no trap so deadly as the trap you set for yourself.

We're born pretty darn great at lying to ourselves, and we get progressively better and better at it the older we become. In software development terms, every user lies.

We become experts at lying to ourselves to avoid being functionally crippled on a daily basis by the ongoing fears that:

  • your work does not matter.

  • your life does not matter.

  • nobody cares about you.

  • you aren't good enough.

  • you aren't smart enough.

Thus, lying to yourself is part of the human condition. Otherwise nobody would be able to get out of bed in the morning.

However, if you have daily internal struggles with self doubt and indecision, you are almost certainly not going to achieve your mission, whatever it may be. I have found that, to a disturbing degree in this world, you have to believe your own hype to succeed.

Unfortunately, this is something that men are better than women at.

And it looks to me like women in general, and the women whose educations I am responsible for in particular, are often lousy at those kinds of behaviors, even when the situation calls for it. They aren’t just bad at behaving like arrogant self-aggrandizing jerks. They are bad at behaving like self-promoting narcissists, anti-social obsessives, or pompous blowhards, even a little bit, even temporarily, even when it would be in their best interests to do so. Whatever bad things you can say about those behaviors, you can’t say they are underrepresented among people who have changed the world.

So how exactly do you suppress your self doubt without eventually becoming an overbearing, axe-grinding … male … zealot? Or, even worse, a character from The Wolf of Wall Street?

One of the odder asides in The Upside of Irrationality is about the 1995 movie First Knight. Which is quite frankly terrible. Don't see it. I'm not even going to link to it. But you should watch the first few minutes of this particular swordfight scene that Ariely highlights:

Mark: How did you do that? How did he do that? Was that a trick?

Lancelot: No. No trick. It's the way I fight.

Mark: Could I do it? Tell me. I can learn.

Lancelot: You have to study your opponent, how he moves, so you know what he's going to do before he does it.

Mark: I can do that.

Lancelot: You have to know that one moment in one fight, when you win or lose. And you have to know how to wait for it.

Mark: I can do that.

Lancelot: And you have to not care whether you live or die.

Mark: (stunned silence)

The way Lancelot motivates himself to get past self-doubt in combat is not to care whether he lives or dies.

I don't mean this in the glib way of saying you should stop caring what anyone else thinks. Obviously we care what other people think. Not caring what other people think of us and what we do is the path of the narcissist, the sociopath, and the insane. That's giving up.

As Ariely says:

Lancelot fights better than anyone else because he found a way to bring the stress of the situation to zero. If he doesn’t care whether he lives or dies, nothing rides on his performance. He doesn’t worry about living past the end of the fight, so nothing clouds his mind and affects his abilities — he is pure concentration and skill.

The opinions of other people matter, but they are the traps we set for ourselves. To get past our collective prison of self doubt – am I doing the right thing? Do I even know what the right thing is any more? – concentrate on the daily routine of doing what you enjoy, what you believe in, what you find intrinsically satisfying.

This is what your life is: whatever it is you get up to do every single day. Stop stressing out about the long term stuff and focus on improving that, and you too might eventually find you don't want to live forever.

[advertisement] Hiring developers? Post your open positions with Stack Overflow Careers and reach over 20MM awesome devs already on Stack Overflow. Create your satisfaction-guaranteed job listing today!
Discussion

10 Years of Coding Horror

In 2007, I was offered $120,000 to buy this blog outright.

I was sorely tempted, because that's a lot of money. I had to think about it for a week. Ultimately I decided that my blog was an integral part of who I was, and who I eventually might become. How can you sell yourself, even for $120k?

I sometimes imagine how different my life would have been if I had taken that offer. Would Stack Overflow exist? Would Discourse? It's easy to look back now and say I made the right decision, but it was far less clear at the time.

One of my philosophies is to always pick the choice that scares you a little. The status quo, the path of least resistance, the everyday routine — that stuff is easy. Anyone can do that. But the right decisions, the decisions that challenge you, the ones that push you to evolve and grow and learn, are always a little scary.

I'm thinking about all this because this month marks the 10 year anniversary of Coding Horror. I am officially old school. I've been blogging for a full decade now. Just after the "wardrobe malfunction" Janet Jackson had on stage at Super Bowl XXXVIII in February 2004, I began with a reading list and a new year's resolution to write one blog entry every weekday. I was even able to keep that pace up for a few years!

Janet Jackson clothing malfunction

The ten year mark is a time for change. As of today, I'm pleased to announce that Coding Horror is now proudly hosted on the Ghost blog platform. I've been a blog minimalist from the start, and finding a truly open source platform which reflects that minimalism and focus is incredibly refreshing. Along with the new design, you may also notice that comments are no longer present. Don't worry. I love comments. They'll all be back. This is only a temporary state, as there's another notable open source project I want to begin supporting here.

It is odd to meet developers that tell me they "grew up" with Coding Horror. But I guess that's what happens when you keep at something for long enough, given a modest amount of talent and sufficient resolve. You become recognized. Maybe even influential. Now, after 10 years, I am finally an overnight success. And: old.

So, yeah, it's fair to say that blogging quite literally changed my life. But I also found that as the audience grew, I felt more pressure to write deeply about topics that are truly worthy of everyone's time, your time, rather than frittering it away on talking head opinions on this week's news. So I wrote less. And when things got extra busy at Stack Exchange, and now at Discourse, I didn't write at all.

I used to tell people who asked me for advice about blogging that if they couldn't think about one interesting thing to write about every week, they weren't trying hard enough. The world is full of so many amazing things and incredible people. As Albert Einstein once said, there are two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.

Watchmen page

I wasn't trying hard enough. I had forgotten. I can't fully process all the things that are happening to me until I write about them. I have to be able to tell the story to understand it myself. My happiness only becomes real when I share it with all of you.

This is the philosophy that underlies Stack Overflow. This is the philosophy that underlies Discourse. These are all projects based on large scale, communal shared happiness. Love of learning. Love of teamwork. Love of community.

Love.

For the next decade of Coding Horror, I resolve to remember how miraculous that is.

[advertisement] How are you showing off your awesome? Create a Stack Overflow Careers profile and show off all of your hard work from Stack Overflow, Github, and virtually every other coding site. Who knows, you might even get recruited for a great new position!
Discussion

App-pocalypse Now

I'm getting pretty sick of being nagged to install your damn apps.

This-website-has-an-ipad-app

XKCD helpfully translates:

Xkcd-download-our-app

Yeah, there are smart app banners, which are marginally less annoying, but it's amazing how quickly we went from "Cool! Phone apps that finally don't suck!" to this sad, eye rolling, oh-great-of-course-you-have-an-app-too state of affairs.

Four years, give or take a few months, if you were counting. So what happened?

Millions of pointless apps

Your platform now has a million apps? Amazing! Wonderful! What they don't tell you is that 99% of them are awful junk that nobody would ever want.

Let's start with the basics. How do you know which apps you need? How do you get them installed? How do you keep them updated? How many apps can you reasonably keep track of on a phone? On a tablet? Just the home screen? A few screens? A dozen screens? When you have millions of apps out there, this rapidly becomes less of a "slap a few icons on the page" problem and more of a search problem like the greater web. My son's iPad has more than 10 pages of apps now, we don't even bother with the pretense of scrolling through pages of icons, we just go straight to search every time.

Walledgarden-cover

The more apps out there, the more the app stores are clogged with mediocre junk, the more the overall noise level keeps going up, which leads directly to this profligate nagging. Companies keep asking how can we get people to find and install our amazing app instead of the one question they really should have asked.

Why the hell are we building an app in the first place?

I want to know who exactly is going to all the trouble of installing the McDonalds app on their device instead of simply visiting the McDonalds website in the browser as needed. What problem does that app solve for french fry enthusiasts that it needs to be permanently installed on your device? Why are they giving away free Big Macs just to get people to install this thing?

Fragmentation into parallel and incompatible app worlds

It was so much easier when iOS was totally dominant and the iPhone was the only player. Before the iPad and tablets. Before Android got decent in 4.0 and Google standardized the Play store. Now there are, at minimum, four radically different mobile platforms that every serious app player has to support:

  1. Android phone
  2. iOS phone
  3. iOS tablet
  4. Android tablet

(For extra credit: how many of these are actually "mobile"?)

Unless you're careful to build equivalent apps in all those places, it's like having multiple parallel Internets. "No, sorry, it's not available on that Internet, only the iOS phone Internet." Or even worse, only on the United States iOS phone Internet.

If you're feeling generous, we should technically include Windows 8 and Windows Phone in here too. All with different screen dimensions, development stacks, UI guidelines, and usage patterns. Oh and by the way, that's assuming no other players emerge as serious contenders in the computing device market. Ever.

At the point where you find yourself praying for a duopoly as one of the better possible outcomes, that's … not a good sign.

Paying for apps became a race to the bottom

Buying an app is the modern Support Your Favorite Small Software Vendor Day. I was always fine with dropping ten or twenty bucks on software I loved. I'm a software engineer by profession; apps are cheaper so I can buy even more of them.

Have you ever noticed that the people complaining about apps that cost $3.99 are the same people dropping five bucks on a cup of fancy coffee without batting an eyelash? Me too, and I'm with the coffee people. $3.99 for your app? Outraaageous!

Now, contrast this with your app, Mr. Developer. I don’t know you from Adam. You’re pitching digital Instant Refresher Juice 1.0 to me in the form of a new app. The return I’m going to get is questionable at best. I already have 30 apps on my phone, some of them very good. Do I need another one? I don’t use the 30 I have. The experience I’m going to get from adding one more app is not trustable. I’m assured of nothing. Last week I bought an app for 99 cents and it was terrible. I used it once, for 15 seconds. I could be shoving $1 straight down the toilet again for all I know. Your app, good sir, is a total gamble. Sure, it’s only a $1 gamble… but it’s a gamble and that fact matters more than any price you might place on it.

For some reason I don't completely understand, mobile app review systems are frequently of questionable value, so all you really have to go on are the screenshots and a bit of text provided by the developer.

Imagine you bought your coffee, only to open the lid and find it was only half full, or that it wasn't coffee at all but lemonade. If only 1 in 5 cups of coffee you bought actually contained coffee, a $3.99 price for that coffee starts to seem unreasonably high. When you buy an app, you don't really know what you're going to get.

Turns out, the precious resource here isn't the money after all. It's your time. In a world of millions of apps, free is the correct and only price for most apps except those rare few of extreme, easily demonstrable value – probably from well known brands of websites you already use daily. So hey, everything is free! Awesome! Right? Well…

When apps are free, you're the product

I know, I know, I'm sick of this trite phrase too. But if the market is emphatically proving that free is the only sustainable model for apps, then this is the new reality we have to acknowledge.

Geek-and-poke-pigs-free

Nothing terrifies me more than an app with no moral conscience in the desperate pursuit of revenue that has full access to everything on my phone: contacts, address book, pictures, email, auth tokens, you name it. I'm not excited by the prospect of installing an app on my phone these days. It's more like a vague sense of impending dread, with my finger shakily hovering over the uninstall button the whole time. All I can think is what shitty thing is this "free" app going to do to me so they can satisfy their investors?

For the sake of argument, let's say the app is free, and the developers are ethical, so you trust that they won't do anything sketchy with the personal information on your device to make ends meet. Great! But they still have to make a living, don't they? Which means doing anything useful in the app requires buying three "optional" add-ons that cost $2.99 each. Or there are special fees for performing certain actions. Isn't this stuff you would want to know before installing the app? You betcha. Maybe the app is properly tagged as "offering in-app purchases" but the entire burden of discovering exactly what "in-app purchases" means, and how much the app will ultimately cost you, is placed completely on your shoulders. You, the poor, bedraggled user.

The app user experience is wildly inconsistent

Have you ever tried actually using the Amazon app on iOS, Android, and Windows? iOS does the best, mostly because it's been an app platform for longer than the others, but even there, the Amazon app is a frustrating morass of missing and incomplete functions from the website. Sure, maybe you don't need the full breadth of Amazon functions on your phone, though that's debatable on a tablet. But natural web conveniences like opening links in new tabs, sharing links, the back button, searching within the page, and zooming in and out are available inconsistently, if at all.

The minute you begin switching between platforms – say you use an iOS tablet and an Android phone and a Windows 8 touch laptop, like I do – you'll find there are massive differences between the Amazon apps (and the eBay apps, and the Netflix apps, and the..) on these different platforms. At some point, you just get fed up with all the inconsistencies and oddities and quirks and say to hell with these apps, can I please just use the website instead?

Now, if your website is an awful calcified throwback to 2003, like eBay, then the mobile apps can be a valuable opportunity to reinvent your user interface without alienating all your existing users. If there's one thing I love about tablet and phone design it's that their small screens and touch interfaces force people to think simpler. This is a good thing. But if you don't eventually take those improvements home to the mothership, you're creating two totally different and incompatible UIs for doing the same things.

It seems like a fool's errand to dump millions of dollars of development time into these radically different, siloed app platforms when Amazon could have spent it improving their website and making that experience scale a bit better to every device out there.

The World Wide App

But that's not an option, because apparently the web is dead, and mobile apps are the future. I'm doing my best to resist a sudden uncontrollable urge to use my Ledge Finder app to find the nearest ledge to jump from right now.

The tablet and phone app ecosystem is slowly, painstakingly reinventing everything I hated about the computer software industry before the web blew it all up. Even fans are concerned:

I’m waiting for something that will unify the world of apps and make manually going to an App Store to find a new app as weird as typing in a URL to find a new website. My bet is that this won’t be Facebook. Instead, I would not bet against some young upstart, perhaps one inspired upon reading about a $19 billion deal, to go heads-down and come up with something crazy.

I'll have more to say about this soon, but I expect there to be an explosion of new computing devices all over the world in the next few decades, not a contraction. Sometimes the craziest solution is the one that's been right there in front of you the whole time.

[advertisement] Hiring developers? Post your open positions with Stack Overflow Careers and reach over 20MM awesome devs already on Stack Overflow. Create your satisfaction-guaranteed job listing today!
Discussion