Monday, 12 August 2019

Blockchain - The latest disruptive hype : A different perspective


Every few years, a new concept (be it technology, be it an execution methodology, or a business process, or even a deployment strategy) comes around and everyone in the tech industry gets super excited and wants to be the first one to take it mainstream. 

Having come from a programming background at a grass root level, depicting what and how blockchain works was fairly straight forward. The concept is very good. Like everything else, it is another "option" to consider if there is an absolutely genuine use case to solve a problem.

As of today at the time of this writing, there are extremely very few such ones in the world which cannot be addressed by anything else other than blockchain.

The problem we face is this - Instead of trying to find a solution to fix a particular problem, we tend to find a problem which can be fixed with an available solution. It has become a style statement to say one is doing a lot of research on blockchain these days. Not many of them are technical enough to understand what does that mean. It is one of the modern flashing hobby to do something on blockchain and brag about it. It is a new buzz word which right from the CTO to a programmer are excited about it and I think they are all quite valid. The issue comes when we overdo it.

The same sort of thing happened multiple times in the past. Not all of them were for a specific technology though. A few of them were concepts. In short all of them were so called "disruptive trends".

I remember in the early 2000s, every other IT person I met used to be a "DOT COM consultant". Their job was to sell or guide start ups to go the .dot com way. Then came a burst to show us all the mirror of reality. The world wasn’t ready for digital and connected experience at that time. Now is the time for it and clearly we can see the success of it.

Then there was an era of Open source. Soon, every software, people wanted to build wanted to be open source and the image that was portrayed was, there is no alternative to open source. Then the extremism eventually faded and the industry has now struck the right balance of what can and needs to be open source and what is best to be a packaged or a product solution.

The same happened some time ago with Document based DB / NoSQL. Suddenly when versions of document DB started to go around, people started to believe, RDBMS is dead and it was a big mistake that it even existed. Soon quite a few of them wanted to include NoSQL in everything they do rather than thinking about the right use case, purely because they perceived it as the trend.

Then came Agile. For a few agile fanatics, every problem in the world can be fixed by Agile. I am clear in my mind, AGILE is a solution to a problem which shouldn’t have existed in the first place. 
More on this in my next blog :-)

The point here is not to demean any of these trends. They are fantastic trend changing technologies and are intended to stay. Same is with Blockchain. It is a fantastic concept and a breakthrough technology. But my worry is with the fact that we tend to take these to the extremes.

These are tools (not in literal sense, in some cases, yes) for the architects, business analysts and organisations to consider when trying to fix a business problem. The fundamental point here is - what is the business problem? If the business problem can be resolved by a simple spreadsheet, let's do it. There is no need to build an application to do that. It is a good thing to know (like any other technologies) and keep it in our back pocket to be used when the right scenario arises to put to use. There is never a one size fits all.

I am an architect by profession. Been one for more than a decade, and prior to that more than a decade long of core application and system development as a programmer. Blockchain is a superb invention and a beautiful concept and I am sure I would like to get my hands dirty on it too.  

I am fairly sure, I may not be the only one with this view. I found a few of such articles on the web and providing it here for some additional reading :
https://thenextweb.com/hardfork/2019/02/07/why-hype-is-killing-blockchain-technology/
https://channels.theinnovationenterprise.com/articles/why-blockchain-hype-must-end
https://cointelegraph.com/news/report-companies-dropping-the-term-blockchain-due-to-hype-around-technology
(There are quite a few more, just Google it, to read more)

I suspect I am going to end up ruffling some feathers and I expect quite a few reading this, who advocate Blockchain for everything will try and prove me wrong and so say the least find me completely ignorant on the subject :-).

All I would like to tell them is to look for both side of the coin and wait for the right commodity to spend it. My intention is to suggest them to think and wait for the right use case rather than trying to use it everywhere. There are a few genuine use cases currently and there will be more that will land in the future. Till then, I would hesitate to call it really disruptive.

Disclaimer: All the views expressed here are solely personal views of the author and does not reflect in any way whatsoever the company the author is associated with. The matter expressed here is AS IS with NO WARRANTY explicit or implied.

Wednesday, 28 November 2018

C++/CLI


In relation to a couple of my previous blogs on C++/CLI
(https://sultanate.blogspot.com/2009/08/ccli-alternate-way.html
&

I am tempted to put this whitepaper I wrote long ago which details the need and benefits of C++/CLI.

C++/CLI

Better late than never :-)

Hope this is useful to the programming community.


Friday, 4 December 2015

Migration from Java to Microsoft.NET

Introduction


Java has been around for almost 15 years now. It was a complete paradigm shift and Sun Microsystems' (Now Oracle-Sun) initiative to move away from a conventional platform based programming model to a Runtime based programming model which would allow us to run the same application on different platforms without any code change.

.NET initiative was Microsoft's strategy to confer competition to Sun's J2EE or more famously the Java Technology. Microsoft.NET has been in place for almost 7 years.

This paper is not intended to depict the fundamentals of these two technologies. This paper is to throw light on the ways and means of porting a Java based application to .NET.

In theory, both the technologies are the fundamentally similar. Both are architected in a similar way and both serve the same purpose. There are just two fundamental differences though, between these two competing technologies:


  • Runtime for Java (called as JVM or Java Virtual Machine) is available for all the platforms such as Windows, Linux, Solaris, Mac OS X, Unix etc. On the contrary, Runtime for .NET (called as CLR or Common Language Runtime) is available (as of now) only for Windows. Although there are few open source initiatives to build a runtime for the other platforms too. One of such initiative is called “Mono Project” (http://mono-project.com/Main_Page).


  • The language used for developing applications in Java Technology is confined to only one, i.e. JAVA language, whereas there are quite a few languages that can be used to develop a .NET based applications, such as VB, C#, C++, J#, Perl.NET etc.


There are more differences between the two technologies, but they are not very significant with respect to this article.




Need for Migration from Java to .NET



The most common need for migrating a Java Application to .NET (or even vice-versa) is Platform consolidation. Companies & ISVs are constantly trying to reduce the cost of maintaining their products or software, by keeping the skill sets required to maintain all the products to be common so that they take advantage of a smaller team specialising in “one” technology. And since Java &.NET are architecturally the same, the migration from one another is quite straight-forward.

This article will focus on converting Java applications to .NET.



Types of Migration


There are two types of migration available for converting Java applications to .Net:

  • Upgrade to Visual J#.NET


J# is one of the languages that can be used to develop applications targeting to the .NET CLR. The syntax for J# is same as Java. The reason for existence of this language is to provide a faster migration path for Java developers to learn and start writing software for .NET.

Upgrading Java applications to J# is the fastest and easiest way to port Java applications to .Net. Java developers are instantly productive on J#.Net because the syntax and set of class libraries are similar to Java.

Visual J# .NET consists of a Java language compiler and the required class libraries designed to provide the functionality equivalent to most of the JDK level 1.1.4 packages. The classes in the java.util package support functionality equivalent to JDK level 1.2 class libraries and classes in the Microsoft Supplemental UI Library for Visual J# provide much of the functionality as described in the Java 2 JFC Swing specifications. It also consists of a tool to upgrade compiled Java byte code to MSIL—useful for upgrading libraries to a form that can be used from .NET Framework-based applications. In addition, like other .NET-compliant languages, J# too has full access to the .NET Framework, and includes designers for building Windows Forms and ASP.NET Web Forms based applications.

In many cases, essentially where business logic preservation is a goal, upgrading to Visual J# .NET is the easiest and quickest way to move Java applications to the .NET. With a familiar syntax and set of class libraries, developers can leverage their existing knowledge of Java, and become productive on the .NET immediately. The upgrade is very quick, and developers can begin to add features with the .NET Framework and Microsoft extensions to the Java language.


  • Converting Java code to C# using a Tool


Microsoft developed a tool called the Java Language Conversion Assistant that can be used to convert Java applications to Visual C# .NET. Code that calls Java APIs is converted to comparable C# code that uses the .NET Framework. Because of the complexity of the conversion, not all Java APIs are converted. The Java Language Conversion Assistant converts about 90 percent of JDK and J2EE version 1.3 calls, EJB, JAAS, JCE, JMS, JNDI, RMI, and JAXP, and emits issues in code for the other 10 percent. Each issue is linked to a topic with guidelines for what modifications are to be made and code needs to be written manually.

Although converting to C# is generally more labour-intensive task than upgrading the code to Visual J# .NET, it offers more flexibility to the software because the application is converted to use the native .NET Framework APIs. Hence the converted code will immediately take advantage of all the features of the .NET Framework.

The next section provides a like-to-like mapping of the Class library, components and its implementation in Java & .NET


Migration Mappings


  • Like to Like Components






Java Technology



Upgrade to Visual J# .NET



Convert to C#



Java language



Java language



C# Language



Applet



Supported via J# Browser Controls



Windows Forms control



JavaBean



JavaBean



System.ComponentModel



System.Windows.Forms.UserControl



ActiveX control



Supported via J# Browser Controls



ActiveX control



AWT frame



AWT frame



Windows Form



WFC form



WFC form



Windows Form



Compiled library



Compiled library



Not converted



Resource file



ResX file



ResX file



CORBA



Not Converted



.NET Remoting



System.Runtime.Remoting;



RMI and RMI IIOP



Not Converted



System.Remoting



System.Security



System.MarshalByRefObject



DHTML



Not Converted



System.Web.UI.WebControls



Enterprise Java Bean



Not Converted



System.EnterpriseServices



Java Authentication and Authorization Service



Not Converted



System.Security



JavaBeans Activation Framework



Not Converted



System.Windows.Forms.DataObject



Java Mail



Not Converted



System.Web.Mail



Java API for XML Processing



Not Converted



System.Xml



Java Cryptography Extension



Not Converted



System.Security.Cryptography



Java Database Connectivity



Not Converted



System.Data.OleDB



Java Messaging Service



Not Converted



System.Messaging



Java Naming and Directory Interface



Not Converted



System.DirectoryServices



Java Server Pages



Not Converted



ASP.NET



Java Transaction API



Not Converted



System.EnterpriseServices



Microsoft Transaction Server



Not Converted



C# Class (Serviceed Component)


  • Individual Packages vs. Assemblies






Package



Upgrade to Visual J# .NET



Convert to C#



com.ms.awt
java.awt



Java.awt



System.Windows.Forms



com.ms.com



com.ms.com



System.Runtime.InteropServices



com.ms.dll



com.ms.dll



System.Runtime.InteropServices
System.ComponentModel



com.ms.dxmedia



Not Upgraded



DirectAnimation



com.ms.fx



Not Upgraded



System.Windows.Forms



com.ms.io



com.ms.vjsharp.io



System.IO



com.ms.lang



com.ms.lang



System
Microsoft.Win32.RegistryKey



com.ms.object



com.ms.vjsharp.object



System



com.ms.ui



Not Upgraded



System.Windows.Forms



com.ms.util



com.ms.util



System
System.Collections
System.Diagnostics



com.ms.wfc.app



com.ms.wfc.app



System.Windows.Forms System.Globalization.CultureInfo Microsoft.Win32
System.Environment.SpecialFolder
System.Threading
System.DateTime



com.ms.wfc.core



com.ms.wfc.core



System
System.ComponentModel System.Windows.Forms.Design System.ComponentModel.Design System.Resources



com.ms.wfc.data



com.ms.wfc.data



ADODB
System.Runtime.InteropServices
RDS System.Globalization
System
System.ComponentModel
MSDASC
System.Resources



com.ms.wfc.data.adodb



com.ms.wfc.data.adodb



ADODB



com.ms.wfc.data.ui



com.ms.wfc.data.ui



System.Windows.Forms
System.Data
System



com.ms.wfc.io



com.ms.wfc.io



System.IO
System.Globalization



com.ms.wfc.ole32



com.ms.wfc.ole32



com.ms.wfc.ui



com.ms.wfc.ui



System.Windows.Forms



com.ms.wfc.util



com.ms.wfc.util



System
System.Diagnostics
System.Collections System.Runtime.InteropServices System.Resources
System.Globalization



com.ms.wfc.win32 com.ms.win32



com.ms.wfc.win32 com.ms.win32



Converted to PInvoke calls



java.io



Java.io



System.IO



java.lang



Java.lang



System



System.Threading



java.lang.reflect



Java.lang.reflect



System.Reflection
System



java.math



Java.math



System.Decimal



java.net



Java.net



System.Net
System
System.IO



java.security



Java.security



Not Converted



java.sql



Java.sql



System.Data.OleDb
System.DateTime



java.text



Java.text



System
System.Globalization
System.Resources



java.text.resources



Java.text.resources



System.Resources



java.util



Java.util



System
System.Collections
System.Globalization
System.Resources
System.Configuration



javax.swing



javax.swing



System.Windows.Forms



Retirement of Visual J# & JLCA tool


Microsoft has retired the Visual J# product and Java Language Conversion Assistant tool starting Visual Studio 2008. The J# language and JLCA tool will not be available in future versions of Visual Studio. To preserve existing customer investments in J#, Microsoft will continue to support the J# and JLCA technology that shipped with Visual Studio 2005 through to 2015.




Way forward


As mentioned in the Section 5, although the two (automated) methods of converting Java code to .NET are retired by Microsoft, they are still available to be used to convert 90% of the conversion to make things easier for complete conversion.

The decision to automate the code conversion or to rewrite / re-architect the product is based on 1 governing principle – “How well architected is the original Java System”. If the Java system is very well architected and does not need any architectural change, then using the tool / converting it to J# makes more sense since the framework for java and the Framework for .NET is more or less similar and most of the features have a like-to-like mapping with each other.

If the process of migrating a Java application to .NET is initiated due to an existing poor design of the product, then the best option is to completely re-architect & re-design the product from ground up taking into account the best practices of Microsoft.NET. In this case, use of automated migration may not provide the best solution.


References


http://msdn.microsoft.com/en-us/library/ms973842.aspx

Friday, 28 January 2011

CaaS – Now what is that?

There is too much cloud these days. And still plenty more to come. What started as something called as Application Service Provider (ASP) way back during late 90s, has been transformed to different names with minor changes or additions to it. In the modern era, it is known to all of us as SaaS or S+S (as Microsoft would call it) or in more generic terms – Cloud computing. This doesn’t end here. The cloud strategy matures more and more as day progresses, and we see more variations and more versions of the cloud computing such as PaaS (Platform as a Service) and IaaS (Infrastructure as a Service),

In between all these, what does CaaS mean?

Well, to be honest this isn’t any jargon or buzzword or any standard term used in the Cloud computing arena. This is something coined by me to revive something which used to be once prevalent during the ASP days and the Dotcom boom days and it has tend to remain constant rather than seeing an exponential growth as compared to other cloud terminologies. I call it “Components as a Service”.

Now, before you jump up on me and thrash me for trying to teach you something you already know in a different form, I would like to declare here that this is NOT anything new that I intend to express. This is just an attempt to provide some idea to people thinking to make a new living out of cloud (may be thinking of building a product to be made available to customers as SaaS), that there are even thousands of opportunities to build what I term as CaaS i.e. Components as a Service. Not all software built for the could has to be SaaS. One could build generic parts or components that can be used by others who would build SaaS.

As I mentioned earlier, this isn’t anything new. Way back, in its original form, CaaS providers built many on-the-web “facilities” or “components” to be consumed by web sites. But during that era, the web applications were confined to only e-commerce or a portal in some form or the other. With the cloud becoming more and more a norm to deliver entire software solution on the web, the market for consumption of these components which would be used to build such SaaS applications grows exponentially. The target market for CaaS once that used to be only to Web sites and portals, now is the entire cloud in various forms like the SaaS, PaaS.

Component As A Service

A component as a service as the name suggests is nothing but a ready-made piece of a (web) “functionality” available for other web applications to consume thereby saving their time to build these themselves. One may argue that there is nothing new to this. A custom web control (like Graph or Chart control, a video display control) etc. can be called as a CaaS as they may be used by other SaaS products as is, without them having to develop it on their own. Or in another argument, one may say that any “service” provided in the form of “Web Service” that performs a particular (outsourced) business operation for you may also be called as CaaS. Well the point is not to prove that these are NOT CaaS or otherwise. The point is to throw some light to a broader spectrum of components that can potentially emerge into the cloud arena with a difference.

To my mind, a CaaS is something which provides an end-to-end “independent” business functionality that can be used by other SaaS products within their software so that they would not have a need to build these functionality on their own. It ideally comprises of all the 3 layers of any 3-tier system (UI, Application Logic and Database) but only for that functionality. If you recollect, this is what was once called “Application Service Provider”. So time and again, I would like to stress a point, this is nothing new.

So what can really be developed as CaaS? Well to give an idea, lets look at some existing CaaS that are already available in the market (but people may not know if it could be a potential component that they may use it for their own SaaS product.

Scenario 1

Assume we need to develop an HR System and make it available as a SaaS. An HR system would typically have things like Employee Management, Payroll, Appraisals, Recruitment and so on. So just to make the problem a bit simple to understand the context, we need to develop 4 modules to build the HR system that we intend to make it available as a SaaS. It would be nice if one of these 4 modules is available as a generic “Web based plugin” so that we need to develop only 3 of the 4 modules. Surely the web based ready-to-use plug in should be so configurable that it may not feel different for our customers who would be using our system. It needs to integrate so seamlessly that for a customer who is using our system, would not make out that he is using a different system for 1 of the 4 modules than the other 3.

One such “web based end-to-end recruitment" system available in the market is “Taleo”. (www.taleo.com)

Although they have been providing their Talent Management software as CaaS to most of the top multi-nationals’ web site for Career management, they have a huge potential for being used by SaaS companies (building HR solutions) as a ready to use end-to-end recruitment module. The entire suite offered by Taleo has almost the entire HR operations and they themselves can offer the entire suite as a SaaS to customers, but that’s besides the point. They surely have the potential to offer parts of their software (as a service) to be offered as CaaS for other SaaS companies to consume and thereby giving a them a completely different market to enter.

Scenario 2

Most e-commerce sites these days provide an online chat assistance to shoppers or people who look confused navigating through their sites. This is nothing new to us. But most of these assistance are developed by the e-commerce sites themselves and they provide a very limited functionality. With applications now more widely available as SaaS, providing a Customer Interaction Management would be ideal as the cost of 1st line and the 2nd line support goes down to a great extent. Thus the assistance can be provided by using such web based chat tool. This again, may not be needed to be developed by each and every SaaS vendor (as most of the e-commerce website would have done). They can be hired as a CaaS.

One such “web-based customer interaction management” is provided by a company called “Live Person” (www.liveperson.com). There are far many companies providing similar service as CaaS but Live Person are the oldest and the most popular in this domain.

Scenario 3

The above 2 scenarios are good to explain what a CaaS could be. But they do not provide a new business idea to the readers as the 2 examples I provided are well established market leaders in their own market as CaaS providers. The key point to be noted here is the “concept”. With cloud getting more and more popularity there is a huge potential for building large varieties of CaaS. One such thing that comes to my mind is a Workflow Management component available as CaaS. To my knowledge, there is only 1 company (I may be wrong) providing a Workflow Management as a Service or a CaaS. They call it as WaaS (Workflow as a Service). They are PNMSoft (http://www.pnmsoft.com/workflow-software-as-a-service.aspx). The whole idea of “outsourcing” the workflow operations of our SaaS product to a Workflow CaaS provider for a nominal cost per seat is worth giving a thought.

In short after looking at all the 3 above scenarios, the concept is the same. A idea to develop such CaaS is up to the readers’ imagination. So I hope I have helped you all who are thinking of a SaaS idea to venture into, some food for thought about CaaS too, as a potential.

Wednesday, 1 December 2010

Key Considerations when negotiating a SaaS agreement

A key step in any company’s software purchase is the negotiation of the software license agreement. But negotiating contracts can be a difficult task. It can be difficult to make sense of the legalese, server reliability guarantees and scaling options. Negotiating a Software as a Service (SaaS) agreement presents other unique challenges. Unlike traditional license agreements, SaaS contracts need to spell out the terms of data storage, backup, and retrieval. Dealing with all of these issues can rapidly become confusing.

To help buyers, ERP Software Advice has put together a list of 9 key considerations to take in to account when negotiating a SaaS agreement. The list contains really helpful information on standard clauses such as the contract term and renewals. Key considerations also include a few clauses unique to SaaS like service level agreements and data retrieval.

To get an idea of the advice offered by ERP Software Advice on these topics, here is an excerpt from the article:

1. Pricing and Discounts

By pricing software as a utility service, SaaS vendors have simplified software licensing considerably. Most SaaS pricing is based on a subscription – monthly or annual payments for using the system during that period. The subscription pricing is typically based on one simple metric (e.g. users, records, projects) that roughly ties subscription fees to the value of the system. Finally, SaaS vendors tend to publish their pricing openly.

Even with this simplicity and transparency, there is still a need to be vigilant as a buyer. For one, don’t assume that straightforward published pricing means there isn’t room for some negotiation. Many SaaS vendors will discount up to 20% to win your business. The bigger the deal, the bigger the discount. Moreover, if the vendor’s pricing metric doesn’t fit with your business model, you might be able to negotiate custom pricing. Of course, you’ll have to make a cogent argument that the standard metric fails to balance price paid and value received.

2. Additional Costs

Another key component to pricing is ferreting out any extra costs early in the process. Published pricing may appear to be a good value, but extra fees can add up quickly. Common additional costs include extra users, customizations, integrations, third-party services, training and set-up fees. Work with your sales rep early in the process to understand what additional charges might apply to your account.

By far the best way to keep the additional costs down is to avoid customizations to functionality and integration with other systems. The inherent complexity in custom development and data integration makes these services expensive. We recommend that you start with the base system, make use of its core functionality and then assess how important the custom features or integrations are to your success. Start small, think big, grow quickly.

3. Term

If you are negotiating with a vendor over pricing discounts, subscription metrics and additional fees, expect to give something in return. Oftentimes, this means committing to an extended contract term. Vendors like longer terms because it provides more predictability in their revenue forecasting. Terms can be as short as 30 days or as long as five years. If the vendor wants a long-term subscription, we recommend that you start with the shortest – probably one or two years.

If you do agree to a longer term of three to five years, make sure you have an out clause. Typically this would provide a window of opportunity to break the contract during a specific time window. For example, it might allow you to walk after one month of using the system but before 90 days. Another example might be the ability to break the contract if certain levels of service are not provided consistently.

4. Service Level Agreements (SLAs)

Regardless of what you pay for the system, reliability is paramount. The SLA is the vendor’s commitment to keeping the system up and running. It is typically expressed as a percentage of “up time.” You will almost always see the SLA represented as 99.9% or thereabouts. However, there is wide variation in how that number is calculated. Many vendors will simply start with 100% and subtract time during which their internal systems reported an error. Most of these SLAs leave far too much wiggle room for vendors.

If this new SaaS system is mission critical, push the SLA issue to see who is really ready to stand behind their service. The SLA topic is far too detailed to delve into all the considerations here, so we’ll refer you to this great blog post on SLAs. However, we’ll suggest you focus most on the penalty for breaking the SLA when negotiating. Usually these penalties are paltry discounts paid out against future purchases. Just pushing for bigger penalties will provide great insight into the reliability of the system.

For anyone who is thinking about subscribing to a web-based software system, I recommend this as a must read. The full article can be accessed by visiting the ERP Software Advice blog post at: 9 Key Points to Negotiate in a SaaS Agreement.

Monday, 29 November 2010

Ten Scenarios to go cloud

 

With everyone speaking about cloud and talking about developing applications, sometimes it is confusing to identify if our application really needs to be on the cloud.

If you are an ISV, the answer may be relatively simpler (of course after reading my previous blog  :-) )

If you are looking to develop an application to solve a Business problem or if you are looking to automate any of your business process, the first thing that comes to our mind as of today is, should be develop this on the cloud or are we fine keeping the software on premise.

The purpose of this blog is to provide ten most common scenarios where it may be wise to use the Cloud computing to develop the applications. Please note that these are NOT THE ONLY scenarios for exploiting the cloud platforms. The benefits of cost & maintainability do not form the part of this discussion.

1) SaaS offering

As mentioned in my previous blog, if you are an ISV, then you may want to offer your product as a SaaS rather than selling it as an on premise application. There are various business & technical benefits in doing so, but this is a complete chapter in itself. Developing a SaaS based application from ground up, or building it using a PaaS is again a different discussion. But surely a SaaS is a cloud offering in itself or / and may be build using a PaaS which is also a cloud offering.

2) Scalable Web Application

If you have a very large web application for your enterprise or planning to develop one  or if you have an e-commerce site and it needs to be highly scalable (as scalable as a SaaS application), this can be an ideal candidate for going cloud using a PaaS. PaaS provides flexibility of provisioning for spikes in user load. It provides a cost effective way of using more servers and load balance during load and can get back to minimum configuration when the load goes down. Moreover because PaaS or for that matter even IaaS is offered on pay per use basis, it saves a lot of maintenance as well as operational cost.

3) Dynamic requirement of resources

If you have a requirement for large number of resources and the need for the same is highly dynamic, then the best option would be to accomplish the same using a IaaS. E.g. Assume there is a need is to build a data replication tool and lets assume you may want to test the tool to ensure that data is replicated smoothly across 100 servers. A huge amount of investment has to be made to buy a 100 servers and if you are not able to justify the spend or having a 100% utilisation of each one of them, then its a huge hit on the expense. You may opt to have 10 physical servers and create 10 each virtual machines on them, but again as long as there is a very large business benefit, doing so would not be ideal. Using a IaaS like the Amazon EC2, it is extremely easy and cost effective to hire as many server instances as possible. The same can be released if not required and thereby saving money on resources not utilised. Another similar likely scenario – To perform a physical load-test of an application with 10,000+ users on the portal and would like to gradually increase the load to know the breaking points of the system.

As you may recollect, there are many obvious advantages of using IaaS – no upfront investment, Pay per use, Ready to go server instances, on demand scalable model and many more.

4) High processor intensive application

Assume a requirement of an application that requires High end computing power to likes of 8 CORE processors with 32 GB RAM to run the CPU intensive calculations and it is estimated to have 20+ such servers to accommodate the desired throughput.

The same can be easily accommodated using IaaS as well as PaaS and all the benefits of going the cloud route like the no upfront investment and pay on demand model help us achieve the ultimate goal rather than going for a large upfront capital investment. Cloud is very useful in scenarios where time to market is one of the key requirement. Recently Microsoft showcased Pixar’s application called “Renderman” uses cloud to get the best benefit. Similar application requirements which need extremely high processing power can go cloud way either through IaaS or PaaS.

5) Provide a centralised high volume (yet highly secure) Data access

Application Storage Needs for applications to the likes of On-Demand Training Platform of a company are increasing significantly day by day.  The storage requirements are already in Several Terabytes (TB) (1 TB = 1024 GB) and growing at the rate of 100 GB/month. There is a need to have scalable storage solution at the same time stay close to the cost. A PaaS would be ideal in this case as it will save on a very high upfront investment on servers and maintainability, provide a very high scalability and also a guaranteed reliability,

6) Hybrid Applications

If there is a need to provide an application which has a on-premise version of the software as well as a web version of the same and both need to share the same data source, then hosting the database for such hybrid applications on the cloud is an ideal option. Both types of front-ends can be in sync and there is a huge save on the money spent on the infrastructure to accommodate connectivity from anywhere.

7) Central Data Repository

Similar to the previous type of application, if there is an application (on-premise or web) deployed and used by thousands of users from across the globe (may be from many different branches of a very large multi-national company), then having the database at a central repository makes sense. Although the same functionality can be achieved by hosting the database server on a secured local intranet and making it available for all the branches to connect, this requires a complex infrastructure setup and a huge investment which may or may not be the best option. Instead, having the database deployed on the cloud using either IaaS or PaaS may be a viable option.

8) Temporary requirement of Datacentre space

Most datacentres do not have a business model by which they provide server space on a need basis or on a temporary basis. Ideally they would want us to provide a minimum 6 month or in many cases a 1 year commitment to use their space so that they have a return on their investment. If your situation demands that you may want to use a datacentre only on a need basis and that too for a period of 1-2 months at a stretch or it is unpredictable, going the IaaS is the best option. IaaS providers like Amazon provides a flexible and cost effective mechanism to configure, host and release the server resources on a need basis.

9) Experimental Applications

If you have an idea to build a SaaS application (or would like to test the waters of building a SaaS version of your existing on-premise software, you may not want to put a high upfront investment if you are not sure of it’s success or failure. Using PaaS to develop your SaaS application idea or prototype provides a very high level of flexibility and safety to ensure you have a strong Business case to go back to your management to build a full blown SaaS application.

10) Freeware

If you are into building Freeware, you may want to keep your cost as low as possible, since the most likely scenario for building your brand would be only after there are too many (happy) users of your product. Keeping the cost low till the time would be key to success for your business. Building your application and / or hosting the same at a PaaS provider or an IaaS provider gives you a minimum till you sense the light of success.

 

The idea of this blog is to give people some food for thought about whether to build an application the conventional way or to build it for / on the cloud and there are too many reasons to go for it or even to go against it for each of the above types of application. But in most scenarios mentioned above, going the cloud way is surely a potential option.

Monday, 15 November 2010

Go cloud – An ISV perspective…Part 2 – PaaS

 

This blog is in continuation to my previous blog entry “Go cloud – An ISV perspective…Part 1 – SaaS” which discussed, if ISV needs to go cloud and offer their products as SaaS, the quicker ways to do so.

Just to keep this article independent, I have copied and pasted below the section which sets the context, to make it easier to read. If you have read my previous blog entry, you may directly jump in to the next section “PAAS”.

Typically as the name suggests, an ISV (Independent Software Vendor) could be one of the following:

A) Traditional Software Product companies: Companies who build and sell software products

B) Web based Software companies offering their products as “Services” typically known as SaaS companies

C) Software intensive companies offering services to a market using a software. The main business of such companies is not to sell Software or even SaaS but to “use” them as their tool to sell their services. A typical example of such a company would be one providing “subscription based” clinical information, or a subscription based access to a vast patent database and so on. In such cases, they do not sell software or service instead they sell “information” using a software.

D) A start-up company who intends to become one of the above three.

For the purpose of the article and for ease of reference, let us refer the above as – A-type ISV, B-Type ISV , C-Type ISV or D-Type ISV respectively.

This article is an attempt to provide a clarity to these ISVs as to which of the cloud services they need / should / may need to consider to embark on for the success of their business.

As briefly explained in one of my previous articles, there are three different aspects to cloud computing i.e.– SaaS (Software as a Service), IaaS (Infrastructure As a Service) & PaaS (Platform as a Service). If you are a B-Type ISV,  then I am sure you do not need any more explanation of what SaaS is. Also if you are C-Type ISV then too, you may not be too interested in SaaS as selling software isn’t the main business you are in to. But may be you wish to know more on these other aspects such as PaaS & IaaS.

So this is an attempt from me to put few points across to provide a clarity to all the ISVs out there.

 

PaaS

Using PaaS to build an offering or a SaaS product may be the fastest and the most cost effective way of doing so if you are a Type-D ISV (A start up company). As a start up you may have a fantastic product idea in mind which you think of offering it to prospective customers as a SaaS rather than an on-premise software, but you may not want to take a huge risk of doing the whole thing yourself.

By choosing a PaaS, effectively one gets a rapid application development platform to build the software along with an ease of deploying the software on the datacentres of the the PaaS providers. Because the ISVs do not have to own anything, there is no upfront investment. It is a Pay-as-you-use model and the charges of the PaaS providers can be accounted as an OpEx. This model is very useful if you are not sure how many customers you may procure during your initial years. Also, because most of the PaaS providers provide the flexibility of allowing you to increase the servers on demand, it is extremely simple to manage the spikes of customer growth.

It is very important for any ISV to ensure that their products offer a high quality of service and hence managing the non-functional Requirements is the key. And since the system is hosted on a PaaS, most of these non-functional requirements are already taken care by the PaaS providers. The ISV just need to align their Service Level Agreements they provide to their customers to the Service Level Agreement offered by the PaaS providers.

All good so far, but is PaaS a long term solution from the ISV’s perspective? May be and May be not.

If you already are a Type B ISV, i.e. you offer your product as SaaS, and if you are successful at it, there is no specific need to move your application to a PaaS. In some cases it may make sense but in most cases it would not. The only advantage of moving an existing SaaS application would be to reduce the infrastructure maintenance effort. Moreover if you already have a huge customer base, moving your system to PaaS would mean more charges / OpEx you may end up paying to the PaaS provider for each of your thousand users. Hence the cost benefit analysis needs to be done between moving the offering to a PaaS provider vs. Continuing to host (or using a Data centre) privately.

For Type A ISVs, it could be a good option to try their business model by creating a SaaS version of their product on a PaaS and sense the market reaction. As mentioned in my previous article, one option for the Type A ISV would be to reuse as much existing on-premise code as possible and build a SaaS version of it using methods mentioned in the article.

The more safer option would be to try a separate version of their product to be offered as SaaS, using a PaaS. This would mean they could treat this part of the Business as a start up and all the advantages that a Type-D ISV enjoys using a PaaS, can be exploited. And most of the PaaS providers provide a huge amount of flexibility to reuse existing code and make minor changes to make it available to be hosted for PaaS.

Type-C ISVs don’t need to worry about the PaaS immediately if they are happy with their current business model. The only reason they may or may not switch to use a PaaS would be cost as their customers are not users of their “software”. Their customers are users of the “information” provided by the software. As long as they are able to comply to the Quality of Service and their SLA agreements with their customer, the need to move to a PaaS would only be a Cost benefit in a long term and also their TCO for the business.

For an ISV (as our current focus is only ISV) whether to go PaaS or otherwise, is not an easy choice to make, for the sole reason that going PaaS means paying for each user using the system hosted on PaaS. SaaS is all about acquiring more users using the system which means more payment to PaaS providers. Hence it is extremely important to do a cost benefit analysis to evaluate if the CapEx investment + the OpEx maintenance cost for Self- hosted (privately hosted at a Datacentre), equates a lower TCO as compared to a TCO in case of having a permanent OpEx as charges to the PaaS providers.

Monday, 4 October 2010

Go cloud – An ISV perspective…Part 1 – SaaS

Typically as the name suggests, an ISV (Independent Software Vendor) could be one of the following:

A) Traditional Software Product companies: Companies who build and sell software products

B) Web based Software companies offering their products as “Services” typically known as SaaS companies

C) Software intensive companies offering services to a market using a software. The main business of such companies is not to sell Software or even SaaS but to “use” them as their tool to sell their services. A typical example of such a company would be one providing “subscription based” clinical information, or a subscription based access to a vast patent database and so on. In such cases, they do not sell software or service instead they sell “information” using a software.

D) A start-up company who intends to become one of the above three.

For the purpose of the article and for ease of reference, let us refer the above as – A-type ISV, B-Type ISV , C-Type ISV or D-Type ISV respectively.

This article is an attempt to provide a clarity to these ISVs as to which of the cloud services they need / should / may need to consider to embark on for the success of their business.

As briefly explained in my previous article, there are three different aspects to cloud computing i.e.– SaaS (Software as a Service), IaaS (Infrastructure As a Service) & PaaS (Platform as a Service). If you are a B-Type ISV,  then I am sure you do not need any more explanation of what SaaS is. Also if you are C-Type ISV then too, you may not be too interested in SaaS as selling software isn’t the main business you are in to. But may be you wish to know more on these other aspects such as PaaS & IaaS.

So this is an attempt from me to put few points across to provide a clarity to all the ISVs out there.

SaaS

If you are A-Type ISV, embarking the SaaS route may be an option for various reasons. It is all about entering a new spectrum of market with a complete new spectrum of operational differences as compared to the on-premise sale model. This new deployment and licensing model fundamentally changes the business model of an ISV, impacting many parts of the organisation – marketing, the sales force, presales engineering, deployment, support, finance, and product engineering and maintenance.  It is no longer just sell a license, ship a copy of the product and provide support for an annual support contract. For your customers, your product (or service) is now an OpEx cost and no longer a CapEx cost.

These are the few  fundamental questions an ISV should ask themselves

- Are there a large proportion of potential customers who do not buy your product due a higher up-front CapEx (in short is your on premise product expensive)?

- With your current product are you able to cater to all sizes of customers – i.e. Small, Medium, Large?

- Are you into selling a software solution which customers may only want to buy after they try it out?

- Would you like to add to your customer list, a mass volume of small customers over and above your existing amount of medium & large customers?

All the above questions are attractive reasons for an ISV to move to a SaaS based delivery model. But as mentioned earlier this impacts fundamentally all parts of the organisation right from presales to support, marketing to maintenance, product development to deployment.  If you are a successful A-type ISV, and if your potential target market is reachable with your current offering, then there is no need for you to take the SaaS route. No one would suggest to get away with the current on-premise model and embrace the SaaS way of delivery (if you are already successful). But providing SaaS based delivery as one more option makes a huge sense to cater to many smaller potential customers.

In my next article I shall provide a detailed analysis of what it takes for an ISV to move to SaaS along with comparisons, pros and cons of this delivery model. As soon as this article is ready I shall change this text to point to that article for ease of reading.

Technically there are three ways of moving to / or extending your product to SaaS:

a) Using PaaS to build a new SaaS version of your product

b) “Extend” your product to enable it to be offered as SaaS

c) Completely re-architect a new SaaS version of your product

Option c) may be the best long term option but it is the most riskiest.

Option a) is the easiest option but in a long run may not be cost effective. (Details in my next blog).

Option b) could be a potential option to choose if the existing architecture is modular, flexile enough to accommodate a SaaS version of it too.

The below chart gives you a high level glimpse of your existing product architecture and whether it allows you to move to a SaaS based delivery too. It also states, what it takes for an existing product to move to be offered as a SaaS – depending upon the type of the product

Microsoft has categorised every SaaS based application in to 4 different maturity models. Please refer to this article from Microsoft for the definitions of these 4 maturity models for reference.

MM

Please note that the above chart should be only used as a reference for a faster way to get into SaaS from a traditional on-premise software and may not necessarily the best way to achieve the same.

An ISV should ideally start thinking over to offer their product offering as SaaS with choosing one of the 3 options above with Option C being the most complex and the most expensive one and Option A would be the more modern method and Option B would be a starting point to extend the existing investment on the on premise software.

Friday, 1 October 2010

Cloud Clarity

For many, trying to understand the complexities of Cloud-based services can be like navigating through a minefield, particularly if you're an ISV looking to broaden your product offering.
With that said, here's a quick basic concepts of cloud services, which should help clear the muddy waters a little.

SaaS – Software As A Service

Software as a Service can be defined as "Software deployed as a hosted service and accessed over the Internet rather than a product deployed at the customer’s premises for each customer." This new deployment and licensing model fundamentally changes the business model of an ISV, impacting many parts of the organisation – marketing, the sales force, presales engineering, deployment, support, finance, and product engineering and maintenance.
In words of a common man, an on-premise software application is the one that a user / company purchases and installs on their own machine / server and use it internally to perform a specific operation. The best example of it would be products like Microsoft Word, Excel, Outlook, Exchange Server etc.. The same functionalities / operations are also available over the web, accessed via a Web browser. These are hosted, subscription based “services” which provide a user an option to NOT buy an on-premise software and instead use it as a on-demand service. Taking the same example as Microsoft Word, Excel, if one opts to use a SaaS based offering to meet this functionality, they may choose to subscribe to an offering provided by Google called Google Docs – (http://docs.google.com) or the Microsoft’s SaaS offering @ http://office.live.com/. Thus by using one of these two “services”, the need for installing a software like Microsoft Word, Excel on our local computers is vanished.
Here’s a list of few popular SaaS offerings:
1) Salesforce.com – A complete CRM Suite delivered as SaaS
2) Office Live & Google Apps – Office productivity software delivered as SaaS
3) Microsoft Exchange Online – Email Server Software provided as SaaS for companies who do not wish to host their own Email servers for providing their employee email addresses
4) fourthhospitality.com – Complete Back Office System and ERP for Hospitality industry such as Hotels, Pubs, Restaurants delivered as SaaS
If you are an ISV and you have existing on-premise software that provides a specific business functionality, it is wise to consider providing a SaaS version of your software too.
If you are an end user or a company, thinking of buying a software to perform a specific set of business functionalities, you could potentially think of subscribing to a SaaS based offering as they provide many business advantages compared to on-premise software counterparts
 

IaaS – Infrastructure As A Service

IAAS is essentially delivery of computer infrastructure (typically a platform virtualization environment) as a service. Rather than purchasing servers, operating systems, software, data centre space or network equipment, there is an option to instead buy / rent these resources as a fully outsourced service.
One such example of this service is the Amazon Web Services – EC2 (Elastic Compute Cluster)
With a  “pay-per-use” subscription model, these facilities are really very useful especially for trying out infrastructures.
Here are a few characteristics / advantages of using IaaS:
1) No Capital Expenditure
There is no need to buy any servers upfront as one can rent it thus saving a huge Capital Expenditure.
2) Pay-Per-Use
There is no need to pay for your ‘idle’ resources. IaaS is based on a pay-per-use model. So you pay only for the running server instances. Once done with the usage one can simply ‘switch –off’ the server. This adds to cost-effectiveness.
3) Off the shelf Server Instances
There is no need for formatting  servers or installing operating systems. One can choose the server instance based on configuration required at the click of a button. IaaS providers such as ‘Amazon’ provides quite a few ready made instances of popular Server OS known as ‘Amazon Machine Image’(AMI) thus providing a significant gain for provisioning servers to not days but minutes.
4) On–Demand Scalable Model
IaaS provides an ability to kick-start given number of server instances at a click of a button.
There are lot many more benefits in using IaaS over traditional usage of on-premise servers. I would have a separate blog on IaaS to cover all of it shortly
 

PaaS – Platform As A Service

PaaS is a delivery computing platform and solution stack provided as a service. It facilitates development and deployment of applications without the cost and complexity of buying and managing the underlying hardware and software layers. It provides the facilities required to support the complete lifecycle of building and delivering web applications and services and can also be deployed on the servers provided by the Platform providers.
The following are the three known PaaS providers:
1) Force.com
.Force.com is a Application development & deployment platform provided by Salesforce.com. It provides most used application layers as API which can be used by developers / companies to build applications that can run on cloud.
2) Google App Engine
Google App Engine provides APIs to build and host web apps on the same systems that power Google applications. App Engine offers fast development and deployment with no need to worry about hardware, patches or backups and effortless scalability.
3) Microsoft Azure
Windows Azure is a flexible computing platform provided by Microsoft to build and deploy applications on the cloud. It provides three separate platforms which can either be individually or collectively used to build software solutions:
a) Windows Azure – A platform and a set of APIs to utilise operating system services in the cloud. Windows Azure is an operating system that serves as the development, service hosting and service management environment for the entire Windows Azure platform. It provides developers with on-demand compute and storage to host, scale, and manage web applications on the internet hosted at the Microsoft datacentres.
b) SQL Azure – Hosted version of SQL Server exclusively developed and optimised for providing database functionality to applications developed and deployed on Azure platform. It provides rich set of APIs to build a database for cloud applications.
c) Windows Azure App Fabric – A set of Services provided by Microsoft to bridge the gap between the Windows Azure platform and SQL Azure to build effective clouds solutions. These services include a robust Service bus, Access control, Caching and so on. The goal of Service Bus is to make this simpler by letting an application expose endpoints that can be accessed by other applications, whether on-premises or in the cloud.
The idea of this particular article was to provide the first step to clear the muddy water. There are more cloud service providers than mentioned above. The names provided are only known examples and not the complete list.
I intend to expand more on the above mentioned points on to separate blogs very soon.

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.