This takes the cake

November 30th, 2006

Tags : , , ,

Came across this web 2.0 startup that helps couples save their marriage!

“OurCoupleSpace™ (patent pending) is a breakthrough web application that provides couples with an individually tailored, ongoing (not one shot), interactive relationship-management tool, designed to enable them to maximize their satisfaction with each other—to strengthen, ensure, and revitalize their marriages/committed relationships. Our Coupl Space’s market are the approximately 30M couples in USA alone, who are either unhappy with their marriage or would like to “kick it up a notch,” as well as other key demographics. OCS works by incorporating the latest most definitive research on the requisites (predictors) for long lasting happy marriages, some of the best practices for saving marriages on the verge of divorce and state-of-the-art web2.0 innovations. “

Migration Mistakes - VB6 to VB.NET Migration

September 5th, 2006

Tags : , ,

Introduction

There are numerous instances where organizations are running legacy applications on older technologies. They are often faced with the choice of moving to newer, more advanced platforms or continuing with their existing applications. Evolving technologies, at times, force migration upon organizations. As in the case of Visual Basic 6, for which Microsoft has stopped mainstream support in 2005 and paid support comes to an end in 2008. Technology is just one driver for migration. Evolving businesses demand better performance, scalability, security and reach, allowing web-based delivery to customers and web-services and other standards-based integration with vendors and partners. Migrations thus become much more than a cosmetic exercise and require significant planning to ensure their success.

In this white paper, we will specifically address the case of moving from Visual Basic 6 to the Microsoft.NET platform. We examine the pros and cons of a migration exercise and address the issues that come up while migrating. We also cover the strategies and best-practices when doing such a migration.

Visual Basic

Visual Basic is an event driven programming language from Microsoft. It has gained popularity as a rapid-application-development tool for creating graphical user interface (GUI) based applications and prototypes. Currently, the most commonly used version of Visual Basic is VB6. This was first released in mid 1998. Mainstream support for VB6 officially ended on 31, March 2005. However, paid support continues until end March 2008.

Overview of .NET

Microsoft describes .NET as providing “the ability to quickly build, deploy, manage, and use connected, security-enhanced solutions with Web services”.

Essentially .NET is a language-neutral environment for writing programs that can easily and securely interoperate. The components that make up .NET are collectively called the .NET Framework.

The framework can be divided into two logical parts.

  • The Common Language Runtime: This is the engine which provides the environment for execution of .NET programs together with the other features like memory management and security.
  • A set of reference class libraries

The .NET platform supports over 22+ languages which are all compiled to Intermediate Language (IL) which is processed by the Common Language Runtime. The four languages most commonly used that are supported in the Visual Studio IDE for .NET are C#, VB.NET, C++ & J#.

Choice of .NET language

One of the main concerns while upgrading to new technologies is the re-learning curve for existing developers who modify and maintain the existing system. The best choice for a .NET language would be VB.NET. Although VB.NET, as the name suggests is similar to VB, it is not an extension to the VB family as VB6 was. VB.NET was created as a standard .NET language and is equally powerful as C# and the other .NET languages. It was created with the intention of helping VB developers move to the .NET platform with minimal re-learning.

The advantages of choosing VB.NET over other .NET languages are

  • Less steep re-learning curve for current VB6 developers who maintain the product
  • Only .NET language with background compilation. Errors can be viewed at design time without compiling.

  • Most readable .NET language
  • Familiar VB functions like Left$ are retained in VB.NET for the benefit of VB developers.
  • Coding is case insensitive like VB

Why Move?

Moving to .NET has its benefits. For an application that works perfectly in VB6, a direct migration to the .NET platform will not have any direct impact on performance of the application. However, if after the initial step of directly porting the application, the application is further enhanced both in the look-and-feel and architecturally, with new components from the .NET libraries, significant benefits can be attained on the fronts of extensibility and maintainability of the application.

  • Object-Oriented implementation. Unlike VB, VB.NET is an object oriented language. This means that either the architecture can be changed to one using OO concepts, or newer modules can be designed using tools like Rational to speed up the design process
  • Web-Services. Core business functionality can easily be exposed as web-services in .NET improving extensibility of the application.
  • Move from Windows to the Web. Organizations can make a quick jump from windows to the web using a familiar tool-set. ASP.NET applications can be coded in VB.NET, allowing newer modules to be web-based improving the reach of applications with minimal effort.
  • Deployment. Deployment of applications is much improved in .NET compared to VB6. Developers can now use x-copy deployment. No registration of components is needed, eliminating problems like “DLL hell” which VB6 developers experienced.
  • More rapid development. .NET provides a suite of controls and other components which have enhanced functionality as compared to those available in VB6. This improves the development time of new modules, and existing components can be replaced with the enhanced ones at a later stage of the migration exercise.
  • Cross language capability. Modules written in one .NET language can seamlessly be used and integrated with modules written in another .NET language. This means that new modules can be written in C# by new developers and integrated into the VB.NET application at a later stage.
  • Stronger type checking. .NET languages implement stronger type checking. This results in more errors being identified at design time rather than at runtime, thereby speeding up development time and decreasing testing cycles.
  • Scalability. .NET gives more inbuilt support for a scalable architecture with existing libraries. Higher concurrent loads can be supported improving overall performance of the application.
  • Globalization. Enhanced support from the .NET framework and Visual Studio for globalization makes globalizing windows and web applications a relatively simple task as compared to VB6.

Show Stoppers

There are certain cases when migration to .NET might now be the best way to go. Such cases usually involve applications which largely use very specific features of VB6 which are no longer supported in .NET. As a result, the migration could become quite a messy affair, and re-architecting and implementing such an application from scratch would be a more recommended approach.

A few such known cases are

  • Applications extensively using Web Classes, ActiveX Documents, or DHTML will need to be re-written using new technologies as such components are no more supported in VB.NET and cannot be reused.
  • Applications built around the Data Environment in VB6 will need to be completely re-architected, as there is no direct equivalent in VB.NET.

The Migration process

Choosing a migration strategy

For a migration of the business or data tiers of an application, there are two possible strategies.

One option is to replace Visual Basic 6 COM components with Visual Basic .NET components. This can either be done horizontally layer-by-layer or vertically module-by-module. Visual Basic .NET ships with an Upgrade Wizard that will upgrade Visual Basic 6 code to Visual Basic .NET. However, for most real life applications, some of the upgrade process will need to be done manually. In the case of the module by module migration, an adapter can be used as an intermediate stage. The adapter which is to be written in .NET, will wrap the existing VB6 COM component to expose it to a .NET client, while the COM component is being migrated to .NET. Finally once the component migration is complete, the adapter can be discarded.

Another option is to expose the Visual Basic COM components as XML Web services. The big advantage to this strategy is that it is very easy to do and one can get a running .NET application very quickly. These Web services can also be exposed across the Internet. This introduces all sorts of interesting possibilities, such as being able to access the application logic from a cell phone or PDA, or to enable business-to-business communication.

Code Preparation

A sizeable chunk of issues resulting from an automated code migration from VB6 to VB.NET, using the upgrade wizard, relate to a small set of issues. Many of these can be more easily fixed before the migration process rather than after. Such issues typically relate to

  • Late bound variables and Variants. These can be typed in the VB6 code before migration
  • Non-zero bound arrays. These are not supported in VB.NET and can be changed before migration
  • Use of Double for storing dates. These can be changed to use the Date object.

Code Migration

The Upgrade wizard packaged with VB.NET is launched when a VB6 application is opened with Visual Studio.NET. This utility attempts to convert existing VB6 code to VB.NET directly. The conversion time is proportional to the size of the application, but is significantly small as compared to the other stages of migration. At the end of the conversion, a report is generated to identify areas where the migration was unsuccessful. TODO Comments are also inserted in the code for portions where the utility could not find a mapping for VB6 components in VB.NET.

Once the automated migration is complete, the migration team will manually need to go through all parts of the code and fix the remaining items which were not successfully migrated due to code ambiguities or incompatibilities.

Post Migration Enhancements

After an ‘as-is’ migration has been completed, and a working version of the application is ready, the next step would be to enhance the application. The first step would be to replace existing components with their newer version available in .NET which offer better functionality (for cases like Windows forms controls).

At the design level, the data handling model from VB6 such as RDO/ADO which is often connected, can be replaced by the disconnected model of ADO.NET.

Visual Basic.NET 2005 also allows users to create Custom Business Objects to store data which are more light-weight when used with web-services.

The overall architecture of the application can be enhanced by using available libraries like the Enterprise Library for .NET which implements best practices for Logging, Exception handling, and abstracts Data Handling increasing the extensibility of the application.

Migration Mistakes

Some of the most common mistakes made during a migration are

  • Don’t automate migration and then try to get it to compile. Pre-processing is very important to save time/effort
  • Don’t try to migrate the complete application in one go (unless it is very small). Choose a clear strategy: vertical or horizontal to help unit testing. Identify references at this point
  • Don’t replace VB components with VB.NET ones during the migration cycle. First reach a working point before adding in new components.
  • Don’t use the migration as an exercise to learn VB.NET. Train developers on VB.NET before migration (helps with migration decisions and knowledge on better components in VB.NET which could replace old ones).
  • Don’t get overwhelmed by the 1000 over warning and errors resulting from compiling the application in VB.NET the first time. A lot of the warnings will relate to a small set of problems.

Quality Software - It’s possible! Preparing your organization for Software Quality Assurance

September 1st, 2006

Tags : , , ,

Growth and Quality

Most software startup organizations start with a few software projects but gradually they grow in:

  • Number of concurrent active projects; and
  • Number of people working on a project.

With growth, it becomes more and more challenging to produce quality software.

The project managers, now, have to equip themselves with new task of maintaining the software quality and “assuring” their clients of the same. This combined process is termed as “Software Quality Assurance” or SQA.

Defining Quality

But the challenge does not end here. As expected, software quality is a qualitative term, and it is not easy to quantify it. Software Quality is defined as the fitness for use of software product. Put in simple English, it simply means, software should “do” what it is “supposed to do”. Quality may be hard to define and impossible to measure but is very easy to recognize. If its there, it can not be seen, but if it is not there, its absence is easily recognized.

Many books have been written to quantify “software quantity”, but in true measure, it has only one reference - User Acceptance; also termed as “Client Satisfaction”.

If the users of the software are satisfied, the goal of Software Quality Assurance is achieved.

Everything comes with a price tag

The next challenge faced by project managers is even more daunting. Clients maintain high quality expectations while continuously negotiating a lower budgetary and time estimate. In today’s competitive market, it becomes imperative for project managers to educate the client about software quality and include the additional effort estimates in the project costs.

As a general observation, assuring software “quality” can take up to 40% of project resources, but only up to 5% is initially allocated to it. “Software Quality Assurance” is also one of the major reasons towards slipping timelines and late delivery.

A necessary evil

The necessity of producing quality software is, generally, not understood until late in the project. And then, starts the inevitable process of engaging QA managers and software testers.

But, SQA review at the fag end of the project will only result in rework and lagging timelines. The procedures and practices to ensure software quality need to be integrated from the inception of project. In fact, it even starts before the project inception by educating the client about the company’s policies and practices about stringent quality procedures.

Do not look upon “software quality” as a hidden expense, rather look up to it as company asset, and this will soon reflect in the level of customer statisfaction.

Epilogue

Let’s start with documenting each and every step of the software life cycle, and planning the schedules with quality procedures in place.

In the next article, we will discuss standard QA practices and procedures.

Dynamic Web Reporting

August 15th, 2006

Tags : , , , , , , ,

The sample project files can be downloaded here.

This article describes about how to build dynamic web report. I have composed this article based on one of my work experiences. A complete dynamic report where columns can be chosen to be displayed over the report as well as option for filters to be applied on each of the column. Let us have an insight on how to deal with it.

During one of my experience in web development I was assigned on a task to complete 7 reports in 4 days. A short summary of the requirement was:

1. Each report must be capable of catering to over 200 fields
2. Based on column type each field will have filters that can be applied (date filters, numeric filters, alphanumeric filters)
3. Filters provided by the user must be validated
4. User can choose a list of columns to be displayed in the report

In a typical approach to this requirement of composing SQL statements, and designing pages displaying over 200 fields for the user selection, and writing loops to check if the field is chosen to be displayed and applying filters if a value is specified, client side validation for all the filter fields would, practically be impossible especially for the case where you have field count in 100s.

If column A is chosen then display A in the report, if column B the display it…until your 200th column. You would probably end up writing few thousand lines of IF loop just to display the columns over the report and imagine the code for filters that can be applied for each of the columns!

Let’s get technical

Well how did I complete 7 reports in 4 days?
1  Days to think.
2½  Days to implement the framework.
½  Days to complete the reports.

The best approach in this situation was to write a common module, let us call it a Report Construction Engine, which will manage both request capture page where the required fields are placed in a report. There is a Class or a XML file that will have the definition of the report and let us call this the Report View Definition.

Let us have a simple graphical view of how the entire process works.

image not available

The Report Construction Engine accepts a Report View Definition which contains:

1. What are the columns to display in the user request form
2. What type of filter is bound to this column
3. What is the data type of the column
4. Is the column selected by default
5. What is the display name of the column
6. What is the mapping name in the table

Based on these criteria the user form is dynamically created. The Report Construction Engine creates the necessary filters which are defined with the column, based on the data type of each column. A client side validation script is tagged to validate each of the fields. Freebies like date picker and default 3 sort options are provided along with the report.

image not available

In the sample application provided a class is written to define the view for the Order Report which we are working on. Let us look into a part of the code. Internally the Report Construction Engine loads the XML into a dataset, so let us create simple column definition, and add it to the dataset.

newRow = dt.NewRow '------------------------------
‘The column of a table we are dealing with
0 newRow(ReportConfig.CLM_FieldID) = “OrderId”
‘Display Name of the column on the report
newRow(ReportConfig.CLM_FieldName) = “Order ID”
‘Type of filter to be applied
newRow(ReportConfig.CLM_Criteria) = ReportConfig.CRITERIA_FROM_TO
‘Default Selected Column, Source can be configured to read a list from xml
newRow(ReportConfig.CLM_Source) = ReportConfig.SOURCE_NONE
‘Default Selected Column set it to 1 if you want it to be selected
newRow(ReportConfig.CLM_DisplayField) = 0
‘Client side script validation and the sql parameter type is based on this
newRow(ReportConfig.CLM_FieldType) = ReportConfig.TYPE_NUMBER
dt.Rows.Add(newRow) ‘——————————-

The query page in our example.

image not available

The resulting report.

image not available

Points of Interest

All data provided are constructed in a parameterized query, with proper defined data types, so the report is not prone to stuffs like URL hacks, and query breakage on apostrophe.

This structure works on a table. If you are required to work with multiple tables, a VIEW can be substituted.

A sample application is provided, which connects to NorthWind databases orders table, connection string can be modified in DbConnect.

No copy rights, take it, modify it, use it! ;-)

The sample project files can be downloaded here.

Internet advertising: we ain’t seen anything yet

July 15th, 2006

Tags : , , , , , ,

I attended a panel discussion recently on Internet advertising. The panel was an insightful and lively discussion on “What’s working, what’s not and what’s coming in Internet advertising”.

The moderator of the event was Tony Perkins, Chief Editor of Red Herring and founder of Goingon.com. The panel included heavyweight Google and startups in this industry all vying for a piece of the pie. Gokul Rajaram, Product Manager of Adwords and Adsense at Google, Ujjal Kohli, Founder of Rhythm New Media, Philip Kaplan, Founder and CEO of AdBrite, Jonathan, Founder of Socializr and a VC (whose name I fail to recollect).

Here are some of the key takeaways and my analysis.

The boom in Internet advertising is just beginning. Today the main spend on Internet advertising is for transactional advertising which is basically e-commerce. We still haven’t seen companies spending on BRAND advertising on the Internet, which is the main chunk of the spend on traditional media. For this to happen, demographics is key, without which it is very difficult to target the audience you want and think of achieving an ROI. Hence the companies who can provide this will be kings of this space. For example take a property like Facebook, it can provide a potential advertiser who can for instance run an ad for all male students in the age group of 18 to 25 who play college football! Companies who create a platform that will allow advertisers to do this will be king.

62% of content read by 21 year olds is generated by people who they know. This is a very challenging group to crack because they are generally numb to marketing or brand advertising for that matter. Hence brands are now looking to create content which users can interact with and getting young brand ambassadors of sort to create the buzz in order to penetrate into this hard segment. The Internet and now mobile is probably the only way to reach this segment as they spend most of their time on the Internet and rarely ever watch TV (You get your favourite shows now also on the Internet and soon on the mobile). Such users want their IM, they want to be in charge, be seen, create and share content and take things mobile. This poses a very interesting challenge for advertisers.

An example of content that such users watch is funny and entertaining videos. YouTube is the 15th most popular site on the Internet when I last checked. And interestingly not just young users, but everybody watches such videos. Hence embedding ads in videos, games (mobile, MMORPGS etc) are the next thing to look at. The challenge though when selling this to a brand advertiser is that they are very skeptical about where they will put their brand.

An interesting prediction made by one of the speakers was that, the mobile which is the 3rd screen in our lives today will grow to twice the size of Internet advertising today! That is a bold claim to make, but when you think of the number of mobile phones out there today (2 billion and growing like crazy), it’s not hard to fathom this.

Once again in this space, demographics are crucial. The operators hold this information today and the company who can rally these guys to create a business model and provide this as a service to advertisers will once again be king.


Send your comments to Dev.

The Renaissance of WAP

May 15th, 2006

Tags : , , , , ,

It has been shown repeatedly that introducing new technologies takes a lot longer than first thought. All new products and technologies go through three stages of growth: an innovation phase, a growth phase and a maturity phase. It takes about the same time for a new technology or product to go from zero to 10% adoption (the innovation phase) as it does for it to go from 10% to 90% adoption (growth phase) and as it does from 90% to 100% (maturity phase). For instance, local area networking technology took almost 15 years to really reach the mass market. Indeed it might be reasonable to say that the PC, first seen around 1977 didn’t become a mainstream product until the early 1990s when they became fast enough and cheap enough with sufficient additional support that a mass market developed. Slow introduction is nothing new.

Wireless Application Protocol (WAP) was introduced with great expectations, widely touted as the next “killer technology” in the mobile industry. When it failed to create an impact in the market, it was dismissed with phrases such as “Worthless Application Protocol”, “Wait And Pay”, and so on. In recent years, however, the technology is experiencing a renaissance - largely driven by WAP sites offering customized phone ringtones, wallpapers and game content.

Why was WAP touted as the next killer technology?

First let’s try to understand why WAP’s initial failure caused such a heart-break. For a moment, let’s go back to the early 2000s…

Investors and business analysts were looking at the booming e-commerce sector, and taking into consideration the growing number of mobile phones. Somehow, they put two and two together and came out with an answer in the billions. Why? Well they had research reports saying that there would be 1 billion mobile phones in use very soon … and other research reports that said that mobile phone users replace their handsets anywhere between 9 months to every 2.5 years. So there it was: if you can have 1 billion phones in three years time and they are all internet-enabled then you can have 1 billion people surfing the internet and doing m-commerce with their phones. Even without transaction charges, you could probably charge 20 dollars a month as a subscription. Suddenly we’re talking about billions of dollars a month in revenue. Who wouldn’t be excited!

So what went wrong??!!

Public Perception

At the time of its introduction, leading users to expect WAP to have the performance of the Web was a major contributing factor for WAP’s initial failure. One telco’s advertising showed a cartoon WAP user “surfing” through a Neuromancer-like “information space”.

Let us also take a minute to think about what sparked the idea of WAP. As we all know, WAP was introduced for second generation (2G) mobile phones and networks then suffered from numerous limitations that made it impossible (or rather impractical) to use standard Internet protocols and technologies. The most visible of these limitations include the following:

  • Low bandwidth (usually 9.6 kbps)
  • High network latency
  • Small, mostly monochrome displays
  • Numeric keypads
  • Slow processors
  • Limited memory

The speed and performance of WAP on these early infrastructures were suitable for information services and not really for fun WAP surfing. The marketing buzz created around WAP created a false image of what consumers could expect from the technology.

Non-standard implementations

In the early WAP “standards”, there were many optional features and under-specified requirements, which meant that compliant devices would not necessarily interoperate properly. Different phone manufacturers had varying implementations of the same feature because of ambiguity in the specifications. As an example, some phone models would not accept a page more than 1 Kb in size; others would downright crash. B

Implementation of Custom Data Paging - (for SQL Server 2000)

May 15th, 2006

Tags : , , , ,

One of the most common operations encountered in data driven applications is the displaying data in a tabular manner. When the amount of data being displayed is small, all the data can be displayed in a single list. However, for large amount of data, applications (especially web-applications) often resort to using a paged tabular display.

Paging of data to be displayed can be done either at the UI level or at the Database/Data Layer. In this article, we will explore some of the possible methods of implementing data paging at the database level for SQL Server 2000.

Retrieve all the data from the database and page at the UI Layer

PROS

  • Easier and faster to implement in cases where the results can directly be linked to the display component as in the case of a binding a dataset to a data-grid control in ASP.NET. This approach also suffices where as the amount of data being handled and displayed is small and the database server and web-server are hosted on the same physical machine.
  • Other aggregation operations such as total/average can be performed directly and with minimal effort on the results since all the data needed is present in the set of results.

CONS

  • The loading time of data is directly proportional to the number of records in the Database at any point. This means that as the data in the system increases (which is almost always the case), the system response time degrades.
  • In the case of a multi-server deployment, where the database and web servers are separate, a large overhead is incurred for transferring unnecessary data across.

Retrieve only the page to be displayed currently (effectively paging at the Database Layer)

PROS

  • The loading time of the page is minimally effected by the amount of data in the database. With increase of size of the database over time, the system will only be slightly affected, keeping the overall user-experience good.
  • Different server deployment scenarios do not affect this approach as the amount of data being transferred between the database and web servers is constant (assuming the page size is constant).

CONS

  • Implementing this with SQL Server could be more time-consuming
  • There is not yet any single or generic way in which this can be implemented easily for SQL Server 2000. The choice of approach will depend to a large extent on the structure of the table and the primary keys as well as the query being used to retrieve the data
  • For architectures where stored procedures are not used but SQL queries executed directly at the Data Access Layer, implementing this will need to be done on a case by case approach.

Test Data

For testing purposes we will be using a test database with a single table Customers.The structure of the table is:

The primary key CustomerID is an auto-increment field and is indexed

Paging Approaches

METHOD 1

STEP 1: Create a temporary table with the fields that make up the primary key (i.e. uniquely identify each row in the result set) of the SELECT query being executed. An extra field ID which is auto-incremented is also created.
STEP 2: Execute the query and insert the primary key columns into the temporary table
STEP 3: Run the query selecting all the necessary result columns while JOINING the necessary tables with the temp table and limiting the results by using the ID column

A sample procedure for the Customer table specified previously is

Some important points to keep in mind are

  • In STEP 2, the ROWCOUNT is first set to the end row number. This is a tweak to minimize the number of rows inserted into the temp table and improve execution time.
  • In STEP 3, the ROWCOUNT is set to the page-size. This again restricts the number of records retrieved thereby improving performance.

METHOD 2

This method makes use of the TOP keyword in SQL-Server combined with a LEFT JOIN to get the desired set of records

METHOD 3

This method uses TOP combined with an inner query to get the desired set of records.

Performance Comparison

The results of testing each of the above mentioned methods against a table with 1 million customer records, using a page-size of 10 records gave the following results.

Some related links for improving and measuring performance of queries and stored procedures in SQL Server 2000 are listed below:

http://www.sql-server-performance.com/stored_procedures.asp
http://www.agsrhichome.bnl.gov/Controls/doc/database/opt_query.html


Send your comments to Rohit.

GUI Best Practices - Part III

April 15th, 2006

[TAGS]GUI, Professional Interface, Software designing, development, layouts, colors, Web Technology, AJAX, Web developer, Web 2.O
[/TAGS]

It has been a short break since I have written part 1 and part 2 of this series. Let’s recap. In Part 1 of this series, we have discussed about minimising the users’ efforts to achieve their tasks using your software. And in part 2, we have looked into using the right components and colours.

Today, let’s look into how to make your software and web applications look professional. Unless your applications are going to be used by users who preferred to type commands in the command consoles, user interfaces is probably a big consideration when they decide whether they want to use your software applications.

Part 3 Making your user interfaces professional

In the first two parts of this series, we have already been discussing about building good user-interfaces. Now let us do the extra effort to make the user interfaces professional.

What is a professional user interface?

First of all, we will define what a professional user interface is. There are probably lots of possible definitions. A search on the internet gave me this definition of professional as showing great expertise or skill in a craft or activity. Therefore a professional user interface would mean one that gives users the impression that the developers have shown good consideration and expertise in building a usable software application.

For user interfaces to be professional they must not just look professional; they must also be using the right components, right colours and focus on minimizing the efforts for accomplishing tasks as we have discussed previously. Of course I have also assumed that the functions in your applications are performing just as the users expected.

Understanding your users’ needs

One of the most important steps for designing software is gathering users’ requirements. Similarly you have to know the needs of your users before you can build the best user interfaces for them. For example, knowing these requirements allows you to put the most frequently used functions right at the front page and place other less frequent functions in the meaningful-named menus as discussed in Part 1.

Understanding who will be using your applications is useful and important too. For example, if you know that the users require quick information at a glance and will use their fingers to tap on buttons on touch-screens, you will need to increase the font size of the wordings used and make the buttons much bigger. Furthermore you will probably not use any dropdown menus as they are hard for these users to use.

However, if your users worked on a desktop computer and will probably have a big screen size, you might want to show more information that could be useful to the users as they are performing their tasks.

Using Wizards and Expert modes

Other than presenting the functions in the correct ways and adjusting font and button sizes, you also need to know whether your users are new computer users, are new to the business process or are expert users. If the majority of the users are new computer users or are new to the business process that your application promotes, then it is best to introduce wizards for common tasks.

Wizards are guided steps to perform certain functions. For example, Microsoft Word guides a person to set up a report using the Report Wizard. Usually, if a task requires certain steps to accomplish and that these steps are mostly fixed, you can present a wizard to help the user through this task. Be sure to give clear headings and description for each of the steps. Furthermore it is better to have a list showing the current step as well the pending steps.

However, if your users are expert users, they will probably be slowed down using a wizard. In this case it would be best to provide them with the necessary functions if possible to achieve the same task. For example, an expert user can bypass the Report Wizard totally and set out to make his own report in Microsoft Word.

Usually it is best to have both modes in your application so that you cater to both the new users and the expert users. However, only wizards should be used in critical processes where control is very important and when you would not want the users to perform other functions or the wrong functions during the operations.

Using the right colours

Up to now, we have discussed mainly how to present the functions to the users. As you can see, a professional user-interface is not just about how it looks but also how the users can interact with it to accomplish their tasks in the most efficient way. In this section, we will discuss the use of colours and layout to enhance the professional look.

Back in late 1990s, most applications are shown in shades of grey. And no, that is not because of the monochrome monitors. It is believed that grey makes the users focus better on their work. However, I am not so sure about this anymore. Nowadays, you can see colourful screens on your desktops. Even the Microsoft OneNote software I am using now is in shades of blue. Therefore we can see that colours are becoming important in the user-interface design.

For user-interfaces, try not to use more than 2 or 3 colours and these colours should be light and look pleasant together. Therefore you have to avoid dark striking colours. Dark orange, green or red are big no-no unless they are used in very small area such as an important button. Using striking colours will distract the users from their work.

You should also use white for most large areas. For example, if you are designing a webpage, a white background will be very suitable for any type of design most of the time. Furthermore, having a white background and black wordings has the best contrast and allows text to be read better. If you have to use other colours other than white for background, try to use a very light background. If you use a dark background, there is a good chance your users might feel irritated after using the application for sometime.

Sometimes, you might also have to take into account the corporate colours of your company or those of your clients. Having a good colour scheme that your company uses may help to provide a professional feel. Some examples are Microsoft Office where all its components such as Word and PowerPoint use the same colour scheme, giving the impression that the whole suite is integrated and works well together.

Using the right layouts

Using the right layouts is also important. It is always good to keep to some common “standards”. For example, if you are putting in the dropdown menu, you should always keep it at the top and nowhere else as that is where the users would expect it to be. As for toolbars, you should try to put it below the dropdown menus although they can be dragged to any other location. For web applications, the users would most likely look for the menu either at the top or at the left. Putting your menu at the right, for example, might confuse your users.

As a further note, do make sure that the tab stop orders for all the textboxes, buttons and other controls are in correct order, preferably in the order where the user is most likely using the controls.

Using new technologies

New technologies are being developed to improve user experiences. Recently AJAX (Asynchronous JavaScript And XML) technology has become very popular among web developers who use them to create web applications that provide almost the same experience to the users as if they are using a normal desktop application.

Features which used to appear only in desktop applications, such as drag-and-drop and displaying up-to-date real time data are becoming common in web applications that are hosted in new web browsers. If used correctly, AJAX can help to vastly improve your users’ experiences.

Another new technology that Windows developers should look forward to is the coming WinFX: Windows Presentation Foundation (WPF), formerly code named Avalon, which will come with Windows Vista in 2007. If you are interested, you can visit their website for more details: http://msdn.microsoft.com/winfx/reference/presentation/default.aspx

WPF is a set of APIs which developers can use to build very interesting user interfaces. I have seen a video presentation of an application demo built on top on WPF. The forms in that application can be flipped front and back and skewed as if they were 3D objects and at the same time display real data.

These new technologies definitely have the potential to improve your user interfaces and enhance your users’ experience when used correctly.

Summary

Summarizing the whole series, we have discussed the importance of having good user interfaces for your applications and some ways on how we can achieve it.

To design a good user interface, you will first need to understand your users’ need. Then you have to design it in such a way that the users can accomplish their tasks in the minimal time and effort. The user interface should also be comprised of the correct components and their correct uses so as not to confuse the users. Design wizards, if needed, for users who are not familiar with the business process for tasks that require many steps. Lastly, improve on the colours and layout to give a more professional feel.


Send your comments to Vincent.

A Force to reckon with - Emergence of Salesforce.com’s AppExchange Platform

March 15th, 2006

[tags]Salesforce.com, Marc R Benioff, SaaS, Web Services, EBay, business software, ISV, Plateform, Imfinity Expertise
[/tags]

It was a bright spring afternoon, 7th of May in 2003, as I made my way into the packed Terman Auditorium at Stanford University. We had gathered to hear Marc R. Benioff, the founder of Salesforce.com, share his vision on how his company would change the world of software as we knew then.

Benioff founded salesforce.com in the spring of 1999 with the intention of creating information utilities that would make traditional enterprise software obsolete. A veteran of more than 20 years in the software industry, including stints in Oracle and Apple Computer, Benioff pioneered the concept of “The End Of Software,” demonstrating how Web Services would replace large-scale corporate applications through the use of the Internet.

We sat in awe as he rattled off his big, hairy, audacious goal to reshape the customer relationship management software market with the “Software-as-a-Service” (SaaS) delivery model. That afternoon I felt I was in the presence of a powerful higher being. It wasn’t burly Benioff. It was the power of the idea. Ideas like Salesforce.com, Google, EBay or Priceline that entirely change the rules and landscape of the market and leave the incumbents sleepless.

Salesforce.com has come a long way from being an on-demand computing evangelist. It took the web-based CRM application and focused on integrating salesforce.com with other applications and web services using the sforce platform. It then allowed customers and vendors to customize salesforce.com to their individual needs. Alongside, it has been engaging with a wider range of developers, integrators and partners to help accelerate adoption. It stands now with more than 18,000 customers, 351,000 subscribers and revenues touching USD 218 million till date during fiscal year 2006.

The intention to not just remain an on-demand service provider, but position itself as a platform was clear with the multiforce initiative, an on demand “operating system” to enable salesforce.com customers to access multiple applications from a common desktop environment, sharing one data model, one user interface and one security model. All this change is not happening in isolation. The market and competition have morphed and moved and rivals like Siebel (now owned by Oracle) and mammoths like Microsoft and SAP have either entered the fray or are expected to launch competing offerings soon. All vying for pieces of a broad on-demand software market expected to grow to $10.7 billion in 2009, from $4.2 billion last year, according to the researcher IDC.

Last year, on the 12th of September, Benioff was back on stage to announce what was brewing in Salesforce.com. He called it the “EBay for Business Software”. An online marketplace where software makers and customers can swap and sell applications they develop. On the 17th of January 2006 “AppExchange” was launched as scheduled and we sang hallelujah!

What is this AppExchange and how will it affect Salesforce.com, their customers and partners? The most important question that we, at Imfinity, are evaluating is the implication to Independent Software Vendors. Why should you sit up and take note?

The EBay of Business Software

An analogy used by Benioff to describe AppExchange is to compare it to the EBay or iTunes Music store for business software. It is positioned as the first online marketplace, where buyers and sellers can host, share and sell. Some applications are add-ons to Salesforce.com CRM, like a email marketing application, or it can provide a totally different functionality to the enterprise, like a payroll management system. Buyers can search the repository to find software that they need, read other users’ reviews of the solution and test drive applications. On purchase the applications can be downloaded into the multiforce desktop and customers will be able to install and uninstall AppExchange applications – just as they would in their Windows desktop. AppExchange supports and integrates new applications and even parts of applications which allows customers to share parts of their application like reports, dashboards, and other functionality with their end customers and partners.

Salesforce.com, its developers, partners and customers can modify existing applications or build new ones. The AppExchange platform combines the development capabilities and tools of sforce, customforce and multiforce programs under one umbrella. Is it then just pure re-branding and positioning? I would think it goes deeper than that.

For one, Salesforce.com has been evangelizing a critical mass of developers and partners which is crucial for any platform vendor. SaaS has received wider acceptance with customers appreciating the strengths of the delivery model. Current customers are comfortable with the platform and want add-on or new applications. Potential customers are evaluating the cost advantage and breadth of applications available on competing platforms.

Vendors of applications are looking at platforms from the perspective of its customer reach and future growth. The AppExchange is perfectly positioned for the numerous niche independent software vendors to reach their customers quickly and with low costs. As Benioff, puts it – it is about exploiting the long tail of software. The timing is well suited too. Internet and application development technologies have matured and they are allowing customers and vendors to drive value from such an application exchange platform.

Top reasons for ISV adoption of SaaS model like Salesforce.com

  • Installed base and prospective growth in customers.
  • No-cost development environment, with database, server and storage resources, all accessible using just an internet browser.
  • Common application environment used by all customers and assured forward compatibility.
  • Standardized pre-installed common services including user interface, logon, security, data model and integration services.
  • Free access to robust, secure, highly available, world-class deployment environment.
  • Source: Summit Strategies Inc

The War of Platfroms

A lot of great things have been said about the SaaS model and Salesforce.com’s AppExchange. Salesforce.com’s name is being taken in the same breath as Microsoft, IBM, SAP and even Google. Positioning yourself as a platform vendor is not just about putting up a nice vision statement on the corporate website. It requires immense stamina, financial leverage and marketing muscle to make a wave out of the ripple. The incumbents, like Microsoft and IBM, have spent decades building an ecosystem of developers, business applications, software vendors and partners who have ensured the success and sustainability of their platforms.

Salesforce.com has successfully created and is riding the wave of on-demand software or SaaS applications. It is still to be seen how well it can demonstrate to ISVs its commitment to champion and build the platform, how well it can crystallize the value proposition of the platform and applications, and, how soon it can grow the base of developers and system integrators and equip them with the right training and tools. Above all, the ISVs will expect a clear and rewarding revenue share model with strong growth prospects.

On that spring afternoon Benioff gave a personal and compelling glimpse of Salesforce.com. Some of us shrugged it off, most of us sat up and listened, and some others became loyal foot soldiers of the Idea. The buzz of Silicon Valley has since spread and is a constant and growing hum in many parts of the world. Salesforce.com recently had a well publicized AppExchange launch event in Singapore. The ISVs of the region are vital for platform vendors, especially the on-demand ones. The ISVs help reach the large SME market space. The coaxing and cajoling of ISVs and the turf war between the platform vendors has long begun.

The war of the platforms will be an ongoing one and we don’t need to twiddle our thumbs and wait for the winner before we take a bet. As ISVs your key question must be “Is my application delivering solid business value to my customer?” The choice of platform comes next. With the key question answered your next question is “Can I serve my customers better and reach more prospects by betting on a platform or taking the on-demand application strategy?” For this you should set aside resources to evaluate the new and upcoming platforms. Every serious platform player has an ISV evangelism and support program in place. These partner programs are a great way to get you equipped to evaluate the platform and leverage on the vendor marketing muscle to get your products wider recognition and branding. Take a look at the listed links below for more information.

At Imfinity we enable ISVs craft an informed product platform strategy. So sit up, start thinking and leverage on our expertise to make a difference to your product.

Microsoft ISV Community Center

http://msdn.microsoft.com/isv/partnering/default.aspx

Salesforce.com – Become a Partner

http://www.salesforce.com/appexchange/becomePartner_appexchange.jsp

Sources

http://www.salesforce.com/us/appexchange/resources/SalesforceBulletin.pdf

http://www.salesforce.com/us/appexchange/resources/5AP-04_Salesforce_MS_07-22-2005_v2.pdf

http://www.salesforce.com/us/appexchange/resources/openair-case.pdf


Send your comments to Karthik

5 challenges for the ISV CEOs

March 15th, 2006

Tags : , , , , , , , , ,

In this rapid and ever changing software industry, ISV CEOs are faced with some tough questions. Addressing these challenges and more importantly executing on them will help you protect and keep abreast of competition.

5. Are you spending on innovation?

Innovation can be of many kinds, depending on the stage and size of the company. Apart from disruptive innovation, ISVs strive for application innovation, product innovation, platform innovation, design innovation, marketing innovation, integration innovation, process innovation, value migration innovation, and acquisition innovation.

When it comes to innovation, the ISV typically looks at the R&D budget as a benchmark in measuring innovation. However R&D commitment is just the beginning and is not really an indication of innovation spend. Up to 95% of R&D budgets are being used by ISV’s to build new features in current products to keep current clients onboard. This leaves a very small amount for true innovation which does not significantly alter your competitive positioning in the market.

Hence the challenge for an ISV CEO is to re-look at the R&D budget and to challenge their CTO’s and Technical Managers to optimize R&D spend and set aside an appropriate chunk of the budget on actual innovation that is focused on delivering the next big thing: that new product that will create the much needed differentiation and not just the new features for existing products.

4. What part of your revenue is coming from maintenance?

In order to meet the needs of customers, ISVs tend to build in every little feature into the product. By doing so, your customer is happy and continues to pay your maintenance fees. Over a period of time, this approach to building software products results in bloated products that become very large and complex to upgrade and maintain.

70% of the code in software products is known to be rarely, if ever, used. The challenge then for ISVs is to productize for majority of the customers and provide custom implementations for the rest. Keep in mind that in order to execute such a strategy you need to firstly adopt an architecture that can support such a code base and implementation model and secondly, adopt a services business model to deliver to customers who need the customizations.

3. Are you focused only on selling licenses?

As an ISV, the typical mentality is to maximize your revenue from licenses – which are known to be the most profitable part of the business. Services revenue – which forms part of the System Integration that goes into delivering a complete solution to the customer, has been carved out as a separate ball game which is handled by the SIs. In recent times, SIs are known to be making up to 50% or even sometime 60% profit margins whereas the ISVs are left with 20% to 30% profit margins. This has led the ISVs to make an active move into the services business to take some part of the pie.

Hence the challenge for ISVs is to plan to not just focus on licensing revenue but to also be part of the services play which is proving to be more profitable. CEOs must plan to have the required implementation team and professional services arm in place, apart from the core product development team to provide the service required.

A word of caution: As you make your move to get a part of the services pie, especially when you also work with SIs and VARs(Value Added Resellers) who serve as your channels to market, make sure not to alienate the SIs as you can be perceived as encroaching upon their space – particularly if the SI model has always been your Go-To-Market strategy.

2. Are you leveraging vendor ecosystems?

SOA, Utility computing, SaaS, open source are not just buzz words anymore but disruptive technologies that are beginning to show customer value. Such concepts are evangelized very effectively by the large vendors as they quickly tie them into their sales and marketing strategies. Small and medium ISVs who have the technology know-how and delivery capability can sometimes get lost in the wave that follows such disruptive technologies.

The challenge for an ISV is to come up with an effective partnering model with the vendors. For example, by creating pluggable or extensible products on top of a vendors existing offering, customers can buy your best of breed functionality while enjoying the benefits of the big boys. This of course goes back to the challenge of innovating to come up with the right product that can be plugged into the vendor ecosystem and to keep abreast with a vendor’s offerings and integration options.

1. What is your product development outsourcing goal?

Many experts say that vendors should have 70% of their product development lifecycle off-shored or outsourced. A large portion of that work needs to be entrusted to a services vendor whose core expertise lies in that area.

Motivations for outsourcing is moving from pure cost arbitrage to value arbitrage – in which specialized companies can provide increased value in developing products with increased time to market and better quality.

Hence the challenge for ISV CEOs is to set up a seamless multi-shore development model which taps into the best talent wherever it exists in the world.

Finally, ISVs should be ready for the next wave of competition from product companies that will emerge from countries like India and China – who can offer your product at half the cost!

Appreciating these challenges, forming a strategy to address them and putting them to execution is of utmost importance in this fast paced industry.


Send your comments to Dev.