There are positives and negatives to developing a client for an established system like Subversion.
One of the negatives is that some people assume it doesn’t take much to develop a Subversion client and once in a while we receive mail suggesting that Cornerstone is expensive at $59.
After all, how difficult can it be? It’s just a Subversion client, right?
Anyone who has ever done serious UI development knows differently. Designing and implementing graphical user interfaces is challenging at the best of times but particularly so when you take a complex system like Subversion and try to make it accessible to both new users and Subversion veterans alike.
We recently took some time to reflect on Cornerstone 2 development, including how far we’ve come since both Cornerstone 1.5 in October 2009 and the initial release of Cornerstone 1.0 in July 2008. Part of this period of introspection involved gathering some data on the Cornerstone development process.
We think these numbers tell an interesting story. On the one hand they illustrate how demanding user interface development can be. But they also demonstrate just how much effort we invest into making Cornerstone as good as it can possibly be.
Cornerstone 2 is a 64-bit Cocoa application developed with Xcode. It is comprised of numerous bundles and frameworks, targeting a number of different CPU architectures and operating system versions.
|CPU Architectures||3 (PPC, x86, x86_64)|
|Operating System Versions||2 (Mac OS X 10.5 & 10.6)|
|Build Time (Release Build)||~10 minutes|
The above build time does not include the various versions of Subversion included with Cornerstone.
Cornerstone is primarily written in Objective-C. It also contains a couple of C++ classes and a handful of C functions.
Here is a breakdown of the amount of code in Cornerstone:
|Lines of Code||181,000|
|Lines of Comments||91,000|
These figures were generated using
cloc. Third-party libraries and frameworks were not included. Unit tests were also not included.
Subversion by Comparison
We thought it would be interesting to compare these figures against Subversion itself. Subversion is written almost exclusively in C. The figures (excluding unit tests and language bindings) are:
|Lines of Code||180,000|
|Lines of Comments||65,000|
These figures were taken from Subversion 1.6.12 and include the
svnsync command-line tools as well as the
mod_dav_svn Apache module (but not the dependencies such as APR, Neon, Serf and SQLite etc.). SWIG language bindings (e.g. for Python) are also not included.
We thought these numbers are particularly interesting as they show that Cornerstone 2 contains roughly the same amount of code as Subversion itself.
We did some further analysis to determine how Cornerstone is structured. We knew that Cornerstone is a fairly large project, but the sheer number of structural elements (classes, methods etc.) surprised us nonetheless.
|Objective-C Classes & Categories||1,037|
|Average Methods per Class||12.9|
|Average Lines per Method||13.5|
More than 1,000 classes with over 13,000 methods! That’s a lot of code!
Version Control Statistics
Here are some figures on the number of revisions committed to our development repository over various periods of the project.
|Revisions Committed up to 1.0||3,358|
|Revisions Committed 1.0 – 1.1||1,406|
|Revisions Committed 1.1 – 1.5||2,265|
|Revisions Committed 1.5 – 2.0||2,189|
|Total Revisions Committed||9,218|
Those 9,218 revisions were committed between February 2007 and October 2010. That makes an average of 48.5 revisions per week, or almost 10 revisions per weekday.
Cornerstone is a fairly large project. Not huge (we’ve worked on much bigger), but pretty substantial nonetheless.
We wanted to provide some numbers to quantify this and hope these figures provide some insight into the scale of development effort that goes into Cornerstone.