Monday 26 February 2007

Source code quality

When you need to evaluate software products: applications, libraries, frameworks... Open source software has a powerful tool to perform the evaluation: the source code. It is like when buying a car, you see the tyres, wheels, doors, interior equipment and so on, but it is worth to open the bonnet and have a look at the engine.

Inspecting the source code you can learn a lot of things about the software and the team who developed it, if there is a disciplined and intelligent group of people behind that software. The things I usually inspect while browsing the source code developed by third parties are:

  • Is the code is well organized? Does if it follows coding guide lines like this one for java or this one for c#?. Can you can understand what the classes and methods do reading the name? Is the code well commented?
  • Is the code complex? Is it spaghetti code or not. The code is complex when there are classes very big, methods have many parameters, and contains a lot of lines, classes have a lot of dependencies with other classes. An the opossite, the code is simple if classes are small, methods does not contain a lot of lines, you can recognize well known design patterns, there are not duplicated blocks of code.
  • Is the code managed with a version control system and the changes are reflected properly? Does the software have a bug database? Does it provide tests? Does it have a good logging system?

If you are an skilled developer or can ask to one, you can also check more things regarding the source code, but with these three aspects you can have a general idea about the source code quality of a software product. It is impressive how your opinion about the general quality of a product can change before and after inspecting the source code. Is it better before to be tied to a software product, to check also the source code. There will be less surprises in the future.

Monday 19 February 2007

Thinking about past, present and future of enterprise applications

We lived the transition from fat clients to light clients. In the client/server era we had the fat client, there was a great computing power at the desktop, a good graphical interface for enterprise applications, and users become very productive. But the Internet era appeared and we needed our applications to be accessed no matter were: at the office, at customer house or even at home. And then we get used the web browser for the application interface, we lost a little of usability and computing power in the client side but we obtained great benefits: central administration for applications, no need to install in the user machine, hundreds of concurrent users, universal availability where ever the user is located, etc.


Now we are living a revolution in the desktop because we have desktop computers with more computing power and with more graphical power. Operating systems and desktop applications look impressive: Windows Vista, Mac OS X, Beryl OpenGL desktop. But the web applications continue with this lack of usability and visual enhancements. My opinion is that the 75% of the success of a product demo is the look and feel of the application, how sexy is the user interface and how many “eye candy” can you show. And we want the best of the two worlds for enterprise applications: Usability, look and feel, computing power, for desktop side. Central administration, universal availability for the web side. And also we want to go further: to have the ability to work offline and access from mobile devices like smart phones.


There are several players in this arena, these players talk about rich clients and about technologies that satisfy all the wishes I wrote in the previous paragraph. There are a huge amount of proposals and some of them look promising: XAML by Microsoft, Flex by Macromedia, XUL by Mozilla, miscellaneous Ajax technologies, Dojo, GWT, etc. There are impressive demos and screenshots.


My question is: What is the right choice? We feel that users are pushing us to make a decision to enhance their user experience. But for the moment all of these technologies are just emerging and I cannot see a clear winner for the next years. Is it better to wait and see? Or do we have to choose and build our own proposal? This is the world of technology and these are the kind of questions we made to ourselves everyday.