Skip to content.

Manageability

Sections
Personal tools
You are here: Home » blog » stuff » Is Chandler's Demise Evidence that Dynamic Languages Can't Scale?
Views
  • State: published

Is Chandler's Demise Evidence that Dynamic Languages Can't Scale?

Document Actions

Despite all the recent hoopla promoting dynamic languages as a silver bullet to lead out us out of our productivity malaise, I've always wondered if dynamic languages could scale. I use the word 'scale' here to mean development scalability rather than system scalability. Development scalability means that we can build a solution with many teams coordinating in relatively independence. The burning question is "Can a dynamic language be successfully used for developing large scale complex software systems?".

One of my prime examples of a large complex software system is the Eclipse project. One would be extremely hard pressed to find a project of similar scope and complexity. The Eclipse project is incomparable with regards to how it has created a component system that allows multiple development organizations to coordinate (see: Callisto's 7 million lines of code and Europa's 17 million lines of code) their independently developed solutions in a single framework. This integration goes beyond a one time integration event, but must continue as all the different components evolve independently. That seriously is an unprecedented accomplishment in terms of software engineering (read: "How to Build Damn Good Software" )

One of the biggest shortcomings of this blog is that it's built on top of Plone. Plone is a web framework that's built on Zope that's built on Python. Plone is appealing in that you get a lot of functionality right out of the box. Unfortunately, there is one major downside, as the Plone and Zope frameworks evolve, a lot of the plugins that are developed independently become out of sync and unusable. This situation is exacerbated by the fact that Plone, Zope and Python doesn't have a sophisticated module system (this may have been fixed with the Archetypes system). If we could make the analogy with static versus dynamic typed systems, the Plone system was built on a mindset that makes evolution just difficult. Nuxeo has some interesting observations as to why they moved away from Zope and into Java.

System evolution is hard. It is so hard that one can't expect that the built in language mechanisms (i.e. Interfaces, Dynamic Class Loading etc.) are insufficient for building large scale systems. It is clearly apparent that we need to build mechanisms such as Eclipse's plugin framework or OSGI's module system. Certainly a dynamic language like Ruby or Python can create a similar kind of system (see: Java is Not Python Either). Unfortunately, I'm generally convinced that the hack and slash mindset of dynamic languages are incompatible with the rigidness of strict interface/type checking. After all, why should one who discovers the freedom of dynamic languages force oneself into a straitjacket?

We've all heard of Conway's Law (i.e. "Any piece of software reflects the organizational structure that produced it" ), well I think there might be a law that's analogous to this. This would be "Any piece of software reflect the social aspects of the language it is written in". The preference of a programming language may have a lot to do with the preferred thinking style of the stakeholders.

PHP is a fairly simple programming language and tends to be preferred by many Web UI inclined developers. That is, by programmers who care more about the UI features and how well it looks. Flash and Javascript, a language that appears simple on first sight but with highly complex semantics, tends to be favored by programmers focused on interactive and animated UI features. Perl tends to be for system administration types that need to build something quickly to automate their work. C programmers tend towards jobs were local performance optimization are at a premium.

PHP based software excelled in the Web UI space because they focused solely on the UI functionality rather than consuming unnecessary effort trying to build the perfect catch-all web framework. Java developers never understood that plain JSP was good enough.

Unfortunately, PHP developers are depressingly weak with regards to modularity. For example, Ning's mistake was to believe that a PHP developer could design modularity into its UI framework. Ning's PHP UI framework is a disaster in terms of evolvability and extensibility.

Flash and ultimately Javascript excelled in the interactive UI space because the Java UI based frameworks were to cumbersome for animators and graphic artists that preferred a screenplay based approach to choreography. The Javascript prototype based model can make programs intractable. One of the motivations of GWT was to use Java's tractability to Javascript based UIs.

Java was a non-starter in the system's admin space because of it's large footprint, slow startup time and lack of brevity. Perl's implicit pronouns which encourages brevity however comes with the undesired effect that code tends to be unreadable for even the original author and makes refactoring difficult.

The cultural difference between Object Oriented languages are a bit more subtle. Beyond the common desire to finding organizational structure in their code. Python developers tend to be more pragmatic minded. Ruby developers tend towards brevity and elegance. Smalltalk are more Object Oriented purists. C++ developers tend to lack consensus on which of the many programming paradigms are best. C# developers are content as sharecroppers working within a narrow set of frameworks. Java developers tend to have a desire for building frameworks, unfortunately have a penchant for unnecessary complexity.

Object Oriented languages are ideal languages for developing large scale systems. However, I generally believe that you hit the limit earlier with dynamic typed Object Oriented languages. The lack of static typing hinders not only code exploration but also the implementation of automated refactoring tools. The ease of employing meta-object protocols add an additional burden to understandability by making behaviors less traceable.

One should not underestimate the need to make it easy for new developers to get on board. The key to successful architectures of participation is in the inclusion of the largest of audiences. Languages like Ruby and Scala introduce new programming constructs and paradigms that are beyond the cognitive abilities of the average programmer. These constructs raises the bar of participation effectively reducing the size of the target audience. Unfortunately, there isn't a language in existence that allows one to selectively deny features ( does BlueJ do this?).

Now going back to the title of this piece. The Chandler project ( see: "Dreaming in Code" ) was a project that was a supposed to be a showcase project for Python. However, almost 3 1/2 years ago, I had some reservations about Chandler's viability:

It'll be interesting to see how bigger projects based on languages like Python will fare. So far, the Chandler project which was announced with a lot of fan fare is not progressing very briskly. May I suggest writing some sophisticated refactoring tools first (albeit in Java).

I haven't really followed their development since and am unaware of the true reasons for the Chandler project's demise. Scoble has a podcast on Chandler that may be worth watching. My suspicion is that not beginning with a stable and static substrate, in an environment with fluid and unconstrained requirements, is a recipe for disaster. Just ask the Mozilla folks who spent years working on the original non-modular code of Netscape without much success. Only to get into their stride once the XPCOM component model (note: XPCOM is unnecessary for Java with its dynamic component binding ) was implemented. They began to succeed when they got focused on a pure web browser (i.e. firefox) and not a be-all information appliance.

What I find interesting is that Chandler started as a Python project with bold claims such as "Python programs are both concise and readable, this makes it excellent for rapid development by a distributed team" and "Chandler design goals: ... design a platform that supports an extensible modular architecture". I was hoping to see this project as a testament to Python's viability to large scale development. Unfortunately, I discovered that the only remnants of Python could be found in the desktop client. The Chandler server apparently appears to have gutted all Python and replaced it with an implementation based on Java technologies running on Tomcat:

Chandler Desktop is written in a mixture of Python and C-based extensions. Important components include wx/wxPython, Berkeley DB, PyLucene, ICU, twisted, vobject, and many others.

Chandler Desktop is extensible using simple Python plugins which can be distributed on Cheeseshop. Plugins can add new views and new data types using schemas defined in the plugin.

Chandler Server is both a "database for PIM data" and an Ajax web UI to managing that data. All access to PIM data is done via HTTP calls using various protocols like CalDAV, Atom, WebDAV, Morse Code, and others. Server technologies include Java, Hibernate, Spring, iCal4j, and Abdera. The web UI is developed using the Dojo framework.

It's indeed strange that these two components use different storage engines. If I were to invoke Conway's law, it appears that the project had a schism between the Python and Java developers. I'm curious as to how the decision was arrived at to not develop the server side code in Python. Even if the project's requirements were in constant contention, the least the developers could have done was to build a solid and useful framework. I certainly would have loved to see a flexible UI that can slice and dice data or even a reusable storage engine for unstructured data and communication. I've downloaded the client and server, and it looks like a prototype that a competent developer could coble together in a couple of weeks. It's not something one would expect from a high visibility and heavily funded open source project.

Chandler started life as very public software development effort. In the spirit of agile development, I would have like to have seen a more public postmortem. That is, I would like to see some details of why a well funded, well staffed project could fail so miserably. Unfortunately, I'm am still left in the dark to speculate. Can large scale projects be successful implemented around a dynamic programming language? The burden of proof was out there several years ago, now more than ever, the development community needs some incontrovertible evidence that dynamic programming languages can scale.

Update: Some may have remarked the Eclipse may not be an apples to apples comparison. Well would Zimbra be something comparable in scope with Chandler? Zimbra; an open source email and calendaring application; its core is written in Java; it was successfully sold to Yahoo for 350 million dollars.

Certainly, there are many factors that come in play in software development, unfortunately these include the development methodologies used and the selection of development tools. Some have argued that the Chandler project made every classic mistake in the book. At the same time failing to acknowledge that relying solely on a dynamic language could also have been a mistake.

One final note, I've found a good insider piece on what went wrong. The author sums it up as "There was no objective basis for decision-making. Thus, there was no unified design, architecture, vision, nothing. We had fiefdoms...". Which again I have to opine, "large scale projects are all about managing fiefdoms".


Last modified 2008-01-24 09:19 PM

dynamic v static

Posted by Anonymous User Anonymous User at 2008-01-18 07:07 PM
While the rigor of static typing does enforce a strictness that is useful for keeping large codebases manageable, this rigor is to some extent the cause of the large codebase. In other words, I'd rather be maintaining a large codebase in a statically typed language (e.g. Java), than a dynamically typed language, but I reckon that the size (in terms of LOC) of a standard Java webapp could be reduced by about 30% by rewriting it in Groovy, Rails, etc.

http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.html

I'm not sure that Python was the problem ...

Posted by Anonymous User Anonymous User at 2008-01-18 08:05 PM
There are a lot more basic reasons why Chandler was doomed irrespective of implementation language. The main thing I'd note (from reading Dreaming in Code plus a few blog posts, no real knowledge claimed) was that there was a lot of magical thinking -- open source software would negate Brooks Law, the project could be driven by quality rather than arbitrary dates, that a consensus process would produce innovation rather than mediocrity, that Python was a magic wand that would solve problems automatically, and so on.

As for the importance of scalability, http://www.ietf.org/internet-drafts/draft-iab-protocol-success-01.txt has an anlysis of why protocols (OK, not "projects", but maybe there's some analogies) succeed or fail. Scalability issues don't have much to do with initial success, even though hard scalability bounds do tend to limit "wild success". Factors most associated with initial success are " filling a real need, and being incrementally deployable. When there are competing proposals of comparable benefit and deployability, open specifications and code become significant success factors. Open source availability is initially more important than open spec maintenance." I don't think one could make the case that Chandler fufilled an unmet real world need (there are plenty of email/organizer programs already) or that organizations could incrementally deploy Chandler without disrupting their existing Outlook/Lotus/whatever installations, so those factors alone would tend to predict failure. Perhaps Chandler's open source would have made that a good tiebreaker *if* they had a product that solved real problems that users of the mainstream programs have, and if it Chandler could be incrementally deployed in an organization, but they never got anywhere near that bar.

Likewise, there's the frequent feature of failed projects that there was no clear goal to work for. For example, http://whydoeseverythingsuck.com/2008/01/rip-mitch-kapors-chandler.html argues that there is STILL no agreement on what the target market is.

Another blog post http://www.moskalyuk.com/blog/why-software-projects-fail-and-review-of-dreaming-in-code/1478 has a more extensive comparison between Chandler and traditional theories of software failure.
1. requirements changes made the early decision to use Zope problematic; instead of using Zope rather than reinvent its wheel, the Chandler developers had to become expert on Zope internals.
2. The team of superstars had trouble agreeing on a final architecture.
3. "Feature creep. One of the problems that Chandler had outright was its need to be revolutionary, which required a redesign every now and then".
4. "Code reusability within organization is sometimes pretty decent, ... Code reusability in the open source world is pretty poor."

So, I don't see Python's fingerprints on the knife that killed Chandler.

Mike Champion

Scala is not dynamic

Posted by Anonymous User Anonymous User at 2008-01-20 09:54 AM
I wish people would stop putting Scala together with dynamic languages. It's NOT a dynamic language.
While it does have some similarities to those dynamic languages, I think these are good similarities. It's almost like you can have your cake and eat it too. I'm sore there are lot of pitfalls yet undiscovered in Scala programming, but that is true for anything because perfection doesn't exist. But I'm pretty sure that programming in Scala will be much closer to Java than anything else, just without many of the current frustrations -- and with some new frustrations introduced :)

i've seen them scale...

Posted by Anonymous User Anonymous User at 2008-01-20 10:36 AM
interesting that you chose eclipse as an example of scale. prior to writing eclipse, OTI wrote VAJava and VASmalltalk which were both written in smalltalk... they scaled very well, and i believe that the OTI team had to be talked into doing the next one in Java.

Andrew

Eclipse a good example?

Posted by Anonymous User Anonymous User at 2008-01-20 11:43 AM
[ The Eclipse project is incomparable with regards to how it has created a component system that allows multiple development organizations to coordinate (see: Callisto's 7 million lines of code and Europa's 17 million lines of code) their independently developed solutions in a single framework. ]

Is that a good thing that an IDE requires 17 million lines of code to be functional? Have you ever written an Eclipse plugin? Looked at the 17k classes and 10x more methods they have?

Why all the language-hating?

Posted by Anonymous User Anonymous User at 2008-01-20 04:07 PM
Is it the responsibility of the language to institute good programming practices and design patterns or is it the responsibility of the architect to use them, the programmer to learn them and the project manager to enforce them?

Good post

Posted by Anonymous User Anonymous User at 2008-01-21 01:32 AM
I also do not think that python is the reason for Chandler's demise. You might still have a case, but I don't think Chandler example gives any proof. However, I really like your writing style - and length! :).

I'm on the the side of the fence, being a proponent of dynamic and functional languages, especially JavaScript. But fanboying aside, I think it would be very interesting to do a live test of productivity and maintainability between different language types.

This would be very costly, and I don't know who would sponsor it, but imagine having two projects going side by side implementing the same target system; One in Java and the other in JavaScript (The first one using some standard JEE stack and the other Apache Sling with server-side Rhino), to get some real metrics.

Peter Svensson (not logged in / http://unclescript.blogspot.com)

Simpler causes

Posted by Anonymous User Anonymous User at 2008-01-21 03:41 AM
Perhaps this project just failed due to poor management, like so many other projects do? Consider the world of (largely statically typed) commercial software.. there are quite a few bombs, irrespective of their host language. :) By the same token, there are some successful very large projects that use dynamic languages, like Mozilla (a lot of Javascript), Ericsson's stuff in Erlang (many millions of lines, very low bug ratio), numerous large closed source Perl projects that have been running the web since day one, etc.

Despite what I just wrote, I think I do agree with your assertion to some degree: dynamic languages + OOP require a higher level of rigor when it comes to building the software component interface. If not, everything becomes quite brittle. I think the compilation phase of static environments tends to ensure some level of correctness on its own.

Wha?

Posted by Anonymous User Anonymous User at 2008-01-21 07:52 PM
The Chandler project is perhaps the best-documented software failure of the past 10 years. There's an excellent, famous book (which you linked to, but apparently haven't read!) documenting all of the many, many causes of its failure.

And yet you still manage to write an entire post about the question of whether the *programming language* had something to do with it. You, sir, are incredible. I salute you!

The problem wasn't python

Posted by Anonymous User Anonymous User at 2008-01-22 09:47 AM
The project appears to have some organizational issues:

http://whydoeseverythingsuck.com/2008/01/mitch-kapors-weekend-at-bernies.html

large projects

Posted by Anonymous User Anonymous User at 2008-01-24 08:57 AM
I'm no fan of PHP, but its interesting that you fail to note that Facebook, one of the top sites on the web and at this point a formidable application that is certainly evolving, is entirely PHP-based. Not to mention that Python is widely used at Google, Ruby is used by Flickr, etc. Plone's failures with Nuxeo don't indict all of dynamic languages (in that case specifically, I think its an issue of a corporate consulting firm needing to look more "corporate"); anyone can point to dozens of failed projects written in Java, if it weren't for NDAs.

Youtube and Eve

Posted by Anonymous User Anonymous User at 2008-01-24 09:57 AM
Youtube and Eve are two Python projects that seem to have scaled pretty well. As others have said, I think the roots of Chandlers problems were organizational rather than their choice of language. (Including multiple rewrites...)

I work for a small development team on a system with 140k lines of code (Resovler Systems). The choicec to use Python (actually IronPython) was made before I arrived for pragmatic reasons - and none of the developers had used Python before.

They *didn't* have a problem adapting to Python, and I was the first developer to arrive with experience of the language. The flexibility of the language means that an evolutionary architecture is actually much easier than with static languages.

Rumors of Chandler's Death Are Greatly Exaggerated

Posted by Anonymous User Anonymous User at 2008-01-24 11:33 AM
It's a nice calendar application, with distributed and server modes, it interops with lots of cool stuff, it's got a great plugin architecture. No, it didn't become the super-PIM it was planned to be, but so what?

A lot of projects' "success" looks a lot worse than Chandler's so-called "failure"!

Let's have a little perspective, eh?

--PJE
visitors
reading
 
 

Powered by Plone

This site conforms to the following standards: