ITARC 2009 Presentation

I recently gave a talk on Re-thinking Software Architecture for Mobile platforms and it was very well received. What’s interesting is that most architects today keep ignoring the mobile space and think of it just as a new, shiny UI for the existing applications.

Unfortunately, however existing systems that were architected for web applications does not scale well to serve the requirements of multiple mobile clients.

In short here are some key points from the presentation:

  1. Cloud computing is the key enabler of scaling architectures for new mobile solutions
  2. User Experience is key when designing a mobile solution
  3. Analyze your users, not all of them are on the same platform. Create different applications for different users instead of creating a monolithic applications with menus and options
  4. Touch UI is a minimum requirement today
  5. Responsiveness of the touch interface determines the usability of the application
  6. Responsiveness on the client is achieved by introducing asynchronous client development
  7. People who use your mobile solution will have short attention spans, break-down your workflows into smaller activities that can be completed within a couple of minutes
  8. Limit the text input to a minimum, use selection based data entry as much as possible
  9. Platform choice is key but some of the determining factors are: Internal/External Deployment, current skills of development team, market share of the platform, form factor and screen resolution of the target platform

Above points mostly talk about the client aspect of mobile development. The server aspects were covered in great detail during the presentation.

Why I love Netflix?

I have been a very happy Netflix customer for years now. It’s nice to see a company innovate and adopt all the new technologies like streaming to the XBox360, provide a Silverlight based video player etc. However, sometimes things go wrong. Last night I had some problems watching an episode of Coupling on my Xbox 360. Nothing that a good reboot couldn’t fix. I had almost forgotten about the incidence when I received the following email:

Netflix apology

Netflix apology

Not that 3% really matters on a $10/month account but this shows what customer satisfaction means to Netflix. Once again cementing my loyalty to their service, good job Netflix!

CCD and HealthVault

A new paper written by on the topic of integrating legacy health care systems to CCD compliant me has been published on Netsoft’s web site.. Here’s an excerpt from the paper

In recent years, health care providers, insurance companies
and health applications have all been collecting mountains
of health-related data in various electronic formats. The
ability to search and analyze this data in context is required in
order to prove it worthy of the effort of collecting it in the first
place. One big challenge that stands in the way of ubiquitous
health information is the data format disparity between different
systems. It is not uncommon today to see legacy applications that
are using older standards such as flat text files, HL7, CCR …

You can read the white paper on Netsoft USA’s web site by clicking here.

Moved To WordPress

After getting frustrated with keeping up with WordPress upgrades using my older hosing service, I decided to move to WordPress.com to host this blog. I have to say that the entire process took about 10 minutes including:

  1. Creating a new account on WordPress
  2. Exporting existing posts from my Hosted WordPress installation to an XML file
  3. Importing the XML file into WordPress.com account
  4. Updating burag.com DNS settings to point to WordPress name servers
  5. Paying $10 for yearly hosting on WordPress using PayPal
  6. Pointing the domain to wordpress (Through DashBoard)
  7. Selecting a new theme

So, if any of you out there is using a hosted solution for just blogging. Switch over today, save yourself some time, money and headache.

Electronic Health Records

Here is a paper that I wrote a couple of months ago on EHRs and the state we are in currently. With the recent news in the media about EHRs, I think most of the issues are even more relevant today. Below is the first paragraph:

The United States population is one of the largest in the world with 300 million people and increasing at rate of 1%.1 A growing population of this size, however, also comes with its set of problems. One of the problems, maybe the most important, is health care and how it is provided and consumed in such a large country. One particular aspect of health care that makes it a special topic is its universality. No matter how healthy or sick, every single person in the population is part of this system either by receiving or providing health care, although the frequency and the amount of care will vary among different demographic groups. Unfortunately the cost of health care has been increasing over years and health cost per capita in the U.S. is highest in the world4. A direct result of high cost of health care is reflected in the decreased number of people getting the necessary medical treatment. According to a National Institute of Health (NIH) study, almost 8% of people who are in need of medical help cannot get it due to economic hardship.

You can read the rest of the article in PDF or Word format.

iParted

There goes the Mac Mini. After tinkering with the Mac Mini for about 2-3 months it turned out to be a less than ideal development platform. Although this little experience has totally changed my view on  Mac software and hardware. I would recommend an Apple macbook/pro to any regular computer users who use web based applications for most of the daily tasks. I think the premium paid on the hardware is justified. In terms of 3rd party software available on the platform however, I have mixed feelings. Yes most of them look great, very visually appealing effects etc but it is damn hard to find applications that offer the same functionality on the windows platform.

Software does exist, it’s just that you have to pay for every single little thing that you are used to getting for free in the windows/linux worlds.

New Pictures on Flickr

I have uploaded a small set of pictures from my recent trip to Flickr. Feel free to check it out!

MS Health and Life Sciences Developer Conference 2009

I recently gave a short talk at the last Microsoft Health and Life Sciences 2009 developer conference in New York. The main theme was architecting health solutions in the cloud and challenges that come with it. You can watch the talk here.

How to ensure code quality: THINK

There is a heated argument going on between Uncle Bob (Robert Martin) and Joel Spolsky (joined by Jeff Atwood). To recap some of the arguments, in a stackoverflow podcast Joel and Jeff undermined the value of using SOLID principles and things like TDD. Uncle Bob wrote a pretty strong blog post in response to the podcast. Although quite entertaining to read, something struck me really hard while I was going through the comments that are left on Uncle Bob’s blog. The comments on both sides were turning the discussion into a flame war on how to write good quality code. Using TDD or SOLID principles or not? Is testing needed or is it a waste of time?

It’s sort of interesting to see a slew of people with engineering or computer science backgrounds fighting religiously over one methodology over the other. One thing that stood out was how no one ever took a second to think what they were so frivolously defending. On one side there is a successful small business owner, ex-Microsofter, a geek world publicity on the other side there’s Uncle Bob who co-wrote the agile manifesto.

It is somehow assumed that people who are good at one thing should be naturally good at everything else. Following this assumption religiously can get anyone to narrow their horizon to the point where it might not be possible to realize that they are looking at the world through a needle hole. While it’s perfectly reasonable to get advice from Joel on how to start a small business, everything else he says should be taken with a grain of salt. After all, the blog and BOS Forum is there to create traffic and increase visibility of the FogCreek web site. Uncle Bob on the other hand is still a day to day developer, and in one of his blog posts he mentions the fact that he lets the experts do their job (he refers to them as business types doing their business thing) so he can concentrate on what he knows best; to write good OO code.

While SOLID principles are something that I personally love and try to follow every day, no one argues that those are the only principles that lead to perfect, clean implementations.

Developers using methodologies TDD, DDD, BDD UNIX or Windows platforms, functional or oo languages have only one thing in common that they have to do to write good code; THINK. Regardless of what three letter acronym you religiously follow, if you don’t think about what you’re doing you are destined to fail, through your chosen methodology’s fast route.

So what should you think about when writing good code? My list is pretty simple:

  1. Do you clearly understand what you’re trying to achieve? Make sure you understand the problem you’re trying to solve by asking questions, reading that business requirement for a second time or just Google the problem domain!
  2. Break it down. There’s a reason your college professor kept telling you this. Break down your problem into pieces that you can actually solve with 10-15 line methods each.
  3. Verify the solution to each before moving to the next piece, mock if necessary: If the multi-step process requires interaction between the steps, don’t be afraid to mock it! You can check out Moq, RhinoMocks or TypeMock
  4. Make sure that future enhancements won’t involve modification of existing code. (Check out the open/close principle article on wikipedia for more information on this)
  5. Test for boundary conditions and see where your reasoning fails.
  6. Repeat 1-5, cleanse and ship.

 

Following a simple sanity check like the one above, will save you lots of frustrated hours in front of the computer. You can use the extra time to actually reason about higher level problems than simple implementation details.

Note: if you are developing any sort of framework, scratch anything that I mentioned above. Almost NONE of the points in application development apply to framework development. A great deal of care and planning must go into framework development that cannot be covered with a simple bullet list. I strongly suggest using Framework Design Guidelines as a sanity check tool.

New Year’s Resolution: 1680×1050

I finally made the switch and got myself a mac. It’s more along the lines of I had to, in order to do some iPhone development, and probably will not be my main machine. Touching a mac for development purposes for the first time was a big shift. Stepping outside the Visual Studio and .NET was not quite comfortable. I say it wasn’t because I have to admit as much as I didn’t want to go closer to C from C#, objective-C is a whole different world, and at the end of the day it ain’t that bad.

Having worked with .NET for a long time, I am very accustomed to how things are grouped in .NET. All in all I think it’s still the best framework out there. However, the more I read about Mac development, more I liked certain things about how the framework is layred.

At the same time the OOP interperation of Apple — or NeXT in this case, since can clearly see the NeXT residue in objective-C by looking at the NS prefixes– is quite differen than of Microsoft’s.  Some of the things I quite like are:

  • Message dispatch
  • All-heap allocation
  • Dynamic runtime
  • Anonymous objects

I’ve always been a proponent of statically typed languages, especially C#, and I still am. Even VB has always felt weird to me despite the fact that it runs on the same framework. In the 36 hours that I spent with objective-C however, things felt pretty intuitive and didn’t bother me much. I have to admit that I have not even compiled a relatively large code-base yet, so my opinion might change in the near future.

One thing that greatly annoys me however is the IDE. I am convinced that Microsoft wrote the best IDE on the planet so far. Having used emacs, vi, eclipse, xcode, notepad++ and VS, I have to admit that VS wins hands down. I think that’s one of the reasons why developers will hesitate switching to another environment including myself. I am constantly trying to see how I can use Visual studio to write Objective-C.
All in all the architecture surprised me greatly. After all the next couple of months might be enjoyable writing some iPhone apps.

For anyone interested in finding resources on iPhone development. In the absence of a good eBook, I turned to online resources. During my hunt for resources I came across a couple of links that I found quite interesting. Here’s a list of sites that I personally used to get a feel of Objective-C and Cocoa.