Cloud Computing (MPCS 51083)
Cloud computing is being widely adopted by enterprises of all sizes due to the low initial investment required, attractive operating costs, and elastic capacity that can best serve the highly variable demands of modern applications. Software engineers must be familiar with cloud computing technologies since many new applications they develop will be deployed “in the cloud”, and existing applications will often require integration with cloud-hosted services to take advantage of new capabilities.
This course provides an introduction to cloud computing with specific consideration for application development in two contexts: highly scalable (or so-called “web-scale”) web applications, and enterprise applications in a hybrid environment comprising both on-premises and cloud infrastructure. We will focus primarily on infrastructure and platform services, and will introduce software-as-a-service from the perspective of a consuming application. The course will emphasize practical applications of cloud computing technologies, with sufficient exploration of their theoretical underpinnings to inform architectural, design, and implementation decisions. We will use commercial cloud services provided by Amazon Web Services to build and deploy "real” cloud-hosted applications.
Topics
The syllabus will vary slightly each quarter, but we typically cover most of the following topics:
- » A (very) brief history of distributed computing and clouds
- » Cloud computing defining characteristics
- » Virtualization and Infrastructure-as-a-Service
- » Application concurrency and data consistency models
- » Identity and access control in cloud computing systems
- » Cloud economics
- » Cloud storage systems: Characteristics and tradeoffs
- » Inter-service communication: Messaging and notifications
- » Cloud security, privacy, and policy compliance
- » Serverless computing, microservices, and containerization
- » Automated deployment and operations techniques
- » Fault-tolerance and disaster recovery strategies
Coursework and Grading
One or more short programming assignments will be due each week. You are required to complete a subset of the assignments, and are encouraged to also work on a few optional assignments to enrich your learning. Many of the earlier programming assignments will provide components to be used in later assignments, so it is important to stay current on coursework.
We use specifications grading in this course. Your final grade is determined by the assignments and your performance in a series of very short quizzes; these cover material that you should be familiar with if you have attended class and completed the assignments. See the course page for more details.
Prerequisites
This course assumes no prior knowledge of cloud computing. Programming assignments require familiarity with Python and use of Linux commands, as well as simple shell scripts. We will use the boto SDK for Python to access Amazon Web Services, and some assignments, including the capstone project, will make use of Flask, a Python-based micro-framework for web applications. A brief overview of boto, the web framework, as well as a list of reference materials will be provided; additional concepts will be introduced as they are needed to complete assignments. Knowledge of web application development is not required, but students with little or no understanding of web methods may find some assignments particularly challenging. Ideally, students should understand the fundamentals of web APIs in general, and the REST approach in particular. An understanding of database concepts, such as referential integrity and ACID properties, is also useful.
Are you ready for MPCS 51083?
Students in past years have struggled to keep up with homework assignments due to limited experience with Python and knowledge of the Linux command line. If you're planning to sign up for this class take a few minutes to review the following; if you have doubts about your proficiency in these areas please talk with me before registering.
Python Proficiency
Consider the code snippets below. I expect that you can determine the result within a few seconds, without consulting any external source.
# Sample 1
a_list = [[5, 2], [9, 4], [3, 3]]
a_new_list = sorted(a_list, key=lambda x: x[1])
print(f"The new list is {a_new_list}")
# Sample 2
if 'object_id' in request:
response['fname'] = request['object_id'][:request['object_id'].index("~")][-36:]
else:
response['fname'] = 12 * '0x0'
# Sample 3:
import os, json
content = json.loads(request.body)
working_dir = content['fpath']
file_name = content['fname']
if not os.path.exists(working_dir + file_name):
os.makedirs(working_dir + file_name)
Command Line Proficiency
You should be comfortable writing commands and scripts like the samples shown below.
# Sample 1:
aws ec2 describe-instances --output text | grep RESERVATIONS | awk '{print $3}'> sec_groups
# Sample 2:
export MPCS_LOGS_ROOT=./log/
export MPCS_LOG_FILE=mpcs.log
[[ -d ./log ]] || mkdir $MPCS_LOGS_ROOT
if [ ! -e $MPCS_LOGS_ROOT/$MPCS_LOG_FILE ]; then
touch $MPCS_LOGS_ROOT/$MPCS_LOG_FILE;
fi
If you understand the commands covered in the MPCS Unix Bootcamp, you should be OK. In addition, William Shotts's The Linux Command Line is a very approachable tutorial/reference for those new to the command line.
Web Programming Proficiency
While this is not a web development course, our programming assignments are all related to building and interacting with web services via APIs. At minimum, you should be familiar with:
- HTTP request-response mechanisms, including request headers and response codes
- HTTP verbs and their appropriate use (e.g. using GET vs. POST)
- The REST (REpresentational State Transfer) architectural style and approach—check out this nice summary if you're a little rusty
- Simple HTML forms (input field and tables) and basic CSS
- Working with JSON, and especially Python's
json
library
The Real Python guide to requests has a good introduction with simple examples that you can test using Postman, a very versatile API development tool.
Advanced Topics in Cloud Computing (New Course - Spring 2025)
Cloud infrastructure greatly simplifies the development of highly scalable applications, but certain classes of applications introduce additional challenges and design tradeoffs. Consider, for example, what happens when a mobile streaming service is temporarily unavailable, or when the network glitches while you're placing a stock trade. In this class we will develop a deeper understanding of such problems, explore solution approaches, and apply cloud technologies to solving them.
Topics
Armed with a solid understanding of key cloud computing concepts, we will touch on a selection of the following topics:
- » Cloud infrastructure for supporting mobile applications, including approaches to “always-on” applications, QoS and the PWA model, and dealing with low-latency data.
- » Working with streaming/real-time data, including approaches to managing time series data at scale (time ordering, missing data, duplicate data), understanding capture/processing/action timing challenges, and working with IoT devices.
- » Operating scalable applications in the cloud, including automated deployment, monitoring, adopting an appropriate security posture, and maximizing availability.
- » Securing cloud applications, building off the shared responsibility model to define an appropriate security posture and make security-conscious deployment decisions for a distributed application.
Coursework
This course is structured primarily around multi-week projects, each comprising multiple assignments. The assignments incorporate both design and programming components, and may require substantial supplementary reading/research in addition to Pythion programming and shell scripting.
Grading
We use specifications grading in this course. Your final grade is determined by the assignments and your performance in a series of very short quizzes (these cover material that you should be familiar with if you complete the prescribed readings and attend class regularly).
Reference Material
While there is no prescribed reading for this course, we will review the approaches developed by Geoffrey Moore, as presented in his classic book "Crossing the Chasm", so feel free to get yourself a copy if you want to dive deeper into some of the concepts.
Prerequisites
This course requires that you have successfully completed the introductory Cloud Computing course (MPCS 51083), and have familiarity with shell scripting and data serialization/declarative languages such as YAML and JSON. No application-specific knowledge is assumed; we will provide introductory readings for each topic, but those with experience in the application areas covered may find the material easier to understand.
Product Management (MPCS 51240)
Product management is a cross-disciplinary endeavor that sits at the intrersection of software engineering, marketing, and the user experience. Product managers are expected to create products in support of business objectives, ensuring that products deliver value to customers and are feasible to build within varying sets of constraints. In this course we will introduce the role of the product manager and demonstrate the challenges faced by product managers. We will explore approaches for managing the tension that exists between software development and product delivery, using the minimum viable product and the product roadmap as critical tools.
Key themes for this class
What does it take?
Understanding the elements of "good" product management—and identifying a lack thereof.
How do you do it?
Getting to product market fit quickly; aka "Perfection is the enemy of progress".
Why isn't it working?
Understanding the value of iteration and failing fast; aka "You don’t know what customers value".
What's a good product?
Delivering a product that meets customer needs; aka "Customers don’t know what they need".
Why is it so hard?
Aligning product focus and business needs; aka "Stay in your lane and drive on the shoulder".
What happens next?
Planning for product maturity; aka “You gotta know when to hold ‘em and know when to fold ‘em”.
Product management concepts factor into every aspect of the business and hence can be approached from a number of different—but complementary—perspectives. This course skews towards a more business-focused discussion of product management, while incorporating key technical elements.
We set out to understand what it takes to deliver a minimum viable product (MVP), including a review of the different types of MVPs and when to use each one, the various tools that can help us define an MVP, hypothesis testing, and metrics. We then work with tools for agile product design such as user stories, model users (personas), storyboards, and ready stories. This is followed by a very high-level survey of UX design approaches and UI design (from the perspective of achieving desired product and business goals, not visual asthetics), product architecture considerations, and how to work with engineering teams. The second half of the course focuses on managing the product roadmap: working with product backlogs; prioritizing features and managing tradeoffs. We bring some of these techniques together in a multi week-long simulation of an actual product—with some shortcuts, in the interests of time!
While most of the course is geared towards developing early-stage products in small companies or start-ups, we also touch on techniques more relevant to larger or more established product organizations, e.g. managing product portfolios, complementary products, and planned obsolescence.
Coursework
This course incorporates a mix of case studies, in-class exercises, product design sessions, written work, and presentations. A key element of product management is communication, so there is an expectation that every student will contribute regularly to class discussions. You will work in small groups during class, rapidly developing new concepts and ideas which you will then present to the rest of the class. Unlike many other courses in the MPCS, you will be called upon to challenge the ideas presented by your fellow students—in a constructive manner, of course!
Grading
The grade for this course is split roughly evenly between homework assignments, quizzes, and in-class activities. Note that overall class participation will be a substantial component of the final grade.
Reference Material
While there is no prescribed reading for this course, we will review the approaches developed by Geoffrey Moore, as presented in his classic book "Crossing the Chasm", so feel free to get yourself a copy if you want to dive deeper into some of the concepts.
Prerequisites
This course assumes no prior knowledge of product management concepts or specific technologies. However, you may find some of the material easier to put into perspective if you're familiar with software design patterns, or have taken one of the other software engineering courses offered in the MPCS.
Globus
Globus (www.globus.org) is software- and platform-as-a-service for research data management, developed and operated by a group of us in the Office of Research and National Laboratories. The service offers a suite of data and user management capabilities to the research community, encompassing file transfer and sharing, identity management, and data publication. Globus capabilities are accessible via both a web browser and REST APIs. Web access allows Globus to address the needs of research labs through a software-as-a-service (SaaS) model, while REST APIs address the needs of developers of research services, who can use Globus as a platform to simplify access via data portals, science gateways, and other web applications.
Globus is currently used by all R1 research institutions in the USA, many national laboratories, federal facilities, as well as hundreds of non-profit and commercial organizations around the world. Researchers have transferred more than an exabyte(!) of data and shared billions of files using Globus since we first deployed the service in November 2010.
About Me
I'm the customer guy at Globus, and my goal is to make Globus sustainable so that every researcher in the world can use the amazing data management capabilities we've built. This means getting institutions to upgrade from the free usage tier and take advantage of the many premium features in the service—if you're reading this and still using Globus for free, I hope you'll contact me about subscribing :-)
At the same time I have the urge to scratch my technical itch, which I do by teaching Cloud Computing and Product Management in the CS Masters program. Every year I have the privilege of working with dozens of smart, considerate students, who go on to achieve great things. It's always gratifying to see and hear from our graduates when they land that special job with a leading tech company or a non-profit that's changing the world. Thank you to those who stay in touch!
Other than that, I'm still recovering from my management consulting days ...being an advisor to early stage companies is my occasional fix, so do let me know if you have a nugget that you want to turn into a gold bar.
The obligatory formal "bio" is included below.
![](assets/img/team/vas.jpg)
Vas is Chief Customer Officer for Globus, innovative software-as-a-service for research data management, developed and operated by the University of Chicago. His responsibilities include sales, marketing, business development, customer support, training, and working with current and prospective users to grow adoption of the service. Vas is also an Adjunct Associate Professor in the Masters Program in Computer Science, where he teaches courses on Cloud Computing and Product Management.
Vas has over 30 years of experience in operational and consulting roles, spanning strategy, marketing and technology. An experienced software product marketing professional with a passion for shaping emerging technologies to bring innovative products to market, Vas has nurtured early stage companies into successful businesses, and consulted to companies on a wide range of strategic issues.
Prior to joining the University, Vas was a principal at Strategos, the innovation consulting firm founded by Gary Hamel, where he led Fortune 100 management teams in defining their growth agenda. Earlier, Vas led product management and marketing efforts at Univa, a leading provider of grid and cloud computing solutions.
Earlier in his career, Vas served as vice president of product management and corporate strategy at CrossWorlds Software, the enterprise application integration pioneer, and was part of the leadership team that grew CrossWorlds from a start-up to a successful public company that was subsequently acquired by IBM. Vas was also chief technology officer at Cimnet Systems (acquired by Consona), a company specializing in software for electronics manufacturing, vice president of strategy and product management at Promeria (acquired by Ariba), a supplier relationship management company.
Vas' management consulting experience includes Booz & Company (now Strategy&), where he focused on supply chain strategy and customer service level optimization, and Accenture, where he helped clients in the financial services industry automate trading and back office operations.
Vas holds an MBA from the Ross School of Business at the University of Michigan, Ann Arbor and a BS in Electrical Engineering from the University of the Witwatersrand in South Africa. He remains a network partner with Strategos and is an advisor to early-stage technology companies on strategy, marketing, and product management.
Contact
Email:
vas@uchicago.edu
Call:
+1 (773) 702-5376