Ramblings from the creator of HomeSite, TopStyle, FeedDemon and Glassboard Android.

Thursday, February 10, 2005

Behind the scenes

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!

Btw, if you do load objects at startup, how do you manage their 'positions'? What happens when user resizes their Topstyle/FeedDemon window? Do the Delphi components do heavy lifting OR you have coded it yourself? I am interested in knowing because you might know that in VB it's kind of pain to create these kind of App which 'scales' along with window size and screen resolution.

I remember writing assemby language stuff for the Commodore64, Load X, Load Y, all that good stuff. I thought I was a dinosaur for this, but I think you've got me beat by 6-7 years, in terms on ancient technology.

I cant speak for Nick, but Delphi has always had excellent capabilities for creating resizable windows with no code required. This is another of the things we say to .NET programmers "I've been doing that since 1995". :-)

Thanks. I still use (pre-Macromedia) HomeSite to manage the SiteMeter.com code although at some point I suspect I'll switch to Visual Studio. And your TRS-80 comment got my attention. You may remember a game I wrote back in those days called "Volcano Hunter".

Excellent post Nick I am not a developer but it is still very interesting to read.

I work as a Network Admin for Xerox in the UK howeve I have been toying with the idea of learning a 'simple' language such as VB.NET just to make life as an admin easier (at the moment I rely on Windows Scipting Host using VBS files). I have never even seen Delphi code before so it was pretty cool reading your post.

As for testing, I have wondered if you do have a group of users who test FD for you or if you do the testing yourself?

Ugh. Better you than me. I thought writing XHTML and CSS using Topstyle was a pain. It's becoming clear to me that there are programmers, and there are users of programs. I'm a user...most definitely a user...

Excellent post. Even though I'm a c++ developer I still gain a lot from what others use. Case in point: timing. We've been looking for something at work for timing VB6. It's one thing to read a review on the product site, it's another thing entirely to read a recommendation from someone who actually uses it for decent development.

Yes, keep the development posts rolling. I'm one of the folks that have probably asked you a half dozen times over the years (since the HomeSite 1.0 days) what tools you use for various things (being a Delphi dev myself).

Curious though, I see that FeedDemon was loaded into D7, but was shocked to see that TopStyle was only in D4. Really? TopStyle hasn't been moved up to at least D7? Right now all of our stuff is in D6, and I'm considering making the move to 2005 once all the 3rd party controls catch up. (I mainly use the same set of 3rd party apps you do, so I feel good about my decisions )

Great read Nick - you should consider putting this stuff into some focused articles. I'm a Java guy but it's DOA as far as the desktop goes - and I'm not keen on the .Net runtime either - maybe Delphi is the way to go!

Oh the luxuries of a Commadore 64 - I started on a Vic 20 without tape drive! Hours of typing in code from Byte magazine, seconds of run time, then *poof* gone. Then I moved up to the tape drive. Ah, fond memories of "could not load"...

Despite that, I'm not really a programmer (I'm safely confined to a bit of PHP and JavaScript). So my question is, how long does it take to create a program like TopStyle? I realize that is a bit tough to answer, so how about from concept to "working" model to beta to release candidate?

Humberto: How do you test your applications? Do you have a team or use and automated tool?

Nick: I've never had much luck using automated testing tools with GUI applications. Instead, I rely on open betas for a large (and varied) group of testers. I also "eat my own dogfood" by using my own software every day, which really helps uncover usability issues.

bry: I see that FeedDemon was loaded into D7, but was shocked to see that TopStyle was only in D4. Really?

Nick: Yep, really. I have no reason to upgrade TopStyle to D7, since that would result in a larger EXE with no real customer benefits. I use Delphi Pro.

Lauchlan: do you use databases? XML stores? files?

Nick: I try to use human-readable data files, since I've never liked the idea of locking customers in by keeping their data hostage. In FeedDemon's case, I use XML to store data wherever possible.

Tim: how long does it take to create a program like TopStyle?

Nick: That's hard to say, since so much work is done in my head before I "officially" start coding (ex: I designed TopStyle 3.0 in my head during many long, solitary bike rides and runs). If I had to guess, I'd say about six months from initial conception to actual working product.

TownDrunk: What do you use for source control? Do you keep off site backups as well?

Nick: I use SourceSafe, which has always worked well for me as the sole developer (but I have some SourceSafe horror stories when I did team development). I make regular backups onto an external hard drive, and every month or so I backup to CD and give the CD to a friend to hang onto in case my house burns down.

Nick, you have posted the providers of the components you use and I use some of the same too. However I am interested what kind of tab control do you use for the TopStyle documents. Is it custom build or is it from any of the mentioned providers?

Holger, I don't use a code formatter - truth is, I write my code so that it's logically formatted to begin with. Most likely that's because I started programming before code formatters were all the rage :)

As a Delphi developer who's quite a few miles behind you (grin), I really appreciate your openness and humility. You've been a tremendous encouragement to me -- and I suspect many others -- in more ways that you probably even realize.

I've had many of these same questions re: what you use, things you've learned along the way, etc., but have always figured you have enough questions in your inbox as it is... so I've generally abstained from asking. Thanks for responding to the others who were a little more invasive. : )

I'm posting this just so you'll know that there are many of us who appreciate the "experience-based developer findings" that you post, and to encourage you to continue to post them. Posts like this are worth their weight in gold.

Cass, thanks for dropping by a letting me know that this has been a helpful post. Given the number of comments here, it looks like this is a popular topic - so expect to see more posts like this one in the future.

Really interesting! I would like to see more of this. As a developer myself I find it intereesting to see how other developers work and what they work with (which utlities, languages etc.). So keep on writing Nick :)

Definitely keep this kind of thing up. I think there are a lot of us who are interested how you go from idea to design to development to ship. Any chance of showing us some of the design documents and initial thoughts and ideas that eventually became FeedDemon?

More posts like this! I would be interested in hearing about your work habits. What is a typical programming day like, how many hours of that day do you actually spend programming, and how many days a week. Also, how do you organize your programming tasks--how do you decide what you are going to do each day. You maintain such a high level of productivity that it would be quite interesting to learn how you do it.