Moore's Law, Performance and RIA

As you all know, Moore’s law predicts that the computing power will double every 2 years. In recent times experts have revised it to 18 months. The question is what have we been doing with the extra power? We have used this power to …

  1. … reduce the time taken to complete specific computation activity
  2. … support more users from the same server box
  3. … enable virtualization
  4. … implement virtual machines (JVM, CLR)
  5. … popularize scripting languages
  6. … allow richer user interface

We have also used it to …

  1. … build bloated and inefficient operating system & system software
  2. … hide inefficient coding practices
  3. … create too many levels of indirection in coding

As you can see, in some cases we have used the extra power to build better systems, to provide flexibility and manageability. We have also used the extra power to cover our inefficiencies. Having said that, let me also add that it is not always obvious how to utilize the extra power. It is relatively easy to utilize the extra power on the server side by simply increasing the number of users and processes per server. However, on the desktop, which is the client, you can not add more user! Only way to do it is to shift processing load from server to client. That is where Rich Internet Applications come in.

When we think of RIA our first thought is about improving usability and user experience. But I think the scope of using RIA to squeeze out better performance from the same infrastructure has not received enough attention and the cause can be traced to the two great divide that exist in the developer community.

The first one is between developers and the testing professional. Performance optimization can not be achieved without accurate measurement. Intuitive design decision may not lead to optimum performance and common sense is not always good enough. Design decisions need to be validated through proper measurement. Developers are normally not experienced in using performance measurement tools and may not even consider it necessary to master it. On the other hand, the testers will know how to measure performance but may not be interested in exploring how to improve the performance.

The other great divide is between the developers who specialize in server side programming and those who program the client. It is almost like two different world. Neither do they understand each other, nor do they want to. For example, java developers consider anything to do with the client side programming to be in the exclusive realm of the graphic designer. On the other hand, client side developers consider server side programming to be too complex.

How do we bridge this gap?