By: Nathan Dunlap, Director of UX Integration of IdentityMine, who shares his experience developing for Windows Phone 7 Series using the Silverlight platform.
Let’s not waste time, I might as well jump to the obligatory and cliché quote you all know is coming (I will even help make it obvious by wrapping it quotation marks and citing it): “It is true, if you are already developing applications for .NET, you are already a Windows Phone developer.” – Nathan Dunlap, www.designerslove.net.
Be prepared to hear this often over the coming years as the Windows Phone becomes a popular development platform. Now that I have gotten a firsthand experience developing applications for Windows Phone 7 Series, including the Graphic.ly comic book reader and the Seesmic Windows Phone client, I can unabashedly repeat this statement in the echo chamber.
Unabashedly? You betcha. I’m all in.
Okay, here is the nitty gritty about my experience and the “surprises” I discovered as I began to explore Windows Phone 7 Series development. Let’s start with the fact that I belong to the ragtag band of misfits called “integrators.” You know those folks who don’t really know who we are, toeing the line between user experience (UX) designer and user interface (UI) developer.
Surprise #1 - There is a place for me, the integrator.
My skills are applicable to this brave new world -in current and previous mobile platforms, not so much. In competing technologies there is a pretty clear delineation between the skills of the different roles and disciplines. You either need to be very well versed in languages and frameworks that have a steep learning curve, or you get to live in an extremely disconnected world of “design it and pray your developer-in-crime doesn’t destroy your heart and soul when they mangle your ideas into a ‘real’ application.”
Surprise #2 - Performance wasn’t a stumbling block.
I fully expected mobile application development to be a huge compromise between design intent and hardware capability. Guess what? It’s not. In fact, 60 fps animations are the norm, not the exception. Granted, I set CacheMode=BitmapCache enough times to make me really think this should be a default value on all FrameworkElements, but I didn’t have to do any other funky wrangling to maintain fast and smooth animations. In full transparency, we did have some snafus when we tried to use MultiScaleImage with local content in the Graphic.ly comic book reader. When we embedded Deep Zoom Composer generated content into the application, a nonstandard use of the control, we encounter some issues with stutter as we navigated around the MultiScaleImage. This turned out to be due to downloads of new image content not being on a background thread. The downloads are actually optimized to use a background thread when they come from a Web server so they do not interrupt the UI thread. But get this - the application that was demoed on stage at MIX10 was using the nonstandard local content approach and the stutter was not that apparent. The amazing thing was getting to see actual comic book images when we did run the MultiScaleImage content from a remote server. The performance was downright amazing. Come on folks, we are talking about Deep Zoom on our phones - it’s a sweet experience. A great way to look at nose hairs (watch the keynote demo for the reference).
Sure, I made some really logical decisions about how to optimize my graphics based on my previous years of Web design experience, but it was a much looser dependency than I am used to. GPU based hardware acceleration is a beautiful thing.
Surprise #3 - Deploying to a device couldn’t be easier.
I have a decent amount of experience deploying to other mobile devices. None of them are nearly as easy as Windows Phone 7 Series: plug it in, deploy to device, and away we go. The first time I deployed an app to the phone I ran upstairs from my home office to show my wife the app that proudly displayed “Hello Nate.” She looked at me confused - I’ve shown her much more impressive stuff. I tried to answer the puzzled look on her face, “this is a big deal. I’m going to be doing a lot of these apps in my career. This was my first one!”
Surprise #4 - The emulator is a great developer environment, especially if you have a multitouch machine on Windows 7
We were testing a lot of swipe, and pinch and zoom. If you haven’t done a lot of multitouch development, then you don’t know intimately that your finger does not behave like a mouse. Anybody who has done development for multitouch on Microsoft Surface knows that using the mouse in the Simulator is no replacement for actual hands on interaction. Fingers are erratic little buggers. The path and velocity from a swipe gesture with a mouse looks very different than one from your finger. When your finger is roughly 1/3 of the size of the screen real estate, you quickly realize the importance of being able to test with actual touch. The emulator works, and it works well. Translation from the emulator to an actual physical device is not a huge delta in experience.
Tip: take the time to resize the emulator to match the actual physical size of a phone. Feature request: I want to rotate the phone by grabbing on the simulated physical are of the phone…
Surprise #5 - There is not much new to learn.
The platform doesn’t expose a huge toy box of framework elements developers have never experienced anywhere else. What did I have to learn? ApplicationBar, Pivot controls, and matching the planar projections that are used in the default UI. ApplicationBar is easy - it has Buttons and MenuItems that behave just like anywhere else. It’s a pretty magical moment when you set SupportedPageOrientations on the Page element and rotate the phone and all of your UI updates using the rich layout system the platform provides and all your Button icons in the application rotate to match the orientation. The ApplicationBar is a very well thought out control that is very versatile. Stylistically, it doesn’t impose on your UI and it truly does create a common unified area for application commands.
Want a custom splash screen? Create a 480x800 .jpg image and name is SplashScreenImage.jpg and voila! So easy I didn’t think it could be true, but it was. Need something from one of your existing libraries? No extra work, just add the reference. For example, the “cover view” in the Graphic.ly app needed a WrapPanel, so I added a reference to the Silverlight.Toolkit DLL and got the whole treasure trove of goodies.
Surprise #6 - I am more excited about this platform than I even thought I would be.
There is just something so incredibly personal about being able to hold your own application experience in your hand and be able to interact and manipulate it without an intermediate input device like a mouse or keyboard. Mobile computing experiences is the most exciting area to be developing in right now in terms of creating appropriate and useful user experiences that really affect your daily life. As I spent more time getting familiar with working on these kinds of experiences, it really started to sink in how tangible the reward was.
I’ve been asked countless times by my peers over the last couple of weeks, “so what do you think?” and honestly, my immediate response every time has been that I am actually getting to take the years of experience and skills I have invested my career into to a platform and form factor that really matters to me. This is a platform I will use in every facet of my life and everywhere I go: When I am on vacation and when I am at work. My kids will use it and my parents will use it.
Where it is really easy in other computing experiences to create experience for technologies sake, in mobile computing it is much easier to use technology for experiences sake. It’s just a huge benefit that the technology I already know is .NET and so I am already a Windows Phone developer. (do you hear the echo?)