Mapping to Focus Areas
Below, you find the module's mapping to the study program's focus areas. This is done as a contribution to all relevant focus areas (in ECTS, and content-wise). This is also relevant for setting the module in relation to other modules, and tells to what extent the module might be part of other study programs.
||Module Contribution to Focus Area
|Architecting and Coding Software
This module teaches fundamental quality attributes, their impact on the design of distributed, cloud-based software systems and the selection of suitable virtualization approaches, standard protocols and the like. It focuses rather on technical aspects and complements module Domain Driven Design of Large Software Systems.
|Managing and Running IT
This modules partly teaches operations of IT systems in the cloud.
- Students are capable of
- designing architectures for complex and mission critical enterprise software systems,
- implementing these systems and
- operate them in the cloud
- knowing and trading conflicting interests and concerns of stakeholders,
- knowing quality attributes and their trade-offs,
- specifying architecturally significant requirements in quality attribute scenarios,
- analysing design decisions with respect to their effects on quality attributes and stake-holder interests and concerns,
- leveraging and reflecting on the appropriate use of the right web, virtualization, messaging, security, and database technology,
- using cloud resources like virtual machines, containers and storages in order to operate a system in the cloud,
- in order
- to be able to design usable software systems that are of high quality in every regard and
- to be able to act as an IT architect, e.g., in an IT department of a larger enterprise.
- Software Systems: definition and some basic terms
- Stakeholders: The whole plethora of stakeholder groups and their numerous interests in large projects.
- Quality Attributes
- Performance: What makes my system slow? What workload do I have to deal with? Why is often latency a bigger problem than throughput? Why is it bad idea to fully utilize my system? How can I scale my system?
- Dependability: How can I increase my system’s availability? How can I make my system resilient to faults? Why do I have to trade availabilty for consistency and vice versa?
- Quality Attribute Maintainabilty: What is maintainability? What fundamental cognitive mechanism drive the perception of a code base’s maintainability?
- Security: How can I describe security properties? What are aspect of security? What are common threats for (web based) systems?
- Trade-offs: Why is there no silver bullet?
- Requirements: How can I formulate quality requirements?
- Principles: Which fundamental principles govern architectural design?
- Patterns: How should I distribute my system? How do systems and their parts communicate?
- Middleware: What standard components constitute a contemporary large cloud-based web application? What are load balancers, inbound gateways, caching services, data warehouses, message queues, identity provides etc.?
- Cloud Computing: What kinds of cloud offerings do we have to deal with? How do we create a infrastructure in the cloud for a large scale web application?
- Virtualization: What are virtual machines and containers, how do they differ and what are the trade-offs?
- Web: How do HTTP as the fundamental protocol of the world-wide web, its applications like GraphQL and related protocols like WebSockets and gRPC work? How can web applications be secured by means of Transport Layer Security (TLS) for encryption and server (and client) authentication, OAuth 2 for authorization, and OpenID Connect for user authentication?
- Messaging and Streaming: What do message queues, brokers and streaming platforms like Apache Kafka do?
- Persistence: What kind of (No)SQL databases do we have and what are their trade-offs (relational, document, key-value, graph)? How does scaling work in the database world? How much consistency do I need?
Forms of Teaching and Learning
- Lectures and/or videos. Optionally flipped classroom.
- Assignments. Try out design and technology by yourself.
- Lab course. Form a team, carve out a “research question”, design and implement a (large scale) system, write a “research answer” in a research paper.
Learning Material Provided by Lecturer
- Lecture notes
- Lecture videos
- Assignment sheets
- Templates and guidelines