August, 2009

  • Kirill Osenkov and Garage: How Microsoft Supports Grassroots Innovation


    This post was originally aimed for Microsoft employees who also have a side project, or a hobby project. It turns out, we have a nice internal thing called “The Garage” that is aimed to specifically support and foster such “evenings- and weekends projects” by Microsoft employees.

    Garage: What they do
    I own a side project (plug: and Garage did a free usability study for it, which was really awesome. They organized everything (including free food), invited participants, prepared the task lists and helped to actually conduct the usability study. This was a great experience – I actually watched three MS employees work with Live Geometry and listen to their feedback, thoughts, comments as they discover and use the software.

    Usability study

    I realized that Live Geometry is still far from being intuitive and there are a lot of things that I can improve. I’ve gathered a lot of valuable information which I was able to convert to more than 50 actionable bugs! Another useful experience that I gained is how to conduct a good usability study. I've learned the following:

    • Be friendly and thankful for the participant's time. They're doing you a favor.
    • It's not a test for the participant's skills, it's a test for the usability of the software.
    • Don't talk, don't reveal how things work, don't answer questions too early.
    • Don't let them struggle too much, help them out when they're really stuck.
    • The participant is always right and your software is always wrong :)
    • Whatever feedback they give is good feedback.
    • Don't forget to write things down.
    • Show them how it's supposed to work at the end, it's likely you'll be rewarded with a "wow" :)

    Other Garage events

    Garage organizes a range of other events: Stay Late and Code (pizza provided), Improve a Project (where they demo projects and gather user feedback), Speed-dating for innovators (they bring together the folks who need help on a project and folks who would like to participate in a project or help out), help with hosting a project, etc.

    Productivity Science Fair

    Also recently I participated in a semi-annual company-wide exhibition called the Productivity Science Fair. It generated a lot of interest and was very crowded (actually, a lot of people stopped by my booth, wanted to learn more about my project and left their contact info - I ended up collecting more than 50 e-mail addresses of those who were interested!). I literally never spend more than one minute without someone stopping by, almost lost my voice at the end of the day. But it was so much fun!

    So, if you’re a Softee AND have a side project or projects, do check out http://garage and/or add yourself to the ‘garage’. At this point – huge thanks to Quinn Hawkins and Jennifer Michelstein for their engagement!

    What’s there for non-Microsofties?

    I wouldn’t blog about this at all if there wasn’t some goodness for folks external to Microsoft. Well, guess what, some of those side projects eventually become external so you can benefit too! Check out, especially the Grassroots Innovation projects: for a sample of several projects already out there. Garage is actually sponsored by Office Labs and it's nice to see innovation being fostered both internally and externally.

    Microsoft Education Labs -

    One other thing Quinn from the Garage team was helping me with is getting in touch with folks from Microsoft Education. I didn't know it, but there is a site called, which is similar to the Office Labs innovation site, but specifically aimed at educational software and products for students and teachers. I might be working with these guys to see if we can collaborate to release Live Geometry as educational software for schools. That would be really cool!

    Semblio - digital learning from Microsoft

    Last, but not least, at the Productivity Science Fair I've met folks from Semblio, which is a really interesting product I didn't know about. Here's a quote (read more here):

    Now you can make your instructional materials even more valuable. Microsoft Semblio provides easy access to the power of Microsoft .NET and Windows Presentation Foundation (WPF) by tailoring the Microsoft development platform specifically to the education market. Get ready to create an immersive education content experience.

    Essentially, they leverage WPF to create rich interactive learning materials. We've met with the Semblio team and they were really excited to learn about Live Geometry. They were particularly happy that it's easy to create a WPF User Control hosting a geometry drawing and that I use XML as the serialization format, because this way it's super easy to integrate Live Geometry content with the Semblio framework.

  • Kirill Osenkov

    Calling new on an interface


    Interesting thing: technically there is a way to call new on an interface to create an object. How? Using a feature in the C# compiler for COM-interop support:

    using System.Runtime.InteropServices;
    class Program
        static void Main(string[] args)
            IFoo foo = new IFoo();
    class Foo : IFoo
    interface IFoo

    Here you specify that Foo is a CoClass for the interface IFoo using the three attributes CoClass, ComImport and Guid. It does not matter that no real COM objects are involved, C# compiler is fine with that. What it does, it replaces the call to the IFoo() "constructor" to the equivalent constructor on the co-class Foo.

    Interestingly enough, Foo doesn't have to even implement IFoo - the program will compile just fine and it will create an instance of type Foo at runtime, but it will fail when we try to put an object of type Foo into a local variable of type IFoo.

    It's yet another way to instantiate a type without mentioning it in source code. As such, it can potentially be a way to achieve what factory methods do - instead of mentioning the concrete type in instantiations all over your code, you can just have a centralized place where you say what type to instantiate. With this you can easily substitute the concrete type via the CoClass attribute.

    However, this is not as powerful as factory methods (you have to recompile your app to change concrete class and you can't have multiple concrete types at the same time).

    I wouldn't encourage using this stuff anyway because this will probably confuse readers who read your source. But despite of anything, this *is* an interesting technique.

  • Kirill Osenkov

    Visual Studio disappears when creating a Silverlight 3 Application


    I have Visual Studio 2008 SP1 and Silverlight 3 tools on the laptop I’m writing this post on. Ten minutes ago I was trying to create a new Silverlight 3 application through the New Project Dialog and after creating the project Visual Studio just disappeared on me.

    Usually when VS disappears instantly without the Watson dialog this means something really serious has happened, like a stack overflow, or an internal CLR exception.

    I was almost going to log in to work to get the symbols and sources and start debugging, but doing a web search beforehand turned out to be a good idea. Indeed – it turns out to be a known bug in the CLR execution engine, serious enough so that we even released a hotfix for it:

    You know that you’re seeing this issue if the Windows Application Error log contains the entry ID 1023:

    .NET Runtime version 2.0.50727.3053 - Fatal Execution Engine Error (6FC85E00) (80131506)

    Installing the hotfix 963676 from this location helped to resolve the problem.

    If you ran into this – sorry for the inconvenience!

  • Kirill Osenkov

    5 min. screencast: Live Geometry overview


    Microsoft sponsored a usability study for my side project Live Geometry, and I have to say, it was awesome. It was a lot of fun watching the participants using the software and I got a ton of great and useful feedback.

    I have to confess, I didn’t realize that it’s not obvious how to use Live Geometry (especially if you’ve never seen it before). Since I was the one who developed the software, I subconsciously assumed that it’s all intiutive and trivial. Well guess what, it turns out to be not the case. I am not the end user. Things that are obvious for me, might not be obvious for others.

    So I developed a plan on how to make things better. There are two ways: improving User Experience and investing in User Education. The former will be a slow and gradual process of me designing the features and the UI, fixing bugs, reworking the UI and thinking through UI details.

    Today I’ll start approaching the task of User Education and present a 5 min. screencast – a brief overview of the Live Geometry software and its possibilities (Hint: double-click the video for fullscreen viewing):

    Get Microsoft Silverlight

    You can also download the .wmv file (15 MB).

    More documentation will follow later, but this should at least give a quick start and give you an idea of how things work.

    Any feedback is welcome!

Page 1 of 1 (4 items)