One of the more frustrating challenges when designing a desktop application that connects to the Internet is figuring out how to deal with connectivity issues caused by firewalls, proxy servers and server outages. Firewalls can be particularly hard to deal with because:
- Almost everyone is using one
- It's hard to tell when your application is being blocked by a firewall
- Most firewalls are too techie for new users to configure
A common problem that we deal with is customers who upgrade to the latest version of FeedDemon, then contact support asking why the new version can't connect to the Internet. In virtually every case, the customer is using a firewall that permitted the previous version to connect, but it silently blocks the new version since the EXE has changed. We've seen this happen with several different software-based firewalls, and each time the solution has been to remove FeedDemon from the firewall's list of permitted applications so that it prompts the user whether to permit FeedDemon to connect the next time it's run.
And as we discovered last week, when your application relies on a server-side API, it has to be able to deal with the server being unavailable without significantly impacting the customer. This was something FeedDemon 2.0 failed to do, and I have to take the blame for this. Because of my poor design, synchronized feeds couldn't be updated while our server was down, and to make matters worse, FeedDemon kept displaying a "synchronization service unavailable" message every time it tried to connect - so not only could you not get new content, but you were also bombarded with error messages you could do nothing about.
Because of this experience, I've been working feverishly on changing how FeedDemon handles the rare situation that our server is down. I don't think I've ever shared a design document before, but since so many customers were (rightfully) unhappy with how FeedDemon dealt with last week's outage, I'd like to share the details of what steps are being taken to improve this situation in the next build of FeedDemon:
In a nutshell, FeedDemon will attempt to detect when a connection failure is due to a problem with our server, and when this happens it will provide a simple way to temporarily disable synchronization so that synchronized feeds are retrieved from their source rather than through NewsGator. This will make updating feeds quite a bit slower (since synched feeds can be updated much faster than non-synched feeds), but it does at least enable reading new content regardless of the state of our server. While synchronization is disabled, FeedDemon will cache items you read so that their read state can be synchronized with NewsGator once synchronization is re-enabled.
This design document - which is still in the draft stage - also covers how FeedDemon will better handle connectivity issues caused by firewalls and proxy servers.