Download Size Still Matters

Is it just me, or has the size of downloadable software ballooned ridiculously over the past few years?

Call me old school, but this bothers me.  It’s like some developers assume their software is so damn good that it’s okay if it takes a long time for you to download it.  Their software is so fantastic that it deserves to occupy a ton of space on your hard drive.

Yes, I know, hard drive space is cheap, and high-speed internet is supposedly everywhere these days.  But that’s not the point. 

The point is this: if you’re a desktop developer, then your software has to compete with web applications.  You know, those applications that you run by simply typing a URL into the address bar?

Can you imagine typing www.google.com into your address bar and then waiting for a couple hundred megabytes to download before you could use it?  Can you imagine visiting a web site that required you to reboot your computer?  Or one that required you to install a ton of updates before you could visit it?  How popular do you think these sites would be?

If you’re a desktop developer, don’t make the mistake of thinking your software only competes against other bloated desktop applications.  It also has to compete with web applications that don’t require downloading anything

The days when you could get away with a 100+MB download just to try out your software are long gone.  You want to stay competitive?  Shrink your download and streamline your install.  Make the download so miniscule that trying it out is a no-brainer. 

PS: The latest FeedDemon 3.0 beta is a 3.4MB download :)

Anti-Virus Software Hates Us


One of the things I despise about Windows is how much time developers have to spend working around problems in third-party firewall and anti-virus software.


Case in point: I’m seeing quite a few error reports about the new FeedDemon 3.0 beta that are caused by AV software locking files that FeedDemon is trying to access.  Many AV programs monitor the file system for changed files, and when they find one, they scan it for viruses – temporarily locking it in the process.  This has always been a problem, but it’s now an even bigger problem since FeedDemon stores your feed content in a single SQLite database file.  Every time that database file changes, your AV software scans it to make sure it’s not infected.


In some cases this causes file permission errors when FeedDemon tries to access its database, but more often than not it simply slows FeedDemon down since it has to wait for the file lock to be released.


Most people report that the new FeedDemon is a lot faster than previous versions, so if you’re finding it slower, chances are your AV software is the culprit.


The good news is that you can probably stop this from happening.  FeedDemon’s database uses the file extension .FDB, so if your AV software has an “exclusions” list, try adding the file extension .FDB to it.  If you can’t do that, see if you can add FeedDemon’s cache folder (File | Manage Cache) to its list of excluded folders.  Several customers who have done this have reported dramatic speed increases.


Of course, I can’t expect every FeedDemon customer to do this, so I’m looking into ways to work around these issues.  But in the meantime, give it a shot, and reply here if it makes a difference.

It Sucks to Throw Away New Code

Earlier this year I wrote about the joy of throwing away your code.  It’s true – as a rule, programmers generally love getting rid of old code.  But I discovered a corollary to that rule: it sucks to throw away code that you just wrote.

I know because I had to throw away a ton of code I wrote last week.

You know that upcoming FeedDemon feature I wrote about in my last post, the one which shows where a shortened URL will take you?  Well, in my first design, it didn’t display a balloon tip with the long URL.  Instead, when you clicked a short URL, it took you to a separate preview page that looked like this (click to enlarge):

I spent a few days coding this, but when I sat back and looked at it, I wasn’t wild about how you had to click a short URL to know where it would take you – it seemed like an unnecessary step.  I decided it would be better to show the long URL as you hovered over a short URL, which meant getting rid of the preview page and adding the balloon tips.

I almost didn’t make the change since the idea of throwing away hundreds of lines of freshly-painted code was too painful, but in the end I convinced myself that making the feature more usable was more important than saving my fragile programmer ego.

Perhaps that’s a lesson for other programmers, too?  I’m sure there are countless features in other applications that could be greatly improved, but most developers can’t bear the idea of throwing out recent code (besides, we like to show off by adding new features, not rewriting existing ones).  But you know what?  I’d pay to upgrade several applications I use if the new versions simplified existing features without adding any new ones.

Smart Software Should Get Out of Your Way

I shudder when I hear about how software needs to be “smart.”  It’s not because I think today’s software is smart enough already (it’s not), but because all too often “smart” translates to “intensely annoying.”

If you believe the tech pundits, “smart” software should predict what we’ll do so it can perform the next action faster.  “Smart” software should automatically correct our mistakes.  And “smart” software should adjust its user interface based on the features we’ve used in the past.

Sounds nice enough, but I’ve rarely seen software do these things without causing even more frustration than it attempts to solve.  It ends up being less like a helpful coworker and more like that annoying braniac every office is plagued with who constantly interrupts you with advice on working smarter by doing things his way. 

We all know that guy – he’s textbook smart but socially inept.  Which is a good description of much of today’s software.

In the semi-perfect world I keep in my head, “smart software” is software that gets the hell out of my way.  It doesn’t try to guess what I’m going to do next, doesn’t constantly offer me “helpful” tips, and doesn’t move things around on me in an attempt to suit my needs.  And above all, it doesn’t try to predict what I’m going to do, because that only makes the software less predictable.

(Side rant: smart software also doesn’t give me any “tips of the day,” and unless shutting down the application will cause a widespread power outage, it should never ask whether I “really want to exit” when I try to close it.)

Truly smart software shows me some respect by letting me tackle the task at hand with minimal interruption.  Instead of confronting me with a myriad of settings and customization options that I’m unlikely to need, it helps me focus by giving me less choices and fewer reasons to have to make those choices in the first place.

So far, my iPhone gets the overall prize for being smartly designed.  Yeah, it’s got some annoyances (please, give me cut/copy/paste!), but it’s so damn simple to use that I rarely have to think about what I’m doing.  The iPhone also made me see tons of flaws in the software I’ve created – the biggest being that I’ve tried to please power users by making too many non-essential details configurable, and doing so in a way that intimidates new users.  I mistook complexity for power, and that wasn’t smart.

The Increasing Importance of Discoverability

It’s incredibly easy to try out new applications these days  – especially web-based ones since they don’t even need to be installed.  And the more applications that people try, the more important that discoverability becomes.

People who try out an application don’t want to spend any time learning it.  They want to get started with it now, see what it does now, and cast it aside now if it doesn’t fulfill their needs.  If they can’t discover the features they need right away, they’ll look elsewhere.  It’s not like it’s a huge investment of their time to Google for your competition.

Read the help file?  Are you kidding?  Nobody reads the help file these days.  If someone can’t figure out your application by simply using it, you’re screwed if you think you can rely on your help file to explain it to them.  Customers would rather try out your competition than read your documentation.

If you want to grab potential customers, you’ve got to make your most important features easily discoverable so that new users won’t miss them.  Your next trick is to do that without creating a level of toolbutton overload that would intimidate those same new users.  And you’ve also got to avoid annoying experienced users by constantly getting in their face with all your wonderful discoverability.

It’s a tightrope walk, for sure, but I’m happy to walk it.  When compared to software written a decade ago, today’s software is generally more usable, and I believe that’s due in part to the fact that discoverability has become more important.  Out of necessity, many developers are making it easier to start using their software, and more often than not, I’ve found that this also makes their software easier for experienced users as well.

Yes, most programs – including my own – are still too complicated, too fragile, and too unfriendly, but in general software is slowly getting better, don’t you think?

Favicon Hell: Small Feature, Big Code

A couple years ago, FeedDemon started displaying favicons – you know, those little 16×16 icons that web sites use to brand themselves.  It was a popular addition, because it’s much easier to tell your feeds apart when they don’t all use the same generic feed icon.

It seemed like such a simple feature at the time.  Just check the root folder of the feed’s homepage for the favicon, download it if it exists, then display it in FeedDemon.  No big deal, right?

Bah.

The first problem was web sites that lied when I requested the favicon.  They’d use the wrong MIME type, so I couldn’t rely on that to determine if I was actually getting an image.  And all too often they’d indicate that the favicon existed by responding with an HTTP 200, but instead of returning a favicon they’d give me an HTML document that contained a 404 error message.  So that meant writing code to handle that situation.

The next problem was the sheer number of favicons that used the ICO file extension but turned out to be bitmaps.  Or GIFs.  Or PNGs.  Or JPEGs.  Or some undiscoverable format.  Which meant writing code to detect the true image format, and more code to convert them to Windows icons (something I didn’t get right until last week’s FeedDemon 2.8 Beta 3).

Then came the fact that not all versions of the Windows API play nice with truecolor icons, and the version of the development tool I’m using doesn’t handle them well, either.  More code to handle that situation and fail gracefully. 

And, of course, I had to reflect changes to a site’s favicon, as well as detect when a site that didn’t previously have a favicon suddenly got one.  And this had to be done in a way that was bandwidth-friendly, both to the client and the server (not as simple as it sounds given that many sites don’t correctly return an HTTP 304 when a file hasn’t been modified).

Oh, and I also had to scale the 48×48 and 64×64 favicons that some web sites inexplicably use.  Not to mention the fact that ill-mannered anti-virus software would sometimes lock the downloaded favicon file right after I created it, resulting in a “file in use” error which I had to capture and work around.

Etcetera, etcetera, etcetera.

The end result is that it took thousands of lines of code just to display favicons.  And that’s often the case with features that seem simple at first glance.  It’s not until you dive into the code and find all the weird problems and bugs that you realize your little feature is actually a big PITA.

So what’s the point of this seemingly pointless blog post?  Really, it’s just to explain my response to customers who ask when I’ll be adding a specific feature:

“I’m planning to add that to the next version, but I can’t promise anything until I’ve actually started coding it.”

I know that response sounds glib to those who hear it, but it’s really me being honest.  If I haven’t tackled a feature in code yet, then there’s no way I can reliably estimate how long it will take to complete it.

Related post: Start Coding Like a Cowboy

The Value of Automated Error Reporting

The past few releases of FeedDemon have an included an error reporting feature which captures unexpected problems and sends us detailed reports on what went wrong.  If you’ve never seen this feature in action (and I hope you haven’t), it looks like this:

 

I’ve been going over the past few months of error reports, and much to my surprise, I discovered that the top three most common problems were never reported in our support forums.  If I didn’t add error-reporting to FeedDemon, it’s possible that I’d never have known about these bugs – so if you’re a software developer and you don’t have a similar feature, perhaps that will convince you to add one!

The downside to having an error reporting feature is the dismay you’ll feel if you discover – as I did – that a huge number of problems aren’t your fault, but are instead caused by third-party software (especially anti-virus programs, buggy graphics drivers, and flaky web browsers).   These are the most frustrating bugs because your code isn’t wrong, and you can only hack together a workaround rather than truly fix them.

Anyway…thanks to the error reporting feature, I’ve identified and fixed the top 10 most reported errors.  All of these fixes are included in FeedDemon 2.8 Beta 2, which was released today.

The Great ToolButton Slaughter

Looking back at early versions of FeedDemon, it’s obvious that I was raised in the Microsoft Office school of user-interface design.  Namely, fill your application with toolbuttons, the majority of which most people will never use.  Here, for example, is what the toolbars in the first version of FeedDemon looked like:

What on Earth was I thinking?  There were so many toolbuttons showing that I had to stack toolbars on top of each other to fit them all.  At the time I thought I was giving customers the features they wanted, but what I was really doing was scaring people away by overwhelming them with far too many choices.

Each version since then has been an exercise in killing toolbuttons.  By the time FeedDemon 2.0 rolled around, the toolbars were starting to look more sensible:

Much better, but really, the only toolbuttons that need to be showing all the time are the ones that most people will use all the time.  The other ones can be moved to menus and keyboard shortcuts, where they’re out of the way yet still accessible.

With that in mind, I’ve pared back the toolbars yet again in the upcoming FeedDemon 2.8:

As was the case with the sharing feature I discussed in my previous post, I should’ve taken a simpler approach with FeedDemon’s toolbars from the start.  I’ve learned the hard way that simplifying what you’ve already released is a lot harder than designing something simple to start with (especially since changing what existing customers have become used to is a sure way to annoy them).

PS: Power users who relied on previously available toolbuttons can always add them back – just click the “Customize” arrow at the far right of the toolbar.

Really Simple Sharing

It’s a common complaint of software developers: their customers keep asking for features that already exist.  That’s happened to me more times than I can count, and it used to frustrate me – until I realized I was the problem.  I had designed those features so poorly, or buried them so thoroughly, that they weren’t being noticed.

I bring this up because I keep seeing comments from people saying they’d like to use FeedDemon, but they really need a “sharing” feature like the one Google Reader has.  Or I’ll read a review of FeedDemon that says the lack of a sharing feature is a strike against it.  Which bothers me to no end since FeedDemon has had sharing for quite some time (and NewsGator Online has had it even longer).

The reason so many people miss FeedDemon’s sharing feature isn’t due to “user error,” of course, but because I made it too geeky and too hard to find.  In order to share an article in the current version of FeedDemon, you have to copy it to a “clippings folder” that has an RSS feed – and as you can see, it’s far from obvious how to do this:

  1. Create a clippings folder
  2. Choose to share it as an RSS feed
  3. Click an obscure icon under the article’s headline to display a menu of clippings folders
  4. Choose the clippings folder you want to copy the article to

Not exactly the simplest approach, huh?

So I decided to rectify this in the upcoming FeedDemon 2.8 by adding a single, obvious “Share” link – which is how I should’ve done it in the first place.

 

Simply click “Share,” and FeedDemon will copy the article to your shared clippings.  New users who don’t have any shared clippings (and probably don’t know what they are) can still use this feature, because it takes care of configuring everything without all the “geek speak” of the current version.

PS: I hope to release a public beta of FeedDemon 2.8 within the next 10 days.

Your Customers Have Enough Work to Do

If you haven’t had enough of a preview of FeedDemon’s upcoming tagging features, then check out this guest post I wrote for the NewsGator Widgets Blog.

“One of the more challenging tasks developers face — regardless of whether they develop desktop applications, web applications or even widgets — is designing a feature in a way that not only hides the technical details, but also respects the end user by not asking them to do too much work.”

I talk about how adding a feature requires thinking about the extra work you’d require of your customers if you don’t design it correctly, with FeedDemon’s tagging features used as examples.