Overview
This course introduces students to agentic software engineering: building software and systems with AI agents through disciplined, repeatable, and scalable practices rather than “vibe coding.”
The course begins by teaching students to implement a simple coding agent. LLM-based agents are themselves a computing platform: they operate through a set of primitives that includes calling an LLM with context, invoking tools, and receiving instructions from a human developer. Each step incurs costs and may introduce errors or security risks. To use agents effectively, students need to understand their anatomy, develop a mental model of their execution, estimate costs, and identify potential sources of failure and security vulnerabilities. This understanding also enables students to customize and extend agents for greater effectiveness and efficiency in a particular development context. The course also examines how agents interact with conventional development tools, such as testing frameworks and source code repositories, and how agentic development changes established practices or calls for new tools.
After learning how coding agents work and how to use them effectively in simple cases, students turn to an engineering-oriented methodology for working with agents. Earlier software engineering courses may have introduced processes, phases, and artifacts such as concepts of operations, requirements, plans, designs, implementation, verification, and validation. These practices can seem burdensome or irrelevant, especially on small projects completed individually or in small teams. In agentic development, however, they become increasingly important. Agents require clear guidance, and their work must be organized into consistent, reviewable artifacts that support evaluation and reliable handoffs among humans and agents. This course therefore reviews key software engineering processes and artifacts, and shows how they apply to agentic software engineering. Most importantly, the course explores how conventional methodology needs to be rethought and modified to support agent-centric softare engineering.
With this foundation in place, students undertake increasingly substantial development tasks. They learn to combine development processes, engineering artifacts, and agent capabilities into repeatable, effective workflows that replace improvisation with deliberate engineering practice. A central learning outcome is the ability to design agentic development workflows: decomposing a large project into steps or waves (process decomposition), dividing an architecture into manageable units (structural decomposition), producing reviewable outcomes, and organizing handoffs between phases, agents, and humans.
After establishing these engineering principles, students apply them to a larger project. They also learn to organize and direct agents during long-running tasks (agent loops) and to coordinate teams of agents.
For hands-on work, the course uses Claude Code as its primary platform. The principles and practices taught are intended to transfer to other coding agents, such as Codex.
Time and Location
- Tuesday (T) & Thursday (U), 2:30pm - 3:45pm
- Durland 1041
Instructors
Professor John Hatcliff,
- Office: 2160 Engineering Hall
- Office Hours: Tuesday (4-5pm), Thursday (4-5pm)
Professor Robby
- Office: 2181 Engineering Hall
- Office Hours: (TBA)
Notice of License
(Codex: fill in based on license language in agentic-software-engineering-public repo)