The Software as a Service model implies that your software product is available 24/7, scales elastically, is highly available and fault tolerant, provides a responsive user experience on all popular devices, and does not require the user to install a client or perform updates or patches. The software product is always the most recent and up-to-date version and is deployed and maintained using a process called Continuous Delivery.
Continuous Delivery
The Continuous Delivery process is defined by the following capabilities:
The software is developed in a high-velocity, iterative approach and is deployable throughout its lifecycle.
Deployment to dev, test, staging, and production is managed using an on-demand automated process.
If there is ever any issue with the deployment process, fixing it takes higher priority over delivering new features.
Continuous Delivery requires a product-oriented software development process that is guided by a set of unwavering principles that prioritizes the frequent release of high-quality working software.
Agile and Scrum
Agile and Scrum have become the prevalent methodology and process for high-velocity software development with teams organized into small cross-functional groups and whose goal is to deliver working, running software at the close of every sprint. Agile defines a set of core principles that are known as the Agile Manifesto:
We value individuals and interactions over processes and tools.
We value working software over comprehensive documentation.
We value customer collaboration over contract negotiation.
We value responding to change over following a plan.
That is, while there is value in the items on the right, we value the items on the left more.
In order to apply these principles in the context of an actual project, Ken Schwaber and Jeff Sutherland introduced Scrum, an evolutionary, adaptive, and self-correcting approach to the software development process. Scrum is lightweight, simple to understand, but difficult to master. As with any endeavor, discipline is required in order to achieve a high-quality result.
Scrum is based on an empirical process control theory that asserts that knowledge comes from experience and decisions should be based on what is known. Scrum uses an iterative, incremental approach in order to forecast and reduce risk.
There are three pillars to the Scrum Process:
Transparency : A common language is used to describe the process and is used by all members of the team.
Inspection : Scrum artifacts are frequently inspected in order to detect variances in progress toward a goal.
Adaptation : If it is determined that an aspect of the process will produce an undesirable outcome, the process must be adjusted as soon as possible to minimize damage.
The Scrum Team works together through the well-defined Scrum Process to develop a product backlog, identifying a set of backlog items that will be developed during a two- to four-week sprint called the Sprint Backlog. The Scrum Master and Development Team meet daily in the Daily Scrum to identify what was accomplished the previous day, what will be done today, and if there are any blocking items. This process is monitored closely to determine if the sprint is on track or not. At the close of the sprint, running software is delivered and a Sprint Retrospective meeting is held to review progress and provide input into the next phase of sprint planning.
Scrum, when combined with Agile Principles, provides a process that is more in harmony with the way that software developers work individually and as teams, and has resulted in increased velocity and quality over the traditional gated waterfall process. Software development techniques have emerged from this new way of teaming, such as the use of immutable interfaces and mock objects to support independent workstreams and early testing.
In addition to the need for a high-velocity, high-quality development process, Software as a Service requires a set of principles and processes related to bringing software products to market. Lean engineering is a methodology and process that looks to increase product quality and customer satisfaction by including the customer in the process and providing access to the product early and often. Customers can provide critical feedback that is used to guide product design.