Hitting the Curve: On WPF and Productivity

So there is this contradiction that many people have when they first dig into WPF.  Let’s take a hypothetical developer. Let’s call the developer Jane. She attends a conference or goes to a user group meeting and gets interested in WPF. She reads the literature and marketing materials and hears a message of productivity and how quickly she can built great looking apps with new UI paradigms.  She’s heard this tagline: “all this WPF goodness and it only took X weeks to build!”

So, with this expectation, Jane starts digging in, playing with some samples, doing “hello world” type applications and testing out different features of the platform. The API makes basic sense, although feels a bit foreign.  Then, after that initial scratching of the surface, Jane wants to do something more complicated. And as she starts plumbing the SDK or searches for samples on the internet in vain, she feels, well, not so productive.  The more she searches through the SDK, the more she realizes how deep WPF is, how many APIs there are, how many levels and layers to unravel and understand. Not to mention the fact that many of the APIs in the SDK are not extensively documented. Cryptic errors, XAML runtime crashes, databinding that doesn’t work, animations that don’t behave: the list of potential pitfalls is numerous.  And, at this point, Jane is start to question the touting of productivity of the platform. Was she sold a bill of goods?

Let’s be clear: WPF comes with a curve.  I’ve now watched a bunch of developers hit that curve.  And the curve is steep.  We’re talking between two weeks to two months of curve depending on the developer and the level of experience/intuition the developer has.  There will be moments of total mystification and plenty of moments of illumination. It is at once painful and enjoyable, if the developer delights in the discovery of a deep and well thought out UI platform.  It is at once familiar and alien.  There are many similarities to other UI development paradigms: styles feel like CSS, well sort of.  XAML code behind feels like ASP.NET, well sort of.  3D feels like DX or OpenGL, well sort of.  Routed events feel like .NET events, well sort of.  Dependent properties feel like properties, well sort of. The list could go on.  But admidst these (sort of) familiar metaphors there are so many alien concepts that must be mastered: control templating, storyboards, databinding come to mind immediately.  It is not a trivial curve and don’t expect to be productive on day 1 or even week 1 or even month 1.  

Where the productivity kicks in is after the curve is hit. Once you grok how much power is latent in the platform, how much is done for you, how well thought out the infrastrucutre and platform is, you can really start to fly.  I’ve seen this happen again and again: these aha moments.  In fact, I continue to have them myself and I’ve been working with WPF for two years!  The four partner projects I referenced in my previous blog post also are testaments to this phenomenon.  All four of the projects had developers who were at the top of their game in their area of programming expertise, which ranged from DX to Flash to Win32 to Java to .NET.  All hit the curve and all then started getting majorly productive once they understood what the platform was doing on their behalf. I have numerous concrete examples of this, which I hope to start sharing as much as I can in future posts.

I’ll be curious to hear if this little mini-essay resonates with the WPF early adopter community out there.  Have you hit the curve? Are you hitting the curve?  What helped?  What hurt? What’s it like hitting the curve?  The more we all document the curve, the better.  In fact, that’s really one of the central goals of my blog: to faciliate hitting curve and document landmines as best as I can. 

Comments (15)

  1. Похоже, философия новой платформы WPF довольно сильно отличается от обычного под

  2. that definately resonates.  I’ve spent the last 2-3 weeks working with WPF in the evenings and weekends and was very productive.  But now that I am starting to do things that aren’t so easy, I am hitting brick wall after brick wall.  The annoying thing is (as with any prerelease software) that I don’t know what is a lack of understanding on my part, and what is a bug/missing feature in the framework.

    I am making a concerted effort to try and contribute to the WPF forums.  By working through other people’s issues I’ve found things become a lot clearer.

    There isn’t a curve.  It’s more like jumping of a cliff, hitting the ground hard, dusting yourself off an then finding another cliff to do the same over.

  3. mike h says:

    When I was first introduced to WPF I was immediately interested in its 3D capabilities.  I had no prior 3D experience, so that was my first part of the curve: learning 3D fundamentals like positions, triangle indeces, normals, right-hand rules, etc.  Then I really dug hard into as many 3D examples as I could find to understand how other developers were accomplishing things in 3D (e.g. Hogue’s examples, your Sandbox example).  

    So now I’m getting comfortable with 3D, and I’m done building basic 3D models sitting in a viewport that don’t really do anything.  I want to create a real app.

    Now I realize I know 3D, but that’s almost all I know of WPF.  If you asked me last week to create a basic window with two panels separated by a splitter, I couldn’t do it.  Now I’m getting into Expression Interactive Designer and am trying to better understand basic UI controls, styles, and data binding.  Even with Expression doing the UI work for me, I’m still lost at times when trying to understand the XAML it creates.

    Once I get a UI going and want to use real data, I’m expecting another brick wall to run in to.  This all comes with the territory of very new technology though – it can be frustrating, but you have to remember that this is new ground and there’s not a lot out there to reference.

  4. ppavan says:

    One way to climb the curve faster is to publish good books. I know there is Chris Anderson’s book, there is the XAML in a Nutshell book and I guess Petzold’s book would be coming out soon. I have read the first two more than once. My problem was that I used to use later versions of the WinFX framework and the books used an earlier version. Lot of things had changed between CTPs and was a brick wall in many ways.

    For early adopters there is no other way but to hit the wall constantly and bring it down. However I am happy that the Expression Interactive Designer is releasing its CTPs insync with the framework. EID is certainly helping a lot in learning the framework as it evolves.

    – Pavan Podila –

  5. > Have you hit the curve?


    > Are you hitting the curve?

    Every day 🙂

    > What helped?  

    Documentation, books, forum, newsgroup, blogs.

    > What hurt?

    Not enough information in the documentation, books, forum, newsgroup, blogs. 🙂

  6. Ok, i am going to try to keep this short.

    WPF has a huge number of cliffs; and there is one good reason; it’s a totally new API where the whole base paradigm has been re-thought out. That has not been done for many years – its as big as a jump from Curses to the Wind32 API. The end result of this is that each programmer that comes to WPF has to re-work their existing methods of implementing code; effectively a massive re-train. For example:- the separation of UI from Data is now split into UI->Style->Data Templates->Collection Views->Data. Its a lot to take in.

    Darren (as usual 🙂 ) is right; expect to throw out your first iteration of the application, you simply can’t expect to get it right the first time; I did not either. As the code samples and documentation improve then it will get better, but also we need to set out some best practices to help guide people.

    So, why bother ? WPF abet a complex product; offers a unique platform; the 3d features, the clean separation of form vs function, the data binding. Yes, it takes time to learn, but when you have, its worth it.

    Dive in, the waters warm.

  7. Technology says:

    Karsten makes some good honest comments on WPF learning curve.  WPF integrates multiple visual technologies into one unified API and that brings with it a big learning curve.

    The good news is t …

  8. Konstantin G says:

    It’s not often I write new blog entries, so here is a summary of what’s going on here:

    Preparing for…

  9. I have a lot of respect for Miguel and his work with Mono but statements like “Avalon is the J2EE of GUI Apps” is just nonsense.

    Having worked for the last one year to architect and build an Avalon  …

  10. I have been immersing myself in WPF for the past week, building a prototype app for a customer (more

  11. Pigs Can Fly says:

    One of the things I planned to do this holiday season was spend some time learning about Windows Presentation

  12. I just posted three new hands-on labs for Expression Blend that were created for MIX but haven’t been

  13. I just posted three new hands-on labs for Expression Blend that were created for MIX but haven't