the references clearly show that the target is the IaaS
layer and not the PaaS layer.
4 POSITION: CLOUD
SOFTWARE ENGINEERING –
ONE SIZE FITS NOBODY
Based on the above discussion on the difference and
distinction between IaaS and PaaS resources
provided by various clouds there is not a single
cloud software engineering process but several
forms that have to be distinguished based on the
target system resource cloud offerings (aka, IaaS or
PaaS).
4.1 Resource Centric “Traditional”
Cloud Software Engineering (IaaS)
The resource centric, or “traditional” cloud software
engineering process is very similar to software
development for on-premise data centers. The main
difference is that the resources that are available for
deployment like VMs or bare metal machines reside
in the cloud instead of in on-premise data centers.
Aside from the added complexity of operating
those resources remotely, from a software
engineering perspective there is no significant
difference as the same principles, same techniques,
same architecture trade-offs and same software
technologies apply. The similarity of the software
engineering applies also for the deployment,
operation and maintenance activities, not just for the
development aspect. Some slight differences exist in
terms of latency and throughput considerations,
locality, jurisdictions, but no real or fundamental
differences.
The focus of the cloud software engineering
approach for IaaS is two pronged:
Infrastructure. The software engineering
process has to develop the artefacts required to
setup the infrastructure like executables,
Docker containers, queue system
configuration specifications, and so on.
Functionality. As a second focus, the
software engineering process has to develop
the functionality of the application that is
executed on the infrastructure. A proper
design and decomposition has to take place in
order to ensure that the application runs on the
infrastructure in terms of correctness, latency,
throughput, and so on.
4.2 Functionality Centric “Innovative”
Cloud Software Engineering (PaaS)
Clouds are providing and continuing to provide
higher level functionality that at the same time
abstracts away infrastructure resources completely.
For example, AWS Lambda functions can be
defined and executed without having any visibility
(meaning, deployment, operations, and maintenance)
of the underlying infrastructure resources.
Software engineering processes that target higher
level functionality are very different from traditional
software engineering processes as they have to
follow and to match the abstraction provided by the
cloud. Most or even all aspects of system
architecture, infrastructure resource creation and
management, scaling, failure recovery, etc., do not
have to be addressed by the software engineering
process at all anymore. Instead, the focus will solely
reside on the application’s functionality, and how it
will be structured, in terms of granularity, efficiency
of algorithms, reuse techniques, etc.
In context of functions, for example, the
granularity of functions will have to be decided on,
how functions are implemented for reuse, common
parameter data types, etc.
The cloud software engineering approach for
PaaS is single pronged (compared to the two-
pronged approach in case of IaaS). The only focus is
functionality, and the artefacts to be developed by
the software engineering process have to fit the
target resources that the cloud PaaS implementation
requires, e.g., functions, events, or subscriptions.
4.3 “Transitionary” Cloud Software
Engineering (Mixed Case of IaaS
and PaaS)
As long as clouds provide both, IaaS as well as PaaS
target system resources, use cases might exist that
require to address both. For example, it might be that
a special database management system is required
that no cloud provider makes available in their cloud
by default as a PaaS service. In this example IaaS
resources have to be created in order to install the
special database management system.
The application functionality, however, can be
implemented using PaaS resources like functions,
for example. These functions are executed in the
PaaS abstraction, while the special database
management system is executed in the IaaS
abstraction.
From a software engineering perspective the
question arises if there is a separate software