MongoDB, Maturity, and "let's implement ourselves"
One common theme I've seen in the past few years is developers
downplaying products and features that typically take a long time to
implement and to get to a mature state, like data store and data
replication. Even when the discussion is finished with the answer is
that "our problem is much more limited", "it can't be that difficult",
or the plain "we're smart than they are", I haven't been really
convinced that the advocates of implementing their own feature (you name
it) really knew the consequences of moving forward with it.
An example of how some things are very complex, let's take a look at MongoDB. Here you can find a couple of good posts on the topic of maturity:
How much credibility does the post "Don't use MongoDB" have?
Which companies have moved away from MongoDB and why?
Don't use MongoDB
10gen is the company behind MongoDb and we're talking about tens of people working on this system for years - and it still has its issues. This is just normal. I once heard that it takes around 10 years to have a mature DB system - yes, 10 years.
Above you can see that replication is one of the common issues. If you go ahead and download MongoDB source code, you will see that it is under 7,000 lines of code. To repeat the common question: "How hard can it be?", how hard can it be to get 7,000 lines of code right? :-)
Long time back, when I worked on the Linux kernel, my changes amounted to around 5,000 lines of code. Those were the hardest 5,000 lines of code I wrote - hardest to get to work, to get to some stability. And I was able to make good progress with a lot of people trying it out and providing feedback, but it was still far from really declaring a stable patch that anyone in the world could use. And that was a code for non-distributed system, without all the complexities of remote failures, network partition, etc.