Modern software applications operate under ever-changing constraints. Requirements might change during development or new insights might invalidate an already planned approach. In contrast to building a hardware product, developing a software product therefore requires flexible and adaptive techniques. Additionally, with Artificial Intelligence (AI) applications, data collection and management require special attention. This course teaches the basics of professional software design and applies it to the development of a production-ready AI application. It familiarizes students with best practices in software engineering, and prepares them for the development of reproducible, adaptive and maintainable AI software applications in practice.