## Scenarios

#### Production

I'm a developer with a WPF application. I have *zero* way to distribute my
application. I go to NuGet and install the NSync client library.

Now, I want to publish a release. To do so, I pop into the PowerShell Console
and type `Create-Release`. What does this do? It:

* Creates a NuGet package of my app (i.e. via shelling out to NuGet.exe or w/e)
* It puts the package in a special "Releases" directory of my solution (along
  perhaps with a special "delta package" for updates)
* It also creates a Setup.exe that I can distribute to people

I've created a new release. Now, I want to share it with the world! I upload
the contents of my Releases directory verbatim to the web via S3 / FTP /
whatever.

In my app, I call `bool
UpdateManager.CheckForUpdates("http://mycoolsite.com/setup.exe")` - similar to
ClickOnce API but not awful. The library helps me check for updates, get the
ChangeLog HTML to render, and if I'm really lazy, I can just call
`UpdateManager.ShowUpdateNotification()` and get a stock WPF dialog walking
the user through the upgrade. For production applications, I get the
information I need to create my own update experience (yet I don't have to do
any of the actual heavy lifting).

When I call `UpdateManager.Upgrade()`, the application does the update in the
background, without disturbing the user at all - the next time the app
restarts, it's the new version.


#### Users

I click on a link, and a setup experience starts up. Instead of the usual
"Next >" buttons, I see a single "Install" button (think VS11 Beta setup).
Clicking that installs and immediately opens the application. No UAC prompts,
no long waits.

Add an initial hack at the production scenario for nsync
Add an initial hack at the production scenario for nsync
