In chess, there's a moment when a game deviates (if it ever does) from a well known sequences of moves each player has memorized. They call this going "off book". I first heard of this concept while listening to an episode of RadioLab and it struck me as an apt metaphor for modern software development. In programming we have a book of moves to choose from too. Variations of common choices that we all make over and over.
We open with the platform, or platforms, on which our software will run. This could be a desktop or mobile OS or even the web. We probably also need to decide on a minimum level of functionality we'll require.
Pawn to iOS >= 5.1
We then often build upon this initial move by choosing a language. Like in chess, our options for the next move are limited by the choices we've already made. Even still, there are a huge number of options for developing web applications and even on iOS there are alternatives to Objective-C that we might consider.
Bishop to Objective-C 2.0
We could go “off book” here and write our application. And while this would be a novel approach it would probably not be a smart one. Instead we usually employ the help of an existing framework. By choosing a framework we allow the framework authors to make a series of decisions for us in exchange for not only a savings in effort but the benefit of the framework author's experience.
Knight to Cocoa Touch
At this point our framework may provide us with the option of using pre-made templates or scaffolding to get started with. Xcode comes with templates for numerous application types and web frameworks such as Ruby on Rails or Django often come with a way to automatically generate a basic project structure to build upon.
Queen to Single View Application template
This is our opening. We have made our own choices but they are not unique to us. More than likely many others have made the exact same choices up to this point. It's only once we go “off book” that things get exciting. From this point on the roads aren't paved and we have only our own experience and creativity to rely on. Like chess, this is where the game becomes unpredictable and where, more importantly, it gets fun.
How many developers are, at this very moment, staring at a brand new Xcode project? How many have just generated a new Ruby on Rails application? Many of these projects will never see the light of day but any one of them could change the world. This is what keeps me excited about software development. The joy of creating something no one has ever seen before. The challenge of solving new problems. The thrill of going “off book”.