Opportunistic Programming: Writing Code to Prototype, Ideate, and Discover end-us e r soft war e e ngine e ring

speed and ease of development over robustness and maintainability.How do opportunistic programmers make these trade-offs between speed of development and maintainability, and how does the structure of their work compare to more formal software engineering practices? Through our recent research on how op -portunistic programming enables prototyping and exploration, we’ve identified five traits of the op -portunistic approach: Opportunistic programmers build software using high-level tools, and often add new functionality via copy-and-paste from the Web. They iterate rapidly, consider code imperma -nent, and find debugging particularly challenging. We’re using these traits to guide the development of tools that explicitly support opportunism (for more about these tools, see http://hci.stanford.edu/opportunistic).