It’s Sunday night and I just came back from University of Washington, where we just closed the Fall 2015 edition of DubHacks. And all I can say is that it was, hands down, the most fun and rewarding hackathon experience that I managed to be a part of.
First, and the most important lesson – always let James Whittaker deliver a keynote. If there is one person who can energize a crowd of 600+ people in an auditorium, there really is no better choice than him (also, read this). Second lesson – caffeine is your best friend through 48 hours of hacking, but in reality it’s the people that are there. I came in as a mentor with Microsoft, but I ended up having an amazing time with students and many other professionals, all with different backgrounds and experiences, as cliché as it sounds. But really – every single person that I met there were amazingly passionate, smart and full of boundless energy.
So why was DubHacks so great?
Do you know what is the best college campus in the country? Spoiler alert, it is UW. According to TheBestColleges.org, it’s #20 in the list of the most beautiful campuses. Trust me, it’s not. It’s #1. What stood out is that even though it was during a football game when we started (go Dawgs!), there was plenty of parking available both in the Red Square and the adjacent lots. Despite being a huge campus, it is really easy to navigate – there are maps placed around that can always tell you where to go, which ended up being extremely helpful for attendees. Did I mention the fact that the entire event was spread across three buildings?
DubHacks successfully managed to get the best and the brightest from UW, a couple of other colleges in neighboring states – we even had an entire bus with students coming from University of British Columbia (Vancouver, BC)! In addition to that, we worked together with an extremely talented group of mentors – experts in Azure, web backend, web frontend, Windows Apps, IoT, Machine Learning and many others. And throughout the night and the following day we handled a huge influx of question on how the above technologies fit into a wide variety of projects (my phone died by 3AM from all the questions coming in). To be honest, it was also a tremendous learning experience for myself – I don’t think I’ve coded as much for Android as I did in these two days to learn about ways to integrate Mobile Services into photo-identifying applications.
Icing on the cake was the honor to look at the projects students presented as an expo judge – every single table that I stopped by to grade the project was not giving the slightest vibe of a two-day project. Which brings me to my next point.
The participating students really showed what they are up to in college – doing some serious hacking in and out of class. I’ve seen an electronic frisbee trajectory tracker, an app that automatically calculates and learns about the types of pizza your coworkers might want on a certain day, an entire system that uses Kinect to analyze how distracted a driver is when on the road, a game that is asking its players to find certain objects and up their score by scanning those directly with their webcam (all in the browser, by the way), tools that can generate videos from text (which, by the way, won first place), a project that will reward users with BitCoin for biking (while it’s mined on an Azure VM – the more you bike, the more cores the VM spins up and the more BitCoin you make) and many many more. It’s absolutely mindblowing just what skills all people here posses, and I am excited to see where they are going to take those (*cough*Microsoft is hiring*cough*).
Food trucks (thanks Microsoft!), lip sync battle, piroshki, cup stacking, good music, stickers, more good food (read: Chipotle catering), frisbees, raffles and everything there is great about hackathons – all exceeded expectations at DubHacks. Above all, mad kudos go to the organizers – @MahirK95, @nitrogen, @skylerkidd and @MaliaImayama.
If there is one hackathon that you want to pick to attend in a year, look no further than this.
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:
- 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.
- 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.
- 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.
- 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.
- 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!
- 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.
- 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.
- 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.
- 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.
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.
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.
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.
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.