12 years of blogging .. about medicine, technology and their intersection …

This post from November 26th, 1999 – was the first on this blog.  There were a few months of previous posts, but due to several platform changes back then – these seem to be lost.  

No matter.  12 years is a long time.  My blog is now officially an adolescent.  I wonder what it will be when it grows up!  Long-time readers are of course observant that I've been remarkably quiet for the past few years.  This is due to my evolving work for an HIT vendor and now the Federal Government.  

So I've been operating with this in the background for the past six years:

The opinions expressed on this blog are my own and do not represent the veiws of my employer.

And there is a rough "social media policy" (google docs – you have edit rights .. feel free to steal or enhance … ) that I have in my head as well .. so in general I have done my best to observe and occasionally point to important publicly available information, but take care not to comment too deeply – for fear that others would interpret my commentary as a telegraph of my employer's next steps.  This wouldn't be appropriate for me to share – and increasingly – I am concerned that most of my public thoughts could be interpreted in this way – so I've been holding back from any public commentary.

So for now – here we are. 

I'll push the envelope a teensy bit and comment on some events of the past few months:

Tim HISTalk covered my arrival at ONC in a post about a month ago.    He asked the right questions about the topic at hand – but he didn't get to the one that I am hearing often these days – which is .. "Why did you leave your leadership role at one of the top health IT companies, choose to spend weekdays away from your family, AND (with two kids in college) take a giant pay cut?"  

The answer is easy:   It's the right thing to do.  

Health Care in the United States  is at a turning point.  It is well known that despite great advances – we don't provide the quality of care that we would.   It is also self-evident (to me) that technology – carefully applied – will improve both the quality of care – and the efficiency, sensitivity, and ease with which it is delivered.  Yes – some of those words may not be familiar to you – but why WOULDN'T we want it to be EASY to deliver great care?  Why shouldn't we deliver SENSITIVE care (sensitive to your hopes, religion, fears, preferences) – in addition to efficient, evidence-based and (of course) cost effective) care?

 So I have always tried to focus my work on helping others meet their true potential.   In my first career – as a 16 year old sailing teacher, I helped kids find the freedom and autonomy that a good breeze and a sunfish will provide.   As a teacher of junior high school kids – I witnessed breathtaking intellectual growth in a herd of 12 year olds who were otherwise distracted by adolescence and its daily challenges.  Working with (some say "caring for") patients as a family physician - I found that my most important work was not to take control and "fix" my patients (as some of my mentors had advised in medical school) but to partner with my patients – serving as a resource – without any judgment or critique.  As Bill Miller and James Prochaska have demonstrated (motivational interviewing, transtheoretical model) – people change when they choose to – and no sooner.  Can we facilitate growth in others?  Of course we can.  But "facilitate" and "cause" are inherently different.

As a leader in a large health IT software company – my role was often to help our teams align the software products we were producing with the needs of our customers.  This is not unlike the role of a good physician:  we need to listen carefully and critically so that we understand the needs (which will sometimes differ from the "wants") so that we can facilitate success.

And isn't that the role of government too?   Perhaps that's a political question.  Some would argue that government should get out of the way, while others would argue that there is an important role for government to provide an infrastructure with which success can be facilitated.  Is a healthy happy nation something that is important?  Are there ways that government can facilitate a migration toward these goals? 

I think so.  Keep an eye on my occasional tweets , g+ posts (rss), and posts here on this blog.  It will continue to be sparse here on the blog. 

Sammy Starts a Business …

With some help from Nikita – the offshore development leader, Sam is on the edge of releasing his first website.  While it's not likely to cause him to be the next Sergey Brin – he hopes to make a little bit of money – and provide a valuable service.  Details to follow in a few days when version 0.5 goes live …

Sam needed to create an LLC.  When we created Oncalls.com about a decade ago – we did a quick google search (maybe it was Altavista back then!) and chose a company that could "take care of creating a company for you" for a low-low price.

But the low-low price we paid got us stuff we didn't really need (a special seal, a binder with 10 pages in it, an annual fee for a Registered Agent, etc.

So this time – we used UpstartLegal.   They do what you need (help fill out the forms and file them with your State and with the IRS – and don't do what you don't need.  Most of the companies that you find on the Internet will charge you more for filing with your state – and they generally include registered agent fees.  But if you create your LLC in your home state – you don't need a registered agent.  So even though they may have a low-low price of $99 – when it all comes together – you'll end up paying much more than that .. and more every year thereafter.

The UpstartLegal team is smart, honest and very clear.  It's a nice service that made this part of Sam's new endeavor completely painless and worry-free.  Well done. 

Agile Development

The Agile Manifesto seems like ancient history now.  The concepts of iterative development were not new – but they hadn't been marketed until the manifesto was published and the movement was unleashed.

In  late 1999 or early 2000 I can remember sitting in a meeting room with the Assistant CIO of a large healthcare organization .. describing my preference for using what I then called an iterative development process – where we would define "bite-sized parts" for implementation, exposure, and refinement on a regular basis. 

She had never heard of such a thing – and advocated for the developers on the team: 

"They need to know when it's finished!" 

Me:  "This is software – it's never finished"

"But the customer needs to sign off on a completed project.  How can we know that it will meet the customer need?"

"uuuh … ask them?"

"We ask them during the requirements process – when they define the project"

"And that is successful?  They are always happy with the final product?"

"Well – no – but if they didn't describe their needs appropriately – that isn't our concern.  So long as they have signed off on the spec before the development work begins – we have clarity for the what the requrements are – and if we build it to spec – we've completed the project and we can move on."

..

I stopped trying.  Clearly the goal here was to complete the project "to spec" and move on to the next project. 

There was a problem though – developers were bypassing standard process – and interacting directly with customers (with no management oversight) and were creating solutions collaboratively with customers.

So the Ass(istant) CIO wanted to give the developers a sense of closure .. but the developers wanted to please the customers – and bypassed their managers to do so!

Trouble in them thar hills, too.  With no Human Factors training – and minimal design skill – developers all-too-often gave the customers what they asked for rather than what they needed.  End result: ACIO came down hard on such "renegade" developers.

This reinforced the waterfall mentality.  🙁

Writely Invites, Google Calendar SMS tricks

I noticed that Writely has just increased the number of invitations that current users have available. I'm curious. If you have one availabe .. please send me one (if you have my e-mail address) .. or if you don't have my e-mail address, you can use this form to send me a note and I'll reply with my e-mail address.

And Bruce sent me a link to this post about how to interact with google calendar via SMS. It works!

RFC3219 – for nerds only

The IANA RFC3219 listing shows who the real early adopters are in the SIP namespace.  Dorks who really want to call me will be able to dial my extension (yeh – right – like I'm going to publish that on the weblog!) at phonehost.slingerlands.com.  (No .. it's not really "phonehost" either)

See the ISN cookbook for more on this and how to get your own.

 

 

VOIP, SwitchVox, SSL

We are getting very close to the day that we go live with our new phone system at the office.  Still a few bugs to work through .. but I've had enough random requests for the status – ever since I posted my review of SwitchVox that I do owe a bit of an update.

Here goes

The software is good, and we've been getting help from the tech support staff at FourLoop throughout.  There remain some wrinkles here and there, but updates seem to be coming at a pretty good clip – so I expect things will continue to improve.  

What sort of rough edges?  Well – the features of the software have come along well since the publication of the manual in June – and the help system that is embedded in the software is good.  But the documentation hasn't kept up with the features of the product – and this is sometime frustrating. It takes a while to "get" the best method for creating a really good IVR – and I wish that there were examples of more complex IVRs in the documentation – especially how to use the "option" functions.  Here's how (I think) it works:  Create an IVR.  Have step 1 be "play a sound" such as:  "choose 1 for eggs and 2 for peanut butter."   Now choose "options" and tell SV where to go when the user chooses Option 1 or Option 2:

Yes – it really is easy-as-pie.  And I THINK this is the way I'm supposed to do it .. but nothing in the documentation leads me there.  Some of this makes perfect sense and is very powerful-yet-simple (an awfully challenging combination to create) but the simplicity gets the upper hand in some places of the IVR – especially where it comes to the handling of options – and the handling of conditional clauses.

Having "options" stuck at the bottom of an IVR means that they HAVE to be the last thing that a user encounters.   While it's possible to develop a complex IVR that sends the user right to the end .. and then based on the option chosen – back up to a step above – this gets confusing quickly.  It would be much more intuitive to have the "options" behave like any other IVR action – since they are really just a "case" statement.  

And speaking of logic – the conditional clause is GREAT .. except it's only part of what I'd expect to see in a conditional clause.  I want ELSE and OR and AND and ELSEIF.

Ok.. enough complaining.

Josh and his team built something that I LOVE – and it's easy to use too.  It's a URL that I can put into web applications that causes the system to do something.

Here's the documentation for how it works:

 

What is the Call API?
The Call API provides a web interface for originating calls through the PBX. This is often called click-to-dial, and is done by requesting a specially fomulated url from the pbx.

How does it work?
Below is an example URL and a description of its functionality.

Originating a call Example URL:
https://IP.OF.PBX/api?cmd=call&extension=104&number=918005551212
cmd=call Tells the PBX this command is a call origination command
extension=104 What extension to ring on the PBX system
number=18005551212
When the call is answered by the extension this will be the number it will try to ring

How do my Call API Settings effect the call API?
The Call API settings allow the pbx to modify requested phone numbers so that they correctly match what the system expects. For example, if you request that the API dial 8005551212, the Call API Settings will add a 9 and a 1 to make the number 918005551212, which will then be dialed by your phone.

 
 
 
So if I have a link on a web page of our mini-EMR with a picture of a phone .. and it links to the pbx and tells it to call 5551212 from extension 500 .. then it calls 5551212 AND rings x 500 at the same time. So from the patient's chart – I can click to call the patient instead of dialing.
 
Yeh – you've heard of "click-to-dial" and you are not so excited?  maybe the fingers need a little exercise?
 
Ok .. but … say you need to call 1000 people over 4 days and let them know you have flu shots available and they can choose any of three saturday mornings to come in and get one.  How can you use the API to do THIS – you say?
 
Easy-as-pie:
 
Build a little application (I use coldfusion but you could use anything you like) .. and do the following:
 
  1. Build an IVR that plays a sound:  "Hi – you need a flu shot. If you want one – listen carefully.  You can come in and get one on any of the following days …  Press 1 for November 63rd, press 2 for October 34th and press 3 for December 44th. If you are hearing this message on your answering machine, you may call us back with your choice by calling 111-1111"
    1. Since the IVR will know who is called – it will send the result back to the application with:
      1. Name of person
      2. Date they chose
      3. (or that nothing was chosen – so maybe we got the answering machine .. which is fine.  We'll set up a temporary route on a DID so that when people call back they will get right to the IVR.  No waiting for a human.
  2. Query the database for the people you need to call and their phone numbers
  3. Loop through the query and send the phone numbers to the phone system every 40 seconds or so (evenings .. so we don't clog up the phones during the day).
  4. In the morning – run a report from the application to see who was called – who responded (and how) and how many people we need to schedule for the flu clinic on Saturday.
This works fine and I tested both the IVR and the Coldfusion and it seemed like they would work well – but I didn't (until tonight) try to tie them together.
 
When I did I got a mean error that Coldfusion couldn't connect to the PBX and all I got was a cryptic connection error.
 
So I had to do a little research and finally figured out that I had several problems.
 
  1. Fourloop build SwitchVox to use SSL when you are logged in as the administrator.
  2. To use the call API – you need to use SSL
  3. The SSL certificate is self-signed which is fine since it's OUR server and I think I trust myself. 
    1. But that's a little annoying because the browser complains that it doesn't have that certificate and that the name of the certificate (pbx) isn't the same as the name of the server. 
    2. But it's not so bad because I can click on the little alert .. or take the 29 seconds to install the certificate on my computer.
  4. But Coldfusion can't click the little box so I will have to install the certificate on the coldfusion server to make it happy.  Steven Erat shows us here how to do that.  .. ok .. now that wasn't so hard.  (or was it?)
    1. But it still won't work.  See the comments on Steven's page.  Several people got through step 1 only to learn that step 2 still stopped it from working:  "I was wondering if you know of a workaround for CFHTTP when posting to https:// where the certificate name on the SSL does not match the host name.

      When attempting this, I receive an Error Detail of I/O Exception: Name in certificate `www.domainname.com' does not match host name `xx.xx.xx.xx'"

      Hmm .. looks like I have the same problem.

But I figured out the solution!  Since I know that the certificate is called "pbx" and I now have it installed on the application server (which in this case is the client – SwitchVox is the server) .. still follow? .. I make an entry in the "hosts" file of the application server called pbx and point it to the IP address of SwitchVox.

Now I run my test page and my cell phone rings (every 40 seconds!) and it tells me I need a flu shot and the browser window of the debugging test page says:

Explanation OK
Http_Version HTTP/1.1
Server Apache/2.0.48 (Fedora)
Status_Code 200

 Hooray!

So we have solved the problem of coldfusion having trouble with SSL and reporting a connection error: I/O Exception: Name in certificate.   First, Install the certificate on the Colfusion server.  Next,  make a "hosts" entry to fool cf into thinking that the name of the remote server is the same as the name in the certificate.

PBX for the Medical Office

Bruce gave me a hard time about the Switchvox review (yeh .. I’ll finish it) because there was no good introduction to exactly what the system is – and why I would want it.

 Here’s an intro paragraph:

Asterisk is an open-source phone system.  It replaces the Nortel or NEC or Siemens Or whatever system that you have in your office.

Why would you want to replace your current system?  Well .. because it’s old and hard to change settings and/or maybe it is just time to upgrage and you are shopping around.  In our case – it’s that the old system (a perfectly functional Nortel Meridian Sytem with Voicemail and ~10 extensions) didn’t do some thing that we wanted – and we’re tired of struggling with configuration changes that take either a long time to learn & memorize – or $90/hr to pay the local phone guys to come and help when we are over our heads.

Asterisk is great and has many features.  It does all of the things that your current phone system does .. like answer the phone .. route calls to extensions, manage voicemial, etc.  There are two things that make Asterisk different from most systems: 

  1. It usues VOIP
  2. It is free

The difference between a VOIP system and an analog system is that the voice is moved from the server to the phones over computer wires just like the signals from one computer to another.  Yes – it will work over WiFi too.  So of course the phones are not regular $9.99 phones you can pick up at Kmart .. they are actually little computers themselves – since they need to decode the bunches of data that represent the voice and make it into something that the person hears.  It all sounds like it would be too hard and too slow to do all of this encoding of data .. moving it and then decoding it .. but the technology has gotten pretty good.  Trust me – it works. Yes – you can even use the $9.99 phone from Kmart if you buy an ATA – which is a little adapter thing that costs about $60 and does the comptuer work for you.

Why would you want to use VOIP indtead of an analog system?  Using a computer to set-up the system and route the calls makes more sense than remembering (or reading) a bunch of codes and punching them into a telephone.  VOIP also means that the phones keep their setup information wherever they are.  So if you unplug the phone from the office and plug it back in at home (so long as you have an Internet connection) — the phone will work the same as it did at the office.  Dial a "local" extension for the person who was one office away and it will ring there just as if you had been back at work.

This makes it easy to have remote workers.  One of our nurses will be working from home to help us triage calls when we get too busy.  

Hardware and infrastructure needs.  To install a VOIP system – you really don’t need much.  Asterisk can run on an old PC with not-too much RAM.   The load on the server is proportional to the number of concurrent calls.  For home or small business – a reasonably capcable desktop PC would be fine.  Big companies can run hundreds fo concurrent calls through a moderately sized server.

The system needs to get calls .. and make calls – just like any phone system. 

If you want to use it at home, you could set it us with straight VIOP and pay for calls either monthly (unlimited minutes) or by the minute with Broadvoice or one of the other VOIP providers.  Google "Asterisk VOIP" and you’ll find lots.  You’ve heard of Vonage?  Well think of an Asterisk system as your own little Vonage.  Each extension you create in the system is like one of Vonage’s customers.

For a medical practice – VOIP may work for some things (we’re going to have a few lines on VOIP for overflow) but it’s better to connect the system to a T1 or partial T1 that is provided by your local phone company.  This will replace the analog lines that are plugged into your current system and will provide from 9 to 18 (depending on what you buy) lines.  The T1 connects to the Asterisk system (you have to buy a T1 card that goes into the computer for this – about $600), and Now Asterisk can "see " the lines from the phone company.  Calls from inside the system got out to the phone company .. and calls from outside come in.  You can set up rules for how calls are handled, set up "IVR trees" to help callers find what they want .. etc etc.

Still with me?

Ok .. so why use Switchvox instead of plain (free) asterisk?  Because The setup and management of Asterisk is not plug-and play.  I can do it ( I set up two Asterisk servers at home) and most nerds can – but I want something that our office manager can set up and manage without any technical help.  Switchvox is a commercial product that puts a plug-and-play user interface on top of Asterisk.  While there are other UI enhancements to Asterisk from competing vendors and open-source collaboratives, We selected Switchvox for the reasons I discuss in the review.  Switchvox costs about $1500.  Add the phones and you are probably talking about $3000 for the whole nine yards.  Compare that to a $10,000 or $20,000 phone system that does less.  Hmm .. hard choice — eh?

USb Flash Phone

Still thinking about how to outfit the office with phones for the new system (I don't want to spend a ton of $$ of Polycom phones for everyone! .. stumbled onto This Phone … which (I think) looks interesting, but I am thinkin that the Chinese => English translator needs a little work. The Q/A is funny to read. Esample:

1.Why I need order combo desktop package?

The combo desktop package will include one Telbox B2K and one USB phone P1K. You can install the Telbox B2K with your desk telephone, and use the USB phone P1K as your travel package. Also save your money.