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!
Very cool! Thanks Nick...
Posted by: TownDrunk | Thursday, February 10, 2005 at 03:29 PM
Prattle on! I would like to hear more about your development process.
Posted by: James Taylor | Thursday, February 10, 2005 at 03:34 PM
Thanks for taking the time to share.
More development related posts would be much appreciated.
As an active developer, I'm always interested in hearing what others do.
Cheers,
Pete.
Posted by: Peter Nicholson | Thursday, February 10, 2005 at 04:00 PM
Always interested to hear more on how you accomplish your amazing work...
Posted by: CJ | Thursday, February 10, 2005 at 04:08 PM
This is very interesting. Thanks for sharing.
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.
JD
Posted by: JD | Thursday, February 10, 2005 at 04:18 PM
TRS-80! Wow!
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.
Did you have a cassette drive, too?! ;-)
Posted by: Alex Sherwood | Thursday, February 10, 2005 at 04:37 PM
JD,
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". :-)
Posted by: Craig | Thursday, February 10, 2005 at 04:39 PM
Bring on the development related posts!!
Posted by: Ben Richardson | Thursday, February 10, 2005 at 05:07 PM
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".
Posted by: David Smith | Thursday, February 10, 2005 at 05:16 PM
Alex, yes - I did have a cassette drive :) BTW, this was a TRS-80 Color Computer, which was out about the same time as the C64.
Posted by: Nick Bradbury | Thursday, February 10, 2005 at 05:26 PM
How do you test your applications? Do you have a team or use and automated tool?
Posted by: Humberto Oliveira | Thursday, February 10, 2005 at 05:58 PM
Nick has lots of eager users to beta test for him ;)
Posted by: Andrew Herron | Thursday, February 10, 2005 at 06:06 PM
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?
Posted by: Morgan Pugh | Thursday, February 10, 2005 at 06:56 PM
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...
Posted by: James Koole | Thursday, February 10, 2005 at 08:37 PM
L-SHIFT-O,8,1 BABY!! Keep writing about the development stuff!
Posted by: Kris | Thursday, February 10, 2005 at 09:41 PM
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.
Posted by: Bill Nalen | Thursday, February 10, 2005 at 10:00 PM
Outstanding Post.
I love hearing how other developers work.
One question if you do not mind.
What version of Delphi do you use (obviously 7 from the pics), but Enterprise/Personal Architect.
Also, who sells it the cheapest ?
Thanks!
Tim
Posted by: Tim | Thursday, February 10, 2005 at 10:15 PM
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 )
Posted by: bry | Friday, February 11, 2005 at 01:25 AM
...ah yes, and I also would like to hear if you currently use the Enterprise or Pro versions of Delphi. (And if you plan on making the move to Delphi 2005, and if so, which level)
Posted by: bry | Friday, February 11, 2005 at 01:27 AM
Thanks for the post.
One question . . . do you use databases? XML stores? files? How do you handle the storage/persistence sde of things?
Posted by: Lauchlan M | Friday, February 11, 2005 at 05:07 AM
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!
Posted by: Richard Rodger | Friday, February 11, 2005 at 06:42 AM
Very interesting, specially the comments on how and why you do what you do :)
And about beginnings... SYS 64738 :D
Posted by: Antonio Bueno | Friday, February 11, 2005 at 06:49 AM
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?
Posted by: Tim W. | Friday, February 11, 2005 at 07:24 AM
Thanks for sharing that. Yes, more developer related posts would be great! :)
Posted by: Mikhail | Friday, February 11, 2005 at 07:59 AM
Nick,
What do you use for source control? Do you keep off site backups as well?
Thanks!
Posted by: TownDrunk | Friday, February 11, 2005 at 09:40 AM
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.
Posted by: Nick Bradbury | Friday, February 11, 2005 at 10:11 AM
Very interesting stuff. I am also curious, what do you use for issue tracking? I have yet to find a decent web-based issue tracker that I can use and I really wish I had one.
Posted by: Kevin Roth | Friday, February 11, 2005 at 10:26 AM
Kevin, I use FogBUGZ (http://www.fogcreek.com/FogBUGZ/ ) for bug tracking.
Posted by: Nick Bradbury | Friday, February 11, 2005 at 10:32 AM
Hi Nick, Re: DLL / installer / encapsulation - you might be interested in Thinstall (shhh. secret)
Posted by: iofno | Friday, February 11, 2005 at 10:32 AM
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?
Posted by: Petko | Friday, February 11, 2005 at 11:32 AM
Petko, that tab control is my own creation.
Posted by: Nick Bradbury | Friday, February 11, 2005 at 01:20 PM
Nick, that was a nice little insight! I'd really appreciate more of this.
Are you using a code formatter? In not, why not? I for one cannot live without one any more, it's just great to hack away, press a button, and see everything indented nicely! :-)
Ohm and Kevin, I can recommend Mantis for web-based bug tracking. And JediVCS/FreeVCS for source control if you are a Delphi developer, but I might be biased on that one! ;-)
Posted by: Holger Dors | Friday, February 11, 2005 at 01:52 PM
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 :)
Posted by: Nick Bradbury | Friday, February 11, 2005 at 02:43 PM
So, Nick, have you tried inline XP-style test cases? This has saved me a load of trouble in C/C++/C#.
I can't say I've tried using Delphi.. looking at that syntax hurts my eyes more than VB.
Posted by: Cory Nelson | Saturday, February 12, 2005 at 03:40 AM
Hmm, I thought you were using Delphi 5 or 6 still, but I see you moved over to Delphi 7? Since when?
Posted by: Weyert de Boer | Saturday, February 12, 2005 at 09:15 AM
Nick, did you create the code editor component or purchased it? Do you know any third party component that offers syntax highlighting for xml files?
Posted by: Humberto Oliveira | Saturday, February 12, 2005 at 10:56 AM
Nick -
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.
Posted by: Cass | Saturday, February 12, 2005 at 03:00 PM
Umm, are other budding developers listening? Note the elegant interface folks — it makes a difference.
Posted by: Zaine Ridling | Sunday, February 13, 2005 at 04:03 AM
You've got a lot to do so I really appreciate the time you've taken giving us this.
Some things that interest me (I work in .NET, so excuse any mindset differences in here!):
1) What do you do for source control?
2) If you take a break (say 1 week and 4 weeks) how long does it take to get back into the swing of programming? (Measured as days to full speed and estimated days lost!)
3) What technologies have you tried and found to waste time rather than improve the job?
4) What's your take on design modelling (UML....)?
5) Unit testing? and code coverage?
Posted by: Mike Gale | Sunday, February 13, 2005 at 02:52 PM
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.
Posted by: Nick Bradbury | Sunday, February 13, 2005 at 08:44 PM
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 :)
Posted by: Kim Pedersen | Tuesday, February 15, 2005 at 04:56 AM
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?
Posted by: Lee CLontz | Tuesday, February 15, 2005 at 09:48 PM
I always thought it was interesting how other developers customised their environment.
Looks like you are pretty happy with the vanilla setup.
I've posted a couple of pictures of mine (very different to yours!).
http://jedqc.blogspot.com/
Posted by: Jeremy | Wednesday, February 16, 2005 at 11:11 AM
Lee: Any chance of showing us some of the design documents and initial thoughts and ideas that eventually became FeedDemon?
Nick: Hmmm...that's a good idea, but I'd have to make some pretty serious edits. I tend to be pretty harsh about the failings of competitors when I'm writing my specs :)
Posted by: Nick Bradbury | Wednesday, February 16, 2005 at 04:16 PM
Nick,
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.
Posted by: Terry McGinty | Friday, February 18, 2005 at 01:10 PM