Starting Up

Saturday, May 22, 2004

Writing software is hard!

OK, let me clarify. Writing a piece of software code that does something interesting isn't all that hard. With the right tools and a little bit of pretty basic understanding, almost anyone can have a basic, working software application in only a few moments' time.

[STAThread]
static void Main()
{
     MessageBox.Show("Hello, world!");
}

This is C# syntax, but programmers of any language will recognize this as the classic example of the most basic computer program you can write that actually does something. Seems pretty easy right?

It is pretty easy, until you start thinking about software development in terms like "professional," "commercial," or even "shareware." It's one thing to write a "Hello world" application to impress your girlfriend (actually, you and I both know that if you're writing software to impress your girlfriend, you probably don't have a girlfriend). It's quite another to write "Hello, World (TM)" the shrink-wrapped home productivity application. Let's take a look at what that might entail:


  • We decide that we want to support alternate-language versions of the program like "Hola, Mundo!" We could simply hard-code that into the application, but since we are good programmers, we need to add resource file handling or some similar strategy for storing internationalized versions of the text.


  • We may even want the data to come out of a database so that we can provide individual logins for multiple users.


  • Thanks to Winamp, no self-respecting modern application can fail to offer custom skin support, so we'll definitely need to offer the Star Trek version of "Hello, World (TM)."


  • We should probably add things like error handling and logging so that if anything goes wrong with the application it can be handled appropriately.


  • We may even want to report any errors back to the mother ship so that we can be aware of how the application is behaving out in the wild. To do that, we'll need code to manage internet connectivity for the application.


  • Speaking of connectivity, while we're at it we should also throw in automatic version checking so that when we want to distribute our next version ("Hello Again, World!") our software can simply update itself over the internet.


  • Of course, we'll also want to build the ability to offer a time-limited trial version of "Hello, World (TM)" that will expire after 30 days so that people will have to purchase the application from us.


  • Speaking of purchasing, I guess that means we actually have to support the ability for someone to give us money! Either we have to set up our own merchant account or affiliate with an existing service that provides such capability.


  • We probably also want to set up a website to market our new application, offer downloads, provide a user forum, product support...


  • Ah, crap. We forgot about support! That means we'll have to set up an email account and monitor it on a regular basis so that if people have problems with the software, they'll have someone to help them out.


...and you get the point. There's also writing the help documentation for the application, adding a nice logo and graphics, creating a testing framework to validate that it works properly, building the installation package and delivery infrastructure, setting up a defect tracking apparatus to handle the inevitable bug reports, creating our third-party plugin API so that other developers can leverage "Hello, World (TM)" as an application development platform, patenting our unique implementation of "Hello, world" so that we don't get sued by the original inventors, etc.

Now, imagine that you're trying to write software that's only slightly more complex than "Hello, World," but one that shares most of the same basic issues listed above, as well as many more highly technical issues that go beyond the scope of this post? Building software on this scale is do-able, but doing it well is pretty damn hard!

I am interested in the feedback of other folks who have gone through the commercial application development cycle from scratch, especially as a small organization of only one (or maybe a few) developers. How did it go? What other issues did you face that weren't mentioned above? How did you balance the technical side with the business side of managing your product(s)?

We are just on the leading edge of this process ourselves. Most of these are questions that we are facing right now, trying to decide what to deliver, what to postpone, what to ignore, and most importantly, HOW to do it all. As we figure out some of the answers for ourselves, I will surely share what we discover.

Sunday, May 16, 2004

Finally looking forward to a Monday

My last day of work went pretty typically. Most of my things had been packed and taken home earlier in the week, so I spent the day sending the final emails, saying the final goodbyes, doing a bit of hasty, last-minute turnover. The usual. I've left my fair share of jobs, so I was pretty well used to that part. For the first time, however, I have absolutely nowhere to be tomorrow morning. It's a pretty strange feeling, and it really hasn't fully sunk in yet. I've been lucky enough so far in my career never to have been out of work for more than a few days at a time, and even then, I had jobs lined up and waiting for me. This is the first time in 10 years that come Monday morning, I'll have nowhere to be and nothing to do. Except, of course, start running my own business.

So my plan is to work late tonight, get up at about... oh, whenever I wake up tomorrow, putter around and tidy up the house a bit, eat lunch, maybe head down to La Tazza Fresca with my laptop for a coffee... It will be interesting to see if the whole experience lives up to my lofty preconceptions. I have visions of Hemingway sitting on a balcony in Key West, tapping out a classic novel. Or Hendrix hanging out at a cafe in Greenwich Village, waiting for the next gig. Or me with my laptop, writing C# code and the occasinal blog entry. Hmmm. OK, so it's not quite as sexy when I put it like that, but at least I'll be in shorts and sandals (shower optional).

There are tons of interesting issues that I plan on discussing here soon (I suppose after the novelty of being a free man wears off). Business questions relating to starting up a company, working for oneself, marketing and selling software, copyright issues, etc. Technological questions in many areas of software development including programming tools, application design, usability, testing, patterns, software distribution, etc. Philosophical questions like who is your favorite Beatle and "If I am writing this blog and no one is reading it, does it really exist?" I guess I'll have plenty of time now to get into all of this and more as I get into the swing of my new "schedule." Until next time...

Friday, May 14, 2004

Initial Thoughts

Well... It's late in the evening on "Last Day of Work Eve." Tomorrow (technically, later today now) will be my final day suckling at the coporate teet (for a little while at least). My business partner and I have spent the last few months developing an idea for a consumer software application that we are going to build and try to market commercially, and I have decided to take the plunge into full-time independent development. We are self-funded (i.e., NOT funded), but I view this is a trade-off. I'm giving up a full-time salary and benefits in exchange for the removal of a massive thumb from the back of my neck (it feels better already :). Of course, there will be other perks: I'm most looking forward to the new dress code I'll have.

Will it be worth it in the long run? Check back occasionally and see how things go. I hope to use this blog as a means of documenting the trials and tribulations of developing a commercial software application (and if all goes well, ultimately a software company) from scratch. At the moment, we are pretty confident in our technical abilities and in our product's vision (more on this in future posts), but beyond that, we aren't quite sure what to expect. Regardless of how things end up, it will hopefully be an interesting ride and we would love it if you decide to share that ride with us.