Programming is both holistic and task-level thinking: You treat every project as a system. Systems thinking requires you to both analyze and synthesize. For example, for system applications, you must be able to break down complex processes into discrete tasks. At the same time, every programming decision you make on the discrete task level must support the overall user experience and user stories. Programmers don’t think in content slides.