There is continuously increasing demand and enabling technology for automated reasoning abilities across the broad spectrum of training, simulation, and education, as well as in battlefield information, command, and control systems. Cognitive systems represent an approach to automation that “raises the bar” from data and information processing to robust, scalable, and adaptive decision making. This tutorial provides an introduction to cognitive systems, concentrating on high-level design and implementation patterns for human-like reasoning systems. We discuss the development cycle and the role of requirements definition for such systems, emphasizing that cognitive systems must encode not just WHAT decisions to make, but also WHY to make them. We draw examples and comparisons from existing cognitive systems, focusing on the tradeoffs between cognitive and non-cognitive engineering approaches. We focus on examples that highlight the differences between standard software engineering and a cognitive approach that uses “least-commitment reasoning”. We then summarize the criteria by which one can decide which approach is more suitable for a particular problem. The tutorial content does not require any specialized knowledge, but some experience with software engineering or behavior modeling can be helpful. Attendees will learn to recognize problems that most benefit from cognitively based solutions, and they will be better able to assess risks, costs, and benefits of different approaches. This tutorial emphasizes reasoning systems, not learning systems, but it includes a discussion of how the integration of cognitive systems and machine learning can advance the future state of the art. This tutorial is targeted toward developers who might be interested in cognitive approaches to software engineering, as well as customers who have problems that may benefit from automation of reasoning and decision making.