Software as a Service has many characteristics which differentiate it as a model, from other client-server, or master-slave systems.
The 3 most important are:
1) Efficiency and especially multi-tenancy [or the efficient usage and distribution of computing resources];
2) Reliability including fault tolerance and security; and
3) Modularity, or the creation of stateless, object-oriented, and service oriented code components.
SaaS when done properly entails a much more granular and professional approach to software engineering. This is why methodologies and templates are so important to follow, to ensure that engineers create software that satisfies the above 3 characteristics.
SaaS products need to publish a standard, dependable, and consistent set of APIs, which can integrate with 3rd party products and mobile platforms. A complete set of well built APIs is essential, given that the data cannot be accessed by 3rd parties, but a plethora of systems might need to use the data.
In a SaaS system the performance requirements are much more demanding that traditional software systems. Tenants share the same virtual server and must deliver to clusters of clients, information on demand. The modeling of this server side architecture must therefore be done properly, with a view to increasing loads and requests, and providing enough elasticity to provide required information on demand. There are three models for multi-tenancy sharing: Database per Tenant, Database Schema per Tenant, and a completely shared database amongst multiple tenants with each tenant data segregated by a tenant-id within the physical data record. One could say that Multi-tenancy is the main defining feature of SaaS.
It is obligatory to provide a stateless architecture for SaaS systems. This usually entails building RESTful APIs which are service requests completed on the virtual server and which are completely stateless. REST improves performance, scalability, elasticity, and fault tolerance. When server-side applications are stateless, they can easily scale, by simply creating more server side instances. This is the elasticity characteristic demanded by SaaS.
Alongside REST, a stateless design means using Cloud storage services such as Amazon’s Simple Storage Service, AWS Elastic Block Storage, or Rackspace’s Cloud Block Storage, among many other possibilities. SaaS rides on top of the PaaS and IaaS, and there are many vendors who provide these infrastructures.
SaaS development should also entail using HTML5 which has the advantages of portability across browsers and which should make Java and other plug-ins for Rich Internet Content obsolete over time. RIC is becoming mainstream even in corporations, where images, videos, presentations, PDFs and other flash-premised technologies are routinely used in a business process.
Lastly SaaS development should mean that more time is spent on innovation and less on maintenance. The upgrade disruptions are fewer, the problems around version control are lessened, and the costs to maintain many different versions reduced considerably in the SaaS model.