2018-02-23 18:58:03 +00:00
|
|
|
|
---
|
|
|
|
|
created_at: '2013-10-02T22:24:18.000Z'
|
|
|
|
|
title: The One in Which I Call Out Hacker News (2009)
|
|
|
|
|
url: http://bitquabit.com/post/one-which-i-call-out-hacker-news/
|
|
|
|
|
author: sebkomianos
|
|
|
|
|
points: 83
|
|
|
|
|
story_text: ''
|
|
|
|
|
comment_text:
|
|
|
|
|
num_comments: 25
|
|
|
|
|
story_id:
|
|
|
|
|
story_title:
|
|
|
|
|
story_url:
|
|
|
|
|
parent_id:
|
|
|
|
|
created_at_i: 1380752658
|
|
|
|
|
_tags:
|
|
|
|
|
- story
|
|
|
|
|
- author_sebkomianos
|
|
|
|
|
- story_6485845
|
|
|
|
|
objectID: '6485845'
|
2018-06-08 12:05:27 +00:00
|
|
|
|
year: 2009
|
2018-02-23 18:58:03 +00:00
|
|
|
|
|
|
|
|
|
---
|
2018-03-03 09:35:28 +00:00
|
|
|
|
> “Implementing caching would take thirty hours. Do you have thirty
|
|
|
|
|
> extra hours? No, you don’t. I actually have no idea how long it would
|
|
|
|
|
> take. Maybe it would take five minutes. Do you have five minutes? No.
|
|
|
|
|
> Why? Because I’m lying. It would take much longer than five minutes.
|
|
|
|
|
> That’s the eternal optimism of programmers.”
|
|
|
|
|
>
|
|
|
|
|
> — Professor [Owen Astrachan](http://www.cs.duke.edu/~ola/) during 23
|
|
|
|
|
> Feb 2004 lecture for
|
|
|
|
|
> [CPS 108](http://www.cs.duke.edu/courses/cps108/spring04/)
|
2018-02-23 18:19:40 +00:00
|
|
|
|
|
2018-03-03 09:35:28 +00:00
|
|
|
|
[Accusing open-source software of being a royal pain to
|
|
|
|
|
use](http://blog.bitquabit.com/2009/06/30/one-which-i-say-open-source-software-sucks/)
|
|
|
|
|
is not a new argument; it’s been said before, by those much more
|
|
|
|
|
eloquent than I, and even by some who are highly sympathetic to the
|
|
|
|
|
open-source movement. Why go over it again?
|
2018-02-23 18:19:40 +00:00
|
|
|
|
|
2018-03-03 09:35:28 +00:00
|
|
|
|
On Hacker News on Monday, I was amused to read some people saying that
|
|
|
|
|
[writing StackOverflow was hilariously
|
|
|
|
|
easy](http://news.ycombinator.com/item?id=678501)—and proceeding to back
|
|
|
|
|
up their claim by [promising to clone it over July 4th
|
|
|
|
|
weekend](http://news.ycombinator.com/item?id=678704). Others chimed in,
|
|
|
|
|
pointing to [existing](http://code.google.com/p/cnprog/)
|
|
|
|
|
[clones](http://code.google.com/p/soclone/) as a good starting point.
|
2018-02-23 18:19:40 +00:00
|
|
|
|
|
2018-03-03 09:35:28 +00:00
|
|
|
|
Let’s assume, for sake of argument, that you decide it’s okay to write
|
|
|
|
|
your StackOverflow clone in ASP.NET MVC, and that I, after being
|
|
|
|
|
hypnotized with a pocket watch and a small club to the head, have
|
|
|
|
|
decided to hand you the StackOverflow source code, page by page, so you
|
|
|
|
|
can retype it verbatim. We’ll also assume you type like me, at a cool
|
|
|
|
|
100 WPM ([a smidge over eight characters per
|
|
|
|
|
second](http://en.wikipedia.org/wiki/Words_per_minute)), and unlike me,
|
|
|
|
|
you make zero mistakes. StackOverflow’s `*.cs`, `*.sql`, `*.css`,
|
|
|
|
|
`*.js`, and `*.aspx` files come to 2.3 MB. So merely typing the source
|
|
|
|
|
code back into the computer will take you about eighty hours if you make
|
|
|
|
|
zero mistakes.
|
|
|
|
|
|
|
|
|
|
Except, of course, you’re not doing that; you’re going to implement
|
|
|
|
|
StackOverflow from scratch. So even assuming that it took you a mere ten
|
|
|
|
|
times longer to design, type out, and debug your own implementation than
|
|
|
|
|
it would take you to copy the real one, that already has you coding for
|
|
|
|
|
several weeks straight—and I don’t know about you, but I am okay
|
|
|
|
|
admitting I write new code considerably less than one tenth as fast as I
|
|
|
|
|
copy existing code.
|
|
|
|
|
|
|
|
|
|
Well, okay, I hear you relent. So not the whole thing. But I can do
|
|
|
|
|
**most** of it.
|
|
|
|
|
|
|
|
|
|
Okay, so what’s “most”? There’s simply asking and responding to
|
|
|
|
|
questions—that part’s easy. Well, except you have to implement voting
|
|
|
|
|
questions and answers up and down, and the questioner should be able to
|
|
|
|
|
accept a single answer for each question. And you can’t let people
|
|
|
|
|
upvote or accept their own answers, so you need to block that. And you
|
|
|
|
|
need to make sure that users don’t upvote or downvote another user too
|
|
|
|
|
many times in a certain amount of time, to prevent spambots. Probably
|
|
|
|
|
going to have to implement a spam filter, too, come to think of it, even
|
|
|
|
|
in the basic design, and you also need to support user icons, and you’re
|
|
|
|
|
going to have to find a sanitizing HTML library you really trust and
|
|
|
|
|
that interfaces well with Markdown (provided you do want to reuse [that
|
|
|
|
|
awesome editor](http://github.com/derobins/wmd/tree/master)
|
|
|
|
|
StackOverflow has, of course). You’ll also need to purchase, design, or
|
|
|
|
|
find widgets for all the controls, plus you need at least a basic
|
|
|
|
|
administration interface so that moderators can moderate, and you’ll
|
|
|
|
|
need to implement that scaling karma thing so that you give users
|
|
|
|
|
steadily increasing power to do things as they go.
|
|
|
|
|
|
|
|
|
|
But if you do all that, you will be done.
|
|
|
|
|
|
|
|
|
|
Except…except, of course, for the full-text search, especially its
|
|
|
|
|
appearance in the search-as-you-ask feature, which is kind of
|
|
|
|
|
indispensable. And user bios, and having comments on answers, and having
|
|
|
|
|
a main page that shows you important questions but that bubbles down
|
|
|
|
|
steadily à la reddit. Plus you’ll totally need to implement bounties,
|
|
|
|
|
and support multiple OpenID logins per user, and send out email
|
|
|
|
|
notifications for pertinent events, and add a tagging system, and allow
|
|
|
|
|
administrators to configure badges by a nice GUI. And you’ll need to
|
|
|
|
|
show users’ karma history, upvotes, and downvotes. And the whole thing
|
|
|
|
|
has to scale really well, since it could be
|
|
|
|
|
slashdotted/reddited/StackOverflown at any moment.
|
|
|
|
|
|
|
|
|
|
But then\! **Then** you’re done\!
|
|
|
|
|
|
|
|
|
|
…right after you implement upgrades, internationalization, karma caps, a
|
|
|
|
|
CSS design that makes your site not look like ass, AJAX versions of most
|
|
|
|
|
of the above, and G-d knows what else that’s lurking just beneath the
|
|
|
|
|
surface that you currently take for granted, but that will come to bite
|
|
|
|
|
you when you start to do a real clone.
|
|
|
|
|
|
|
|
|
|
Tell me: which of those features do you feel you can cut and still have
|
|
|
|
|
a compelling offering? Which ones go under “most” of the site, and which
|
|
|
|
|
can you punt?
|
|
|
|
|
|
|
|
|
|
Developers think cloning a site like StackOverflow is easy for the same
|
|
|
|
|
reason that open-source software remains such a horrible pain in the ass
|
|
|
|
|
to use. When you put a developer in front of StackOverflow, they don’t
|
|
|
|
|
really see StackOverflow. What they actually see is this:
|
|
|
|
|
|
|
|
|
|
``` chroma
|
|
|
|
|
create table QUESTION (ID identity primary key,
|
|
|
|
|
TITLE varchar(255), --- why do I know you thought 255?
|
|
|
|
|
BODY text,
|
|
|
|
|
UPVOTES integer not null default 0,
|
|
|
|
|
DOWNVOTES integer not null default 0,
|
|
|
|
|
USER integer references USER(ID));
|
|
|
|
|
create table RESPONSE (ID identity primary key,
|
|
|
|
|
BODY text,
|
|
|
|
|
UPVOTES integer not null default 0,
|
|
|
|
|
DOWNVOTES integer not null default 0,
|
|
|
|
|
QUESTION integer references QUESTION(ID))
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
If you then tell a developer to replicate StackOverflow, what goes into
|
|
|
|
|
his head are the above two SQL tables and enough HTML to display them
|
|
|
|
|
without formatting, and that really is completely doable in a weekend.
|
|
|
|
|
The smarter ones will realize that they need to implement login and
|
|
|
|
|
logout, and comments, and that the votes need to be tied to a user, but
|
|
|
|
|
that’s still totally doable in a weekend; it’s just a couple more tables
|
|
|
|
|
in a SQL back-end, and the HTML to show their contents. Use a framework
|
|
|
|
|
like Django, and you even get basic users and comments for free.
|
|
|
|
|
|
|
|
|
|
But that’s not what StackOverflow is about. Regardless of what your
|
|
|
|
|
feelings may be on StackOverflow in general, most visitors seem to agree
|
|
|
|
|
that the user experience is smooth, from start to finish. They feel that
|
|
|
|
|
they’re interacting with a polished product. Even if I didn’t know
|
|
|
|
|
better, I would guess that very little of what actually makes
|
|
|
|
|
StackOverflow a continuing success has to do with the database
|
|
|
|
|
schema—and having had a chance to read through StackOverflow’s source
|
|
|
|
|
code, I know how little really does. There is a tremendous amount of
|
|
|
|
|
spit and polish that goes into making a major website highly usable. A
|
|
|
|
|
developer, asked how hard something will be to clone, simply does not
|
|
|
|
|
think about the polish, because the polish is incidental to the
|
|
|
|
|
implementation.
|
|
|
|
|
|
|
|
|
|
That is why an open-source clone of StackOverflow will fail. Even if
|
|
|
|
|
someone were to manage to implement most of StackOverflow “to spec,”
|
|
|
|
|
there are some key areas that would trip them up. Badges, for example,
|
|
|
|
|
if you’re targeting end-users, either need a GUI to configure rules, or
|
|
|
|
|
smart developers to determine which badges are generic enough to go on
|
|
|
|
|
all installs. What will actually happen is that the developers will
|
|
|
|
|
bitch and moan about how you can’t implement a really comprehensive GUI
|
|
|
|
|
for something like badges, and then bikeshed any proposals for standard
|
|
|
|
|
badges so far into the ground that they’ll hit escape velocity coming
|
|
|
|
|
out the other side. They’ll ultimately come up with the same solution
|
|
|
|
|
that bug trackers like Roundup use for their workflow: the developers
|
|
|
|
|
implement a generic mechanism by which anyone, truly anyone at all, who
|
|
|
|
|
feels totally comfortable working with the system API in Python or PHP
|
|
|
|
|
or whatever, can easily add their own customizations. And when PHP and
|
|
|
|
|
Python are so easy to learn and so much more flexible than a GUI could
|
|
|
|
|
ever be, why bother with anything else?
|
|
|
|
|
|
|
|
|
|
Likewise, the moderation and administration interfaces can be punted. If
|
|
|
|
|
you’re an admin, you have access to the SQL server, so you can do
|
|
|
|
|
anything really genuinely administrative-like that way. Moderators can
|
|
|
|
|
get by with whatever django-admin and similar systems afford you, since,
|
|
|
|
|
after all, few users are mods, and mods should understand how the sites
|
|
|
|
|
work, dammit. And, certainly, none of StackOverflow’s interface failings
|
|
|
|
|
will be rectified. Even if StackOverflow’s stupid requirement that you
|
|
|
|
|
have to have and know how to use an OpenID (its worst failing)
|
|
|
|
|
eventually gets fixed, I’m sure any open-source clones will rabidly
|
|
|
|
|
follow it—just as GNOME and KDE for years slavishly copied off Windows,
|
|
|
|
|
instead of trying to fix its most obvious flaws.
|
|
|
|
|
|
|
|
|
|
Developers may not care about these parts of the application, but
|
|
|
|
|
end-users do, and take it into consideration when trying to decide what
|
|
|
|
|
application to use. Much as a good software company wants to minimize
|
|
|
|
|
its support costs by ensuring that its products are top-notch before
|
|
|
|
|
shipping, so, too, savvy consumers want to ensure products are good
|
|
|
|
|
before they purchase them so that they won’t have to call support.
|
|
|
|
|
Open-source products fail hard here. Proprietary solutions, as a rule,
|
|
|
|
|
do better.
|
|
|
|
|
|
|
|
|
|
That’s not to say that open-source doesn’t have its place. This blog
|
|
|
|
|
runs on Apache, [Django](http://www.djangoproject.com/),
|
|
|
|
|
[PostgreSQL](http://www.postgresql.org/), and Linux. But let me tell
|
|
|
|
|
you, configuring that stack is not for the faint of heart. PostgreSQL
|
|
|
|
|
needs vacuuming configured on older versions, and, as of recent versions
|
|
|
|
|
of Ubuntu and FreeBSD, still requires the user set up the first database
|
|
|
|
|
cluster. MS SQL requires neither of those things. Apache…dear heavens,
|
|
|
|
|
don’t even get me started on trying to explain to a novice user how to
|
|
|
|
|
get virtual hosting, MovableType, a couple Django apps, and WordPress
|
|
|
|
|
all running comfortably under a single install. Hell, just trying to
|
|
|
|
|
explain the forking vs. threading variants of Apache to a technically
|
|
|
|
|
astute non-developer can be a nightmare. IIS 7 and Apache with OS X
|
|
|
|
|
Server’s very much closed-source GUI manager make setting up those same
|
|
|
|
|
stacks vastly simpler. Django’s a great a product, but it’s nothing but
|
|
|
|
|
infrastructure—exactly the thing that I happen to think open-source does
|
|
|
|
|
do well, precisely because of the motivations that drive developers to
|
|
|
|
|
contribute.
|
|
|
|
|
|
|
|
|
|
The next time you see an application you like, think very long and hard
|
|
|
|
|
about all the user-oriented details that went into making it a pleasure
|
|
|
|
|
to use, before decrying how you could trivially reimplement the entire
|
|
|
|
|
damn thing in a weekend. Nine times out of ten, when you think an
|
|
|
|
|
application was ridiculously easy to implement, you’re completely
|
|
|
|
|
missing the user side of the story.
|