Hospitals Are No Place for Sick People

Nine years ago, my father was diagnosed with Parkinson’s disease.  It’s a testament to his character that he used that diagnosis not as an excuse to retreat from the world, but instead as a reason to become more engaged with it.  Since then, he’s traveled the world and become very involved with Rotary International, through which he has helped establish children’s burn centers in Chile and AIDS clinics in Ethiopia.  He was honored for his work by being named Rotarian of the Year, an accomplishment that he’s very proud of.

Late last year he suffered heart trouble, which led to a substantial decline in his mobility and speech, to the point where he became wheelchair-bound and could no longer be involved in his many charitable activities.  Last month he opted to undergo deep brain stimulation (DBS), a surgical procedure that has had success in improving the lives of those who suffer from Parkinson’s.

Four hours into the surgery, we received word that it had been aborted.  Two hours later we found out that an intraventricular hemorrhage had occurred – a vein had been hit, leaking blood into my dad’s brain.  This was a potentially life-threatening situation, and even if my dad survived, there was a good chance that his brain would be permanently damaged.

The next two weeks were spent in the intensive care unit (ICU), during which time we experienced the incredible flaws in our medical system.  The doctor, despite being a well-respected surgeon, was an extremely poor communicator, and did very little to help our family understand what was going on and what needed to be done.  Rather than help us deal with the situation, he basically left it up to us to be in charge of communicating with the various staff involved in my dad’s recovery.

It is absurd that this situation exists.  A sane system would assign the equivalent of a case worker to manage all aspects of an ordeal like this on behalf of the patient and their family.  Instead, our family – already traumatized by seeing our father with tubes coming out of his brain, eyes rolled back into his head – was somehow expected to navigate the insurance-dictated (and ego-driven) landmine of our "modern" healthcare system with very little assistance.

Although on the whole the nurses were excellent, there were some whose bedside manner was non-existent.  More than once I had to force a new nurse to introduce themselves to my dad before poking and prodding him.  Worse, nurses changed on a daily basis – we always had to make sure that the "nurse of the day" understood my dad’s condition (often, they didn’t), and we had to watch over everyone to avoid the mistakes that plague our healthcare system.  We witnessed more examples of errors than I can recount here.  Incorrect dosages of important medicines, failure to deliver medicine when required, ignoring alarms on machines attached to my dad, neglecting to change my dad’s position (resulting in bed sores), bringing him solid food even though he couldn’t even drink liquids – you name it, and we probably saw it.

Soon after my dad became conscious, it was apparent that he was extremely confused, unsure of where he was or even which year he was living in.  He was hallucinating, seeing people, animals and strange objects around him.  One day he’d believe he was in Denver, CO, and the next he’d think he was in London.  Some days he’d think I was someone who worked with him years ago, and he’d ask me to help him finish a work-related proposal despite having retired several years ago.

As you can imagine, we were very worried that what he was experiencing was permanent.  The doctor said he was most likely suffering from ICU psychosis, which often accompanies extended stays in intensive care (which makes you wonder why hospitals don’t realize that any room that turns people psychotic needs some serious rethinking).  But he couldn’t rule out permanent brain damage.

To make matters worse, we later discovered that the doctor didn’t even take our concerns seriously.  Every time we met with the doctor – which, it must be said, was an all-too-infrequent event – we asked what could be done to ease my dad’s delusional behavior, but it wasn’t until he experienced my dad’s confusion himself a week later that he took any action to improve the situation.  Regardless of whether the surgical mistake was a result of negligence, I firmly believe that this doctor had a moral responsibility to help our family in any way he could, and he failed to live up to that responsibility in so many ways.

After two weeks in ICU, my dad was transferred to a non-critical care room.  At first we were delighted, because we assumed it meant that he was recovering.  But soon we were more worried than before, because my dad’s "psychosis" caused him to believe that he could still walk.  Despite his weakness, my dad’s willpower was enormous, and his upper body strength was impressive.  He struggled (and many times succeeded) to get his legs off the bed, and numerous times came close to lifting himself completely over the edge, yet the hospital staff consistently failed to respond to the bed alarm.  Had we not been there, there is no doubt in my mind that he would’ve fallen off the bed and seriously injured himself.

In fact, one day we stepped out to visit a rehab center for a couple hours, and returned to find him hanging sideways, with his upper body stuck in a painful position that made it harder to breathe.  His lunch was on a tray in front of him – and was cold.  He had been like that for at least 30 minutes (probably much longer), and nobody had checked on him despite the ringing bed alarm.

We had to stay with him every night to keep him safe, and every night was a sleepless exercise in explaining to him that he couldn’t walk yet, being careful to do so in a way that didn’t lead him to believe we were keeping him captive.  Ten minutes after he said he understood, he’d be at it again.  It was excruciating for both him and us.  After a week of this, and a week of complaining to the staff about it, the hospital finally told us they could assign a "sitter" to watch over him at night.  Had we known we could get a sitter before then, we could’ve saved ourselves a lot of needless suffering.

After a week of being out of ICU, my dad’s psychosis didn’t go away.  Not only was he still hallucinating, but at times he was also paranoid, believing that we had somehow created an exact replica of the hospital and imprisoned him in it to make him believe he was in a real hospital.  I was only able to convince him otherwise by reminding him of Occam’s razor, a scientific principle which basically says that when a situation has multiple answers, the simplest one is usually correct.  The simplest answer in this situation was that he was actually in the hospital, and was suffering from post-op confusion that led him to believe otherwise.  My dad had spent over forty years in the in the nuclear power industry, both as an engineer and as a manager, so appealing to his sense of reason provided the best results in many similar situations.

The doctor still believed that ICU psychosis was to blame for his behavior, but we were increasingly convinced that it was the result of his changing my dad’s medication, especially his dosage of REQUIP
, which is commonly prescribed to Parkinson’s patients and is known to cause delusions.  Once the dosage was significantly reduced, my dad’s behavior became much more predictable, and he stopped suffering from paranoia and hallucinations.  In my opinion, my dad’s doctor should’ve recognized this long before we offered it as a possible solution.

Earlier this week we moved my dad out of the hospital and into a rehabilitation center, which should’ve been a reason for joy but instead resulted in even more trouble.   To my shock, the ambulance that transferred him wasn’t air-conditioned, a terrible situation for a patient who was already dehydrated.  He spent the entire 90 minute trip perspiring like mad, strapped to a stretcher that made his bed sore excruciating.  When we arrived, we found that the hospital hadn’t provided the rehab center the correct information about his meds, resulting in him not receiving important medicine for an entire night.

As a write this, it is now my dad’s second day in rehab, and I’m happy to report that things are going well so far.  We chose a rehab center that’s surrounded by trees and natural beauty, a welcome change from the four walls of an impersonal hospital room.  I took him on a tour of the outdoors in his wheelchair, and you could almost feel the improvement in his well-being.  Honestly, I don’t know yet whether to be hopeful, because he’s suffering from so many different issues, and we know he will remain permanently changed by this failed surgery.  But his inner strength has pulled him through seemingly insurmountable situations before, and we want to count on it pulling him through this one.

I could end this post here, but instead I want to say how absolutely disgusted I am with our healthcare system.  Far too many times I had to shout at people to get them to act.  I witnessed far too many mistakes – many of which I haven’t mentioned here – and encountered far too many uncompassionate people to ever believe that our medical system is working.  

Numerous friends I’ve spoken with have recounted similar horror stories, as I’m sure many readers here will, too.  My father is a wealthy, well-connected, fully-insured, brilliant man, and this all took place at what is supposed to be one of the best hospitals in the country.  If the healthcare system failed him, it will fail the rest of us, too.

Software Should Go the Extra Mile

Rick Segal believes that the "panic button" makes FeedDemon sticky:

"By putting this feature into the service, it can potentially prevent me from getting frustrated via the overwhelming inbound amount of reading to do which might cause me to throw up my hands, uninstall it and try something else."

Although I wouldn’t say that my primary goal when adding this feature was to keep people from trying another feed reader, Rick is correct that easing frustration will keep customers loyal to your application.  Software developers tend to focus on features when talking about their apps, but keeping customers happy requires more than just features – you also have to prove that you’ll go the extra mile to tackle the things that frustrate them.

In the case of an RSS reader, one of the most frustrating things for customers (at least, those who have subscribed to more than a handful of feeds) is the feeling of overwhelm they experience when faced with hundreds of unread items.  FeedDemon’s "panic button" was designed to replace that frustration with a feeling of relief.  I often see people Twitter about the panic button and express relief that it offered to help ease their overwhelm.

There are a number of other features like that it in FeedDemon, most of which you’ll never run into – but you’ll be glad when you do.  For example, when you start FeedDemon, it checks whether another instance is already running, and if so, it switches to that instance so you’re not confused by multiple copies.  That’s a common feature these days, but FeedDemon goes the extra mile to detect whether the other instance is frozen, and if it is, it offers to shut it down.  Few people will see that feature, but frozen applications aren’t uncommon on Windows (I see it with Outlook and Firefox all the time), and non-technical customers often have no idea how to deal with that situation.  So FeedDemon deals with it for them.

When I’m using an application that surprises me by going the extra mile to help me, my loyalty to that application increases.  I may be tempted by the shiny new features in a competing product, but I’m unlikely to switch because the application I’m already using has earned my trust by proving that it has my best interests in mind.  And trust is far more important than mere features.

Share Any Web Page with FeedDemon

FeedDemon’s shared clippings enable you to easily share your favorite items from feeds you’re subscribed to, but what do you do if you want to share an article that’s not in one of your feeds?  For example, how do you share an interesting article that you stumbled across while browsing the Web?

Luckily, FeedDemon enables you to share any article, regardless of whether you’re subscribed to the feed which contains that article.  I use this feature all the time to add external web pages to my shared items feed.

To share a web page that you’re viewing inside of FeedDemon, simply drag-and-drop the browser tab into the desired clippings folder, or click the "Favorites" toolbutton above the browser and select "Add to Clippings Folder." 

You can also drag-and-drop hyperlinks from any web page you’re viewing in FeedDemon into a clippings folder.  Even better, you can drag-and-drop hyperlinks from Internet Explorer or Firefox into a FeedDemon clippings folder – so you can share a web page even if you’re not viewing it in FeedDemon.

Extending FeedDemon: Creating "Search Definitions"

Last week’s posts which provided FeedDemon "search definitions" for FriendFeed and Tweet Scan were fairly well-received, so I figured it would be worthwhile describing how search definitions work.

If you open FeedDemon’s Data\Search\ subfolder in Windows Explorer you’ll find several FDSRCH2 files, each of which defines a separate search engine. 

 

The FDSRCH2 format is based on OpenSearch, which is the same XML format used by recent versions of Internet Explorer and Firefox for their search definitions.  Here’s the FDSRCH2 file for Google Blog search:

<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
    <ShortName>Google Blog</ShortName>
    <Url type="application/rss+xml" template="http://blogsearch.google.com/blogsearch_feeds?q={searchTerms}&amp;num=10&amp;output=rss"/>
    <Url type="text/html" template="http://blogsearch.google.com/blogsearch?q={searchTerms}"/>
</OpenSearchDescription>

The ShortName element is simply the name that FeedDemon should display for the search engine.  The Url element defines the actual search interface, and contains two attributes:

  1. type: determines whether the search results are provided as an RSS feed or an HTML page
  2. template: the URL to use to retrieve the search results

If the search results are provided as an RSS feed, then type should be set to "application/rss+xml."  This tells FeedDemon to add the search engine to the keyword search page of the subscription wizard, as shown below: 

If the search results are provided as an HTML page, then type should be "text/html," which tells FeedDemon to add the search engine to its list of web search providers.  The current search provider – which is the search engine FeedDemon uses when you type a keyword rather than a URL into the address bar – can be changed by clicking the down arrow to the right of the search toolbutton:

Note that you may include two URL elements in the same FDSRCH2 file for search engines which provide both RSS and HTML results (such as the Google Blog example above).

The template attribute is the URL for the RSS feed or HTML page containing the search results.  FeedDemon replaces the {searchTerms} section of this URL with the actual keyword(s) you enter.

Related: Extending FeedDemon: Customize the "Send To" Menu

FriendFeed Search in FeedDemon

In the comments to yesterday’s post about Tweet Scan, Amit Agarwal suggested using FriendFeed to track product mentions and other interesting discussions.

So I created a FriendFeed "search definition" for FeedDemon to simplify subscribing to FriendFeed searches.  Here’s how to use it:

  1. View this page in FeedDemon, then click here to install the FriendFeed search definition
  2. Click the Subscribe button, then type the keyword you wish to search for and click Next
  3. Select "FriendFeed" from the list of search engines and click Next
  4. Select the folder you want to place this feed in, then click Next
  5. Click Finish

Tweet Scan: Twitter Search in FeedDemon

Twitter doesn’t have its own full-text search feature, but luckily there are third parties meeting this need.  Tweet Scan is the one I use – it’s a great way to find out when someone tweets about FeedDemon or TopStyle, especially since I can get the search results as an RSS feed.

FeedDemon customers can simplify the process of subscribing to Tweet Scan feeds by following these steps:

  1. View this page in FeedDemon, then click here to install the Tweet Scan search definition
  2. Click the Subscribe button, then type the keyword you wish to search for and click Next
  3. Select "Tweet Scan (Twitter Search)" from the list of search engines and click Next
  4. Select the folder you want to place this feed in, then click Next
  5. Click Finish

You’re now subscribed to an RSS feed which will bring you Twitter posts containing your keyword.

Tip: Use the OR operator to search for multiple keywords (ex: "google OR microsoft").

Throwing Away Your Code

Every programmer has faced this situation: you have to throw away code that you previously sweated over.  For whatever reason, you no longer need it, so you have to remove it from your program.

I enjoy this because it feels like I’m cleaning up my application.  I like to pretend that the old code I’m getting rid of is low quality crap that I’d never write these days.

But I wouldn’t say it’s easy.  It’s like trying to part with all those old mementos in your closet that you kept because they used to mean something to you.  It’s nice to have a clean closet, but as you’re throwing stuff out, you can’t help but remember how important it used to be.  In the case of software, you remember how much time you spent writing the code that you’re now putting out to pasture.

I faced this situation earlier this week.  A customer reported that FeedDemon was seriously spiking his CPU when updating feeds, and when I tracked the problem down, it turned out that the spinning animation shown in the subscription tree was the culprit.

So in the latest FeedDemon 2.6.1 beta, I threw the animation code away.  And it was a lot of code – you’d think adding simple animation to a treeview would be no big deal, but getting it to look decent required a ton of little hacks that added up to some significant coding time.  I loved getting rid of all those little hacks, but I sure wish I could get back the time I spent writing them.

As an aside, people often think that developers spend most of their time on big, shiny new features, but the reality is that we spend far more time on tiny details like getting a stupid little animation to look smooth.  When you see software which shows great attention to detail, keep in mind that some poor sleep-deprived geek spent weeks refining those details, even though they’d rather be playing Rock Band.

ANN: FeedDemon 2.6.1 Beta 2

The first beta of FeedDemon 2.6.1 was kept fairly quiet, but I’m done keeping quiet now that beta 2 is out :)

Version 2.6.1 is primarily a bugfix release, but it also contains some nice improvements:

  • "Find Feeds" now enables subscribing to multiple feeds at once
  • Clippings folders that have an RSS feed now have an RSS icon overlaid on them
  • Lots of optimizations, especially with the embedded browser, favicons and synchronization

The biggest change in this release is that I’ve switched to SQLite for storing popular topics and feed history data.  This change should have little impact on regular usage – it’s really just a first step towards moving all data (including your subscriptions) to SQLite in a future version (v3.0, most likely).

Download details and release notes can be found on the FeedDemon Beta Site.  As always, simply install this pre-release directly on top of your existing version – there’s no need to uninstall first.

SQL Virgin Again

I’ve been in the coding dungeon lately, which explains why I haven’t posted for a while.  One of the things I’m working on is moving some of FeedDemon’s data out of XML and into SQLite, which I didn’t think would be a big deal since I spent a few years working with SQL before I entered the world of indie development.  I wouldn’t claim that I was ever a SQL guru, but I used to be pretty good at it.

It turns out, though, that I’ve forgotten SQL since then.  And I don’t mean that I’m just rusty at it: I mean it’s like a foreign language to me now.  Sure, I can throw together a simple SELECT statement, but I’ve completely forgotten the syntax for GROUP BY, HAVING, and pretty much everything else.  So rather than tackling the move to SQLite with ease, instead I’ve been stumbling through it like a drunk bishop trying to remember where he left his hat.

Anyway…

So far I’m liking SQLite a lot.  It’s fast, compact, simple and – most importantly – reliable.  For now I’m only converting a few features to use SQLite for storage (specifically, the "Popular Topics" and "Feed History" reports), since that way I can get an idea of the potential pitfalls before trusting it with more valuable data (such as the customer’s subscriptions).  The end goal is to enable easily querying downloaded content without the substantial performance hit and overhead of an XML parser.

BTW, if you consider yourself a SQLite wizard, please feel free to share any tips here.  I’m sure I could use them at this point!