Guidelines for designing a online spreadsheet system

Online offering of MS Office type applications are becoming more and more mainstream as SAAS applications.Google was one of the pioneers in online document management. I recently had a requirement to develop a Google spreadsheet type application including collaboration features using MS technology stack. I have outlined building blocks and major design requirements for building a robust online spreadsheet management system.

Business requirements: Develop an web based system for managing spreadsheets/excel files online. Some of the vital features are (a)collaboration (b)Excel compatibility (c) Rich feature set like mathematical calculations, data manipulation etc like excel.

Building blocks for the application:
a) Web application – for user interaction b) Spreadsheet component c) File server – For storing documents b) Database – To store user and document information

Our technology stack: ASP.NET, SQL server, FPoint/Editgrid (Spreadsheet component)

FPoint and EditGrid spreadsheet components (which I found after extensive research) provided compatibility with excel and most of the features which excel have. These components provided web interface for our application, something equivalent to a datagrid in a typical database oriented web application. Physical excel files which are created or uploaded by users were our datastore and spreadsheets components were used to present data to user for viewing and editing.

Collaboration features like concurrent file edits, conflict resolution, versioning, auto save and real time content update were programmed custom. Spreadsheet component was used to present data to users from excel files. AJAX based notifications were used to interact with server from client side to record events like (a)edit start and finish (b) file open and close events (c) periodic refreshes. These events were recorded and read by web clients to change, refresh user views. Following are some examples of how some of the features were implemented:

a)If user1 is editing cell A1 of file1.xls and user2 is viewing the same file. AJAX call from user1 (edit start event) will update database with this information. AJAX call from user2 (periodic refresh) will read this information and change the color of A1 cell on user2′s browser.

b)If user1 completes editing of A1 cell of file1.xls and user2 is viewing the same file. AJAX call from user1 (edit finish event) will update database with this information. AJAX call from user2 (periodic refresh) will read this information and change the content of A1 cell on user2′s browser.

We are in beta now and so far we have not come across any performance or concurreny issues.

Feel free to post your comments..