I’ve had a number of requests to share more details of how I develop my software, so I thought I’d write about the tools I use. This is probably only of interest to fellow developers, so feel free to skip this if you have a job with normal hours :)
As some of you know, I used Delphi to create all of my shareware programs (HomeSite, TopStyle and FeedDemon), and I’ve been very happy with it (although I will admit that I’m toying with C# as well). One of the main reasons I use Delphi is because it creates fast executables that don’t require runtime DLLs. Before I created HomeSite I was a client-server developer working in Visual Basic, and VB’s runtime DLLs were a constant source of problems. I had enough trouble trying to support people in the same building who had DLL-related problems – I can’t imagine trying to deal with these same problems with shareware, where your application is used all over the world on countless different computer configurations.
Here’s a screenshot of FeedDemon as it appears in Delphi’s IDE while I’m working on it, and here’s one of TopStyle. As you can see, they look pretty boring at design-time – most of the eye-candy is created dynamically at run-time, which enables me to avoid allocating resources (memory, window handles, etc.) for features that aren’t being used. This also means that the apps start much faster, since they don’t have to create every single UI object before they load.
If you’re a Delphi developer, you may be interested in which third-party components I rely on. I try to write my own components when possible, but I do use a number of components from Developer Express, plus a few from TMSSoftware and Shell+. I should add that I’ve purchased the source code for every third-party component I use, and in many cases have customized them to do things they don’t support out-of-the-box (such as Unicode).
One of the things many of my customers have commented on is how fast my programs are compared to the competition, and this is something I’m proud of. Believe it or not, I trace much of this to the fact that I wrote games in assembler on a TRS-80 when I was kid. When you work in assembler, you really learn how things like memory allocation can kill performance. These days I rely on the AQTime profiler to locate the bottlenecks in my code, especially once the code is out of the beta stage. There were many days during FeedDemon 1.5‘s development where I spent more time using my profiler than I did actually writing code.
I use FinalBuilder to automate the entire build process (compile the software, build the help file, create the install program, etc.), and I couldn’t live without it. A few years ago I relied upon WISE to create my installers, but these days I use Inno Setup and recommend it highly.
Well, my inbox has become dangerously full in the time it took to write this, so it’s back to work for me. If you’d like to hear me prattle on about more development-related topics, let me know!