Wednesday 29 September 2010

Non-Functional Requirements for SaaS

All software products are built with a set of Functional as well as Non-functional requirements. The key role of the Business Analysts and the Business owners is to define / articulate the need for each and every requirement whether functional or non-functional. Functional requirements are surely the must haves and it is a prime responsibility of the Business owners and the analysts to define it or at least justify the need for it.

It is very important, one must also define Non-functional requirements and give equal importance to it along with functional requirements.It may not be appropriate but surely certain lenience in defining Non functional requirements can be incorporated in case of a on-premise software.

If you are an Independent Software vendor who would like to provide your Software as a Service, or if you would like to extend your current offering to a different market on the cloud by providing a SaaS version of the product, then the game changes completely.

In most cases, a SAAS solution is a SINGLE CODE BASE, with a SINGLE LOGICAL DATABASE serving 100s of customers and potentially 1000s of users with completely different usage patterns, different individual tweaking requirements, different requirements for interfacing with their in-house systems and so on.

Hence it is one of the top priorities to not only define the functional requirements, but also define and design the system to cater to a very clearly and strongly defined non-functional requirements. A non functional requirement as the name suggests does not provide any “business functionality”, but instead they glue the functionalities together better. Although there are too many things that can be defined as a “non-functional requirement”, I would like to highlight the most important ones that any SaaS Architects or Analysts should keep in mind, define them and most important “architect & design” the software to ensure it addresses these requirements.

Please note that there isn’t any specific priority order for each one of them and the importance of one over the other is completely dependent upon the business need and the type of the software to be delivered as a SaaS.

Also please note that not all of them may be a key requirement for every software and hence it is up to the Analysts and the Architect to define the same. The below list may also be used as a check list for the designers of the system to ensure they have it covered in their definition.

--

Security

No software can escape from the need for security whether SaaS or on-premise. But when it comes to SaaS the requirement turns out to be more stringent. As an ISV, the responsibility of the security (whether data security, network security or intrusion prevention) all of it lies with us. Any subscriber to a SaaS would expect assurance that his information and data is secure enough more since they are not under their own radar but we are the custodian for the same. In a multi-tenanted environment, no one would want their data to be visible to other companies using the same system. This is upmost important and should be one of the key points to be considered while defining the data structure for the software.

The network security and intrusion prevention is not the point of concern for the provider of a traditional on-premise software since the responsibility of deployment and network security then is the responsibility of the client rather than the software provider. When it comes to SaaS, these things are equally important for it to be considered.

I had attempted to provide a simple security checklist in one of my previous blogs which may be used by all parties involved in SaaS whether it be an ISV providing the software or it be a company subscribing to it or a user using the system.

Scalability

Scalability of the software takes a completely different turn when it is a software delivered as SaaS. Any software (whether SaaS or on-premise) would have to consider scalability when it comes to handling “volumes”. And since SaaS is eventually all about multi-clients with multi-users using a single code base, volumes are inherent characteristics of the software. There are no second thoughts to not to consider a Scale-out architecture along with a Scale-Up architecture for any SaaS system. The better the software more number of clients and more number of users are bound to signup for your service.

The software at the architecture level has to natively support a Scale-out architecture whereby you should be able to expand your system to virtually any level up to the theoretical maximum. We never know if our software / service is successful, we could be the next billion dollar salesforce.com :-)

Availability / Reliability

As the case applies to security, the same applies to availability or reliability of the software. It is one of most important factors / characteristics that must be inherently be part of the skull of any SaaS product – Reliability.

A very clearly defined SLAs (Service Level Agreement) has become a norm these days for any SaaS offering and not adhering to it may even have legal implications. With more and more improvements in the technology and also increase in competition, customers expect a 99.99% uptime of the service and no longer just 99.9%. So that mathematically equates to 1 hour of downtime per year. Everyone is aware of the fact that no software can be 100% bug free but at the same time, the software needs to be architected and designed to ensure that the downtime scenarios are well handled and there would be no / minimum data or business loss to the clients. And most importantly ensure your SLAs are aligned to the SLAs of your hosting provider / partner. Always use a hosting provider. Never DIY.

Performance

One of the prime reason Google Search engine and Google’s web browser Chrome is a hit is because of its speed to respond. Although no one would expect your software to be as quick as Google (although if you could get there then nothing like it :-) ) but in terms of response times to any business operations, they have to be quick enough to an extent the users do not get a chance to think about the speed. Defining a clear SLAs for response times is also key for any SaaS offering. Although defining a higher response times in your SLAs to avoid legal implications and to play safe may be a good idea to an extent, but not at the cost of users realising the system is slow and start disliking it.

Perform frequent checks for ensuring the performance is at the top of the agenda. Cache the most frequently accessed metadata, service your database by optimising your queries and ensure all the queries in your database uses the most appropriate indexes. Minimize the network operations, use compression where appropriate. Load balance your web servers and if other factors permit, localise your server location.

And most importantly do not over engineer your software. The above points like caching, database indexing etc., may not always be the solution for performance and hence should be done as a calculated exercise,

Configurability

One of the critical success factor of any SaaS application is configurability. It is even more important to ensure configurability to a great extent is taken on board for a SaaS product since its native characteristics of having a single code base. Configurability in SaaS aims to provide customers with a multitude of options and variations to provide a unique experience. Not just that but having the system configurable allows you to sell different services based on various different licensing modes / editions, e.g. Software – Lite, Software – Professional, Software – Ultimate and so on. Ability to switch on and off a particular feature or an option to change the way a user uses the functionality or even ability to change background colour of a screen, may not be the most important thing to have within a software, but surely it is one of the key differentiators / selling factor for your offering. As mentioned above, providing different editions to different target provides an option to expand market share more easily.

Also since every customer would want to use the system in a different way to suit more to their internal culture, more the configurable your offering the better.

Flexibility / Extensibility

Software offering never ever ends at Version 1. It is relatively easier to incorporate or add functionality / remove / modify functionality from an on-premise software since the consequence of doing so would not affect your other customers. They have separate copies of your system and providing more “bespoke” tweaking is possible in such cases. A SaaS offering is a single piece of software catering to all your customers. Hence the architecture should take in to account an ability / room to extend the software with more features and functionalities to provide more value to your offerings in the future.

The most important point one must avoid for a SaaS offering is to provide bespoke implementations for different customers (with switches). Ensure the software is extensible enough to avoid such scenarios.

Usability

Usability Engineering is a vast area in itself and over the years companies have started taking User experience more seriously rather than just providing “a” User interface they think is appropriate. It becomes even difficult to implement a good user interface and interaction for a SaaS offering since the spectrum of users increases more than ten-fold. A single software instance needs to provide a unique experience and functionalities to different customers and in turn various different users of each customer. It is advised for every SaaS offering to undergo a Usability engineering exercise before getting the Graphics team to define the user interface for the software.

Interoperability

And last but not the least, no software can work stand alone. There is always a need for integration of our systems with other systems providing specialised services. E.g A Purchase Management system may need to provide a facility to interoperate with a financial accounting system. If you are providing a Financial accounting system as a SaaS offering, the need for interoperability would be even higher than the other kinds of business software for obvious reasons.

The key solution to address this non functional requirement is to implement a Service Oriented Architecture. It is important to expose most of your key interoperable business functions in the form of well documented Web services to allow other systems to interact and interoperate with your system. Since we are talking about a SaaS offering, and as mentioned earlier, the requirement of individual customers may differ and hence the SOA layer to the software needs to be well thought of and well documented to avoid any need for bespoke implementations. Also it may be required to consider a facility natively part of the system’s architecture to provide a facility to import and export of raw data to allow other related systems to make the best bonding with your offering. Needless to say, interoperability should not be provided at the cost of security and hence due care needs to be taken to ensure both marry well within the system.

--

There may be many more points which may be considered important as non-functional requirements, but the above ones are the most important and common ones which almost all the software delivered as SaaS needs to consider and take in to account in their design and implementation.

The success of a software (especially delivered as SaaS) depends not only on its functional requirements but also to a very great extent the….NON-FUNCTIONAL REQUIREMENTS.

Wednesday 8 September 2010

Cloud–What it means to common man / end users?

Every single person who can talk little about IT is talking about cloud. Every other technical article on the web we read is about Cloud, directly or indirectly.

But, for an end user, is the cloud a new terminology to digest? Is it something they need to learn? Is it something they need to consider to make the right choice they make in their IT purchase or IT consumption?

The answer to all these fortunately is a NO. Although cloud as a “terminology” a recent development, but the implementation has been there for ever.

Do you ever remember Yahoo briefcase? Or have you not been using Web based free email services such as Hotmail, Yahoo, AOL, MSN, Gmail and likes of it? Have you not used RapidShare, to share large files with your friends or peers?

What are these……..?

These are nothing but “Services” available on the cloud for your consumption. Some are free, some are chargeable. But the purpose is the same. They provide you with a “facility” to do things without any / few changes / configurations on your local computer.

Think of a scenario of the distant past, when emails were for privileged ones (before Hotmail, Yahoo and net@address revolutionised the concept of “Email for all”). In this scenario, we would have bought / subscribed to an Internet Service provider, installed an email client such as Outlook, Outlook Express, Netscape (yes they too existed then) etc. Then we would configure this client to connect to the ISP’s email server and then start using the service.

Then came Hotmail, Yahoo, net@address, with a concept of – Nothing to be installed on the local machine. Everything happens on the internet. All you need is a web browser. (Free or not free is a different angle to this), So what we have here in this case, is an email service available for us to consume in the cloud. Plain and simple.

Thus before this concept started, everything was local. All software we consume to perform various of our day-to-day activities such as writing documents, creating spread sheets keeping a track of our accounts, checking and replying emails, running a particular Business application such as an Inventory Management system etc., were all local. Then came Web based email, which eliminated the need to installing an email client on our computer. Then came something like Yahoo Briefcase, that more or less reduced the need for us carrying floppy disk to carry files that needs to be accessed by us from two different computers.

Thus two of our activities were replaced by services on the internet and we didn’t need software to be installed on our computer to perform these activities.

So what has happened now that wasn’t there before?

For the past few years, what has changed is the fact that more (or almost all) applications that we use on a day to day basis for productivity or activities, are now available on the internet which means, each service we use on the web, we do not need to install that specific software on our local computer. For writing documents, word processing, maintaining a Spread sheet, software like Word, Excel are no longer the only available option. One could think of using Google docs or Office Live (complete office suite available on the web that can be consumed by just using a web browser).

World has progressed a lot on speed and availability of the internet. Hence even to listen to music, we do not need to install software such as Winamp, Media Player or Quicktime. We could listen to music available on the internet which can be streamed to a browser and provide the same experience.

For almost all the applications we use on a day-to-day basis we now have a choice of whether to install the relevant software locally on our computer or just use a browser to connect to an online version to achieve the same functionality.

The main reason for devices like netbooks, tablets and slate computers like iPad sell today is because we are in an era where most of the common tasks are achieved over the web and hence these devices can afford to be light and handy.

How far do we think this will go?

Well this is a difficult question to answer. As an hypothetical example, if we assume we consume 20 applications for performing our day to day activities, before the Hotmail, yahoo era, all 20 were essentially software that were to be installed locally on our computer. With Hotmail / Yahoo etc. we needed 1 less (emails were available on the web). Over the years the number has gone up to a great extent that we have almost 15-16 of them available on the web.

Are we saying we do not require any kind of software installed on our local computers?

The answer to this would depend upon two things – a) Is there a cloud equivalent of the software we use, and b) the level of our usage. We have to accept a fact here that the web cannot provide (at least as of today) all the richness in terms of user experience as well as functionality that the desktop equivalent provides. It is said that 20% of the functionalities provided by an application are used by 80% users and the remaining 80% of the functionality of that application by 20% users. Unless over the years if the cloud becomes even stronger or as strong as the desktop, the decision of selecting an application to be installed locally or do we use the application available over the internet depends up on the criteria of which category in the 20%-80% ratio, we fall under.

E,g, If you are a very heavy Spreadsheet user, then you would surely need to use Excel on your local computer since the web version (whether be it Google Docs or Microsoft Office Live) does not provide the complete richness that the desktop version provides. That said, may be in the near future, the web version would end up being as powerful as the desktop version, then the choice would be based on other factors such as cost etc..

On the contrary if you use a spreadsheet for the most common activities, the web version is a serious option one could think of since it not only provides a huge cost benefit, but also extra security of backups etc..

Thus in a nut shell, as an end user, we have far more options to choose from, for your productivity applications we use. It is no longer choice of software for your desktop but also option to go the web way.

Google is in the process of building an OS for the cloud called Chrome OS, which means we would not need anything installed on our computer other than a web browser. If it succeeds, everything will be in the cloud!! Possible?? – Time will tell!!!