This is an attempt to fix that omission. Over the past 13 years, we have progressively changed priority as a business. Early on, scaling to millions of users was our main concern.
We made some tough calls, and consciously decided to trade off testability for performance. After successfully achieving that scale, much of the context has changed: we have a much faster base framework now, given all the latest improvements in the. Our priorities have since steered towards testability. In software engineering, a number of fairly non-controversial best practices have evolved over the years, which include decoupled modules, cohesive code , and automated testing.
Many best practices were developed by researchers like David Parnas as far back as the s, people who thought long and hard about what makes maintainable high quality systems. The Cynefin framework can help put our decision into context. It categorizes decisions into obvious, complicated, complex, and chaotic. There were no good answers on how to build this yet. There were no experts who could show us the way. There were only a handful of people out there facing the same issues. For over a decade, we addressed our scaling issues by prioritizing performance everywhere.
As a consequence, we glossed over other things like decoupling, high cohesion, and test automation—all things that have become accepted best practices. You can only do so much with the time and resources at hand. If one thing becomes super important, others have to be cut back. In this article, we walk through the choices we made and the tradeoffs they entailed.
Sometimes we opted for speed and sacrificed testing. When Stack Overflow launched in , it ran on a few dedicated servers. Because we went with the reliability of a full Microsoft stack—. Each server required a new license. Our scaling strategy was to scale up, not scale out.
To keep costs down, the site was engineered to run very fast, particularly in accessing the database. So we were very slim then, and we still are—you can run Stack Overflow in a single web server. The first site was a small operation put together by less than half a dozen people. It initially ran on two rented servers in a colocation facility: one for the site and one for the database.
That number soon doubled: In early , Atwood hand-built servers two web, one utility, one database and shipped them to Corvallis, OR. Eventually, maintaining a fast and light site design became a natural obsession for the team. If you look at the programming languages that are used today, they fall on a spectrum of high and low-level based on how much that language abstracts the bare metal functionality.
On the upper end of high-level languages, you have JavaScript: memory allocation, call stacks, and anything related to native machine code is handled transparently. High-level languages provide safety but have a lot more runtime overhead, so can be slower. Our codebase works the same way. We use a lot of static methods and fields as to minimize allocations whenever we have to.
By minimizing allocations and making the memory footprint as slim as possible, we decrease the application stalls due to garbage collection. A good example of this is our open source StackExchange. Redis library. JonEricson Problem fixed. I'm sure I'll do better next time. Bill the Lizard and Cupcake provide excellent answers. I would just add a few things. Warren Dew Warren Dew 8, 18 18 silver badges 22 22 bronze badges.
With the bounties, I have actually began further research into things I didn't think I had interest in, but because that was motivation for me I began to use them more. It surprised me how many bounty questions are easily answerable if you simply take an hour to replicate the asker's environment and debug actual, running code.
I've had zero competition on the 3 questions I've done this with, so it was easy rep. MichaelKropat In the hour you replicate the OP's environment: a how many correct answers to easier questions could you have submitted? And then there are those bounty givers who become disinterested I've seen it or decide that your answer is not quite what they want so accept their own answer, based on yours I've seen this too.
If not then you get no bounty. When I answer a bounty question the rep math is not the justification for it. RuchirBaronia No, you do not get rep from meta upvotes.
Thank you. And that kind of posting HAS helped me out of binds when I'd hit the end and had no idea what to google to figure out the answer. DrKoch DrKoch 9, 11 11 silver badges 8 8 bronze badges. I totally agree. I almost quit the site after a few weeks, then I got my first upvote, then I got totally hooked. Easy steps for getting started at SO. Read the rules. Learn the formatting. Ask questions. Understand that not even SO is immune from bullying, ignore the ones who are impolite, they are a very vocal minority, but JUST a minority Enjoy the site Contribute Don't be a taker Build your own rep, but remember, there are people who will vote you down no matter how good your question or answer is.
Don't take it to heart. Keep trying until you get the feel for this place. Use your up-vote power generously when you get it. When someone gives you a good answer, choose it as the best answer. They get a reputation bump and it is the best way to say "thanks" Don't take criticism too hard, to those of us who have been doing this for a while, it looks easy, we forget that it's not to a new programmer, or to one who has switched disciplines.
Start slow, watch, and read. There are some helpful people in here, and there are some who are not, just like everywhere else. The people here really care about the site. They may seem harsh at times, but it is out of a sincere concern for the site and for the people here.
Just like everywhere else, there are people here who are not helpful, while they are the most vocal, that does not make them the most numerous. Be patient. This place gets flooded with bad questions and by people who just want to take what they can get without contributing anything to the site itself. Because of that, they have created a "tiered system" to screen out people who are not serious. You will not be cut any slack.
This is a professional site, you will be treated as a professional. You will encounter the occasional jerk, if this happens, flag for the staff to deal with, don't get into the mud. Rules only get you so far to understand this site. Gimby, yeah, but I only found meta by accident, and then it took me a while to find out that new users were not universally hated. I mistook the genuine concern people have for this site as hostility towards anyone new.
I got it, eventually. As was already mentioned above, answering is the best way to gain reputation. Here are some "pro" tips of how to maximize your reputation points per unit of time spent on Stack Overflow, based on personal experience observing and answering : Try not to answer questions that you do not understand. Peter Mortensen 29k 4 4 gold badges 19 19 silver badges 14 14 bronze badges. Neolisk Neolisk I'm not sure we should be encouraging answers posted in a few minutes, nor as quickly as possible after the question is asked - both may result in poor quality answers.
Your last point doesn't concur fully with my experience: sometimes a great answer posted several days later than the others will cause the OP to switch the acceptance over, and it will attract upvotes. Moreover, the unicorn rep is nice 'n all, but it should not be the sole driver of using the site - genuinely wanting to help is a better motivation, imo. I am not saying this is the way how it should work.
But unfortunately, I learnt it the hard way. But I am mostly sure they will come up to the same ideas. Why it works like that - is another story. Regarding your "great answer several days later" example, a proof link would help. Also some stats would be nice, i. To maximize your tax return, you can use numerous loop holes in the tax system. The more successful businessman you are, the more loop holes you know, or so does your accountant. Now the question is, if you know such a loop hole, would you use it yourself?
Knowing that other people use it and benefit from it Would you share this information with anyone? Heh, I smiled at your tax example, but I don't think it is a good analogy for reputation on the site.
There's no limited supply of "money" and it cannot be "spent", so why hoard it? Admittedly it is intriguing to achieve rep milestones e. I am not saying this is the way how it should work - if you mean that you believe you yourself are operating outside the spirit of the thing, then write a proposal to change how the rep system works, or comment on an existing one.
I am interested in removing reputation awarded from closed questions - I think that might help reduce the amount of quick-draw easy-rep answers that you describe. None of them were ever implemented, even though a simple one would take like 1hr of development time. Some got upvoted, some got downvoted, but no action taken to date. If interested, see my stackexchange meta account this is where my suggestions ended up after migration. Partly because of the broken spirit.
I see people still providing good answers, but it's not the same thrill. Sometimes late answers do pay off — Peter Mortensen. PeterMortensen: I'm sure one can find some statistics to prove a point that bigger part of reputation comes from "quick draw" answers.
People often like to use Jon Skeet as an example, so here it goes - 9min accepted answer, 54 upvotes, and btw, this was 2 days ago. Not saying that old school doesn't work, it's just not as efficient to "farm" rep. Madmenyo Madmenyo 7, 9 9 silver badges 5 5 bronze badges. On the new questions: You need to be ahead. That means you have to spend a lot of time on the site, or frequently check new questions all along your day. To be ahead, tune your filters to avoid seeing all questions.
Don't lose time answering crap questions. You'll waste your time, and won't even get an acceptance from OP who doesn't have a clue you might get 1 upvote, maybe or some downvotes. And in the meanwhile, you're missing better questions. For some questions, you have to be a FGITW be the fastest to answer , but your answer must be spot on.
So stay sharp and drink coffee with a straw so you can keep on typing For some questions, it's better to comment, ask clarifications, leave other FGITWs answer and do it wrong because they actually didn't read the comments. The combination of "a lot of comments" then "an answer" is appreciated by followers, because you took your time before answering properly.
Don't answer obvious duplicates. You'll be punished by some specially if you have a high reputation by answering. You should know better. Instead, you can answer the "original" question if you feel something is missing. On the old questions: There's a "new answers to old question" review queue.
If it's already good, you can get upvotes, but enhancing it makes it "active" again, and if it's better you may get more upvotes. Answer the comments made on your answers. Some commenters upvote if you answer them better: edit your answer to take their questions into account if worth it. Plus it means that you care. If you feel it's wrong, delete it, edit it, undelete it. You'll save a stray downvote. Upvote concurrent answers if they're good you'll even get a "sportsmanship" silver badge for that eventually.
It creates a gap between your score and the other s answers, which isn't necessarily bad. Doesn't hurt, and you'll get known as a nice fellow. Don't answer like you would comment. If you don't feel like answering, then don't, and just comment.
Also upvote the good questions. That'll make them visible, only if it's worth, not to indirectly promote your answer. A lot of people forget to do that. Good questions need love too. Many people are answering their own questions, and approaching SO as a gang sport. Improving the questions, answers and tagging of others is admirable and Socratic, but will not do much for your fantasy social credit nerd score SO rep.
So, I'd tell you how to really start. Start answering. NEVER read the question body , but only tags and title Write an answer that just looks like a good one preferably just copy and paste some code snippet from manual , or other answer , if you want to bring some explanation along , but has no real relation to the problem.
Get deserved and hard-earned upvotes a ton Don't be afraid of getting some downvotes - as long as your answer looks like a good one, the only downvote you can get from someone who have a clue and time to bother, but such people are scarce.
Yet for every downvote you will get a comforting upvote - this site is for fun and happiness - remember? Start your desired "activity" with votes, comments and unicorns. That's the real fun and purpose of this site.
Mukyuu 5, 9 9 silver badges 12 12 bronze badges. I can't tell if this is a "good" answer or a "bad" answer. It has elements of both :P Also, why so much hate for this one user? This is called "sarcasm". Surely this answer is bad, or even evil, as it is not about happiness and unicorns and contains no funny image.
Would you like to make use of the rant tag? Or perhaps a [troll] tag? I would rather prefer to make use of common-sense tag, which usually doesn't require such explicit tagging at all. And it hurts reader's feelings, which is the deadliest sin on Stack Overflow " - so you've finally decided to switch the sarcasm off then, and make a stark realisation.
Good stuff. Sarcasm isn't usually a very effective medium on the internet, BTW, and not usually deemed helpful in any culture anywhere. If you genuinely don't realise you're a troll, let me clear that up for you; you are. Apparently my old advice was SO bad, it wasn't even good, it was just bad. So, here is what NOT to do under any circumstances: 1. Here is what you should do: If someone answers well regarding a piece of code, but you realise that what you posted was a much simpler version of what you're actually attempting, and you now want active help for your HARDER piece of code, just post another question instead of editing your old one.
Parallax Sugar Parallax Sugar 3 3 silver badges 4 4 bronze badges. I'm trying to decide how much of this answer is sincere and how much of it is sarcasm Stijn Halfway through reading the answer I was convinced it was entirely sarcastic.
Having reached the end, and then looked through the author's post history a bit, I'm sad to say I think it is the opposite. I think that's worse, although that's hard to say. Sorry guys; my wording was a bit over-the-top so I've toned it down. Yes, I really believe everything I said! In my opinion, the original question was good, and my answer wasn't THAT bad.
LauraCookson Your answer is pretty bad. And that really expanded to just make it free for life. Dietrich added that before launching this free offering, the company also wanted to make sure that it had optimized its onboarding flow for these free users as well.
Stack Overflow expands its Teams service with new integrations. I just hope most people who copy answers are making sure they understand WHY something works e. Learning is about the finding the paths to the answer, not arriving at the answer.
Any chance you would release the raw data? I would love to analyze it myself. Also how often do stack overflow developers copy and paste from stack overflow? Some people work backwards, because their minds are more visual. If they copy something first and see it in action, on real data, they can better walk through it and see how each step produces the result it did.
What about people who copied in the question to play with code to provide an answer? I imagine you may find people with more rep doing that as they would likely spend more time answering questions. That data viz is crying out for non-linear scaling and some other plot types. Low numbered scores are much much more common than high numbers.
My immediate reaction was that it was an awfully lame gag — I actually had to think about it to recognize that it was meant to catch people copying code. So you probably got a load of copies from people like me who were just doing it as part of normal site interaction and not because we were lifting code to add to our pasta.
I guess these will be counted as 3 copies per average. For my own questions, I mostly bookmark the link or copy the link page.
Rarely I copy an answer code, only for a longer code block answers that I want to study. So my usage statistic will throw off some of the main use cases. If a mod thinks a question needs clarity, but it is 2 years old with 80k views and 8 responses, then it does not need clarity. If a mod thinks a question needs clarity, but it already has an accepted answer, then it does not need clarity. This is very concerning from a licensing standpoint.
Instead, you seem happy with millions of license violations. In Croatian, the proportions behind that saying are totally different. The copy events by post score graph is so satisfying. The example quoted of frequent copies of an unaccepted answer is hardly surprising! I think it would it be interresting to publish the Top X of the most copied code. I dont know much about statistics but for me it seems a bit obvious that a little more non-accepted answers are copied just because there are more than accepted answers, or am I missing something here?
We could be seeing here old high-score answers that have had their share of copying in their time, but still attract traffic. And new answers that are still hot and in their frst wave.
A multifactor analysis is called for! While command-C is one copy technique, did this capture users who select, then right click and choose copy? Or those who have an Xstyle of desktop environment where merely selecting some text is enough to copy that into a clipboard? One question remains : What percentage of the code on the Stackoverflow site comes from copies of answers from Stackoverflow?
Could you share how you captured copy events, or maybe I missed that in the post. Did you attach the event to the question body or something more broad? I think tracking my behavior like this is creepy. But this just points out the problem with web apps these days, as compared to the good old days of static HTML… user privacy is dead.
Generally SE is a hint, not a solution. And just like that, Stackoverflow lost me as a member. They now know what programmers are copying what code fragments. This could easily give them insight into, e. What a shame. Any inputs on how they are able to know what is copied? Although this is interesting, I have my doubts about how accurate this data is. You probably do not account for a portion of the developers out there who use Linux.
I sometimes just highlight with the mouse the text I want to copy, then use the middle click button to paste into my development environment. And I am sure I am not the only one. My most downvoted questions are the ones I personally consider to be my best contributions.
No surprise these are the ones that I copy first, to make sure the material survives deletion. I frequently copy code to see if it still works, especially if the post is more than a few years old.
I frequently get messages that many items used in the code have been deprecated. However, I would like to add that I do not copy and paste into my code. I usually copy and paste into a text editor window where I will heavily edit it.
I also frequently copy and paste portions of the code into a Google request so that I can find related articles.
0コメント