When I was in the Silverlight Product team, I had many visions of where I wanted to take the product beyond where some of my co-team mates were comfortable with (slow painful incremental growth in terms of change
One of the main focal areas I wanted to fix, was the overall Installation and Preloading Experiences for Silverlight. In that, i think it’s essentially the like the IRAQ war of software
(i.e. meaning, its so far embedded now that fixing it is going to take generations of change).
Here is how I’d love to see it change course.
Change the way Silverlight Boostraps.
If you new-up a project within VisualStudio or Expression Blend, you will effectively get an automated boostrapped solution, meaning inside your main Silverlight project via App.xaml.cs
for example, you should see something like this:
private void Application_Startup(object sender, StartupEventArgs e)
this.RootVisual = new MainPage();
What effectively is happening here is that Application Class is the default root for Silverlight and when you inject “MainPage
()” into the RootVisual
its pretty much the same as if you went:
UserControl MyUserControl = new UserControl();
MyUserControl.Content = new MainPage();
What I would love to see firstly is a separate Project called “BootStrapper” created as part of the new-up Project template – that or it prompts you to create one much like it does at the moment with ASP.NET Website (More on that below)
The point is, it draws the developers around the worlds attention to the fact that the Spinning Balls are really bad idea to hand out to public facing websites.
Why are they bad you may ask?
It has to do with the way end users approach your experience and assuming they have Silverlight in place, it’s important that you give the end users some clues as to what they are loading and what is the likely time or more to the point is this going to take forever?
Impatience is a virtue all users have so its going to be very hit or miss depending on what the context of your application expected usage is and lastly the end users broadband connection and tolerance for plug-in experiences in general (I counted like 5 variables of failure that can occur per user when I did some research on this back at Microsoft).
The rotating balls don’t offer much value, there’s nothing to keep you entertained or interested in the experience other than balls rotating and some % of where I'm at.
Soliciting the end users.
Just like a hooker, your job is to entice the person before you to take faith in the hopeful reality that this will be an experience to remember (ok that analogy just took a nose dive in very bad way). Your job is to firstly convince the end user to install Silverlight should it not be in place and secondly and just as importantly your job is to convince the end user that sticking around is also equally important SHOULD they have the installation in place of Silverlight.
You first need to have inside your webpage “You don’t have Silverlight, go get it and here’s what you will get in return
” vs the dreaded “Get Silverlight
To illustrate this importance; when I was at Microsoft we noticed on Microsoft properties an increase in installation of Silverlight when we actively went out of our way to solicit end users to Install vs the default “Get Silverlight” medallion – information is power, users want power just as much as the next person, power of choice.
Once they jump through that hurdle, you need to again keep their attention on you and try and convince them to avoid the temptation of alt-tabing and twittering etc while they wait – think of all end users as a 3 year old child's attention span and you will be better positioned for success here.
You need to create a preloading experience that is as helpful and joyful as the intended experience you’ve just spent $thousands
of dollars creating (why drop the ball at the last yard!
– for you NFL fans)
In this you create something that is part of the theme or take a page out of MAXIS Games where you insert random crap that’s quite funny – example:
“…Initializing launch codes for anti-nuclear attack"
”…Growing Llamas feet so it can walk…”
”…Handing a Monkey a nail gun for entertainment value..”
Keep them informed but not too informed as you want to balance out keeping them informed whilst not making them aware of “time
” as that is the enemy, “time
”. I’ve even lied once due to a latency hit that I couldn’t avoid, so I put in the initializing splash screen “Checking Security Credentials
” (Given I found end users were more likely to wait for a serious thing like Security to validate vs.. staring at rotating balls of stupidity).
That all aside, this is the “Why” both Preloading/Splash Screens and Install Templates are critical for SIlverlight’s future success as this in turn is what end users judge the technology on (Do i need to bring up the “Skip Intro” debacle of the early 2000’s where Flash Intros were all the rage and bad bad experiences with Flash occurred as a result).
First: Install Templates.
Imagine if you will, you new-up a Silverlight Project. You’re asked obviously what type of project you require and then in the next step it prompts you with the below:
You then choose your Install Template and it can be both an Online or Local template (more on Silverlight Marketplace potential later). Once you select the template, this then will take a vanilla themed experience and injects in into your MySilverlightProject.BooStrapper
project. You as a developer and/or designer can then focus on swapping out these assets and messaging to suite your intended experience context for your brand etc (much like the larger brands have done with Silverlight today – e.g. MSNBC etc).
Second: Preloaders/Splash Screens.
Same approach as the Install Templates, except it automatically attaches the intended original Silverlight project you wanted as being the “First” to load (but with enough breadcrumbs in code that you can also swap this out should you choose to).
Once you have gone through these three templates, your solution should have 3 projects in place.
- Project1 – MyProject.Silverlight.BootStrapper
This project’s job is to handle the preloading of Project2, as in order to preload you first have to have a project that is very small in size for Silverlight to load, then once it’s loaded, Silverlight can then automatically bring down the .XAP file (secondary but main project) in a more controlled and aesthetically pleasing manner.
- Project2 – MyProject.Silverlight
This is the project you originally intended to use, exact same structure(s) as you have today in Silverlight.
- Project3 – MyProject.Silverlight.WebThis is the project which is in place today in terms of automatically generating the said ASP.NET / HTML project code you need to test with. Except, it also injects a bunch of files/scripts which handle the “Does the end user have Silverlight?" which then based on a Boolean result reacts and produces a prompt that goes beyond the “Get Silverlight” medallion.
Ok, you can technically write a VS Template or WPF/WinForms app today do the above without having to bug Microsoft (i’ve started and stopped 3 times – stopping only due to boredom or busy). Why this needs to come from Microsoft is simply put – Marketplace
We should have a concept where we can buy/sell Themes, Behaviors, Preloaders and Install Templates etc from one another whether it be by cash, XBOX Live Points or whatever currency you want to barter with. Point is, we should foster more of an exchange
based community that is more consolidated and branded under a single point of entry for both Silverlight and Expression (say NO to Expression and Silverlight/WPF segregation– designer / developers need to cross-pollinate).
I’d love to see a similar concept as preloaders.net
for the Silverlight community only less fragmented and one that has a much smoother tooling integration experience (I’ll come back and work at Microsoft if need be to make this happen).
I’d like to see us as a community leap frog the Flash community in terms of handling these two experiences. As the below illustration highlights the fatigue gates associated with any plug-in experience.
Why leap frog Flash? it’s nothing to do with their community it has to do with “learning from their mistakes” as at the moment Flash folks have figured this out and have a bunch of strategies (whilst fragmented) in place to fix this broken situation. We on the other hand are like the retarded step-child twice removed when it comes to picking up on this, and it erks…ERKS
..me (for I am ERKED
) to see the rotating splash balls and Get Silverlight Medallion – which incidentally were just a placeholder animations and images that someone forgot to come back and replace.
We fix this we drive Silverlight installation experiences up by minimum 20% per month, I guarantee you that much. As it will lesson majority friction associated with Silverlight and drive a much more deeper awareness of the product amongst consumers who aren’t reading the blogsphere for “What is Silverlight?”
The “What Is Silverlight” is still a question being asked a lot today. It’s one thing to answer that, but it’s another to attach friction to and users experience of the said product once they’ve found a satisfactory answer to that question with bad preloading/installation experiences – OUTSIDE – of Silverlight today.
This is both a Microsoft and Community problem that needs immediate resolution.
Call to Action: Contact Microsoft and hammer away at this issue, get more of a community groundswell behind it so that we can all move forward. I remember inside the team, community reaction was one thing we often would use to trigger emails with one another on why change is important.
Vote here so this can be escalated to the Silverlight Feature planning team! - : http://dotnet.uservoice.com/forums/4325-silverlight-feature-suggestions/suggestions/632735-silverlight-installation-and-preloader-experience-