Posted by: fdmanana | July 14, 2010

My CouchDB retrospective

This is a summary about how I got into the Apache CouchDB community.

By late summer 2009, my friend Sérgio Veiga told me he was using Erlang for his job and how cool the language is as well as the Erlang OTP platform. He knew I was a fan of OCaml and Prolog back in the academic years, and so I would immediately embrace Erlang.

I started by reading Joe Armstrong’s book Programmning Erlang. Then I was thinking about creating some Erlang project but hadn’t ideas for creating something useful and original and I didn’t felt like porting some library or framework from some other language. So I decided to google for existing open source projects done in Erlang. Amongst the first I found was CouchDB.

Back then I was not familiar at all with NoSQL. The closest thing I knew about was probably memcached . At the moment my job was related to Java enterprise (J2EE, Spring, Hibernate, etc), so I immediately started to sympathize with CouchDB’s simplicity and base principles. I started to realize how unnecessarily complex (and counter productive) the Java enterprise + Oracle + Hibernate world is.

So I decided to start contributing to CouchDB. I started searching for the simplest tasks in the Apache Software Foundation’s issue tracking system (JIRA) just to get to know better CouchDB. The first issue I tackled was for Futon, the administration Web UI. This task only involved JavaScript, CSS and HTML. It very straightforward.

Afterwards I started looking into issues involving the Erlang side of CouchDB. The first JIRA issue involving Erlang that I solved was in fact a minor new feature for the CouchDB 0.11 release. This issue was a challenge at the time because it implied understanding the existing HTTP server layer code, some HTTP details I was not aware of (chunked transfer encoding, Content-MD5 header, content encodings) and the code for streaming attachments into a DB (forced me to learn how the core DB code words, the storage details). Paul Davis helped me improving the patch and getting it committed (thanks Paul). That feature also originated a small patch for the Mochiweb project.

Those 2 patches (CouchDB ticket 558 and Mochiweb) were the first real Erlang code I ever wrote.

I then started looking for more (complex) issues to solve in their JIRA system and started following the development mailing list and the IRC channel. By far most of the contributions I gave were targeted at solving existing bugs or implementing features requested by the community. Bringing completely new ideas to the project was never easy, as I had never developed an application using CouchDB (not even today), yet I was able to contribute with code.

Last month I was elected committer and today Apache CouchDB 1.0.0 was released. For me it has been a very rewarding experience for 2 reasons:

  • Technically I learned a LOT – from Erlang and OTP principles to an alternative paradigm for data modeling and storage, many HTTP REST details and a new vision of JavaScript and its potential (CouchApps and CouchDB related projects implemented with node.js). This learning was not just a result from reading existing code and writing new code but it was also a result from the interaction with the committers and other developers.
  • The community. CouchDB’s community is very friendly, helpful and dedicated. This community has been growing fast.

CouchDB is growing and taking a unique direction towards data modeling, replication and Web applications.


Leave a Reply

Please log in using one of these methods to post your comment: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: