I have plenty of software experience. However, none of my past work involved authoring HTML documents. A programming guide from a local used bookstore got me started. One nice thing about internet browsers is the ability to examine the HTML source for the page you are viewing. I looked at a number of calendar examples to see how things were done. The calendar date block turned out to be nothing more complex than a table of numbers. There are only 4*7=28 different instances, depending on the length of the month and the beginning day of the first week.
This was an obvious candidate for an automated document generation program. Unfortunately, the realtime calendar was already sliding into January so I needed to crank out something quickly. I built my 2003 calendar templates by hand and sent out the finished product. The response was gratifying. As a personalized touch, I had included the birthdays for my hiking friends. No more excuses for missing those special days.
In October of 2003 I started work on a JavaScript program for generating the calendar templates. There was no formal application design. The software began to evolve in classic hacker fashion. I put together a quick prototype of the input form. All that remained was generation of the proper outputs. I got side tracked by development of a CalendarState class for doing the required date calculations. It would have been easy to slap in a couple of routines that met the minimum requirement. However, I could see a broader use for that piece of code and I took the time to refine it with clean interfaces.
The next step was generation of the date block. This should have been the easiest programming task. All I needed to do was replicate the output that was previously built by hand. At this point an interesting phenomenon called feature creep began to manifest itself. I realized that small modifications to the program would allow customization of the date block in several different ways. Adding these options meant revising the input form to support the new output modes. The visual appeal of watching the calendar transform with just a mouse click was too strong to resist.
It was the second week in November when I started coding the last major software component, the notation database. Rather than worry about a detailed design, I started out by coding a minimal subset of the functionality that was required, relying on my software experience to avoid major blunders. Adding in the missing pieces without disrupting the existing structure was like playing a game of chess. Several coding sessions extended long into the morning hours as I wrestled with what appeared to be intractable roadblocks. But there was always that moment of intense satisfaction when a solution was finally achieved.
It occurred to me that maybe I could sell the software and make a profit. But then I asked myself, "Would you rather be remembered like Linus Torvalds or like Darl McBride?" Just the thought of the latter case almost made me ill. As a faithful user of GNU/Linux, I decided to make my program freely available. Joining the software community rather than exploiting it.
As I was preparing the SourceForge site I began to experience self doubt. Was the software good enough? Would other people find it useful or would it just be ignored? Then I thought of some of my past commercial work now lying forgotten in an obsure filing cabinet. No! This code deserves a chance to survive on its own merit without being shackeled by the chains of corporate intellectual property. The initial software release meets all my personal needs. Future development will depend on the interest and participation of the user community.