In the field of software development, we frequently talk about programming as a logical, analytical, and engineering discipline. Applications are built of state machines, deterministic algorithms, and control flows. But the process of actually writing software, the composition of code, is primarily a creative endeavor.
I’d argue that software development is more of an art than a science. We impose significant constraints but, nonetheless, generate something unique. Given the same set of initial software requirements, I’m 100% certain that 10 different experienced teams of coders would give you 10 uniquely written and structured applications.
Peter Naur, a Turing Award winner, argued back in 1984 that “immediate human apprehension, or intuition, is the basis on which all activities involved in software development must build.”[1] So what does an intuition-centered development practice look like?
Recent research has shown that expert developers build mental models to perform complex cognitive tasks, but that research is fragmented and not yet well developed.[2] According to a paper from 2001 building upon Naur’s Intuition in Software Development, experienced developers often rely on what the researchers call “construals” – dynamic, evolving mental models that bridge the gap between abstract concepts and practical implementation.[3]