Seasonality is two years old today. Sometimes when I look back on progress made as several releases have past, it can be surprising just how much it has changed. I thought this might be a good time to revisit Seasonality’s development path and maybe talk about where Seasonality is going from here. This is a long posting, so go grab one of your favorite beverages, kick back, and enjoy the ride.
Most people find it surprising that the idea for Seasonality didn’t start as an application at all, but instead as a screensaver. The screensaver wasn’t even going to focus on the weather. I wanted to design something to show weather, news, stock info, and other information. I called it gKiosk. The g came from Gaucho Software (I thought I would produce a g-line of products instead of the i-line that Apple chose), and Kiosk was the best term I could think of to describe all this information together. Since I already had some code from XRG to generate weather graphs, I started porting that first and working on the weather section. After a few weeks of working on the project, I began to realize just how involved it would be to even produce just the weather section of gKiosk.
I’ve always had a casual interest in the weather. I can remember being stoked after getting a cheap plastic weather station kit when I was a kid. The instruments were useless for taking accurate measurements, but they were fun to play with. My childhood interest in meteorology didn’t develop much past that, but a general curiosity remained. With this casual interest, and some half-written code I decided to cut the news and stock portions out of the project and chose to develop a dedicated weather screensaver.
Shortly thereafter, I came to another fork in the road. I wanted to develop a product that was going to sell, after all I was working on Gaucho Software full time, and without sales I was without an income. Users will buy programs they find useful, but no-one really “uses” a screensaver. Screensavers start when a user walks away from their computer, and as soon as they return, the screensaver is brushed aside so some real work can be accomplished. I didn’t want to develop a program that would be brushed aside, so at this point, I took the screensaver view I had worked on and shoehorned it into an NSWindow. Gaucho Software’s first new program was going to be a weather application, and it was going to be called Seasonality.
Three to four months later I had a basic concept working. I wanted to get some feedback from friends at this point to see if I was on the right track, so on February 7, 2005 I sent an email out with a Seasonality 0.1 release. Here’s part of that email:
Well, it's time to release version 0.1 of another product. This is the first pre-release version of a new weather application called Seasonality. I've been working on this application on and off for the past 6 months, resulting in just over 10k lines of code (almost as many as XRG with over 2.5 years of off-hours development time). This is probably already assumed, but please don't pass this link along to other people. If you know of someone else who you think would be interested in testing out this app, let me know.
The purpose of this release is to get some feedback from a select group of people about the design and implementation of the application itself, and I would appreciate any feedback you could give me. Questions to think about: Does the app have the basic features that you would be looking for in a weather application? Does the work-flow of the app make sense (method of adding and removing locations, changing the display, prefs, etc)? Is there anything that blatantly stands out to you as not making sense in the design? Is there anything missing (besides the obvious lack of international support)? :-) Basically, I'm looking for a sanity check before adding the final features and start beta testing for a public release.
Feedback at this stage was highly beneficial, just to make sure I was on the right track while finishing development. Here’s a screenshot from just before that release that I’ve never posted before. The interface was pretty embarrassing looking back on it, but I was able to clean it up before 1.0. 🙂
While the general layout is the same, I can’t really recognize any part of this window in the current release. Fortunately, it seemed that even though the application was very rough around the edges, the concept was good; it just needed polish, a lot of polish. One thing that I’m sure many users are thankful for though is the color theme switching from a “sunny” yellow to a blue, which looks a whole lot nicer next to other OS X applications.
A lot changed in the 6 weeks after that. I re-worked the forecast to a more compact display with a stacked day/night view, informational text was added in the location table (along with a slicker interface for adding/removing locations), radar images turned into something that I actually generated instead of displaying an image off a website, and graphs actually became something that could be customized a bit. The 1.0 beta was pretty intense, and fortunately Katrina was putting in long hours at the office so I could do the same.
I don’t remember much about March 21st, 2005, but I do remember not sleeping much the night before. It wasn’t that I was cramming all the last minute stuff in, it was more of an anxiety I had. What if it didn’t work on other Macs? What if the web server went offline? What if the licensing didn’t work? What if no one bought it? Luckily, it did work on other Macs, the web server was fine, licensing worked (except for a small detail–I left a serial number in a textbox in the nib file…didn’t take me long to fix that one :-)), and people did buy it. Overall, it was a pretty good release. I posted a preview a few days before release here on my blog. Here’s a screenshot of Seasonality 1.0 in action…
Naturally, like the 1.0 release of any piece of Mac software, the support and feature requests started pouring in. It was great to hear from everyone who was giving Seasonality a try, and a lot of feature ideas I received at this time have made it into later versions (and some are still on the list of features I’m working on!). At the time there were several ideas I had for future releases, the most notable feature absence was mentioned in the email I sent out for 0.1 above: Seasonality didn’t support international locations. So I went back to cranking out code and 7 months later I emerged with Seasonality 1.1.
Seasonality 1.1 had a real interactive satellite map…you could drag to navigate all over the world. The forecast changed to it’s current zigzag layout to make it easier to interpret, and the cylindrical wind direction graph was born. I still don’t think there’s any graph like it being used in other weather software, and I’m glad no one has copied the idea yet.
While there have been a lot of new features added since the Seasonality 1.1 release, my programming mode kind of switched at that point. The interface had settled down a bit, and the basic featureset was looking good. I started focusing on evolving the application and molding it into what I ultimately wanted version 1.0 to be. Seasonality 1.2 contained a lot of code cleanup, a ton of bug fixes, and some interface polish.
The polish and cleanup was a big change, but by far the biggest update in Seasonality 1.2 was French language support. I had wanted to support multiple languages for quite some time, but hadn’t a clue how to approach it. After going to WWDC that year and learning about OS X’s localization support, it didn’t look too difficult. Apple’s presentations at WWDC always seem to make things look easier than they are though. 🙂 I heavily underestimated the amount of work required. It took weeks, if not months, of trying to catch all of the different text phrases in the app. Not only did all the strings need a French equivalent, but spacing needed to be changed in cases where the French string was longer than the English one. Then came the help translation, which was an ordeal in and of itself with text encodings and other issues. Fortunately, Ronald and Philippe were dedicated as translators to getting everything done quickly. There were some days I couldn’t keep up with all the changes and updates they were sending over. In the end, I think users really appreciated the change, not only in France, but other French speaking countries such as Canada. Ever since, I’ve been using online translation websites fairly frequently to handle support requests.
Seasonality 1.3 looked a lot like Seasonality 1.2, with the exception of the new graph handling that allowed more than 2 graphs to be shown at one time. Journalling was the next big thing here. Seasonality finally had a 2nd window! Shortly after Seasonality 1.0 was released, I received a feature request from a gardener who wanted to keep track of and take notes of the current conditions. This was my first hint that Seasonality could be used for anything other than casual weather observation. Since then I’ve received emails from pilots, sailors, home automation specialists among other fields. It’s very satisfying when someone tells me they use Seasonality in a way I haven’t thought of.
Progress was going great, until August of 2006 when international support broke. Not just “broken” in the respect of being able to fix it with a couple hours of coding, but really broke. In an application dependent on web services, there’s always going to be times when an XML-RPC API will change, or maybe a web site’s layout will foul up your parser a bit. However, in this case Environment Canada pulled their international forecasts entirely. It had taken quite some time to find an international forecast source the first time around; it was even tougher to find a replacement. It took me a week or two just to find a new source, but that source was direct model output data, which is beyond any raw data I had ever worked with. This was the first time I couldn’t just display some weather data, I had to interpret what the model was predicting and programmatically generate forecasts, and then verify that the forecasts were close to what other weather providers were forecasting. It took me over a month just to write code to interpret the data and optimize the web server.
The silver lining to this cloud is the added flexibility I have from this point forward. In Seasonality 1.4 I was able to allow users to add their own custom locations because I was no longer limited to just the locations Environment Canada chose to forecast. A lot of other cool features such as wind forecasts will be coming out of this in the future. When I was finally able to recover and focus on Seasonality 1.4 development, I added moon information, which makes the sundial look a lot cooler, and a ton of bug fixes and code optimizations…
So where does that leave us? Today I’m happy to announce a new release, Seasonality 1.4.1. There were some remaining bugs in Seasonality 1.4 that just needed to be wrapped up. Especially since development of new features for Seasonality 1.x is nearing the end…
From this point on I’ll be working on Seasonality 2.0. I tagged Seasonality as “weather taken to the next level.” Now it’s time to explore the level after “next.” I’m not ready to announce any new features yet, but I can say the current list is looking pretty hot (no pun intended). I’ve been mulling over a fresh interface design in my head for the past several months–an interface design that will not only improve the display of data that Seasonality currently shows, but also make room for some really cool new feature ideas I have for Seasonality 2.1+ releases… If you’re thinking of buying Seasonality today, don’t hesitate. Seasonality 2.0 is still a ways off, and everyone who purchases Seasonality now will get a free upgrade to Seasonality 2.0.
If you’re still reading at this point, all I can say is “wow,” you have a lot of patience. 🙂 I’d like to send a thanks out to all the Seasonality users and beta testers… The past 2 years have been a blast and I can only hope for the same next year as well.