The Spark Skinning service has been officially launched. It's an easy way to customize the look and features of the Spark IM client (and have those customizations automatically applied upon new releases). While I hope that you'll check out and use the service, this entry is for those that are interested in the behind the scenes story.
As originally scoped, Spark Skinning was going to be a fairly simple two week project. So, how did it take us two months to launch?
Feature Creep. We're typically pretty good at spec'ing out and scheduling releases at Jive. We develop detailed overviews for each feature in our wiki (so that everybody can edit the documents) and create mockups of how the features will look and function. Since this was "only a two week project", we thought we could get away with a less formal process -- a couple of quick meetings around a whiteboard. You can probably guess the outcome. Because we hadn't made the right investment in planning, the first version we built was missing some basic features. For example, the service didn't have the ability to lock the client to a particular server or to specify connection proxy settings. The color schemes also only applied to the login screen instead of the whole client. Yes, sounds pretty dumb, but that's what happens without planning. Lesson learned: Even "small" projects should go through a proper planning process.
Platform Fun. Spark is a cross-platform client, so the build process has to create installers for Windows, Linux/Unix, and Mac OS X. It turns out that in order to build an OS X installer the way we want to, the installer has to be created on OS X (Windows and Linux/Unix installers are built using pure Java so can happen on any platform). This was our first OS X box in a production environment and we choose to use a Mac Mini (pictured in its rack below). After setting up and deploying, everything was working well except that the service crashed once every two hours. After two weeks of debugging, we finally ran across a blog entry that explained a workaround to the problem.Lesson learned: New and unfamiliar production environments will always account for unseen problems and delays.
Integration. Spark Skinning is the first product we've launched that's purchased online via a credit-card. Getting online purchases setup involved a lot of non-engineering work. We had to set up an account with an online card processing service (Verisign) and then hook that up to our merchant account. Our operations team needed the right transaction information to correlate purchases in our accounting system. We had to setup the server so that we could process the transactions securely. Etc, etc. etc. Lesson learned: Make sure that all stakeholders (from development through operations) are involved in the schedule development.
Of course, we can apply rose-colored glasses to these three problems. Ultimately, the Spark Skinning feature set is richer and more compelling than originally planned, we know a lot more about OSX server hosting, and we've done a lot of work on ecommerce that can be applied to our other products. I guess I'll take the lessons learned and be happy with the result.