I didn't start off by fully designing all of the aspects of the library and write down how I would envision all of it to work together, but I started off implementing it as simple as possible trying to make sure that I could refactor the internal guts without having to change the client API. I had to break the API once in order to resolve an inital design flaw (that's when we moved to struct passing to the commands). I've been tempted to do another breakage, but postponed it for a long time.
I spend most of my time working on different parts of the server, so I haven't been that involved in what's going on with libcouchbase in the last year. Given that I didn't write down my initial thoughts and how I envisioned the library to look like, its no surprise that people didn't know how I had everything planned out when they refactored/implemented other features. There has been some commits to the library that I would have seen being resolved in a completely different way, but that's the life of software engineering.
Given that I see that libcouchbase is diverging so much from the initial ideas I had for the library, I've decided to start all over by rebuilding a new library that I can use for my own testing. The original list of requirements I had for libmembase back in the days will be revised:
- It shall be asynchronously
- No internal locking
- It has to be cross platform!
- It shall not depend of a "shit load" of other modules
- Binary compatibility
- No GPL