The process of writing programs by trial and error, in order to explore new concepts and find new solutions and algorithms. It is rarely amenable to conventional SoftwareEngineering principles and tools, since the final result is not known in advance. Careful documentation and laboratory notes, and frequent VersionControl check-ins, are important to ensure that the results are fully understood. ExploratoryProgramming is primarily a technique of ResearchAndDevelopment (R&D), that may also be used in RapidPrototyping if the target involves untested design principles. Like with prototype code, exploratory code should never be moved directly into production, though in practice it all too often is.