My Summer as a Program Manager Intern at Microsoft

I’ve once again spent my summer in the Pacific Northwest, working as an intern for one of the top companies in the world – Microsoft. I embarked on a journey in a completely different role for me – despite the fact that I coded pretty much all my life (or, as much life as a 22-year old adult can have) and was a Software Design Engineer vendor all last year (feel free to read the post I wrote back then), I decided that I should become a Program Manager (or a PM). Not because I didn’t like coding or, but because I felt that over the years I developed not only a passion for writing software, but also for communication, planning and management. A PM role combines those perfectly, so once the time came for me to apply to for my next internship, I didn’t hesitate to check the PM role as the priority on the Microsoft Internship application form.

Interviews went well and I got the PM position in the Microsoft Office Division the same day, right after the interviews. I expected quite of a contrast compared to Developer Platform Evangelism, where I made my baby steps in the huge world that is known as the Redmond Campus. I had exactly zero connections in the Office division at the time, so I didn’t have anyone who could tell me from their experience – what is the culture like, what is the approach to tackling a variety of problems? Regardless, I was really excited and was ready to start working as soon as I landed in SeaTac.

I got to be a part of an amazing team that did remarkable work. All three months went by like a flash, but since I was dropped right into the epicenter of all the action, here are some of the highlights  (or, things that stuck with me) that might  be helpful to future interns from the perspective of a starting PM:

  1. Relationships matter. When it comes to getting things done, you need to know the right people that have the authority and ability to contribute to your work. Talk to your teammates – not just those in the same role, but everyone on the team. When I was just ramping up, I sent out 1:1 invites to pretty much everyone on the team to get to know them better, to see what they were working on and what are the most interesting parts of their job. I have not gotten a single rejection, and so through all my 3 months, I had the occasional 30 minute meeting with one of the developers, testers or program managers in their office, where I could ask almost any career-related question. That way, I found out more about my team than any PowerPoint slide deck could ever explain. That’s also a good way for people to remember who you are – not just some intern working in the office around the corner. More than that, one of the PM leads on my team is a motorcycle pro, and after a few conversations with him, I discovered that bikes is something I would like to know more about. So don’t be shy – get to know people you’re working with.
  2. Reach out. Microsoft is a very diverse company, with people coming from different backgrounds and different experiences. Don’t hesitate to reach out to them, even if they are way above you on the management chain. I remember that one of the opportunities I never got the chance to take was meeting Alex Kipman, the man who started ‘Project Natal’ (better known as Kinect nowadays). After talking to one of my coworkers at Microsoft about my thought of meeting the Director of Incubation at Xbox, I was advised to do the simplest thing one could possibly think of – just email him. That’s it. No formal introductions, just an email explaining why I want to meet him and what I want to get out of the meeting. A couple of days later, I was sitting in the lobby of one building talking to Alex – and once again, I learned a lot more than I would ever read in any interview or article. A lesson I learned from Charlie Kindel is that a good way to look at a problem is through the “What’s the worst that can happen and what do I have to lose?” lens. So let’s say you want to reach out to one of the top people. What’s the worst that can happen? Probably getting a rejection email. What do you have to lose? Nothing. That is, if you are smart about what you ask for and are not trying to waste people’s time. So go for it – meet people and learn, learn, learn. A lot of Microsoft employees are excited about talking to interns about their experiences.
  3. Effective communication is extremely important. Be clear, concise and to the point. Again, I’m back to the idea of not wasting people’s time. It’s shockingly easy to derail a conversation or an email thread if a person starts throwing too many issues in at once, so be aware of that and contact only the people that are either responsible for what you’re talking about, or can point you in the right direction. Stemming out of the ‘good communication’ stack is also the ability to present your ideas in an efficient manner. As a PM, I had the responsibility of writing several specifications, an area plan and on top of that – present all of those to the team. I loved doing it, but that is not enough – you need to not only know what to present, but also how. Learn from what your teammates are doing, pick up a couple of books and go through them on a weekend. It will pay-off in the long run.
  4. Don’t work in a silo. Or, as my manager called it, window shop before making any decisions. It is important to realize that what you’re working on is not impacting just you. Chances are, other features or parts of the project flow are in one or more ways affected by what you create. Pinpoint those possibilities early and talk to the people who are responsible for the respective areas. For example, if I am writing a specification for a car steering wheel, I would like to talk to the designer to make sure that it fits with the overall vision of the vehicle interior. I would also need to talk to the engineer that designs the steering wheel connectors that hook into the electronics (e.g. changing the radio volume or honk) to make sure that my design will allow for everything that’s needed. I could, of course, throw together a document that shows the fact that my steering wheel is the best possible idea since sliced bread, and leave it at that, but chances are this will not make a lot of people happy and all the design issues will be raised at some point. Plan accordingly and communicate with the individuals covering the adjacent or larger features.
  5. Attend intern events. There are plenty of those – some organized by University Recruiting, but even more are ran by interns themselves. Hiking? Why not. Have a few people chip in on gas and you will be going to explore Mount St. Helens, Goat Lake or the Olympic Peninsula. Do not, I repeat – DO NOT, waste time on weekends by playing Xbox (or PC, whatever your preference might be) inside all day. Get to know people, explore the neighborhood, get people together and try a new Korean restaurant, go see a movie or a live concert (for me there’s Paradiso. the Capitol Hill Block Party in Seattle and Paramount, that had some of the best shows). There’s always something to do and you should take advantage of that opportunity. And yes, the deadmau5 and Macklemore concert was amazing on every level. Thank you, Microsoft!
  6.  
  7. Read. One of the fantastic things I love about Microsoft is its library. I managed to read a dozen of books this past summer, that completely changed my views (The Power of Habit was, hands down, the most interesting one), and you should do the same.
  8. Focus on the success of your product and take pride in what you do. When I asked Kurt DelBene, the president of the Microsoft Office Division, as to what would define an exceptional Program Manager, this was his response. And indeed, every morning I was coming excited to work because I knew that my work will contribute to the success of the larger product. I was following my passion – it is an outstanding feeling when you realize just how much impact you really have.
  9. Unexpected things happen. Usually at the least expected time too. Be ready to change your plan and have a fallback scenario. “What can go wrong?” is a good question to ask yourself when you’re designing a feature, and once you have a list of possible issues, list the causes and think about a way to tackle those, so that at the end your work will continue, even when one of the foundation pillars failed.
  10. Be open to feedback. Ask for feedback. You can sit in your office all day, writing specs and presenting them, then going back to the office and carrying on with the work you’ll be doing. But that’s not really what your internship is about. You want to become better at what you do, learn from people who’ve been in the field for quite a while and adopt the best practices, avoiding the mistakes that maybe have already been tackled before. One of the habits that I have developed is constantly asking for feedback from my manager, my mentor and fellow PMs. How should I improve my presentation? What could have I done better? What potential issues do you see with my approach that I might be missing? Trust me, you want to know answers to those questions. Also, never be offended by direct feedback – your goal is to be exceptional at what you do, and the only way to do it is by ensuring that you are getting the least sugarcoated feedback. Expect it, and develop an action plan for yourself on how to act based on what you’ve learned.

 

At the end of the day, the internship is what you make of it. There is no book or blueprint that will guide you through it for 100% of the way. Will you make mistakes? Probably. But what you learn from those mistakes is what will make you a valuable employee at the end. Be active, be eager to learn and realize that your impact matters.

This August, I have accepted a return offer and will be coming back to Microsoft in 2014 as a full-time Program Manager, which I am really excited about – these are great times and I am happy to apply my knowledge and skills towards changing the world. If there is one last thing that I’d say – apply for a Microsoft internship. It is truly a life-changing experience.

FileExplorer for Windows Phone – Test Feedback Needed

I’ve added several changes to the FileExplorer control, that will be included in the Coding4Fun Toolkit.

Before actually becoming an active part of the control set, I want to make sure that it works as it should and where it should, and for that I am distributing it now as a part of an experimental package.

2013-07-24 23.52.42

Since the last update, there is a big change that was introduced – the ability to switch the selection type. Now it is possible to:

  • Select a single file
  • Select multiple files
  • Select a single folder
  • Select multiple folders

 

This option is given through the SelectionMode property.

image

When the control is dismissed, the OnDismiss event handler is called, the application will get two items in return – a StorageTarget reference, that will identify the location of the selected entity(ies), as well as an object than can either be a single StorageFile, StorageFolder, ExternalStorageFile or ExternalStorageFolder, or it could be a List<T> where T is one of the aforementioned storage objects. Explicit conversion will be required, depending on the scenario.

Download the sample project here or directly from the CodePlex source control (latest checkin) and send me your feedback!

Beem is Now Open-Source

I am proud to announce today, that one of my largest Windows Phone projects – Beem, is now open-source, in an effort to improve the product and to facilitate community contributions (there were many requests to add features – now devs can easily chime in).

Beem Plus

You can find the project, as well as any additional details on GitHub.

New Week – New FileExplorer Release

To continue the tradition of a weekly FileExplorer build, here is the next update, bringing you the following capabilities and fixes:

Show the path

You can actually see the current folder tree path in the control when navigating through. You can also select and copy the path (but not modify it at this point).

Use file format restrictions

As you already know, when accessing the Windows Phone external storage (if any is present, of course), you are only limited to seeing the files that have been explicitly associated with your application.

However, in a lot of cases you might want to restrict the visible file range even further. For those scenarios, the FileExplorer control now carries two new properties:

  • ExtensionRestrictions – an enum value that can be one of the following: None, InheritManifest, Custom. When None is selected, you will see all files when working with the isolated storage, and only files that have registered file extensions in external storage. InheritManifest, on the other hand, might be handy if you want to select a file from the isolated storage and limit the picker to files that are “pre-approved” in the manifest – obviously, this setting is unnecessary when handling external storage, since the policy is enforced by the OS by default. Last but not least, Custom allows you to define a set of your own filters. And more about that below.

  • Extensions – a generic collection that contains a set of extensions that you want to restrict the picker to. It is only used when the ExtensionRestriction property is set to Custom. You need to preserve all extensions in the .[EXT] format. So if, let’s say, I want to let the user pick only XPS files, I need to add a .xps entry to the collection. This property will not allow you to select files from external storage with extensions that have not been registered in the manifest.

As usual, you can download the latest (79607) checkin and go to Experimental > FileExplorerExperimental to see what this control is about.

I would love to hear your feedback and comments.

Testing the Future

…control that will be integrated in the Coding4Fun ToolkitFileExplorer!

You can download the Coding4Fun Toolkit source code here. Once downloaded, go to Experimental > FileExplorer. The sample project carries an alpha implementation of the control, and I would love to get your feedback on it – let me know what you want to see become a part of it.

NOTE: This custom control currently works only on Windows Phone 8.

wp_ss_20130625_0001

The control will play the role of the standard Windows 8 FilePicker, but on Windows Phone. Its goal is to allow developers to provide an easy-to-use interface to interact with the isolated storage, as well as with the external storage in the context of native phone applications.

What can the control do at this point?

  • 1. Pick a file from the isolated storage (no file format restrictions)
  • 2. Pick a file from the external storage, if such is available (restricted to files that have an extension registered with the app)
  • 3. Navigate through the folder tree in both the isolated storage and external storage (where available)

 

In its current implementation, I am using the control as a way to open files for read. No built-in functionality is introduced to facilitate writing at this point.

What do I have planned for the control?

  • 1. File extension filter for files in the isolated storage (this can be both manifest-based and individual)
  • 2. Multi-file select (return a batch of files from one or different locations)
  • 3. Folder select
  • 4. Windows Phone 7.x support for isolated storage

 

Important disclaimer

The control is in its alpha stage. DO NOT use it in production.