Tim Sneath

Musings of a Client Platform Guy

March, 2006

  • Tim Sneath

    The Inside Scoop on Interviewing at Microsoft

    • 25 Comments

    (or at least, my personal take on it!)

    Over the last couple of months, I've been interviewing candidates for a couple of different roles at Microsoft at a rate of almost one a week. Interviewing is definitely something of a skill, both for the interviewee and for the interviewer. A good interviewer doesn't ask random questions, even if it seems that way - they're trying to get a candidate to reveal enough about their character, skills, temperament and awareness that they can determine whether they'd be a good hire for the team.

    I enjoy the mental stimulus of being on either side of the desk for an interview: as an interviewer, the challenge of trying to get through the mask that people sometimes put up to find out where someone's real talents and weaknesses; as an interviewee, the process of finding out more about yourself and the areas where you personally need to develop. Either way, it's a process of continual learning.

    One thing that surprises me is how many potential new hires fall into the same "traps". I don't try to catch people out or set trick questions, but I see people who don't do themselves justice in the way they present themselves. Here are a few ways I see people shooting themselves in the foot, based not on any individual candidate but a broad aggregation of the perhaps 15-20 interviews that I've conducted in the last year:

    • Stock Microsoft interview questions often start with the phrase "Tell me about a time when..." The goal of questions like these is usually to find out more about your actual performance in a real-world scenario, rather than your best-case performance in a hypothetical situation. It's interesting though how often I get answers that focus entirely on the project or organization someone has worked on, rather than their individual contribution. Of course, we're looking for people who work well in a team setting, but telling me about a project that you worked on that was particularly successful doesn't give me any indication of whether you were the star performer that turned it around or whether you were a knuckle-dragger that just happened to be associated with the project. Tell me what things you did, what impact they had, what you learnt from the experience, rather than making me want to hire someone else from your project team!
    • Show passion for both what you've done in the past and what you're interviewing for. I want to see evidence that you care about the job enough that it's not just another notch on your resume. Even if you're historically a star performer that we'd be lucky to hire, I want to be convinced by you personally, not just by your performance on paper. Do some reading around the area; if you know the interviewer's names, search for them on MSN Search (or Google if you really must!) and find out what their interests are, what they've written about, and what they have a passion for - not to flatter them, but to demonstrate your commitment to the role.
    • If I ask you where you're weak, it's not a trick question. It's amazing how few people are prepared to own up to any flaws at all. Sometimes people do this fake thing where they highlight a strength as a weakness ("people say to me that I care too much!"). I don't believe that you're completely perfect - really, I don't! What I want to see is that you're aware of your limitations, you're not so arrogant to presume that you can't learn anything or accept feedback, and that you have the ability to reflect on your own character. Give me something - even if it's just that you're not a morning person!
    • Lastly, demonstrate vision - share your hopes, your dreams, your ambitions. Tell me where you see this job as a stepping stone to - where you'd like to be in five years time. I want to see that you have a sense of the strategic - that you understand the industry, that you have knowledge that stretches beyond the specific requirements of the role you're interviewing for.

    In general terms, it's in both the interviewer and the interviewee's interest to determine whether the person is a "good hire" or a "bad hire". No matter how much you want a job coming into an interview, pretending to be someone you're not (more technical than you really are, more interested in a certain type of work than you really are) to land a position doesn't lead to satisfaction in the long run, when you wind up getting bad performance reviews because your skills just don't mesh with the requirements of a role. On the other hand, if you can find a job that really matches your interests, skills and goals, you'll have great fun doing it and naturally excelling in it.

  • Tim Sneath

    iBloks: One of the First Commercial WPF Applications

    • 3 Comments

    One of the great joys of my role at Microsoft is that I get to work with some really cool partners who are building next-generation applications on our platform. Right now there are perhaps eight companies that I'm working with intensively on launch showcase applications that are built using Windows Presentation Foundation. Having customers who get our bits early and start building on them long before we release is critical, naturally, because it means we get good feedback on whether we're building an attractive platform and where we have rough edges (bad) or hitherto underexploited sweet spots (good!). As Nick Kramer notes, bugs that are reported by you get greater weight since we know they're issues that are hit in the real world.

    I'm therefore delighted to link to one of my showcase customers, iBloks, who as I write this are in the middle of demonstrating their product in public for the first time, as part of our mix06 conference. This small start-up has come out of nowhere with a fantastic mash-up application that takes full advantage of WPF. Their application allows you to create custom iBlok modules containing photos and videos and set to music that you can mix yourself. It's a great example of how WPF blends 2D and 3D graphics, animation and media together - they themselves claim that our technology has halved their time-to-market. Here's a screenshot to whet your appetite:

    But a screenshot really doesn't do full justice - take a couple of minutes out and see a full demonstration of this product, shown by Julia Miller, their CEO.

    The first release of iBloks will be available broadly this summer - in the meantime, check out their website where you can sign up to be notified when it's available.

  • Tim Sneath

    Getting Compatible with Windows Vista

    • 2 Comments

    Taking a momentary breather from the joys of Windows Presentation Foundation, I wanted to point to this excellent MSDN article on testing applications for compatibility with Windows Vista.

    Some of you may remember that at the PDC in 2003 one of the first "Longhorn" demos we did was of a twenty-year old DOS application (Visicalc, if memory serves correctly), so it should be clear that maintaining compatibility is important to us. Nevertheless, the introduction of security features such as User Account Control, IE Protected Mode and User Interface Privilege Isolation are definitely the kind of things that can break unwary applications, let alone other obvious changes such as updated version numbers and the need to support 64-bit editions of Windows that are becoming increasingly prevalent. This white paper has a suggestion for a thirty minute compatibility check, as well as overviews of each of the major changes that could potentially break applications and links to further information. Well worth a quick read if you're in the business of shipping quality software.

  • Tim Sneath

    Troubleshooting Windows Presentation Foundation Install Issues

    • 12 Comments

    By my reckoning, the most recent Feb 2006 CTP of WinFX represents the eleventh public release for Windows Presentation Foundation. (And I'm going to step out onto a limb and conjecture that we've probably got just three or four CTP-style releases to go before we release WinFX.) Most of these releases have of course come with a variety of associated paraphenalia, including SDKs, developer tool extensions and even dependent applications such as Microsoft Max or Expression Interactive Designer.

    Moving from release to release is an inexact science. It doesn't take a mathematical genius to figure out that there are hundreds of combinations of different build histories on machines out there, and inevitably (since the setup process is also beta) there can be bits of cruft left over on machines after one element or another is installed. The comments on the entry I wrote to announce EID are a good reminder for us here that we've not cracked this yet. I can't offer a panacea, unfortunately - it's the price we all pay for being early adopters of a new system-level component that integrates tightly with the rest of the operating system - but I did want to offer some tips to try and mitigate the worst of the pain and help people get their machines clean. (Not that this will be of any comfort, but it's not any easier internally, where there are daily builds from multiple build labs to deal with!)

    1. By far the most important step is to make sure that you've uninstalled all the components of older versions before updating to the latest release. Go into Add / Remove Programs and check for any of the following:
      • Microsoft Windows SDK (or WinFX SDK)
      • Microsoft Visual Studio Code Name "Orcas" CTP for WinFX (known in earlier versions as the Visual Studio Extensions for WinFX)
      • Debugging Tools for Windows (installed by the Windows SDK)
      • Microsoft Command Shell (installed by the Windows SDK)
      • Microsoft FxCop (installed by the Windows SDK)
      • WinFX Runtime Components
      • Microsoft Codename "Avalon" (this stems back from the days before we distributed as part of WinFX)
      • Microsoft Max
      • Microsoft Expression Interactive Designer
      • Microsoft Expression Graphic Designer

    It's probably safest to uninstall all of the above just to be sure, making sure you leave the WinFX Runtime Components until last.

    1. Once you've uninstalled everything you can, we have an uninstall tool that helps clear up any other unwanted files. This helps with a few known situations where the uninstaller fails to remove a few shared assemblies successfully.
    2. The first two steps should get you into a position where you can install a fresh new release. If you're still having trouble, we need to get down to the next level of investigation. Perform steps 1 and 2 again to get back to semi-clean. Then it's worth checking the contents of the following directories:
      • %WINDIR%\Microsoft.NET\Windows
      • %WINDIR%\WinFX\v3.0\WPF
      • %PROGRAMFILES%\ReferenceAssemblies\Microsoft\WinFX\v3.0

    I've seen occasions before where one or two older files can get left over in these directories that can fool installers such as Expression Interactive Designer, or worse, can prevent newer versions from being installed. In particular, if you see files such as PresentationCore.dll, PresentationFramework.dll or WindowsBase.dll, that should act as a warning sign to you that you've got some left-over cruft. Make sure you don't just randomly delete the content of these directories unless you're sure that the uninstallers have done all they can do - you start to edge into completely unsupported territory at this point, since it's hard to troubleshoot a system in this state.

    1. If your machine has had a chequered history with many older versions of WinFX on your machine, you might want to try running Dan Mohr's Avalon cleanup script, which looks for various system DLLs such as milcore.dll (the Media Integration Layer, a low-level component that renders WPF content to screen) and cleans them and their associated registry entries out.
    2. For Expression Interactive Designer, if all else fails, you can use the undocumented SKIPAVALONVERSIONCHECK=1 parameter at the command line to force EID to install without heed to the version of WPF it detects on the machine. Make sure you've successfully executed an application with the appropriate version of WinFX on your machine prior to using this brute-force approach. For example, Valentin Iliescu has a great 3D Chess game implemented as a XAML Browser Application that can test whether you have a fully working WinFX Runtime Components installation.
    3. When recompiling an application from a previous build, I've found that it's safest to entirely clear out the bin/ and obj/ directories from your project before attempting a rebuild. Sometimes left-over object files from a previous release can cause rogue build breaks.
    4. Make sure you have Windows Media Player 10 installed on your machine if you want to show media elements.
    5. It's important to run the latest available updated display card drivers for your machine. Because of the way WPF uses DirectX (multiple non-fullscreen windows), we've uncovered a number of display driver bugs that can cause crashes or other unintended effects. We try and mitigate this by switching to software rendering for older drivers, but that inherently reduces the performance of all WPF applications. If you can, get current!

    That's all the tips I can think of for now. I'll update this entry as appropriate over the next day or two with any corrections or additional suggestions. I'll sound like a faceless corporate automaton if I apologize for any inconvenience caused, but I do mean it! In an ideal world we'd do a better job in the installer of cleaning up old installs, but that would really detract from the purpose of CTP releases, which is to get regular updates out to the developer community without imposing a heavy burden on the developer team. I hope this post at least helps to explain the trade-off, even if it's still not all that pleasant for us in the trenches.

  • Tim Sneath

    Glaucoma! Glaucoma!

    • 1 Comments

    Digg links to this year's Vincent Flanders Awards for the worst-designed web pages, and there's no contest for my personal favorite - the Association of International Glaucoma Societies. It's hard to know where to start: the fact that the page takes nearly twenty seconds to load even with my 6MB broadband connection, the Pythonesque heads that pop up from above the menu bar, the spinning globe reminiscent of some Austin Powers evil mega-corporation, the animated Flash medical image that's over 4.5MB in size (might hit 50K at the outside as an animated GIF), and of course the operatic Glaucoma Hymn ("Glaucoma! Glaucoma!"). What's not to like? I'm almost ready to join the society right now just to save it from bankruptcy due to bandwidth charges when Digg and Slashdot have finished their maulings.

    Still, they look like they have a good time at their meetings...

    My only serious point in a vague attempt to make this posting somehow relevant to the general subject matter of this blog is that user experience matters. The introduction of WPF brings great power to allow you to build almost any kind of user interface, but with that power comes responsibility.

    One of the greatest benefits of Windows in the early days was the harmonization it brought to different applications. I used to have all the WordStar command keystrokes memorized, but switching to another word processor or application meant starting from scratch. Every application had their own shortcuts and keys to bring up menus or command structures, and there was no consistency between them. The ability to take many of the basic memes in Word and apply them to Excel was a great step forward. Since WPF makes it easy to restyle and replace the visual template for any Windows control, the importance of good design and careful thought about usability applies even more than ever. There's plenty of scope for innovation, but great care needs to be taken to ensure that it doesn't come at the cost of ease of use or accessibility.

    I'm sad to say that I expect to see some applications that go to far and become the "Glaucoma! Glaucoma!" of the Windows world - slow to load, hard to navigate, and full of unnecessary frippery that distracts from the purpose of the application itself. On the other hand, I look forward to seeing applications that apply these technologies wisely to allow far better navigation and visualization of data. I had the privilege to meet with Mary Czerwinski of the VIBE research team last week to see some of the amazing work they're doing in this area, and I'll share more about that in another post.

Page 1 of 2 (8 items) 12