Why Cesium Failed

I’ve wanted to write this for a while but mainly pride stopped me. I think now I can handle admitting my failures. So here’s a big one!

Note: the following opinions are mine alone and do not in any way reflect my former employer Mozilla.

A few of you may remember my project ‘Cesium’ that started over a year ago. It was an idea I had to automatically record ySlow scores for websites. It was started by an intern under my direction and myself during the summer of 2009. Needless to say, it never launched. There are a few key reasons this happened (all directly my decisions/mistakes), and if you’re familiar with software development you won’t find any of this surprising.

Not invented here syndrome

This was my biggest mistake. When I announced my intentions, Sergey Chernyshev emailed me about his project ShowSlow, which was almost identical to what I envisioned for Cesium. Stupidly, I only saw ShowSlow for what it was instead of its potential. We could have worked together and added new features to ShowSlow that I wanted for Cesium. It certainly would have given us a huge head start, considering ShowSlow a) already worked and b) people were using it.

The next time I start any project I will seriously consider using/working on another project that meets 50% of my needs. Adding new features to an existing codebase is usually far easier than starting something from the ground up.

Choosing an unknown language and platform

Cesium’s codebase uses Django, which was picked by my intern (and approved by myself). Now, I don’t think Django is a bad framework or Python is a bad language, they simply were wrong for us. My intern had little experience with Django and I had none, which is certainly a bad situation when you need to get a project off the ground in a predictable time frame.

During the start of the project, I should have chosen at least a language and framework that I was familiar with. Learning Django and Python was time-consuming and could have been avoided. Remember: if you need to get a project out the door fast, stick with what you know.

Poor time estimates and priority

Again, another bad decision on my part. After my intern left at the end of the summer, Cesium was about 50-60% complete. In my head I think I believed it was closer to 90%, therefore I didn’t give it as much priority compared to other projects. I continually thought ‘Almost done, just another week or so’. Maybe if I was a Python and Django expert and worked 60 hour weeks.

I’m actually kind of surprised that I convinced myself it was almost done. When I’ve worked on other projects I’m usually the person tallying up estimates, doubling them and providing more realistic estimates for when it will be done. I think I let hubris cloud my judgement.

What I should have done was realistically estimate how long it would take for each feature/bug, multiply that by two then take a look at my other priorities. It would have shown there was at least a few more months of development. I could have then asked for dedicated resources or pushed off other projects.

In the end

A few weeks went by, then months. Eventually my disappointment in being unable to complete Cesium turned into avoiding it. So it sat. And sat. I now (personally) consider it abandoned and there are plenty of other better tools just like it out now. In all, it’s a humbling experience but certainly an educational one. Nothing really revelatory about why it was never completed, nothing new. But at least I learned a few things in the process.