LMDB – First version of Redis written in Tcl
gist.github.com
gist.github.com
The interesting question of course is how to evolve a simple system into a successful complex system. One thing that seems important is nailing the right architecture early on - the simple system must contain all the right ideas in it and it is important to weed out bad ideas before they are entrenched in the code base. Still, planning the long-term evolution of a software system remains an arcane art to me. "Listen to your users and do what is necessary at the moment" is too simplistic.
Some practical examples would be to implement build systems into their stack that accept database migrations and rollbacks easily. Or realizing they are in a fast-paced team that could benefit from specific frameworks and languages (experience would play a big role here).
Similarly when Redis came out I doubt the creator realized everybody and their grandmother would use lists as a defacto message queue but now look at all the commands list has that facilitate just that.
Key point is to accept and welcome that slug to the shoulder that pushes you in the right direction, to abuse the metaphor.
All you have to do is listen to your users and do what's necessary if you have scars to remind you that sticking IO here will bring the system to its knees on a real user load, or that this customer is going to ask for LDAP integration next week so you better build your authentication accordingly.
Experience can even be detrimental - the well-known second system syndrome comes to mind!
so, experience and keeping up with what customers need
There's obviously some truth to that. But I also think it leaves or an important angle: Often larger, more complicated, features are easier to add if you have a lot of infrastructure pieces.
Say, in a database, if you have no durability (journaling), resource management (errors, locks), error checking (deadlocks, days checksumming), it'll be a lot more work to add support for some new query language [feature]. Now databases are my thing, but the same it's true for a lot of areas.
Disregarding that is IMO one of the reasons ground up rewrites fail so often: You'll get bogged down with infrastructure for a long time, without proper non toy users of the facility.
I bet that coming up with this points and having them in mind (even subconsciously) has helped antirez evolve redis in a coherent direction.
For those not aware, LMDB is the memory mapped database that's powering OpenLDAP. https://symas.com/lightning-memory-mapped-database/
http://antirez.com/articoli/tclmisunderstood.html
I dabbled with it myself, writing a simple TCL interpreter in C, but I always find myself comparing it to FORTH a language I still find it easy to love.
BTW, I hadn't heard of LLOOGG (the L in LMDB) before. It was this:
"LLOGG was web service I (Salvatore Sanfilippo) and my co-founder Fabio Pitrola ran for seven years for free."
https://gist.github.com/antirez/6ca04dd191bdb82aad9fb241013e...
Guessing he just found some interim version that wasn't the one he actually wanted to post.