Code: It's Trivial

The thing I like best about your Twitter footnote is that it exactly illustrates what you’re saying: that success is not about the code, whether in length or in awesomeness.

Your right, it wouldn’t take one week. It would take 3.

Isn’t that what you said a year ago(roughly) to Joel?

:slight_smile:

I am so guilty of this when writing programs my time estimates are terrible even using the twice as long + an hour rule.

I think most programmers are guilty of this because they can imagine the solution and their brains run ahead of them considering only how long the main part of the implementation will take not all the form/layout desing, database table creation and changes sql writing.

Hacker News, huh. Are they always this jealous? Or are they just jackasses?

I don’t use Stack Overflow because it has a well polished interface (although that does help), I use it because it has a large user base of intelligent people. Someone could steal the entire source and put their own version online next week and it wouldn’t make any difference. Stack Overflow is full of users, useful knowledge and since I already have an account history there its a no-brainer.

An open source Stackoverflow clone?

  • Three monkeys
  • Four Days
  • Written in Perl

Look, what makes a community based website isn’t the code. It’s also the community that uses it. Let’s assume I’m an awesome super programmer, and I could magically recreate the entire Facebook website in Ruby on Rails in 3 days. Would you use my Facebook alternative?

Of course not! Why would you want to join a community based website when there’s no one else using it? People use Facebook not just because it’s easy to use, but because everyone else is also using Facebook too.

What makes Stackoverflow isn’t the awesome code and the superb look and feel, but the fact that if I ask a question on Stackoverflow, it’ll get an answer with in an hour. Two hours if I am looking for a correct answer.

Could you write your own Stackoverflow clone and use that instead of Stackexchange. Heck, there are already open source stackoverflow clones out there! And, they’re written in Ruby on Rails instead of ASP, so they’re much cooler too!

However, for $130/month, Stackexchange will setup a server, maintain that server, maintain their software, support your site, and generally make it so you don’t have to worry about a thing. Can you do all of that for $130/month?

And, remember that $130/month gets you a million page views. If you aren’t expecting that many pageviews on your site, you’re not the audience for Stackexchange.

“It’s so easy!”

I’ve heard that many, many times from the comments on the Paint.NET forums :slight_smile: “Why can’t you just add __________, it’d be so easy!”

People extrapolate from the simplicity of the user experience to believing that the development experience is also easy. But implementing “a new feature” is not just sitting down and writing code. You first have to design it with respect to the rest of the program, and all of its users. If I were to add every feature that everyone wanted, Paint.NET would be an overbloated pile of messy junk that nobody would want to use, and the extra/advanced features would get in the way of the basic/simple ones. “Oh I’ll just add an Export command over there, and a right-click command there, and 43 new menu items into the Edit menu … then I’ll organize them into 18 submenus, and ctrl+right-clicking on the thumbnail will make it export to Picasa …” That’s how you end up with something like … well, I won’t name it :wink:

This is a great post.

As a technical lead, I can understand the trivialization aspect as good as anyone. My developers have a tendency to over-simplify / trivialize a project, and hence underestimate it. The director I report doesn’t understand the technical issues (he probably shouldn’t) so he pushes back (HARD) when I give him an estimate.

So sometimes I feel like the guy trying to save everyone from shooting himself (not themselves - grammar police) in the foot. Pretty exhausting, but that’s why the pay me the big bucks (not).

Just want to-reemphasize the point Jeff (& Benjamin made) – getting 80% of the functionality duplicated is 20% of the work. Making the system stable, user-friendly, easy to maintain/administer, etc. greatly compounds the workload. Add on top of that all the peripheral activities - marketing, sales, support, accounting, conferences, blogging, evangelizing, etc… and the load is significant.

A website like Stack Overflow depends on having enough critical mass to get good results.

That’s where the challenge will be if a team tries to clone Stack Overflow, not the coding.

Old programmers adage:

It takes you 90% of the time to do the first 90% of a programming job. To do the last 10% will take the other 90% of the time.

When web applications are “trivial” to write, the first mover has an advantage. If the first mover does not continue to improve, then the advantage will slip away.

Also, the problem with open source clones of commercial software is that many people who start them have no need to continue to improve them once they come up to their need. Sure it is open source, so others that have greater or different needs can improve it, but there is no desire to complete a project. The commercial vendors (most of them) have a desire (money) to complete the project and continue to improve it.

My first impression was that hosted SO is way overpriced. $150 a month for a small website? Wow! However, a company that needs a website like SO, what would they benefit if they built their own, or started with a half-completed clone? If it cost $10000 to develop a clone (for the sake of argument, but I think this would be a ridiculously low estimate of cost), for the same $10000 you would have access to a fully built and supported and hosted SO website for more than 5 years! Over this 5 years I would assume that the SO website would become more polished and any bugs found would be fixed. In addition, what will the state-of-the-art be in 5 years. Will SO have it or will another competitor have it. Either way it is not likely to be your own cobbled together website.

Good job, I’m impressed by the Stack Overflow. It’s good looking - has a nice cool design, smooth cool JQuery functions and lot’s of great content. Really good well-thought things overall. I propably wouldn’t do it better…
I’m little inspired by the site design and the creative use of JQuery, - really good stuff!!

I can make a pretty good pizza for a few people coming round to dinner, and I can maintain a perfectly usable wiki for knowledge exchange across a group of about 20 people.

But when it comes to lots of people, I’d call in the catering, or software that’s made for the task. I wouldn’t be using my own oven for more than two or three pizzas, that’s for sure.

I guess I don’t really understand the obsession with open-source. Seriously Jeff, you sound like Microsoft did a decade ago.

The point that programmers suck at time estimation is valid, although a single link to http://www.joelonsoftware.com/items/2007/10/26.html would probably be a more convincing argument.

Stackoverflow’s polish pushes it well beyond a single weekend project… but I doubt we’re talking 52 weeks x 40 hours x 3-4 coders here. (Based on the above estimates of “about a year”) The majority of the much vaunted “edge cases” would be taken care of in exactly the same way as yours were (a beta that lasted some number of weeks), and then the initial rush of scaling bugs.

I guess I’m sortof confused why you think SO couldn’t have been an open source project, considering that all that had to happen is for you and Joel to decide to open source the code, starting on the second weekend or so. I do agree that you would have to have managed the codebase over the last year, but that’s no different from what Linus does with his kernel.

You may not realize this, but EVERY major open source project does everything on your 13-point list, except #11 (and some of them do produce podcasts). Essentially, you just made the argument “We’ve finished with the initial coding, and there’s still work to do! Can’t do that in a weekend, now can you!?” Even the somewhat-overconfident people saying they could do the coding in a weekend will grant you that fairly obvious point.

That’s what you can’t understand. As a programmer I don’t give a s**t about user experience. I don’t care about gui, css, …etc. You are 75% businessman and 25% programmer…

@Benedict:

“BTW: I’ve always wondered how the badge system is implemented in SO. Could anyone shed some light on it?”

I would guess that it there is a function (stored or otherwise) that is called when certain events happen.

For instance, if I post a question, once my question is actually posted, the DB will then see if I qualify for any new post-related badges. Same with upvotes, downvotes, accepting answers (and accepted answers for the person whose answer was accepted)… heck, even viewing the front page (see the Woot badge).

Hm, shall I be the one to disagree then?

I wholeheartedly agree with your comments on the “I could do that in [some random and ridiculously short period]”-sentiment. I think we all fall into that trap once in a while. I’ve personally taken the habit of making an estimate and then multiplying it by two before going to the customer with it - that usually turns out kinda right, and often they end up just a little cheaper than they thought, which is good.

BUT - and here’s a big BUT - I really don’t think this is something only closed-source apps can fix, and open source apps could never. Come on. I know of MANY, MANY closed source apps whose user-interfaces really totally completely suck in ways unimaginable to virgins. On the other hand, one of the darlings of open source web-development is Wordpress. Their source-code gives me an ulcer every time I look at it, but it DOES look slick and works perfectly for the end-user. Point being, there are horribly coded open source projects out there with a good UI. And vice versa for closed source.

No, I don’t like the 10% polish either, and it really is 90% of the work. Other people do that better than me :slight_smile: As a programmer, I’ve neither the time nor the patience to focus on a slick user-interface. Designers have, let them do it. Software just goes terribly wrong when coders design (or designers code, for that matter). It’s all about division of labour, and nothing to do with your software model.

PS on a related note, your captcha has no proper fallback for users who willingly disable javascript. Just a note that I /could/ support it, but I /don’t/ so I’m fsck’d. Eck.

lots_of_awesome_code = success;

of course everyone knows that success has not been defined yet, so lots_of_awesome_code is a random byte.

Thesis stipulated, it’s interesting that both programming expertise and its lack lead to the same error:

non-techie manager: “It’s easy! The user experience I’m imagining is simple, so the code underneath must be trivial. Show me a prototype tomorrow. [Which I will then deploy as production, because as far as I can tell, it’s done.]”

hyper-techie hacker: “It’s easy! The entity model is so simple, wrapping CRUD around it in any flavor you like is trivial. I’ll show you a prototype tomorrow. [which we can put straight into production, because as far as I’m concerned, it’s done.]”

Why on earth don’t these two get along in real life?

Great post and very interesting replies.

Good point @giulio, I under-estimate all the time.