Our lab (Service Prototyping Lab) offers a unique homonymous elective module on the bachelor’s level in computer science at the School of Engineering at Zurich University of Applied Sciences (ZHAW): Internet Service Prototyping. In the recently concluded semester term, the module was organised for the first time. Several students were brave enough to vote this combined Monday-morning lecture and lab into their curriculum which takes place in the 5th semester for full-time students and slightly later for part-time students of computer science. This post reflects on the educational motivation, the design of the course, the didactic and technological concepts, and some expected and unexpected results in the wake of rapid technology changes on a monthly basis.
Some definitional remarks first. When talking about Internet services, we refer to networked services which are potentially globally accessible, discoverable and of high quality. The term services subsumes network services, web services, microservices, cloud services and cloud-native applications, among other specialisations, all packaged up as software services which necessitates a delineation from conventional software engineering. When talking about prototyping, we refer to techniques to build these services quickly (but still with sufficient quality) and bring them online easily. A previous blogpost goes into great technical detail about prototyping frameworks and techniques. In general, the field covered by the lecture is emerging. There are few ready-to-use approaches available, and thus blending in some recent research results is a necessity. On the other hand, the market pressure to publish innovative services with low engineering investment is high, and the course attendees benefit from finding many suitable commercialisation opportunities of what is learned.
Educational motivation
A bachelor module should convey solid foundations, but equally contain practical aspects to sharpen the skills and hands-on competences of students who for the most part are going to work as engineers in companies after or in parallel to obtaining the degree. The market for Software-as-a-Service (SaaS) is still expanding. In Switzerland and in Europe, among the driving forces are clouds for banking, the cloud for science (absolute growth) and data souvereignty (shift from existing providers). On a global level, SaaS trends for 2017 are talked about as are more and more target technologies for services and cloud applications beyond virtual machines and containers. The top-3 SaaS issues mentioned in the third report include difficulties to change work (engineering) practices, functionality shortcomings, and poor import data quality. A focused lecture on what these issues mean and practical labs on how to get around them, with some research elements to get around the shortcomings, will help the future alumni to be prepared for a workplace exposed to these trends. The ambition of the course is particularly focused on design for failure and design for cloud reality: Things will break, interfaces will be updated without proper versioning, providers will go out of business, and data cannot easily be migrated out of clouds once migrated in. There are several learning resources on SaaS in general (e.g. the SaaS book), but the lack of focus on technical means for prototyping for imperfect conditions led to the design of the present course.
Course design
The course outline is roughly divided into theoretic service foundations, concrete service technologies, techniques for quality improvement, domain-specific services and prototyping techniques. The foundations cover definitions, terminologies, (micro-)service concepts and fundamental knowledge about marketplaces and Internet protocols. The concrete technologies explain how services are implemented in certain programming languages, how service descriptions are authored and how target execution formats such as containers or hosted functions are generated. There is also basic information on how the execution works and how feedback can be gathered to improve as early as the prototyping and design phases. The quality section informs about quality dimensions and assurance on a legal and technical level. Some operational aspects such as the apparently soon obsolete Swiss-US Safe Harbour agreement are also highlighted. The domain-specific services outline how the prevalent notion of web services is not sufficient for robotic services, mobile services or multimedia services. Specialised protocols and execution paradigms, and sometimes even specialised platforms, are needed. Finally, the prototyping part demonstrates how service environments can be exploited better and faster by achieving a rapid prototype and then pivoting into a conventional quality engineering process.
Central and recurring topics which distinguish this lecture from conventional material about service-oriented architecture are the ‘five ways into the cloud’ approach and the ‘cost vs. time vs. quality’ trade-off triangle. After all, engineers need to take tough but informed and qualified decisions sometimes. Another key aspect is ‘mechanism vs. policy’. Applications ought to implement switches for different runtime contexts and requirements.
Didactic and technological concepts
Each lecture informs about the learning goals, of which one is related to the associated lab. The association is however not a 1:1 scheme; instead, some labs in the middle part of the course are connected to represent a detailed non-trivial service project. Due to the complexity of the topic, few in-line exercises are sandwiched in between the slides. However, several blackboard explanations of algorithms are foreseen, as is on two occasions the reading of a paper to look beyond just technology, and in one occasion the use of a simulator.
On the practical side, given that the focus is on the application level, the students are not expected to run any platform or infrastructure tools. Instead, public commercial and institutional cloud services are offered in addition to private services run for educational purposes. The mostly platform-level services come with an inherent volatility in terms of validity duration and functional scope. They also offer great environments for self-studies and auto-didactic learning of technologies to complement the taught concepts. The lab results are tested on the interface level. The implementation is up to each student or each pair of two, according to the encapsulation characteristic of service-oriented applications. Both Java and Python are the two major languages supported throughout all labs, with some occasional links to more appropriate languages (e.g. Jolie) in between.
Reflections
The course has proven to give students the knowledge and skills to produce Internet services with an adequate effort. The course has also shown that the technological landscape for prototyping is just at the beginning. Through targeted research on tools and techniques, the gap is expected to shrink over the next years. The selective transfer of relevant research results from the lab environment into the course content has been well-received and ensures that in the upcoming years the lecture will remain up to date and the lab will follow the converging technological trends. Due to the changing environment even during the course months, the risks associated with being live on the Internet and in the cloud are exposed and the application and service design can be adjusted accordingly with novel methods including cloud-native application design and stealth computing.