I like the principle ‘quit while you’re ahead’. It’s indicative of a strong character, of someone showing restraint instead of attempting to get more water out of a dry well. In this vein, I have decided to cease development on my beloved TypograFix project. Not because there isn’t anything interested that can be added, not because there isn’t more .NET goodness that can be exploited, not because I’ve written a Godlike application what does everything possible.

I want to quit while I’m ahead.

The program works. It does what I intended it to do. I use it for all my HTML work nowadays, and it covers 99% of situations. I could keep thinking of more features to add, but then I would be like those other app developers who have already got a good product, but want to keep users upgrading, so they begin adding useless features that maybe 1% of their target audience will appreciate. That’s not the way I want to go with my little app.

So, after release 1.5, TypograFix will be in maintenance mode, meaning if anyone logs a bug, I’ll consider fixing it but, unless something unusual happens, development effort will be frozen.

One reason open-source projects are great is that you learn lots of interesting lessons about development. For me, with this project, the lessons were as follows:

  • C# is not the best language for everything. If I had to do this all over again, I’d write it in F# or Nemerle because of their much better support for pattern matching. Since the bulk of ‘business logic’ is, in fact, pattern-matching against HTML, I could have ended up with much more readable, but also much slower code. Which is okay, I don’t mind slow code for an application such as this.

  • Doing WPF is narrow-minded. I ended up in a situation where I wanted to use the program on a Mac. Clearly doing it in either a WinForms-esque toolkit like GTK# or doing it on the web (jQuery + web services / Silverlight) would have made more sense. Instead, I went for a heavy, badly refactorable platform. Whatever my next project is, it will most likely run on the web, just so people can access it easier. Right now, I wouldn’t even discount the idea that it will be a Flex app – I’m really tempted to try something new.

  • The transformation function in this project has a complexity that renders TDD useless. If I had used TDD, I would have to write an insane number of tests to cover eventualities that could reasonably be predicted just by looking at the code. This project is one good example of where test-driven development and – especially – the concept of code coverage is practically useless.

  • At times, I fell victim of overengineering. I repeatedly caught myself thinking that I ended up adding a lot of superflous features (like being about to write x^3 and have it turned into x³, that even I would hardly ever use. Many nice-to-haves got in the way of really important features that made the application easier to work with. If this was a commercial app, I’d be paying for these mistakes with market capitalization or whatnot.

  • ClickOnce just works, but I should have done it sooner. Since I went this ‘rich client’ path, I should have done it this way from day 1 instead of packaging the app with an installer or (worse) as a ZIP file for ‘xcopy deployment’. ClickOnce is a lot easier, because people get the updated app automatically without any action on their part. If I ever do a relatively simple thick-client app again, I’d go for ClickOnce to make everyone’s life a little easier.

  • Leaving minor bugs in is okay. No app is perfect. I know that some features don’t work as well as I’d like, but just because it’s an open-source project doesn’t imply that I won’t do cost-benefit analysis on it. Minor bugs will either get ironed out if they become real annoyances, or they’ll stay there ignored. Either way, they aren’t something to lose sleep over.

  • Small is beautiful. Simplicity rules. Three large text areas, a couple of links, a disappearing property grid. That’s all you need for a sensible user interface.

Overall, TypograFix became a permanent resident on all my desktop machines, and I’m happy about the way it works to this day. I’m using it to type this blog post right now, and have many slots open for articles and things that I want to publish. One thing I realized is that, with the typography nicely done, the output result can easily be opened in Word or InDesign, should I ever feel the need to publish.