Thursday, October 24, 2013

Ruminating on HIE (Health Information Exchange)

The site gives a very understanding on HIE. This is not to be confused with HIX (Health Insurance Exchange). Snippet from the site:

The term "health information exchange" (HIE) actually encompasses two related concepts: 
Verb: The electronic sharing of health-related information among organizations 
Noun: An organization that provides services to enable the electronic sharing of health-related information

Today, most organizations are leveraging HL7 as the standard for HIE. HL7 v3 is XML based, where as the prominent HL7 v2.0 is ASCII text based.  Another standard that is used in HIE is CCR (Continuity of Care Record).

Blue Button is another attempt in simplifying HIE. Providers and Health Plans participating in the Blue Button initiative would allow you to download all your health records as a plain text file from their site.  The image below from gives you a good idea on the advantages of having access to your health record.

A new initiative called 'Blue Button+' would allow information to be downloaded as a XML (HL7 based) and enable machine to machine exchange of health information. 

HL7 FHIR– Fast Health Interoperable Resources is an interesting initiative that uses REST principles for HIE. 

Friday, October 18, 2013

Ruminating on ACO (Accountable Care Organizations)

The below article on national journal gives an excellent overview of ACO and what were the reasons it was formed.
Some snippets from the article, that would give you a good understanding of ACO. 
"ACOs are groups of providers that have been assigned a projected budget per patient. If the cost of caring for the patient comes in below that level, the group/payer shares the savings. The idea is that doctors will better coordinate care to prevent wasteful or ineffective treatment. 

With accountable care organizations, the theory is that if the provider does a good job taking care of the patient, something the insurer can track with quality metrics, the patient's health will be better, they will use fewer and less expensive services, and, therefore, they will cost less to insure. 

Medicare is running two pilot versions of the program. In one, providers may sustain losses if they're over budget but can be handsomely rewarded if they're under. The other rewards providers for coming in under budget but has no downside risk. The government is monitoring quality to make sure providers aren't skipping necessary treatment to come in under budget. 

Making ACOs work will require many organizational changes on the part of providers. They'll have to orient their systems more around quality than quantity. They'll have to track patients closely, using new analytics, to make sure their status is improving. And they may focus on high-risk, high-cost patients, using analytics and tailored interventions to help them. The payoff for improving the health of that population could be substantial."

Thursday, October 17, 2013

What is HIMSS?

The Healthcare Information and Management Systems Society (HIMSS) is a not-for-profit organization dedicated to improving healthcare through innovative use of modern information technology.

Found a wealth of information on the HIMSS site that is definitely worth a perusal: 

Tuesday, October 15, 2013

What is a Digital Enterprise?

In my previous blog post, I had ruminated on some of the business drivers that are pressing organizations towards a digital transformation. Today, someone in my team asked me a simple question - What exactly is a Digital Enterprise? As it always has been the case, there is no industry-standard definition for a Digital Enterprise, but there are some common themes that can be understood :) Jotting down my thoughts on the same.

A Digital Enterprise is any organization that successfully leverages modern disruptive technologies to gain a competitive edge in their business and create a better customer experience to drive business growth. The technology strategies that form the architecture foundation of a digital enterprise are listed below. Though many industry pundits are harping on the importance of SMAC technologies, IMHO there are other traditional technologies (and technology strategies) that would also play an important role in a 'Digital Enterprise'.

  1. Web Property Consolidation: This entails consistent user experience, uniform branding, consolidation of multiple web sites under a single ECM (Enterprise Content Management) platform. 
  2. Digitization of Transactions: Believe it of not, many legacy systems still do not have all business processes completely automated and hence require manual entry or paper work. Digitization of end-to-end transactions enabling STP (Straight Through Processing) using BPM and SOA platforms. 
  3. 360-degree view of Subject Areas: Creating a 360-degree view of your customer to enable effective cross-selling and up-selling. 
  4. Social Media Strategy:  Social as a platform for customer service. Social as a platform for VoC (Voice of Customer). Social as a platform for information dissemination. Sentiment Analysis on social sites, etc.
  5. Mobility: Multi-channel delivery, Usability, Native Apps vs. HTML5/CSS3 Apps.
  6. Big Data Analytics: Enable full-volume analytics rather than just sampling. Leverage open source platforms such as Hadoop. NoSQL stores such as MongoDB.
  7. Cloud Computing: Leverage economies of scale, faster provisioning, quicker go-to-market, etc. Build strategy for public vs. private clouds.
  8. Personalization:  Create a unique customer experience, fine-grained targeted marketing, highly personalized interactions based on past history, demographics, life events and analytics insight. 

Tuesday, October 08, 2013

Social Tools in the Enterprise

Microsoft has conducted an interesting survey on the demand for social tools in the enterprise.
The results of the survey are available here:

Monday, October 07, 2013

MongoDB caveats

Types of NoSQL data stores

There are essentially 4 types of NoSQL databases that are getting popular. As architects, when we consider polyglot persistence it's important to understand the pros and cons of each NoSQL type and then select the best fit for the given problem context.

  1. Key-Value stores: Redis, Riak
  2. Column Family stores (Aggregate-oriented): Cassandra, HBase
  3. Document oriented databases: MongoDB, CouchDB
  4. Graph databases: Neo4J
A good article comparing all these datastores is available here:  Another good article that compares these stores against the CAP theory is here:
Martin Fowler's infodeck on NoSQL is also worth a perusal. 

Ruminating on Bloom Filters

Of late, I have been trying to understand "Bloom Filters" and the reason why they are used in many popular NoSQL datastores such as Cassandra, HBase, etc.  Even Google Chrome brower uses it to match URLs of malicious sites.

So what exactly is a Bloom filter? A Bloom filter is a data-structure; essentially a byte array (aka byte vector). Using a bloom filter, we can quickly test for the containment of a particular element in a given set. For e.g. Suppose you have a set of 100K URLs that are malicious. How do you check if the entered URL belongs to the list? You can store all the 100K URLs in memory and iterate through them, but that would be expensive in terms of CPU cycles and memory requirements.

A Bloom filter is a very simple and efficient way to test for containment - with a one-sided error probability. What this means is that if the Bloom filter states that an element is NOT present in the list, then it is 100% true. But if it returns true for the containment test, then it means that the element "MAY" be there; i.e. you could have the risk of a 'false positive'. You can design your Bloom filter data structure in such a way, so that you can predict the probability of 'false positives'; for e.g. 3% probability in a set of 100 million entries. Hence a bloom filter can return 'false positives' but cannot return 'false negatives'.

With the above understanding, you can guess why Bloom filters are popular with NoSQL data-stores. It is used to quickly check whether a row exists in the database or not, before going for disk-access.

The following articles would give you a quick understading of how Bloom Filters work:

In a nutshell, in simple terms the following steps are taken:
  1. Take a byte array (all elements of the array set to 0)
  2. For each element in your set, do the following:
    • Hash the element k times (with different hash algorithms). Let's say you hashed it 2 times and the values were 7 and 10. Set the bits at these indexes in the byte array to 1. 
    • Do this for all the elements in the set. Thus you would end up with the byte array (Bloom filter) having 0s and 1s scattered around. 
  3. Now to test whether an element is present in the set of not, we hash the element using the same hash functions. Now check if there is a 1 or 0 in the Bloom filter at those index positions. If there is a 0, that means the element is definitely not in the list. If there is a 1, then the element may be there and you can proceed with the costly disk-access or service call. 
This stackoverflow discussion also has a good explanation of how bloom filters work.
Google's popular Guava library aslo has a Bloom Filter class that be used in Java projects. The trick is to select the right size of the byte array and the hash functions to use for excellent performance.
.NET implementations are available here and here