Seems really pricey for a relatively simple software like this. Someone write an opensource alternative? it looks like something that can be thrown together in a weekend.
We have documented evidence in the form of podcasts that it took a team of 3 talented developers about 6 months to build StackOverflow. If you're looking for an order of magnitude estimate for how long it would take to reproduce it, that's it.
How exactly are you planning to reduce an 18 man-month project down to a single weekend of your time?
More generally, why is this attitude so common among programmers? How, in the face of documented proof to the contrary could an intelligent person like the parent still consider a site of the complexity of StackOverflow to be a "weekend job"?
I think it's certainly longer than a weekend, but recreating something that exists is usually easier than doing it the first time. You don't really have to worry so much about how things ought to fit together - you just copy.
And I can't tell you how many doomed Death March projects started with this assumption. "The requirements are done, the design is done, we know it can be done, simply copy what we see there."
The boil it down to a cliché, copying what someone else has built is exactly the same problem as rewriting an existing application from scratch, without the benefit of being able to read the source code.
Rewriting a cross platform browser in C++ is way more difficult than writing something that took a small team 6 months to do. I'm not trying to say that it's a weekend, but have a look at SO. Unless there's something I'm missing, it's not "deep hacking", but more "crank it out" (not to take anything away from that team - they certainly did nice work!). Scaling might be an issue sooner or later, and that would take some more thinking, but the basic thing just doesn't strike me as some Big Hairy Problem.
So, yeah, be wary of "hey, that looks easy!", but don't think things are impossible either.
Rewriting a browser isn't impossible either, as Firefox proves. Perhaps SO is an order of magnitude easier than a browser, but I stand by my suggestion that copying an existing application you didn't actually write is often much more difficult than expected and has led many teams to their doom.
My comparison was "writing something from scratch" vs "copying". If a team has trouble with copying, wouldn't "writing it from scratch" be even more likely to end in failure?
Also, with something like SO - you can pretty much see the models, and how they interact. That's already giving you a lot.
> More generally, why is this attitude so common among programmers? How, in the face of documented proof to the contrary could an intelligent person like the parent still consider a site of the complexity of StackOverflow to be a "weekend job"?
A lot of what makes Stack Overflow successful is the amount of effort they've put into making a great user experience. That's not the sort of thing you just come up with in a weekend. It's a continual process that requires a lot of attention. And let's face it, open source's strong point generally isn't in engineering good user experience.
When I first saw it, I liked the clean look and feel, but hated the "DAVE, I CAN'T LET YOU DO THAT" approach to permissions with regards to comments, votes, and the like. As a beginning user, you had (have? don't know if they've changed it) all these links and buttons that are displayed, but don't let you do anything; they just give you a lame message about requiring N gold stars before you can do that.
"Dave, I can't let you do that?" You do know that SO allows questions and answers from people without even requiring them to log in? They allow content from essentially anonymous users.
The restrictions are along the "meta" parts (voting to indicate the quality of an answer), I think it is entirely sensible to restrict these actions to users who have built up a currency of trust within the SO community.
That being said, I think you are onto to something around the user experience. Perhaps an option shouldn't be shown to someone if they cannot perform it.
That being said, I think you are onto to something around the user experience. Perhaps an option shouldn't be shown to someone if they cannot perform it.
That would be really annoying, because you wouldn't know that these options exist, until you could use them (i.e. you're possibly confused and you don't know what the reward for collecting reputation is.)
Better grey out the things you aren't allowed to do yet, so you can see them and see that you're not there yet - preferably with an explanation of when you will be.
I forgot what the term for this is, but I think it's very often a good way to do it. Stable interface? Something like that.
Let's assume, for sake of argument, that you decide it's okay to write it in ASP.NET MVC, and that I've 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 (five characters per second[1]), and unlike me, make zero mistakes. StackOverflow's .cs, .sql, .css, .js, and .aspx files come to 96.5k. So merely typing back in source code that already exists will take you five hours if you make zero mistakes and deploy on the same platform they're doing.
Except, of course, you're not doing that. So even assuming that it took you a mere ten times longer to design, type out, and debug your own implementation, that already has you taking more than your whole weekend, even if you stayed up coding straight--and I don't know about you, but I am okay admitting I code considerably slower than ten times slower than I copy existing source code.
Well, okay, I hear you say. 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 can't let people upvote their own answers, so you need to block that. And you need to make sure that you don't upvote or downvote a person too many times in a certain amount of time, to prevent spambots. Probably are also 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 that awesome editor they have, of course). You'll also need to purchase, design, or find widgets for all the controls, plus you need an 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, of course, for the full-text search, espcially the search-as-you-ask feature, and user bios, and having comments, and having a main page that shows you important questions but that bubbles down steadily. Plus you'll want bounties, and handling multiple OpenIDs per user, and having email notifications, and supporting JavaScript-smart tags, and having user-configurable badges (you are going to do user-configurable badges without forcing your user to learn PHP and write hooks, right?), the history of your karma, upvotes, and downvotes. And the whole thing has to scale really well, since it could be slashdotted at any moment.
And we haven't even touched things like supporting upgrades, internationalization, karma caps, CSS so it doesn't look like ass, and all the little things under the surface that no one ever sees, but that you need to run the site.
To be really blunt: anyone in this forum who honestly thinks they can do all that in a weekend is so ridiculously full of himself that I want him very far away from any project that I'm involved with.
"And we haven't even touched things like... internationalization"
Well from one of the recent podcasts it sounds like Jeff is set against doing internationalization. And Joel is showing admirable restraint in not strangling him.