The Software Development course teaches about software development for problem solving software, specifically optimization problem solving software. While this includes an important chunk of software we depend on, it does not include operating systems or compilers or networking software or GUIs, accounting software. How do the techniques learned from SCG(X) generalize to other domains? The students learn about: The importance of testing: Frequent competitions (= systems tests) force the students to submit programs whose components have been carefully unit tested. Decomposing problems and incremental software development: Breaking down big tasks into manageable tasks. We show them how to break down Baseball into TBall, Slow Pitch Softball, and Fast Pitch Softball. At each level, the agent is broken down into propose, oppose (strengthen, challenge), provide, and solve subcomponents. Security: The integrity of the scientific game hinges on the administrator. If it contains vulnerabilities there are other ways of winning than programming the best domain knowledge into the agent. Importance of shy programming Software evolves and has to adapt to new requirements frequently. Avoid scattering of information in the program. Localize to one point of control, if possible. Feature interaction When a new feature is added, one has to study the interactions with exisiting features. Requirements and requirements analysis Software developers need to help users to formulate their requirements. Software developers need to stand up to their users if what the users propose does not make sense. The requirements are simple: win!!! But implementing the requirements requires careful requirements analysis. The importance of tools to simplify software development We use DemeterF to generate parsers and classes. Students develop tools to analyze the competition histories to improve their agent for the next competition. Importance of software development process Each team reflects on their process. The entire class works on one project using the SCG software development process. Although one agent wins, all the other agents are important facilitators by trying to show the best agent that it contains bugs (and vice versa). This list can be made much longer.