Whatever creativity is, it is in part a solution to a problem.
Creating software is a multifaceted activity. A common perception is that software creation is synonymous with programming. This is roughly analogous to saying that creating movies is synonymous with cinematography and audio and film editing. Like creating movies, creating software involves many complementary activities, such as evaluating the opportunity and making an investment decision (analogous to the movie producer), working out the details of what features and capabilities to provide (the screenwriter), qualifying and refining the ideas with real users (focus groups), creating an architecture (the storyboard), managing a large group of programmers (the director), implementing the software through programming (cinematography and editing), testing (prescreening), and maintenance (making versions for foreign markets, videotape, DVD media, and so on).
As stated by Brian Aldiss, the goal of all this activity is to satisfy users' needs or solve their problems, although users are themselves not always able to represent or express the opportunity in advance. Creativity in software is manifested through the identification of novel opportunity as much as through novel realization of that opportunity, and accomplishing both requires understanding of the capabilities and limitations of the information technologies, empathy for users and a deep understanding of their context, and an understanding of how the market in software works.
The movie-making analogy suggests parallels with software creation, but there are major differences as well. Compared to cinematography and editing, programming requires considerably deeper technical skills (at least with the current state of technology), represents a much larger fraction of the total investment, and requires larger groups, with the attendant coordination and management issues. As compared with the relatively standardized movie media and projection systems (e.g., 35mm film), software development must deal with a greater diversity of environments (e.g., Mac, UNIX, Windows). Compared with the relatively passive act of movie watching, users interact more deeply and in more complex ways with software, and often have to deal with installation and administrative issues, introducing many issues of user learnability and usability (see section 3.2.7) to the creation process.
A comprehensive treatment of software creation—indeed just the programming phase—would fill many books, so aspects that are especially relevant to nontechnical perspectives on software are emphasized in this chapter. Some other technological issues are discussed in other chapters, notably an overview of information technology (IT) in chapter 2 and security technologies in chapter 5. Meeting the needs of users was discussed in chapter 3, the needs of other stakeholders (such as operators) are described in chapter 5, and the working of the market in software is a primary topic of chapters 6–9.
The first step is to review general issues that strongly affect ultimate success in creating software. Following this, the overall organization of the software creation process is examined, including sequential, iterative, and community-based approaches. The remainder of the chapter examines technical issues highly relevant to the industrial, social, and economic properties of software, including alternatives for software distribution and execution in the Internet era.