Blake's profileBlake's Recruiting Caree...BlogListsNetwork Tools Help

Blog


    March 27

    Microsoft Commercials-Rookie

    Best describes the meaning of "accessibility".

      

      

    Microsoft Commercial-Jerry Seinfeld & Bill Gates

    This series of Microsoft commercials featured by Jerry Seinfeld and Bill Gates are really amusing! Bill Gates really has a great sense of humor and the role he played in the movie might be a real reflect of his real persoanlity-mean, not social, stubborn head...My favorite scene in New Family is that Bill read a software design book for the boy and  the boy asked whether there is any monster in the story. Bill said there would be a firewall! And the robot played by Bill is really funny!

    Jerry and Bill want to get connected with Real people but the real life is with lots of misunderstandings and requires lots of skills to deal with different people. If you are a House Boy (宅男) or House Girl (宅女), the safest way to get connected with people is through internet. That's what Windows Live can bring you, "Perpetually Connecting".

      

       

    March 21

    Several LinkedIn Polls

    I created several polls on LinkedIn. The LinkedIn polls is a very interesting feature and supports data analyis on the backend, as a free user the application is not powerful enough to support multiple choices. However, it's still useful to gather some information and opinions from a wide audience.
     
     
    The thinking behind is trying to understand the activeness of the job market and the effecitve methodology to generate quality candidates and talents for the pipeline building. As I was in charge of a Senior Talent Candidate Value Proposition project these days, we am trying to figure out what web 2.0 will impact the recruiting in China and how senior and experienced IT candidates will respond to that, and whether their career motivations and job hunting behavior will be changed by the new technology as well as the tough economical situation.
     
    I personally believe it's a trend that recruting will no longer mean sourcing and placement, esp. in IT industry, where candidates are more exposed to new technologies in web and cloud services. And together with the growth of Y generation, in the next 10 years, the staffing function in corporate will be less operative but more strategic, plays more important role in staffing marketing, building the employer brand and analyze your customer, which is your candidate. And as a bridge between businesses, internal HR functions and external job market, gather more market intelligence, actively involved in the decision making such as on C&B adjustment. Candidate experience is another key issue staffing will care more and more as the re-position of employer. The change of staffing function will also be reflected on the outsourcing of low end talent generation through agencies or contractor sourcers, so that FTEs can focus more on high end talents and develop diffrent campaigns to align with business stategy. Another key indicator of a successful inhouse staffing is that the ability of finding and adopting new technologies.
     
    The key challenge in my current project is how to build, maintain and grow an active high quality talent network, it's rather time consuming and recruiters involved do need to have a marketing mindsets and be more creative and proactive in creating the media content. And how to successfully adopting a methodology to understand the needs of target audience is another challenge.
     
     
     
    December 31

    Top 4 Ways To Feel Totally Empowered NOW (By Jeff Cohen)

    We all face hardships at some point in our lives. It's an absolute certainty. How we deal with these hardships defines who we are. Some of us own up to the responsibility and get on with our lives, while the rest of us cop out by blaming others. When you take ownership of responsibility, you empower yourself. You realize you are the cause and your life experiences are the results.  You determine the direction of your life and make changes when necessary. You are in control of your life; your life doesn't control you.

    If you are not able to explain why your life is as it is, you are giving your power away to someone else. Most of us tend to blame someone else or something else for our fate and all the bad experiences in our life (such as abusive childhood, loss of a loved one or broken relationships). When you are not in control of yourself or your life - you are powerless.  The "blame game" you are playing is a very disempowering emotion and will get you nowhere. 

    If you think by blaming others you can escape from your problems, you are completely wrong and you are behaving like a spoiled child. If you give others the power to control you, your decisions and your life, your life problems will stay the way they are until you take back power and claim full responsibility for your emotions, actions and your life as a whole.

    True empowerment is taking responsibility for your life so that you are free to do whatever you want, whenever you want, and be anything you choose to be.

    Here are 4 tips to empower you:

    1) Make your own choices - Life is full of choices and you have the incredible freedom to choose. You learn only through trial and error. Be bold and accept the outcome of your decisions. If your choice is correct, be happy. If not, don't blame yourself or others. Instead, analyze where you went wrong and correct yourself. I've made mistakes and so will you. The next time around, make a better choice.

    2) Practice deep breathing - If you make it a habit to practice deep breathing throughout the day, you will have more clarity in your thoughts. Your body will feel more relaxed to think clearly and make good judgments in your situations.

    3) Feel grateful - Gratitude is something we hardly ever take notice of for many of the things we enjoy in life. Instead of cursing your problems, look around you and realize how blessed you are to have nature bestow you good health, sunshine, food, good relationships, fresh air, etc. When you start to feel grateful for these things, you'll be more convinced that life isn't bad at all. It's empowering when you can feel this throughout your body and soul.

    4) Develop mental awareness - Observe your thoughts. Are they good or bad? Are they positive or negative? If your thoughts are positive it is good. You can act on them with positive results. What if you have negative thoughts? You can only control negative thoughts if you are aware of them. Don't let these negative thoughts spiral out of control. Diffuse them immediately. Empower yourself by being aware of your good and bad thoughts.

    When you can deal with your own pain and pleasure, you are the controller of your life. Don't let anyone else take away your power to control your life and events. You are the master of your destiny.

    More Is Not Enough

    There was once a stone cutter who was dissatisfied with himself and with his position in life.

    One day he passed a wealthy merchant's house. Through the open gateway, he saw many fine possessions and important visitors. "How powerful that merchant must be!" thought the stone cutter. He became very envious and wished that he could be like the merchant.

    To his great surprise, he suddenly became the merchant, enjoying more luxuries and power than he had ever imagined, but envied and detested by those less wealthy than himself. Soon a high official passed by, carried in a sedan chair, accompanied by attendants and escorted by soldiers beating gongs. Everyone, no matter how wealthy, had to bow low before the procession. "How powerful that official is!" he thought. "I wish that I could be a high official!"

    Then he became the high official, carried everywhere in his embroidered sedan chair, feared and hated by the people all around. It was a hot summer day, so the official felt very uncomfortable in the sticky sedan chair. He looked up at the sun. It shone proudly in the sky, unaffected by his presence. "How powerful the sun is!" he thought. "I wish that I could be the sun!"

    Then he became the sun, shining fiercely down on everyone, scorching the fields, cursed by the farmers and laborers. But a huge black cloud moved between him and the earth, so that his light could no longer shine on everything below. "How powerful that storm cloud is!" he thought. "I wish that I could be a cloud!"

    Then he became the cloud, flooding the fields and villages, shouted at by everyone. But soon he found that he was being pushed away by some great force, and realized that it was the wind. "How powerful it is!" he thought. "I wish that I could be the wind!"

    Then he became the wind, blowing tiles off the roofs of houses, uprooting trees, feared and hated by all below him. But after a while, he ran up against something that would not move, no matter how forcefully he blew against it - a huge, towering rock. "How powerful that rock is!" he thought. "I wish that I could be a rock!"

    Then he became the rock, more powerful than anything else on earth. But as he stood there, he heard the sound of a hammer pounding a chisel into the hard surface, and felt himself being changed. "What could be more powerful than I, the rock?" he thought.

    He looked down and saw far below him the figure of a stone cutter.

    Prologue

    We are all experiencing hard times...In the time of uncertainty, lots of us feel depressed, upset, worried.
    But let's do have the hope for future, have faith in life, have confidence in ourselves.
    Here I will post lots of inspirational stories, hope they can cheer you up, encourage you and let's accompany together to get through the tough times! 
    August 17

    (Quote) Dev (or SDE) at Microsoft (http://blogs.msdn.com/techtalk/archive/2006/02/02/dev-at-microsoft.aspx)

    Dev (or SDE) at Microsoft

    As we hit the college campuses for the second half of recruiting, it seemed like a good idea to pick up where we left off.

    Development at Microsoft

    Let's talk about development at Microsoft and what it is like to be a Software Design Engineer (or SDE as we call them, or just "dev").  My last post described PM at Microsoft (Office in particular) so I thought I would talk about Development today.  Development does not have the subtleties that PM does so I don't think it will take as many bytes to describe.  From the very beginning Microsoft has been a development driven culture and organization.  Of course this starts with Bill Gates and Paul Allen two developers with a very famous story about writing a BASIC interpreter in a weekend. 

    Obviously the first thing that comes to mind is that at a software company, without developers the company really doesn't exist.  And of course Microsoft is no exception.  While the company has grown from what I would say was a "developer-driven" company where basically everything was about development, to a more grown-up and well-rounded company with the right focus on customers, business, and the market, we have consistently remained very much a technical and product company.  Of course this starts at the top, where our Chairman of the Board is also the company's Chief Software Architect.  Also, this post might show a bit more of me and be a bit more personal because development is where I started at Microsoft and because I am one of those folks that has a very romantic view of programming. 

    At the risk of perhaps ruffling the feathers of some others at Microsoft (myself included), one analogy that was shared with me back when I was a developer is that being a developer at Microsoft is like being a fighter pilot on an aircraft carrier (can you tell about what year this was and what movie was still top of mind?)  An aircraft carrier exists to push the airpower and does so on ships that have over 80 aircraft on them, and those aircraft are supported by a crew of nearly 6,000 (on a ship like the Nimitz).  So you can imagine while there are a bunch of pilots, the infrastructure of the ship (from mechanics, to naval officers, to doctors, ship's defenses, etc.) are all focused on insuring that the aircraft and resources and doing their duty.  So in a sense, if you're a developer at Microsoft then you're on a ship that is all about making sure you can accomplish your mission.

    The mission of being a developer is much easier to detail than that of program management--developers write the tightest, most secure, most robust, most performant code possible.  At the same time, it is not just any code, but the best code that addresses customer problems in innovative ways for the broadest audience.  You can write great code in a lot of places.  Being a developer at Microsoft means you're writing code used by hundreds of millions of people who literally bet their livelihood on us. 

    A year after I joined Microsoft, my recruiter asked me for a quote for our recruiting brochure (I can't find it or I'd scan it in) saying why I wanted to work at Microsoft.  For me, the thing about being a developer here is that impact.  In graduate school I was working on a class library and working on connecting it up to databases. It was super cool and I had a great time.  I came to Microsoft and worked on that same type of project, but instead of sharing the code with my lab mates and a few other interested researchers we were selling the product as a big part of our C++ product line.  And before I knew it we had hundreds of thousands of developers using our tools making software for millions.  For me that has always been the greatest rush.

    As a quick story, I was on one of my reasonably regular recruiting trips to Cornell back around 1995 or so.  It was late at night and of course high on my agenda was returning to the Hot Truck on west campus for on of Bob's PMPs ("French bread pizza", an idea copied by Stouffer's mind you).  As a quick side note, about 10 years after you graduate your body is not really able to handle these treats, which explains why they only serve PMPs at your 5 year reunion.  In any event, it was cold and some others were waiting for food along with me (waiting means standing on a stairway in front of the truck) and I'm sure they were wondering what this grown up was doing there ("loser grad student" comes to mind).  They were talking about a cool program they were using in their comp sci class.  As the details unfolded it was clear they were talking about Microsoft Visual C++. 

    I couldn't resist so I jumped in with a "hey I worked on that".  Somewhat amazed (perhaps at my rudeness) but nonetheless interested.  We ended up having a detailed conversation about the emerging importance of C++ and the implementation issues they faced in class, with particular emphasis on code and technical details (multiple inheritance, virtual function tables, etc.).  One student was so excited he said "wait a minute" and ran back to his room to get his box of C++ so that I could autograph it. 

    Here's the hot truck in action (this is a reunion photo so it is warm and the people waiting are not students):

    OK you get it, being a developer is cool.  So what does a developer do at Microsoft?  Like all the product development jobs, a good way to think about this is to look at the primary phases of a product cycle -- in developer terms you could think of these as evaluate, architecture and scaffolding, construction, and polish.  Like all disciplines, development is one equal part of our product development process.  In some ways, the other disciplines exist to make sure our developers are 100% focused on building great features, writing great code, and doing a great job.  For the record, this most certainly includes me! 

    As is often the case when I talk with students about the product cycle, the conventional wisdom these days continues to be that it is way cool to work on short projects and that the world has moved on from big long software projects--this is the myth of cool projects can be done in one summer.  It is hard to disagree in some sense--if you can have all the benefits of lots of customers, long term success, and profits by doing a small amount of work in a short time, then that is definitely preferable to doing a lot of work over 24 months.  Unfortunately, there are very few small programs that are also interesting from a business perspective, especially over any sustained time.  And of course today's small program is tomorrow's big program and asset that customers want to bring forward.  In several posts I've talked about the product cycle and how we work in Office.  I think the rewards that come from building a unique "economic asset" for Microsoft and customers are very great (from a personal accomplishment and a business perspective).  I love a cool "project" and we definitely have those for interns, but trying to make a big company out of a lot of projects is exceedingly difficult (a wise leader of Microsoft once said, you can't make a billion dollar company out of one hundred $10 million dollar products).  There are some other myths of development that I will follow up on next post.

    Evaluate and Estimate

    Let’s assume program management has done the groundwork to come up with a good range of feature ideas and you’re now facing a long list of potential features.  Many of them are exciting.  Many are things you wish you had *today*.  Some of them look dorky.  Some of them look like implementing them in code involves changing the laws of physics.  This is where development brings their point of view to the picture and collaborates with program management (and test) to determine what can possibly be implemented. 

    At this point a lot of organizations would just pass the baton to development and they would take a “spec” or a “market requirements document” and do the set of things that make sense to them, without much of a feedback loop (until perhaps later when some features that were important to the boss fail to show up).  In Office, this feedback loop is a critical one that takes a lot of energy—we call this “adds/cuts” since during this time we are building a list of the features we will implement and deciding which ones go on the list (add) and which ones fall off (cut). 

    At the same time, particularly for work that is reworking past ideas or improving in-market features, developers have their own ideas about what makes sense.  Just as a program manager would do, the role of development is to convince program management to devote the bandwidth to adding those features.  It goes without saying, but developers dream up some of the coolest ideas around. One of the coolest that I can think of recently has been the evolution of “Watson” – this is the quality assurance feature in Office that uses the internet to reflect back to Microsoft (anonymously and privately and opt-in) the experience customers are having with the software.  This was dreamed up and executed by developers in their spare time.

    So development is not there just to “code” the aspirations of program management.  Development is also not there to dream up all the features on their own.  Remember, there is a lot that went into the program management feature list, vision, and other groundwork.  Of course in the end developers “own the code” and they could just go off and do things their own way, but this does not scale very well—you can imagine that as a developer you might know a whole lot about how to use a feature like pivot tables in Excel, but unless you’ve spent the time with bankers looking at how they use them and time talking to VARs who build solutions on pivot tables there is a good chance your views of what to do are based more on the code and the possibilities of the code, rather than the customer’s needs.  After all, the most amazing developers are those that make the code do what the customer wants, rather than make the customer like what the code (or developer) wants to do :-)

    With this rough list of features in hand, as a developer you are responsible for looking at the challenge and looking at the cost of implementing it.  You are responsible for understanding the problem to a level of depth that can allow you to estimate the cost of the feature, including all the edge conditions, error handling, scale and performance, quality, globalization, and more.  Of course at this phase you are not expected to get the estimate down to the day (and frankly, it is not likely your program manager counterparts have ironed out the details enough anyway).  But what you need to do is to be able to determine the feasibility of the work.  This feasibility is super important.  If you are off in this area then there is a good chance your work will be very hard to ship.  The best part about being a developer, even a new one out of college, is that you own this decision.  You can say "no it cannot be done" or "it can be done, but perhaps there is a better way", or "you bet, I'm the one to get this done just like you described".  This back-and-forth is critical to being able to successfully determine what is in the product or not.

    This brings us to another quick aside, which is the notion that you should just try stuff out and see if it works and if it doesn't, "oh well".  I think this is a great notion to strive for and for small products it might be a good idea.  But for anything that has any level of complexity, even trying something out is expensive enough that you want to have a high confidence in success before you start.  What's the old carpenter saying, measure twice, cut once -- I think that holds just as much for software even though you don't immediately see the downside of a bad estimate. While this looks like some serial “waterfall” process, in fact it is entirely iterative and the goal of this is to allow small groups of people to act as a small team within a big team.  But having this information allows us to coordinate and make decisions as a whole.  So this way you can have two small teams contribute to a mission, work independently as possible, and have some coordination.  It fosters shared code that does not have to get defined at a very rigorous level, but a much more collaborative level, which is often what grinds cooperating teams and code sharing to a halt.

    As a developer exits this phase of the product he/she is equipped with a set of features and a rough estimate for the time it will take to get the work done.  The developer, working with the dev lead and dev manager, is busy at this point developing a high level task list of what aspects of the work need to get done and an ordering.  At this point you will iron out things like scoping the amount of user interface work, the amount of new infrastructure work, the amount of backward compatibility work, the amount of developer/API work, etc.  These big buckets look a lot like the specification areas from program management, but of course as a developer you are thinking about the amount of code that needs to get done for each based on those areas.  There is also work across the team because there are likely some serializations that will need to take place.  Of course the next step is to develop some architectural view of how to really go about implementing this work.

    Architect and Scaffold

    For many developers the really fun part of a project is determining the architecture.  By architecture I mean precisely what you learn about in college courses--what are the systems, sub-systems, data-structures, and algorithms you will use for the major parts of a project.  As a developer, you are of course entirely responsible for these decisions.  Even if you are new you own these choices.  The good news in that case is you will have a dev lead who has experience with the code base and the project who will likely work very closely with you on this phase. 

    I love walking by developer offices during this phase of the project.  Whiteboards are filled with diagrams of pointers, data structures, and lots of "DO NOT ERASE".  There are always heated discussions about what choices to make.  It is during this phase that I believe developers make the most crucial decisions of a project.  As you know the architecture determines not just what can be built well right now, but how responsive to changing requirements the project will be in the future.  While it is great for every architecture you design to be able to respond to any change, that is really tough to do in practice.  So the best developers are those that work the closest with program management to really understand the direction that things might evolve--to the best of everyone's knowledge.  At the same time, it is always worth cautioning that trying to get your PM to say "no I will never ask you for this" might get you into trouble later in the project when things change.  That can lead to frustration, but it is of course always the best way to demonstrate the flexibility of your architecture.

    During this phase developers make up not just the code architecture, but the assumptions about what the code can handle down the road.  The data structures will be chosen to assume certain field lengths, certain limitations, or certain performance traits.  All the size v. space tradeoffs you learn about in college come into play here because as you know you can't just use infinite memory or infinite cycles.  It turns out that for client based applications the primary gating factor is memory usage, so being very clever about how you use memory and how many pages you touch can make a big difference in how your code performs (for example, in toolbars it is often an elegant design to just have each button be a bitmap, but loading 100 bitmaps off disk can be insanely time consuming at boot time when all you want to do is get work done, so you have to be clever about designing a system that can load one bitmap and create 100 buttons).  At the same time, the success of client applications depend immensely on the perceived performance.  So these choices early on have a big impact.  This is where experience and you mentor really help, because there are many things that come up time and time again.  Similarly on server code, the use of CPU and networking have similar issues and an architecture that assumes these are low cost might be very elegant but in practice be problematic. The creativity involved in elegance plus performance plus making something meaningful for customers is very fun!

    I have met a lot of developers that say they want to be architects.  At Microsoft (and definitely in Office) *all* developers are architects.  In some ways I think the job title for everyone on our team should be Software Design Architect.  The reason is simple in that we want everyone to be thinking and acting architecturally with their code.  Because of that we have not historically needed separate people to be telling people what to do and how to do it without actually doing the work themselves. 

    With the idea of what the overall architecture will be the next step is to put in place the scaffolding of the project.  This is a very personal thing for developers as each have their own way to go about doing this.  Some prefer take a depth first approach (I once read that great programmers spend 90% of the time on 10% of the problem, so maybe depth first isn't best, then again I think I spent my life on the CFile class of MFC).  Others prefer to take a breadth approach.  One of the most architecturally focused developers in Office who designed the line and page layout code in modern Word used a process where before any code at all was written all the header files and structure definitions needed to be complete--and the rule was that once coding started these were not going to change.  He wasn't stubborn, but rather just brilliant at doing the complete design ahead of time after appropriately studying the problem. 

    There are a lot of things to consider at this point as well such as what code can be reused--why implement a new data structure when one exists to do the work.  There are items to consider like compatibility.  If your work will trample on an existing API that customers used then you will need to figure out how to continue to support that API.  You can look at these as a burden or as I prefer you get to look at them as useful engineering constraints.  An architect once told me that he loves doing projects where the land the house will be on has a lot of quirks--it makes the project interesting because it introduces constraints that aren't there in a flat quarter acre lot with no trees.

    In a three milestone project, this portion usually takes the first milestone.  As a developer you exit this milestone with a much clearer idea of the schedule and a much clearer idea of the work ahead of you.  Closing out this work and getting all the scaffolding checked in and getting those data structures working is a very significant milestone -- you feel like you wrapped your arms around the problem and can move on.

    Construct

    Of course what comes next is just solid coding.  This too is super fun because this is where you get those feelings of coming into work, writing some code, and showing off a new feature by lunch and maybe another new feature at the end of the day.  Like a long car trip from Florida to New England it feels like you made it through Florida and Georgia are hitting the Carolinas and you're knocking off states at a rapid pace (don't forget to stop at South of the Border though).

    For the most part during the construction phase you are writing code and making things work.  Every day brings new excitement.  You know you have really rounded the corner when people start dropping by your office because word traveled around the hallways about a new feature that is running on your machine. Often you'll see a screen shot passed around in email or a URL mailed around that we should all try out.  One of the new features in Office "12" that was done was the ability to use InfoPath forms in Groove -- this is a super important scenario for reliably collecting data when you are using a laptop not connected to the internet (such as when Groove is used in disaster relief work, for example).  I remember being in the Beverly,MA office where Groove is and seeing a super early demo -- you could literally open up a form in Groove.  You couldn't type or anything yet, but it was super exciting because it showed that the scaffolding and architecture were well on their way to being proven.

    Of course other folks are hard at work while you are writing code, namely the testers you work with.  As you complete features or sub-systems the testers will begin to investigate the work you are doing and they might find some problems :-)  Some of these will be because features are not done or the error handling code is not there, but you might also have things that didn't work as planned.  In fact the more you make it through this the more testing will likely be able to push your code to the limits.  All of this of course helps you to make the code better.  As a developer you always strive to make no mistakes, but we know that is not possible, and so your best ally in building a great product in this phase are your coworkers in testing.  Similarly during this phase as a developer you will need to be very aware of the real world performance--things that are slow now will only get slower.  So you might find yourself revisiting some architectural decisions, since you know that it is much easier to deal with these upstream than hold off.

    As you wrap up this phase we are generally in what we call "code complete".  This means the feature work is done.  It means all the edge cases that were planned on are handled.  It means that as far as development is concerned the feature is ready for people to start to use and for the real feedback to begin.  There is still a lot of work to do, but your work now looks like a product.

    Integrate and Polish

    We're now getting ready for the beta test for the product.  The product is rough and we can't sell it, but you know what it is going to look like and most of all you are very excited to see what others might think.  When you build the product you see the incremental steps so when it all comes together it sometimes isn't as exciting as the first look at the feature.  For me, in Office "12" the PDF feature was like this.  Alex (and others) worked away on this for quite some time of course, but to us we knew it was a very simple "save as PDF" feature that would be on the "File" menu.  It was super cool of course but we'd seen the work evolve.  Then we had the chance to demo it to the MVPs when we announced the support and for those that were there we got to hear the memorable quote "if this works, I'll have your baby".  We were in the end-phase of the product but it sure reminded us just how cool customers thought the feature was!

    One of the most fun parts of this phase is when we invite BillG to the Office hallway and he spends the day going to developer offices and talking about the details of the code and architecture.  This is a tradition we do each release and is enormous fun for everyone, especially Bill.  We pick devs from each of our teams to demo their features and they prepare and plan on Bill stopping by.  You just hang out in your office and then Bill pops his head in.  You start your demo and hope that he doesn't stump you out of the gate!

    Of course the polish phase is not always just fun reactions from customers.  There is a lot of great development that takes place as we really smooth out the product, nail the performance, and nail the quality.  The polish phase really is about fixing the bugs.  The fun part about being a developer during this phase is that you are working from a list of bugs and fixing them--a lot of people really like this style of work in that you know where you stand every day and nothing is too open ended.  Bug fixing for many is a sport.  My first manager was just amazing at being able to almost detect the source of the bug by sensing some sort of EMF from the monitor--he was especially adept at using intel hardware breakpoints to track down errant pointers.  Some developers will likely become informal tech leads of projects at this phase because they can track down anything.  There is also a big aspect of being experienced here that shows and so the more experience you have the easier this phase becomes.  Of course from an agility perspective, the buglist represents the backlog of work and one could argue the buglist should always be a “virtual zero”.

    Similar to bugs is performance.  Even with 3ghz multi-core processors and 1gb of RAM performance is still critical.  A lot of people think that perf shouldn't be a problem or if it is it is just because we add too many features.  I wish it were that since we could just do less features and not have to work on perf.  But the reality is that as fast as we can add features people use more and more of their PCs.  So our original benchmarks for Excel were around booting Excel into a Windows runtime used only for Excel--no network, no AV software, and basically nothing but Excel.  It is no wonder it could work in 1MB of real mode memory!But today when you boot Excel you are probably running mail, Word, a browser, a media player, a network and firewall, and on and on.  So we can’t let our resource utilization grow because there is always contention.  All of our work on the server has these same issues relative to scale, pages per second, etc.   As a developer on Office you will spend a lot of time looking at how your new work impacts the release-over-release benchmarks.  Our goal is that each release should use the same resources and take the same time to do the same tasks.  This is a tough goal for software and it is a testament to the team that our applications still perform at these relative levels. And at the same time people can do lots of new stuff.

    During this phase some of the classic integration engineering takes place as well.  Software represents a complex system and when you bring those systems together the behavior across them and the boundary conditions yields some interesting issues to track down.  Microsoft develops a lot of automation testing and a lot of scenario based views of how the products should function that assist the developer during this phase. 

    Finally for features that interact with users, this is the time we get tons of feedback on the experience and we work hard to incorporate that as appropriate.  We learn lots about the features at this point and because the product is working, program management is out there learning.  And developers are watching the reviews and feedback and responding as well.  I remember when working on the VC++ compiler/IDE and we really wanted to compile the most lines per minute relative to the competition as the spec said we should.  The beta feedback I saw said people thought we were slower.  Now I was pissed--I had like 3 stop watches and 4 machines in my office and I knew every benchmark for compile speed and tracked these on a daily basis.  I knew our speed was faster.  Well I talked to some outside developers on the beta and I realized that they thought it was slower and they showed me how the competitor had a very fancy spinning line count telling you how many lines were compiled and we just had a status bar thing.  I got so excited because I got to tell them that I used to have that but realized it slowed the compile down by a fixed overhead of about 0.2s and for big files it really slowed things down even more just to TextOut those line numbers.  Of course I learned something too that sometimes perceived responsiveness matters just as much as clock time.  A good lesson for all.

    The best feedback of all though is reading reviews, watching your friends, and maybe signing a few autographs at the Hot Truck! 

    Attributes

    With that we've made it through the product cycle -- we've architected, estimated, scaffolded, constructed, and polished.  The product is ready for customers.  Whether that was a customer requested DCR that took 2 weeks, an update of OfficeOnline that took 6 months, or a full release of Office, as a developer you will take your code through all of these phases.  If you're considering an SDE role at Microsoft (or Office), from my perspective a couple of things you will get:

    • Part of a small team focused on the customer or technology area
    • The opportunity to write the very best code for products used by millions of people, not just used but relied on to earn a living, get a degree, or run governments.
    • Access to the best resources to get your job done -- working with the best in the industry in product groups to being able to tap the resources of Microsoft Research
    • A very strong mentor who as part of small team will be there for you on a daily basis

    Of course it goes without saying that to be a great developer you need to write great code, but the following are a few characteristics that our team finds valuable when finding great developers for our team:

    • Able to foresee what will need to change in the next round without over-architecting the current round -- many people can write a quick solution to a problem, but quickly program themselves into a corner.  That is why you might get asked an interview question and then after you answer it you might get asked "ok, now what if the person's language reads right to left".  So great developers know the foresight they are building into the code and understand the limitations that will appear down the road--all code has that of course, but being deliberate and informed about that is a great skill.
    • Debugs other people's code -- Great developers can jump into other code and make progress in pretty short order.  This is super hard.  So getting good at building a mental map of a new system and understanding the patterns in foreign code is a great skill.
    • Makes the code dance for customers -- Many developers are very content to prove their code does cool things.  That is definitely good.  But to be really great, a developer should be able to show how their code solves a problem that a paying customer would have.  
    • Works well with others -- All great programmers that I've known have told me how much they love The Fountainhead or Atlas Shrugged.  Yet at the same time, programming is inherently a collaborative field so all great programmers know when to work well with others and how to use their dev skills to get the most out of the team.  This is not just other devs, but test, pm, design, usability, and others.
    • Knows when to say "no" and when to say "yes" -- Many developers are spectacular at saying "yes" early in their careers which is quickly followed by a tremendous ability to say "no" (after a tough project or two).  Great developers know how to make it work and know when something is important that they can find a way to get a quality job done.  They can find clever solutions to incredibly hard problems. 
    • Humble -- Everyone probably remembers the scene in Top Gun when Maverick was explaining his MIG encounter--Maverick was calm, cool, collected, and understated.  As confident as he was in his flying he told the story with a certain modesty ("[cough] we were inverted" with emphasis added by Goose "no really we were").  Most of all, great programmers are humble about their ability to crank out the best code and make it look easy.

    --Steven

     

     

    (Quote) PM at Microsoft (http://blogs.msdn.com/techtalk/archive/2005/12/16/504872.aspx)

    PM at Microsoft

    While at Stanford this week I was asked by a number of PM (program manager) candidates to talk about the PM role at Microsoft.  The PM role is unique to Microsoft and was actually created in response to developing software that is more usable and at the same time pushes the state of the art of technology.  So when we talk about PM at Microsoft, we're talking from a perspective of creating and evolving the role over the lifetime of the PC industry.

    I have been both a PM and an SDE (software design engineer) during my career at Microsoft.  When I was recruited I started off as an SDE candidate and then I learned about PM during the course of my interviews and I thought "COOL!" that has to be a job for me--after all it sure sounds like an incredibly cool role, since it has the title "manager" in it and if you read/hear the description it sure sounds like you're running the show. The job title "program manager" is a bit of a misnomer, since program managers do not program nor do they manage--go figure.  I went with SDE because I wanted to write code in my job.  After being an SDE for 4 years I moved to program management.  I think that was a good move for me because while I like to think I was competent at development, I was probably never going to hit it out of the park with my ability to write code, but I think what I wasn’t able to do in writing code I made up for with the skills required of a program manager :-)

    What follows is a description of program management from a PM perspective -- that means through the lens of a PM.  It is also an analytical description based on my experience.  I'm not trying to hype the job or make it seem too over the top.  In fact, I've recently talked with an number of candidates who have been told of PM roles at other companies and my feeling is that they are not being told the whole story.  So with my blog I try to be a bit more complete and not "sell".  This might make it seem like there's no room for change or to impact the definition of the role, but that is not the case.  What I'm describing is in constant evolution and it is the members of the team that are constantly evolving the role.  PM is a role that has a lot of responsibility but you also define it--working in partnership with expert designers, clever developers, super smart testers, etc. you all work together to define the product AND the responsibilities each of you have.  PM is one equal part of a whole system. 

    Program managers got started at Microsoft while developing Excel for the Macintosh.  The challenge the company saw was that we were stretched thin trying to push the state of the art in technology (in this case develop for a brand new OS using brand new Graphical User Interface concepts) and so the developers were very busy just trying to make things like printing, display, graphics, etc. work as well as trying to develop new algorithms for spreadsheets and modeling.  That meant that the place where we were not focusing enough attention was on the usability or the scenarios for how people would use the software.  In a very classic sense the high order bit of our development was the code--this is pretty classic in most organizations today where you really only see development and test (sometimes called QA) and to the degree that there is input from users/customers this is usually done by the demand generation or marketing team (called product managers in Silicon Valley).  So at Microsoft a new role was created in Program Management with the explicit goal of partnering with development and working through the entire product cycle as the advocate for end-users and customers. 

    The challenge of trying to write code using the latest technologies and bringing ever more complex scenarios to end-users in a simple way continues today as we build web sites (OfficeOnline), server products like SharePoint, and entirely new products like OneNote, as well as build whole new user experiences to replace the aging menus/toolbar paradigm.

    Up front I would say that the PM role at Microsoft is both unique and one that has unlimited potential -- it is PMs that can bring together a team and rally them around a new idea and bring it to market (like OneNote, InfoPath).  It is PMs that can tackle a business problem and work with marketing and sales to really solve a big customer issue with unique and innovative software (like SharePoint Portal Server).  It is PMs that can take a technology like XML or graphics and turn it into an end-user feature benefitting 400 million people (Office Open XML format or the new graphics functionality in Office12).  I could go on and paint a very emotional picture, but let's spend some time digging into the more analytical aspects of the job.

    Where developers were focused on code, architecture, performance, and engineering, the PM would focus on the big picture of "what are we trying to do" and on the details of the user experience, the feature set, the way the product will get used.  In fact the job has matured significantly and it is almost impossible to document a complete list of the responsibilities of program management.  One way to do that is to list the sections of a specification for features in Office that a PM would complete before the code gets written which includes nailing the scenario you are solving for, the worldwide implications (will your work make sense to customers in China, India, Estonia), how will developer customers extend the product (object models, programmability), is the product secure and is privacy maintained, what are the other features your work interacts with, will the feature be responsive and performant, and more.  These are critical parts of the design of any product, and when you will have 400 million potential customers thinking these through before you start the work is critical.

    As an aside a lot has been said lately about "agile development".  A key benefit of program management is that we are far more agile because we have program management.  That can be counter-intuitive (even for many developers at Microsoft who might be waiting for their PM to iron out the spec).  But the idea that you can just start writing code without having a clear view of the details and specification is a recipe for a poorly architected features.  A great PM knows when the details are thought through enough to begin and a great developer knows when they can start coding even without the details for sure.  But like building a house--you don't start without the plans.  While software is "soft" the cost of remodeling or rebuilding is no different than if you decide the walls are in the wrong place or you forgot to leave room for the HVAC system--sometimes because we don't have material costs in software we think that "rewriting" is perfectly ok.  That generally works super well in two cases.  First, if the program is small then of course you can rewrite it.  In the commercial software world most software projects are not the work of one or two people--in fact one way to think of it is that if a project is only the work of one or two people (or is only a 100KLOC) then the economic value (and thus the impact) of that product is probably pretty finite (at the very least a competitor is likely to catch up very quickly).  And second, rewriting works well when you are looking backwards and re-doing what has been done (like cloning an existing product, implementing something for the n-th time).  When you're doing innovative work, the time spent on design and analysis pays off handsomely in the ability to develop a complete program and to have something of lasting economic value.  AND when you have a process that embraces design and up front thinking you also find your development much more agile because when you do get the code in the hands of customers--after 2 months or 2 years--there is time to respond and react with changes because you are not overwhelmed with the basics.

    The last point is worth re-emphasizing.  There's a school of thought that just getting your software out in beta and then "reacting" to the feedback is the best way to get the product done.  Again, this tends to work for products that already have a definition you are chasing of if you're interested in incremental feedback.  So if you're building an email experience and release it in beta, your customers/users can help you to prioritize which features in the universe of email to add next assuming you did not have all of them up front.  But if you're doing something new and innovative or more importantly if you want more than incremental feedback then you need to have much more sophisticated mechanisms than just beta feedback from power users.  Most importantly, the role of PM is to represent all customers, not just the ones who do beta tests or the ones who take the time to send in feedback or use early products.  A key skill of program management is to have empathy with a broad range of customers.  Often when you are just getting started you will see how easy it is to over-emphasize early power user feedback or anecdotes over broad based feedback.  Don't get me wrong, power users are great but they are just one type of user.  A great advocate for the "little guy" is Walt Mossberg and he really does point out when you're missing the mark on a product and too focused on "techies" as he calls them.  The bottom line is that most people are not techies, but most beta customers and most early adopters are so you as a PM have to do the leg work to validate your work with a broader audience. 

    Before talking about what PM does specifically it is important to look at PM in the context of the relationships with the others that contribute to building products.  A PM serves as the coordinating point where all the disciplines come together--this is why you can think of the PM as being the hub.  What is critical about the Microsoft PM role is that all the different people serve as a "virtual team" building the product--the PM does not have to go pull them together but rather has to help get everyone aligned.  The resources for a project are dedicated to the project--these resources include development, test, product planning, usability, and product design.  Each role brings a unique perspective a unique set of skills to the product development process.  While you can often be someone who has an affinity for another discipline, rarely can any one person bring all of these skills and experiences.  And I can promise that any project of significance really needs the specialized skills to do a world class job and build a sustainable and uniquely innovative product.  I should probably write a blog like this on each role--maybe after the holidays!

    • Development -- developers write the code.  They are in charge of the code's architecture, the performance, the reliability, the security, and getting the functionality into the product. Of course development is at the core of what we do as a software company, but it cannot stand on its own.
    • Test -- software design engineers in test insure the quality of the product but more importantly that the product ultimately meets the needs of the customer we set out to meet.  SDETs will review all specifications as first class members of the team and use their perspective and experience in working with PM and SDEs to insure that the product is not going to be fragile and that it will be possible to insure a successful implementation.
    • Usability -- usability engineers validate the designs of our software and incorporate the statistical understanding of customers into the process. Microsoft was an early pioneer in integrating usability in the product development process (though some might say how in the world we released the Hot Dog Stand theme if we had usability).  Many usability team members have PhDs in HCI or related research areas such as anthropology, and many are undergraduates with a HCI or psychology background.  These team members design mechanisms to test and validate designs and design assumptions.
    • Product Design -- Design work in partnership with PM to develop the interaction model for our products and also own the overall product look and feel.  While many companies use design for "graphical design" (which we do) our designers are expert in computer interaction--many have studied at programs like Delft's or CMU.  When you look at the new user interface in Office12 what you see is a strong collaboration between the PM experts and the Design and Usability experts.
    • Product Planning -- our planners are experts in understanding the market place and understanding what our customers need from software.  Planners own research and communicating that research to the product team PMs and to the executives deciding the overall goals of a release.  Planners are assigned to broad technology and business areas (collaboration, business intelligence) where they become expert in all the products and solutions on the market and how Microsoft can offer customers improvements over what is in the market.  Many planners have business background and have worked in marketing before.

    Many companies will "sell" you on being able to do many of these different things from one job.  This is just not a reality that exists and I always feel a bit bad for folks who believe this.  There are two times I hear this a bunch.  First is at startups you hear "come join us from college and you can own all of this".  Of course at a startup the real experience is that you are the college hire, which means you will do the grunt work while the founders and the venture people do all the strategic work--so you might find yourself setting up the build machines rather than interacting with customers.  Second, I hear this a lot when companies are selling against Microsoft and point out that "at our company we do not specialize and everyone does everything".  This is another "well in reality..." situation, since of course even when I have seen companies that claim to do the specifications or customer research and up front planning they do that work from Product Management, and those people are just as specialized, they just report to the marketing team.  And we know what that means, which is when push comes to shove the marketing team will need to use every hand to get out there and generate the business and sell--so even if there is a single group that does the work, those roles are specialized, and rarely dedicated specifically to the role.  These are my experiences and of course your specific situation might be different.  I've just seen these patterns repeat themselves over many years of hiring students and having them come back to Microsoft after a short experience with something like that.

    It is worth talking about the size of the PM team for a bit.  In Office our PM teams are small (our dev teams are usually about 20-30 developers as talked about previously).  The entire user interface for Office12 was developed by a team of about 12 program managers--imagine that 12 program managers did all the work to totally define the new interaction model for 400M customers of Office.  But along with the fact that the team is small is the fact that a team like this is also one where even the newest members of the team receive significant mentorship and training from a very senior member of Microsoft (you can watch this video to meet the head of the user interface PM team).  So you have the biggest impact you could have in designing software while receiving a very high level of management attention.  And then of course each PM has developers they are responsible to equip with features and specs -- the whole user interface development team was less than 30 people (so about 2 devs for each PM).  A critical part about PM (also one that is unique for Microsoft) is that as a PM you have dedicated developers for your feature area--your job is to get the most out of those developers in terms of bang for the buck by having great feature ideas and great specs to get them done. 

    So what does a program manager do?  Well there are three phases to program management: learn, convince, spec, refine.  These roughly mirror the product development timeline written about previously.  Do keep in mind that the timeline is not fixed--rather the phases of the timeline are.  So if we're doing a 12 month project then the time is divided accordingly, same as if the project is 24 or 30 months.

    Learn --> Output of learning is a prototype

    During the learn phase, program managers spend their time learning about customer problems and learning about the products and technologies out there that are relevant to these problems.  There is a lot of work with planning to understand competitive products or new products in the marketplace.  As you can imagine, customers have huge challenges in getting their computing systems to do what they need.  So often we will spend days at a customer's place of business learning from them and watching them trying to get their work done.  A great example of this is the work we did to understand how customers manage documents in an organization.  It is easy to see that organizations like law firms or pharmaceuticals are heavily dependent on the flow of documents in an organization (contracts, drug approval and research) and so the systems are both mission critical and elaborate.  Companies really want to automate more and to make things more usable and reliable.  The work of program management was to deeply understand how to model the flow of documents in an organization--spending time at big drug companies, small startups, big law firms, local law firms, Public Relations agencies that produce press releases, or government offices that produce legislation to name a few.  Out of this work PM and Planning developed a conceptual model called the "document lifecycle" (DLC).  This helped us to frame the way that customers would like features to work.  So for this work the PM needs to be really good at working directly with customers, learning from them, listening, being open minded to different ways of working, etc.  When you're hired from college you will participate in this work for your area.

    At the same time there are deep technical problems to solve.  We need to solve the control and access to information (drug test results and contracts need a high degree of security, yet they need to be collaboratively authored).  PMs spent a lot of time working with the Windows platform team who develop platform technologies like our Rights Management Server or the Windows Workflow Foundation (WinWF).  These technologies are critical to enabling a robust and extensible implementation of the DLC. So in this phase of learning, the PM has to become well-versed in new platform technologies or in how to apply existing technologies.  Often this is where some people say "it would be easier to roll our own" -- which of course in the immediate term it is (just build your own linked list and event source/sink) but what you miss out on is the expertise and leverage that comes from a deep platform technology.  For example, by learning the WinWF and being an ISV of that technology we can take advantage of advances in workflow, integration with Visual Studio, and a very robust and scalable server without us doing any work--just like when developers reuse the process model of Windows, or the client side drawing code of GDI.

    With this information at hand the role of the PM is to synthesize this learning into a series of prototypes.  These prototypes are of varying fidelity.  This is where the analogy to architecture holds--sometimes you do a drawing, sometimes you do a high fidelity diagram, and sometimes you build a model.  In software we sometimes build static screen shots, we sometimes prototype in tools like VB.NET, sometimes we prototype in a series of static bitmaps that illustrate a scenario.  For our new user experience in Office12 we went through a series of high fidelity prototypes development first in PowerPoint (you'd be amazed at the depth of interaction you can do) and then in more high-end design oriented tools.  By the time we were ready to exit the learning phase, we had a full mockup of the user interface (which I have shown at my campus tech talks this year).

    The output of this phase is a prototype upon which we will author specifications.

    Convince --> Output of convince phase is a plan and goals

    Once you've learned a lot you have to go out and convince your peers, your manager, and the dev team that your ideas are worth pursuing.  This is where being a solid communicator and someone who is able to bring together customer needs, technologies, and scenarios really comes together. 

    As an aside, a lot of companies will tell you that you can come and pursue your ideas.  That is probably not a good plan -- that is a recipe for chaos.  But more importantly, if you can do whatever you want there is a good chance someone else in the company has the right to come in and tell you to change.  If there is this level of empowerment it means the management team is empowered as well :-)  The ability to just start at a company and pursue your own agenda is much more of a lore than any reality--all companies have a strategy and a business framework that the work needs to fit within.  At the very least, eventually shareholders will want a return on your R&D investment.

    So at Microsoft the convince phase is really where your entrepreneurial skills come to play.  While you will always have work to do, during this phase you are working to expand your vision and get as many lined up behind your area as you can handle.  Your ability to convince people of your ideas is a lot like trying to get funding from venture capital folks.  That is why if you have a great conviction of your ideas and a lot of energy you probably have the makings of a great PM.

    The best part about this is that the teams you work with are all working in unison on the vision and everyone is on board trying to make sure the ideas come together super well.  In particular your mentor is there to work with you.  But ultimately, the ideas will succeed based on your own initiative and ability to convince the team of the chances for success and the high priority nature of the work. 

    The output of this phase is the set of objectives for the project area.  What follows is developing things at the next level of detail.

    Spec --> Output of spec phase are a series of written specifications

    The first thing people always think of is "specs are for bureaucrats".  That drives me a bit crazy.  I know as Americans we have a tendency to use new products without reading the instructions, but it is lunacy to develop a new product without first writing down the goals.  The mere process of writing is thinking, and the thinking will always push you to uncover more issues sooner before it is way too expensive to change things.  For all the talk about agile development, few ever talk about specifications as being the most important step in agility.  It is way easier to change a bitmap or do some editing of English in Word than it is to move around and rearchitect code. 

    Yet at the same time we do not sell our specifications, we only sell our code.  So while we work to be very hardcore about having up front planning we do not develop our specifications to the point that they are the full documentation of the product.  It is too much work and not enough of a pay off.  So if you make a late breaking design change we might document the change in the change log but we don't go back and redo all the words in the spec.  Another fun one for reading specs from a long time ago is that the actual feature name used in the product is never what we named it during development--the Office Assistant was famously named TFC during development.  The "C" stood for clown.  I will let your active imagination figure out what the TF stood for.

    So in writing a specification, the PM that worked on the learn phase now has to turn that learning into an experience that customers will have.  This is where the entire series of features, user interactions, boundary conditions, localization, ISV opportunity, and all the details are filled in.  A specification is how a developer will estimate the amount of time it will take to write the code.  So if your spec omits a lot of details and developers need to guess, then there is a good chance you will end up not being able to realize all of your dreams because too many things needed to get filled in a the last minute, plus your developers will not be very happy working with you.  So doing a good job on the spec is important. 

    A great program manager will take their whole feature area and divide it up into specifications that match the developers or break the feature up into workable "chunks".  On average a PM writes about 8-10 specs for their area, and each one can be 30-50 pages depending on how visual (how many pictures).  Some specs are significantly longer and some PMs choose to write a larger number of smaller specs. 

    Specs are not just for developers.  But the usability, product designers, and testers are all contributors to and refiners of the specifications.  In fact while the output of the Spec phase is the document, the final output is an "inspected specification".  If you've ever gone through a code review with a professor or mentor (as an intern) a spec inspection is like a code review.  During this time testers might push on you about boundary conditions or compatibility with existing products.  Product designers might work with you to improve the way the spec describes the overall interaction.  Usability might research the instrumentation from in-market products and use that to refine the priorities for the feature.  In fact the role of data is critical to Office PMs--if you run a web site you have click streams and logs, and Office through the Office Customer Experience Program has exactly the same--usage information for millions of volunteers (anonymous and private of course) and that educates us immensely on how to design features (Jensen's blog describes this as well).  So the spec, while owned by PM, is a work product of many contributors.

    It is worth noting that many times along with a spec is a more detailed prototype.  This is particularly true for heavily interactive features.  In this case product design and PM work together to develop detailed prototypes of the work (often these will be tested in the labs with customers as well).

    When the spec is complete the core part of development begins.  PM then transitions to refining the product.

    Refine --> Output is the product

    During the development of the product, PMs are constantly refining the details, working with development and test to determine what needs more clarity and what is working better than expected (that can happen) and what is going less well (that happens more).  PMs are on call to answer questions and "unblock" development.

    More importantly as the real code becomes available, PM is anxious to try it out and make sure it is meeting their own design expectations.  Once the real code creeps along we will bring that into our usability labs to further understand how the product works.  A famous story of this phase of developing the PM role was that the first PMs were trying to improve a feature under development and ran some usability tests.  The feature bombed.  The PMs tried to explain this to the developers, but the developers insisted that the PM just picked "dumb users" because the feature was great.  So after a few rounds of this the PM dragged the Dev to the tests to watch 10 out of 10 users fail to use the feature.  The developer finally relented and the feature was fixed.  Today, developers can watch tests via streams or go downstairs to our usability labs and watch the tests in person.  Almost all developers I know are keenly interested in how their features are doing (and how the PMs are doing designing those features!) 

    Another aspect of refinement is working with customers who use the early code.  While it is cool to throw a product out to beta and get some instrumentation and maybe get some qualitative input via mail, the only true way to understand how the product is doing is by deep engagement with real world users.  We do this this through a number of mechanisms that gradually expand the number of customers involved.

    Early in the process we meet with a very small number (10-20) customers who spend days with us here on campus and learn about the product.  We walk them through all the details and solicit their feedback and input.  We did this for Office12 last summer and it was critical to our ability to get to Beta1 with a product that reflects real world usage and learning.  As a PM you will be responsible for getting together with these customers and learning from them.  We often follow up on site.

    Another group we learn from that is a bit larger are our MVPs -- the most valued professionals.  These folks are the power users of Office. Our PMs all got involved with the MVP summit on campus and again worked with the MVPs in small groups to get their feedback and expertise into Office12.  The MVPs know more about Office than any other customers on earth--they are a wealth of information.

    We're currently in the phase of learning from a broad set of beta1 customers.  We are doing this through newsgroups and through direct communication. 

    You might also notice that many of our PMs are blogging (see the links to the right).  This is new for us (well for everyone) and also a great source of information and a great way that PMs are connecting with the web community.

    Of course our senior program managers are also responsible for working with the press and product management.  So a lot of time is spent on communicating Office12.  There are a lot of reporters interested in Office and a lot of information to get out there. 

    All of this Refine work feeds back into the developers where we prioritize and make sure that the very best product is built.  Of course that doesn't end with RTM since we're always refining and listening to customers (even though we're not "Web 2.0").  As I mentioned previously, we make over 100 changes every month to Office based on customer input -- so the product is always improving, and we're always learning!

    PM Attributes

    So those are the phases of program management and what you do as a PM in Office.  I would say that there are many unique elements to the role of PM in Office that are not emulated by other companies who have tried to create this role.  A good book that describes the uniqueness of PM at Microsoft is Michael Cussumano's book "Microsoft Secrets" or his new book, "The Business of Software".  If you're considering a PM role at Microsoft (or Office), from my perspective a couple of things you will get:

    • A small team dedicated to solving customer problems and bringing the best technologies to the table
    • Access to dedicated developers who are there to implement your ideas if you can live up to creating a great idea and making sure the details are thought through
    • A very strong mentor who as part of small team will be there for you on a daily basis

    If I had to think of the qualities that make a great PM I might list a few, but your recruiter and the interviews will help out a lot so don't let these discourage you from applying:

    • Strong interest in what computing can do -- a great interest in technology and how to apply that to problems people have in life and work
    • Great communication skills -- you do a lot of writing, presenting, and convincing
    • Strong views on what is right, but very open to new ideas -- the best PMs are not necessarily those with the best ideas, but those that insure the best ideas get done
    • Selfless -- PM is about making sure the best work gets done by the team, not that your ideas get done. 
    • Empathy -- As a PM you are the voice of the customer so you have to really understand their point of view and context 
    • Entrepreneur -- as a PM you need to get out there and convince others of your ideas, so being able to is a good skill

    PM is unique to Microsoft and I think it is fair to say this is a role that is often copied but never duplicated.

    --Steven

    (Quote) Are you a good enough developer to be a Microsoft SDET?

    So, as I was writing this post my computer totally crashed and I lost everything.  Maybe this one will be better then the first – one can only hope the crash was a sign that my original post stunk up the place.  This is the third time that my laptop has crashed this year and I have lost everything on my hard drive.  Um…can you say time for some new equipment? 

    Anyway – the whole point and intent of my post was to talk about the Software Development in Test (SDET) position at Microsoft.  We’ve been getting a lot of questions about the SDET role and with it are noticing that there are a lot of preconceived notions about the position.  This is a difficult role to explain because a lot of other companies don’t have this type of function.  There are test and quality assurance for sure at other software development houses, but Microsoft always seems to put a unique twist on the role.

    I am going to do my best to describe the general nature of the position based on the recruiting experience I have.  I have also consulted some SDETs, Test Architects and Test Managers on this information so hopefully it is pretty accurate.

    General Description

    To boil the SDET role down into its simplest form you can just break down the job title itself.  It is a Software Development Engineer in Test.  You know from previous posts about Software Development and Program Management that Microsoft core technical positions are basically divided into three categories – Development, Program Management and Test.  Gretchen also posted early on about Software Test Engineers.  You should have a good understanding that these three areas work in conjunction throughout the development process in order to ship our products.

    The SDET position itself is a role that combines two software lifecycle responsibilities into one contiguous role – Development and Testing.  In other words, SDETs drive product robustness through designing, developing, and optimizing automated tests.

    As with the other roles at Microsoft, there are many opportunities to work as an SDET across different product groups on different technologies.  There are SDETs that work on system and server level, user interface, and applications and yes even test tool development. 

    The reason why I think that this role is so unique and cool is that it offers you the chance to be the gatekeeper of product quality and ultimately the bottom line of the company.  As an SDET it is your responsibility to think of all the possible ways a product could fail, build automation to support those test (often writing even more creative code than some devs), and ultimately signing off on your particular area.  If we don’t have this type of position our products ships with bugs, which makes the customer unhappy, which means they are unlikely to purchase again or they may tell their friends not to, which leads to lower profits for the company.  If you want to talk impact, this is an opportunity to really make a difference on a product.

    Okay, so I had to sell the position a little bit in this post.  Can’t blame a recruiter for trying!  Anyway, there are some common job responsibilities for SDETs across Microsoft.  Some of those include:

    Planning – SDETs spend time in this phase working with their Program Manager and SDE counterparts to determine what features to work on and prioritize those features.  They may also spend time doing research and investigation on how they will actually test the specification including building executable models.

    Development – this is the heads down coding piece of the cycle.  You take ideas and turn them into code.   You may be writing automated test cases or new automation tools or both.  Again most of the development that takes place is done in C/C++ and now more than ever C#.  We also tend to look for people who have skills in different scripting languages as well – but they also need to have the hard core development background.

    Test/Stabilization – Working with the folks from development you spend a lot of time analyzing failures and advocating bug fixes to make sure we are shipping quality code.  You may also spend a lot of time debugging and suggesting fixes (both designing fixes and writing the code for them).

    Release – In a sense this is when you are shipping the product.  You also might be working on high priority fixes and then start planning again for the next release during this phase.

    Again, I spoke with some folks about how they would break out the time they would spend in each of these areas.  Based on a standard 12 month ship cycle, they said you could spend about 15% of your time planning, 30% of your time developing code, 45% in test and stabilization and the remainder on the release stage. In all, the amount of time that you will spend developing code is similar if not the same as any other developer at Microsoft. 

    This position is probably one of the most creative at Microsoft.  Unlike some positions, you aren’t taking a specification and just implementing it.  As an SDET you are the PM, Dev and Tester of your tools and samples.  You also have the opportunity to design and develop samples that ship as part of SDKs or ship tools and diagnostic tests to our customers. 

    Career path

    As with any role at Microsoft, describing a typical career path is difficult.  It sounds cheesy, but it’s all about where you want to go today and how you envision your career in the future.  There may be a couple different ways you approach that at Microsoft. 

    You might decide that you are ready and interested in taking on people management skills.  This means moving into a lead or manager role.  On the career site titles for these positions are Software Development Engineer in Test Lead or Manager.  You may also see people take on the title of Test Manager as they fill out there teams with not only SDETs but STEs and be responsible for running the test labs as well.  Again, you may still continue to own coding and testing at this point, but you will also have more scope over things such as planning, scheduling, resource distribution, personnel management and meetings. 

    Or you may decide that you are interested in staying purely technical.  Again, we you will have the opportunity to move into more of a “technical lead” type position.  You won’t manage people, but you will be responsible for broader strategies, planning, meetings, etc.  Sometimes on this path people move into Test Architect roles or they may move onto the last path. 

    Finally, you can continue as a senior level individual contributor.  There is a lot of value in this role as we need people that can continue to contribute at a high level within the team.  You might be given ownership of a broader set of features to work against without taking on the people management aspect.  You may also be asked to mentor new hires and thus contribute to the overall wellbeing of the team.  I forgot to mention this in similar posts, but I really do want o emphasize the importance of this role.

    What I look for in an SDET as a recruiter

    Just as in the other roles we have described, there are some key skills that I look for doing the phone conversation and on resumes.  Again, this is just in general and there are skills that other teams look for outside of this area.  One of the main differences that I look for when I am trying to find a SDE vs. a SDET is not just that you are an expert coder, but also an expert tester. 

    Technical skills – These vary by product team at Microsoft, but you have to have strong technical skills for most SDET positions at Microsoft.  This means being able to understand the algorithmic ideas behind the code and software development fundamentals.  Most of the people that I have hired into this role have come from a development background.  Development is a key skill for this role and you must be able to code in C/C++ and/or C#.  Most of the people that I have hired also have degrees in Computer Science or Computer Engineering. 

    Testing skills – This is another key skill to have for the role.  You don’t necessarily have to have deep testing experience, but you have to have passion and interest in testing if you want this role.  Can you think broadly and outside the box?  How can you most efficiently and effectively try various combinations?  How can you create dynamic, reusable tests?  Can you break the product, both in traditional functional ways, but also in terms of security penetration, stress, etc.   

    Requirements analysis – Are you able to take requirements and specification information, analyze it and turn it into a model?  What processes or methodologies do you use to analyze requirements?  These are just some of the questions that I ask to determine if you have this skill set.

    Passion for the customer – Some may think this is a given, but not in my book.  You have to have an interest in making products better for the end user.  How do you consider the end user when you are testing the product?

    Again, these are probably just the basics.  I think the two most important areas are the development/technical skills and experience/interest in testing.  If you have these, I probably will be able to find you a great role at Microsoft as an SDET.

    What usually doesn’t make and SDET at Microsoft

    There are a lot of people with passion and interest in testing, but because they are lacking the technical/development skills we need aren’t a good match for the SDET role.  Typically we are not looking for people that are:

    Traditional manual testers – for this position we need people that have a strong ability to develop code that creates automation.  Manual testers have a strong understanding of testing methodologies and principles perhaps, but in my experience not the code development skills needed for this position.

    Quality Assurance and Requirements Analysts – From my experience these types of candidates again don’t have the development skills needed for the role.  Analyzing requirements is only a portion of the skill set a good SDET needs.

    WinRunner/Silk/Rational Robot experts – Yes, these are great test tools that save you time.  Unfortunately, we need SDETs to build their own automation without relying on tools such as these.  Again, people with this skill have great test but not the development experience needed.

    Now, if you do work in this capacity or have these skills and write code then you may be a potential candidate for the SDET position.

    Dispelling myths

    There are three common myths that I hear about the SDET position when I am speaking with candidates:

    SDETs are junior positions so someone with more than 3 years of experience wouldn’t be right for the position.

    Absolutely not!  Just as with the SDE and PM role we hire SDETs at various experience levels.  We have to in order to provide a great product to our customer.  In my experience recruiting for this position, I have hired people into this role with 1 year of experience all they way up to 10+ years of experience.  I hope that is clear in the career portion of this post.

    The SDET is a stepping stone for an SDE position – a way to get your foot in the door.

    If you are talking to me about the SDET role (or any position for that matter) please, please, please do not tell me that you only are interested in the SDET position to get your foot in the door for an SDE role.  We encourage movement within Microsoft to better align to your career goals and sometimes is make sense for people to move to different disciplines.  However, I would highly encourage you to NOT to take an SDET role if you feel that you will want to move to a SDE position in a year or less.  You would be doing yourself and the team a disservice.  I feel pretty passionately about this and already have another post queued up to address this topic :)

    All SDETs do is testing and the work is not interesting or challenging.

    Again, I hope of I have dispelled this myth as a general part of the overall post.  Just to reiterate, we require the same level of development ability for the SDET role as we do for the SDE position.  Part of the job is testing, but that is not the only job responsibility you have.  In terms of challenges, I think it is fairly easy to say that trying to figure out a way to ship the highest quality product possible is pretty challenging. 

    Summing it up

    The SDET role is critical to the successful ship of a high quality product at Microsoft.  Today we have roughly 300 positions open in this discipline and this is a critical hiring need for the company.  I would highly encourage you to check out this position as a potential career path at Microsoft. 

    I was looking online for some resources about the SDET role.  The best post from Microsoft that I have seen on this role to date is one by Anand Vijay from the Exchange Server team.  Otherwise, you can check out the main career site (though this doesn’t do the role justice) and the college recruiting site (this still applies to industry/experience folks) that has some information on SDETs.

    There are some people waiting in the wings to write a post about what it is like to be an SDET.  In the meantime, check out the references above and if you are interested in learning more about testing software here are a few other resources:

    How to Break Software: A Practical Guide to Testing by James A. Whittaker

    Testing Computer Software, 2nd Edition by Cem Kaner (Author), et al

    As always, please feel free to let me know about other resources that are out there!

    Your ever faithful moon gal,

    http://blogs.msdn.com/jobsblog/archive/2004/05/27/143419.aspx

    April 27

    (Quote) SQL Server Culture

    Although this passage is talking about SQL server culture, it reflects four cores of STBC culture there, which is "System Culture", "IC Culture", "Innovation Culture" and "Customer Focus".-Blake
     
    In my last post on the SQL Server China R&D team, I brought up culture as one of the most important leadership challenges in building up a team. How do we ensure that a team grows up with the “right” culture? And what exactly is this “right” culture anyway? In this post, I want to delve into these questions in a bit more detail.

    Let’s start with the definition of the word first – Merriam-Webster defines culture as

    Main Entry: 1cul·ture Pronunciation: 'k&l-ch&r
    Function: noun
    Etymology: Middle English, cultivated land, cultivation, from Anglo-French, from Latin cultura, from cultus, past participle

    the integrated pattern of human knowledge, belief, and behavior that depends upon the capacity for learning and transmitting knowledge to succeeding generations b : the customary beliefs, social forms, and material traits of a racial, religious, or social group; c : the set of shared attitudes, values, goals, and practices that characterizes an institution or organization d : the set of values, conventions, or social practices associated with a particular field, activity, or societal characteristic

    So, culture is about shared attitudes, values, goals and practices. Every organization has a culture, whether one that has been fostered intentionally, has evolved in a grass-roots manner or some combination of the two. Sometimes, organizations are very explicit about verbalizing the kinds of values and cultural attributes they would like to foster. But it should be no surprise that most people cannot understand, or even remember, what the “mandated” culture of an organization is supposed to be. Each of us grew up with some cultural background, but probably not many of us would say that we acquired our cultural leanings by reading a set of values in a document. Most of us imbibe culture through our daily lives, through everyday experiences, actions, reactions, positive and negative rewards and reinforcements, from a variety of quarters – our elders, superiors and peers. Over time, these values and patterns of behaviors become ingrained in our very being and we then become part of the “established culture”, doing our part in passing that culture on to others in the organization.

    Research shows that culture, once ingrained, can be very difficult to change or “unlearn”, for individuals and even more so for groups or organizations. At the same time, over the long term, culture has been shown to be a much more reliable and important factor that differentiates successful organizations from average or below-average ones, much more so than business strategy, a particular technological or process advantage, or even particular leadership howsoever charismatic or visionary it might be. That is why it is so important, IMHO, to start off a team with the “right” culture, howsoever each organization might define right.

    For a team such as the SQL Server R&D team in China, clearly a lot of the “right” culture for us follows from the culture of our “parent” team in Redmond. Of course, we will interpret and adapt and bring our own local flavor to this culture here in China, but many of the essential characteristics that define who we are and how we behave we will inherit from the larger SQL Server R&D team. So what are some of the elements of this “SQL Server culture”? It is hard to give a definition or boil down to a few bullet points to things that have been accumulated over a period of many years, but let me try to list here a few things that I believe are core to the SQL team:

    Systems Culture: We are a systems team. We build mission-critical platform software which is used by tens of thousands of organizations to build and run business-critical applications that are in turn used by hundreds of millions of people world-wide every day, 24 hours a day, 365 days a year. We build software that has a lifetime of years, indeed decades. Any mistake or weaknesses, whether in design or implementation or in our processes or methodology, can and will show through. The bar is high! To be successful in this kind of an environment, we need a mind-set of being professional grade engineers (see below). Amateurs need not apply!

    IC Culture: Building mission-critical systems software is a craft that takes years to learn. We often tell engineers when they’re hired, especially those coming straight out of universities, that they won’t even be fully productive until 3 to 4 years into their job! While this might sound hyperbolic, it is actually true. By the time an engineer learns what customers want, how to translate that into a product or feature, what is good design versus bad design (versus great design), what tradeoffs to make, how to write robust, secure, reliable, scalable high-performance code that is maintainable and supportable in the field, and to do all this in a productive way working in a team environment, it is going to be several years. This is the process of transforming a smart fresh graduate into a professional grade engineer and there are no short-cuts.

    So what is IC culture? IC is Microsoft-speak for Individual Contributor – as opposed to lead or manager. When a business depends on deep technical skill and knowledge like ours does, we have to value the individual contributor. We cannot build a product like SQL Server if every smart engineer wants to stop writing code 4 years into their career and start only managing people. I often cite this statistic – Microsoft has dozens, perhaps hundreds, of VPs world-wide, but only 14 Technical Fellows (and we are fortunate to have 2 of those in SQL Server). The take-way is not that a VP is not an important post, but that at Microsoft, and definitely in SQL Server, we very highly value people who want to remain technical through their career. In a way, Bill Gates himself is the ultimate IC – sure he has a staff, but his main role as Chief Software Architect (CSA) of the company is to help chart the technical direction for the company. There can be no greater testament to the value placed on ICs and deep technical knowledge in our environment.

    In fact, I believe this point is so fundamental, I’d like to step back here for a moment from SQL Server or Microsoft or any particular company. In my travels around the region, many people express a belief/hope that the Asia-Pacific region as a whole and in particular countries such as China and India shall increasingly take on the mantle of technological leadership in the world economy. Obviously there is a wealth of talent in this region that provides the necessary conditions for this to happen. However, there is also no doubt in my mind that if this region is really to get to that next step where long term product and industry innovations are being driven from labs and companies here, we have to create a culture that values deep technical achievement. In today’s environment, when I talk to college students about their career aspirations, 8 out of 10 want to be managers within a few years of graduating. We simply cannot expect to build the next generation of technological leadership on such a foundation. I see valuing deep technical knowledge and the IC culture as an imperative for the entire eco-system in this Asia-Pacific region, not just for a particular company or group.

    Innovation culture: The database industry is a mature one: 30+ years, 20+ billion USD in annual revenues world-wide. It’d be easy to think that innovation is not a driving force in this industry at this stage. You’d be dead wrong! In my earlier post on the transformation from Database to Complete Data Platform, I described the unprecedented breadth and depth of challenges facing our field. To tackle these challenges successfully, innovation needs to be a core value in our genes, or else we’ll be extinct soon enough. Innovation can be big or small, technological or process oriented, but innovation needs to be a daily value that every employee lives and breathes. SQL Server has had a history of innovating in ways that fundamentally changed even this mature industry – pioneering ease of use and auto-management, integrated BI capabilities in the core platform, dramatically simplified developer experience. Today, we continue that tradition with many break-through technologies in the next release of SQL Server such as the Entity Data Model. We will absolutely need to continue to this focus on innovation going forward.

    Customer-focus: In today’s super-charged environment, it is easy to focus on the competition and forget about the customer. But it is vital to understand that the way to beat the competition is by serving your customer, not the other way around. Customer-focus is not the job of one particular department or role. Sure there will be customer-facing departments like our Customer Support Services (CSS) and various other field organizations. But customer-focus is vital to job of every single individual throughout the organization. Without knowing what the customer ultimately wants, you cannot do your job properly – regardless of whether you are a developer, tester, program manager, architect or even an admin! There is no easier way to become obsolete than to lose touch with what the customer wants. On our team, it is mandatory for every employee to spend some portion of their time with customers, whether it be through participation in newsgroups and forums, attending customer conferences, or a variety of other ways.

    “Do the right thing”: I could go on about other values we cherish within SQL Server and Microsoft, such as respect for diversity, being open and honest yet respectful, taking on big challenges etc. While these are all great values and ones we do indeed cherish, if you talk about everything you talk about nothing. So I would like to conclude by focusing on a summary value that I call “do the right thing”. I admit it may sound a bit sappy, but it is true that this is something we strive hard to live by in SQL Server. Whether it is with regard to a customer issue, a product issue or an internal issue, this is a motto that guides us in our day-day work. I’ll give you a couple of examples. I’m sure every SQL Server customer remembers the Slammer worm to this day. This one event completely changed our approach to software development within SQL Server. When the worm hit, we had actually just gone through a security push and released SQL Server SP3 (which actually included a fix for the exploit used by this worm). However, once this problem hit, it was no longer a question of whether we had issued a fix or not. We had to help our customers get their systems back up and running as quickly as possible in a safe way. The SQL Server team mounted a Herculean effort in the short term to produce the tools and guidance needed for customers to recover their systems. But it is the long term changes we made – in our development processes, in our disaster-preparedness, in our entire approach to security – that stand out in my mind. The results of those efforts have proven themselves over the last several years as SQL Server has proved itself to be one of the most secure products on the market. Does this mean we will never have a vulnerability or an exploit again? Clearly, the answer is no. But what we can say is that we’re working hard every day to make that as unlikely an event as possible, and we’re also constantly prepared to be ready to respond if such an event does occur again.

    Another example I’ll cite is the case of the Database Mirroring (DBM) feature in SQL Server 2005. As one of the most important and popular features in the release, clearly there was a pressure on us to ship this feature. However, as we got close to the end-game of shipping SQL Server 2005, it became clear to us that we would not have the time to run this feature in production (both internally within Microsoft and at selected customer sites) for the duration we would need to have a crucial high-availability feature like DBM be certified for production use. So we had a difficult set of choices – delay the release, ship DBM anyway, or pull the feature from the release. None of them were easy choices – if they were, we would not be talking about them. But in the end, we decided the right thing to do was to ship SQL Server 2005 but not certify DBM for production use, complete the production-test runs in due course, and then certify DBM for production use with SP1. Sure, there was pain associated with this decision in the short term, but looking back customers now tell us they appreciated the extra care and effort that we put in to make sure the feature was completely ready before we let them use it in production.

    Hopefully these couple of examples give you an idea of what we mean by “do the right thing.” There are so many more examples that come to mind but this post is long enough already. I hope you also got a sense for what we mean when we say “SQL Server culture.” It is going to be an interesting challenge to make sure our SQL Server China R&D team grows up with the important elements of this culture ingrained in us as we grow the team over the next few years. But that is a core part of the commitment we made when we decided to create this team.

    Until next time – cheers and zai-jian!

    Prakash – 孙博凯
     
    April 21

    STBC Job Openings

     

    ABOUT STB China

     

    Server & Tools Business (STB) China, formed in September 2005, is one of the core divisions of Microsoft China R&D Group, and is integrated with all Microsoft’s Server and Tools product groups in the U.S. and across the world. It is committed to global engineering and multi-site development that enables engineering agility for product teams, opportunities for local and regional partnerships and increased penetration of Microsoft software and services. STB China focuses on several development areas including High-Performance Computing, Connected Systems, Configuration Management, Windows Server Solutions, Enterprise Access and  Security, Data Platform and Development Tools. STB China is part of a dynamic environment that helps bring together top talent from Shanghai, Greater China and across Asia to help Microsoft achieve innovative products for customers.

     

     

    To learn more about STBC and MSFT, please subscribe to my blog http://blakecaims.spaces.live.com/feed.rss

    Or visit STB China blog  http://blogs.msdn.com/stbcblog/

     

    April 09

    微软的员工培训 (转载自http://blogs.msdn.com/sqlcrd/archive/2008/03/14/8277408.aspx)

    白驹过隙,在org:\\stb\sql\dp\xml工作已经半年多了,感受良多。最深刻的体会,莫过于微软提供的极其丰富的员工培训资源。作为IT企业中的常青树,微软自然积累了丰富的经验,在员工培训方面,更是有独到之处。

    或许你曾经在面试中被问到职业规划是什么。对于一个刚毕业的学生而言,这应该是个很难回答的问题,因为很少有学校在毕业前开设职业培训课程,媒体上的资料也相对匮乏。而在微软,定制自己的职业规划却是每年必须完成的工作。微软不但提供了完整的在线教程,还提供了相应的软件来辅助完成这项任务。这是一个相当不错的机会,可以在新年(财年)伊始静下心来思考自己近期以及长期的发展。资深的经理还会根据每个人的特长和兴趣爱好加以引导,并且在一年中的某几个时间点进行评审并进行辅导。良好的开端是成功的一半,有了这份自己定制的规划,一步一个脚印,实现自己的梦想也不仅仅是梦想了。

    说到微软内部教学网站,那实是值得大书特书。数以千记的在线互动教程,覆盖了软件开发的方方面面,而且汇集了微软多年以来的经验。对于新员工,还有专门的热身教程,帮助你更快地融入公司的文化之中。

    作为一家历史悠久的软件公司,软件资源自然异常丰富,最重要的是,员工可以在第一时间拿到最新产品的安装包,接触最新鲜的技术。微软内部有一种eat your own dog food的文化,鼓励员工使用公司正在开发中的软件,以期在客户发现问题之前找到并解决问题,提高软件质量。比如Vista SP1 RTM版本编译下线的当天我就升级了自己的操作系统,一方面可以与最新的产品一亲芳泽,另一方面还可以提高工作系统的稳定性。幸运的是,由于Vista SP1出于安全考虑开始只接受严格合法的路径,导致我们产品的测试程序由于使用了不规范路径的测试案例运行失败。由于问题发现得早,所以很容易追根溯源,就这样简单地修复了这个测试bug。积极主动,总会有回报。

    课堂讲课也是微软员工培训中非常重要的一个环节。人所共知,微软雷德蒙总部藏龙卧虎,中国很多的开发者都是读着他们写的书成长起来的。如果能与他们面对面地交流,技术提高必然更加迅速。微软为员工提供了这样的机会。几乎每个月都有著名技术作家、微软杰出工程师、著名软件咨询师举办的讲座,针对某个领域进行深入的技术分析探讨,或者讲述自己事业发展的体会与心得。由于课堂有限(微软的讲课大多数都是小课堂举行,与国内高校动辄几百人共聚一堂听一个老师讲课大不相同),这样的讲座在哪里都是一票难求,在总部听一堂热门的讲课需要排队几个月也不是什么新鲜事。由于微软对中国非常重视,John Robbins(Debugging Applications系列的作者)、David Solomon(Microsoft Windows Internals的作者)等大师们的都到中国来开过培训课程,微软的新员工实在是非常幸运的。

    此外,微软内部非常强调mentoring,即新员工都可以找一个资深员工作为自己的导师。即使他在雷德蒙总部,也可以通过公司电话或者视频会议保持密切联络。这种言传身教,可以说是花钱也很难买到的。与此同时,经理也会定期与员工进行一对一的短会,解惑答疑,帮助员工保持着轻松与快乐的心情学习与工作。

    总之,微软为员工的自我增值与提升积累并提供了丰富的资源。只要你想努力学习,没有不够用的资源,只有不够花的时间 :-)

    张琪 (STB SQL, Program Manager)

    坚守在产品开发的最后一道防线上 (引自http://blogs.msdn.com/stbcblog/)

    坚守在产品开发的最后一道防线上

    Published 03 April 08 03:30 PM | STB China Blog 

    ——介绍微软的SDET

    不一样的SDET

    首先,我要强调的是这篇文章讨论的是微软的Software Development Engineer in Test,中文翻译为测试开发工程师,简称SDET。不同于以手工或者脚本帮助测试的软件测试工程师 (STE, Software Test Engineer)SDET是用编程方法结合正确的测试方法学来确保软件符合正确的设计和用户的需求,这里强调的是用编程语言来设计程序并完成自动化的高效测试。下面我就细说一下我们SDET的不同之处。

    首先,SDETSDE具有一样的设计和编程能力,这是我们筛选简历的基本条件之一。无论在美国还是中国,我们从大学招来的SDET都要具有Computer Science的背景,不一定是Computer Science系毕业的(虽然有不少人的确如此)。几所美国大学甚至开设了软件测试博士站,我原来的产品组就聘用了一位软件测试博士。SDET的代码和设计要比SDE的代码(产品)还要有更高的稳定性和坚韧性(Robustness)。产品有专人(就是SDET!)来测试,一个版本一个版本地发布。但是SDET的代码没有这种阶段性,只要它要测的功能还在,SDET的测试代码就得执行下去而且得无误!即便测试的一线管理者,就是测试主管,也同样需要有开发、设计能力。

    第二个不一样是对开发式创造性思维的独特要求。这种独特性体现在SDET设计的测试用例的完整性。SDET需要有开放性的思维,才可能设想到千千万万用户的各种需求,他们来自五湖四海,有不同文化、不同年龄、不同职业等等。同时,SDET又不能迷失在用户的个案中,需要从众多案例之中,选择有代表性的进行重点测试,以点概面,用有限的时间达到较高的测试覆盖率。

    第三个独特之处是SDET的工作在微软软件开发过程中扮演着确保高品质产品的重要角色。因为SDET在整个过程中始终扮演着用户的角色,对一个产品从开始编写代码到最后发布的整个过程有全盘的了解,更能对用户的体验感同身受。SDET必须与PMSDE紧密合作确保正确理解用户需求和产品功能设计的正确性,同时还要保证产品的可测试性。比如,一项功能或设计是不可测的或是用户不需要的,SDET可以要求PMSDE修改设计说明或功能说明甚至提供修改意见。需要特别指出的是,SDET对软件质量的Sign Off也是微软所有产品中期和最终发布的前提条件之一。

    SDET的职业发展

    那么微软SDET的职业发展机会又是如何呢?总的来讲,和微软其他专业的同事大同小异,主要有几个方向:image

    • 继续做SDET,级别一级一级往上升,责任和影响力也越来越大。有些产品组设有技术主管乃至软件测试架构师,一般不管人,其领导能力体现在技术上,负责整个产品的测试框架工作包括自动化系统的设计、新工具的开发和现有系统的改进等等。他们对这个产品组的贡献和影响力很大,不仅限于测试团队,甚至可以对DevPM等专业产生推动作用。
    • 乐于帮助他人成长的SDET可以选择往软件测试主管,软件测试经理等的管理人员道路发展。软件测试主管通常带领37 SDET,负责产品一个或几个关键构件的质量;软件测试经理监督一个产品组的测试工作,设计主要测试计划书和时间表,并经常会管理24位测试主管。顺便透露一下,服务器与开发工具事业部中国团队的总经理就曾经是一位测试开发工程师,并历经测试主管、测试经理,产品总监,测试总监等多个测试专业的岗位。很明显,这个过程需要具备战略性思维方式、有效沟通、团队协作,决策和执行等诸多能力。

    当然,如果个人兴趣发生变更,技术带头人也可以通过一定培训转为培养、发展人才的管理人员,管理人员也可以回到技术带头人的轨道。SDET也有转为SDEPM的,甚至转入技术咨询、支持或市场方向,最终的职业道路不外乎是上述的两个大方向。  

    SDET的日常工作

    除了之前提及的在产品设计阶段审核并批准PM的功能说明和SDE的设计说明外,SDET也要制订相关的测试计划书和时间表,比如,为什么产品中必须提供这个功能,而不是其他的;为什么这个版本应该实现这么多功能;设计测试用例去决定什么应该测试,什么可以暂时放在一边,需要什么样的自动化测试系统,需要新的测试工具与否,测试所需要的时间等资源的预计等诸如此类。

    在测试计划书和时间表审议通过后,每位SDET接下来的主要任务是用合适的编程语言去测试产品,需要考虑是共享他人的工具或代码,还是自己重写;SDET的代码的可维护性要很强,因为没有人给SDET写的代码找Bug,当然代码出错误,SDET得自己分析原因并进行修理。SDET同时不断找Bug,分析Bug产生的原因、跟踪处理Bug的进展。SDET 其它的日常工作还包括对现有系统的改进,当前系统的性能报告等等。

    SDET的乐趣

    SDET没有比找到厉害的Bug更高兴的了,这会让SDE折服,让PM对产品更有信心。成功的SDET会到处听到人们在讨论他或她找到的Bug。如果找到产生这个Bug的背后原因,大家更会竖起大拇指!

    SDET都想让微软其他人采用自己发明的测试方法或工具来发现新bugSDET承担着微软公司内部的诸多系统和工具的开发和维护工作。许多工具被内部几万人使用,这些系统和工具的开发涵盖了所有开发产品所必需的流程,技术含量更加不俗。整个微软有数千SDET, 有在操作系统部的,在Office组的,在服务器的,做硬件的(譬如XBOXZUNE),更有Services。 他们的产品各不相同,如果能研究出一个通用并且高效的做法,其它组的人必然会欣然接受。我们服务器与开发工具事业部就有一位刚从大学毕业不久的SDET,工作第二年就开发了一个UI Compliance方面的自动化测试工具,已被多个中美产品组的测试团队广泛使用,并正在申请相关专利,这也是一件值得骄傲的事情。

    最让SDET自豪的是用户喜欢使用自己测试的产品,并让他们的工作更轻松、便捷。

    我还清楚记得我在微软的第一次发布产品的经历。那时我在MSXML组做SDET, MSXML3.0刚发布时,我总是惶惶不可终日,生怕自己的产品支持工程师来电,说自己负责的那个领域有问题,或者是newsgroup上有人报告坏消息。一天过去了,没事,一个周过去了,还是没事,一个月过去了,还是没事,心情渐渐放下,自傲感开始上升。最后,几个季度过去还是没事,我就彻底放心,可以大胆地告诉他人,我们产品质量没问题,我做到了!

    优秀的SDET

    不是所有的Computer Science毕业生都适合做SDET,除了上文提到的设计和编程能力、独到的创造性外,一位优秀SDET还需要:

    • 有测试天赋;
    • 细心,什么都逃不过SDET的眼睛;
    • 能建立精确的bug报告,提供简洁和准确地重现步骤和调试信息;
    • 追求高质量的测试代码和测试工具;
    • 有主人翁精神;
    • 不断自我批评,寻找可能的测试遗漏点
    • 对自己的工作负责。

    卓越的SDET  
    • 主动拓展自身工作范围之外的技能和知识;
    • 能平衡产品质量保证与产品发布时限;
    • 是软件测试和软件测试原则的最佳传道者;
    • 愿意做任何能最终使软件发布的努力;
    • 在整个开发过程中始终被视作能解决问题的人物;
    • 不断推动软件质量和跨部门交流与合作。

    谈了这么多,你是否对Software Development Engineer in Test这个专业有了全新的认识呢?

    对测试感兴趣的你还等什么,快加入我们的队伍吧!!!

    吴光安

    (注:本文作者为微软中国研发集团服务器与开发工具事业部高级测试主管)

    March 22

    在微软开发软件的几个重要专业 (转载原文http://blogs.msdn.com/stbcblog/)

     

           过去几个月,我先后在中国数家知名大学举行了讲座,并会见了多位致力于数据平台研究的学术领头人和学生。我还在一些业界会议上发言,与用户、合作伙伴、分析师和其他同行会面。这些会议涉及了多个议题,例如,日新月异的科技发展趋势,异地分布式软件开发,以及亚洲的蓬勃发展。但有一个议题似乎得到了最大的关注——微软是如何组织和进行产品开发的?我想这很自然,微软是全球最成功的软件公司之一,而亚洲软件行业正经历其自身的飞速发展,因此业内人士迫切地希望了解我们过去20多年的经验也就在情理之中了。

           “微软是如何组织和进行产品开发”其实是一个很大的题目。在微软内部我们有一个卓越软件工程团队,主要为员工提供为期数日的课程,内容涉及微软软件开发方法概述、工程系统、组织架构、最佳实施办法,以及用以保证产品质量、可靠性及安全性的内部工具和技术等等。这并不意味着我们的体系已经十全十美,但我们的确积累了很多知识和经验可以与大家分享。实际上,我们也在以适当的方式与全球(包括亚洲)同行分享这些成功。

           因为这是一个大题目,我想在这篇文章里着重介绍我们工程系统中的一个方面,即我们研发团队的核心专业和每个专业在产品开发中所扮演的角色。因为我相信微软在这一方面的做法不同于我们的同行(即使在美国也是如此),尤其在中国,目前业界还没有充分理解这些核心专业及其所扮演的角色。

           微软的工程体系一直由三个核心专业组成:“开发(Development)","测试(Test)"和"项目管理(Program Management)",英文简称分别为"Dev","Test"和"PM"。在此,我将以另一个顺序作简单介绍:

           PM:提及软件专业时,大多数人都马上想到"Dev" 。但是对我来说,一切则从项目管理开始。在微软,“PM” 意味着很多事情,对我而言,这个角色主要意味两件事:

           1.了解用户的需求,并将其转换为用于开发的功能说明(functional specification。这是一切的开始,如果我们无法理解用户,我们就不能开发出合适的产品。
           2 .协调Dev 和Test,将最初的功能说明转变成真正的产品。

           我发现很多人,特别是在中国,一听到”PM”就认为这是“Project Management”。事实上,这仅是PM工作的一部分(上述第2点)。PM真正的技能在于倾听用户并从他们的角度理解问题,然后设计出解决问题的方案。这并不意味着简单地为用户提供他们所需要的,而是在真正理解需求后设计最好的解决方案,即使这是连用户自己都从未想到的解决方案。常言道,如果我们一味地遵循用户的要求而只是去找寻一匹更快的马匹,那么汽车永远也不会诞生。

           Dev:三个专业中,Dev可能总是人们知道得最多的。他们负责实际设计和开发软件产品。Dev 的主要工作是实现PM制定的功能说明。在系统级的、关键任务级的软件世界里,这个实现应该极为可靠、 安全、 便于管理、 可以扩展和高性能。Dev的设计和功能实现应经得起时间的考验,并在未来版本中得到重用。

           Test:外界对微软测试工程师存在许多误解,内部有时也存在这个问题。多年前我刚进入微软时,我(愉快而)惊奇地发现在微软Tester的人数几乎和Developer同样多。在我之前服务的公司,测试人员要少很多(当然产品的质量会相对薄弱),因此在微软工作了一段时间后,我才真正了解测试专业的本质。在微软,我们何时可以发布产品并不取决于我们何时完成产品的设计和实现,而是取决于我们何时能完成产品测试。因为我们所发布的每个产品,尤其是系统类型的软件,必须通过一个极高的质量标准。测试专业的确是一个非常复杂的领域,一个Test必须花好几年时间才能掌握悟我们所应用的测试种类—— 单元测试、功能测试、集成测试、压力和远距测试、性能测试、安全性测试,以及本地化测试等。我们在测试中运且用的一整套工具和技术的复杂性令人印象深刻——自动测试套件,自动测试生成工具,自动检测故障分析工具,自动安全模糊测试和基于状态机的测试。

           以上三个核心工程专业就像一张3条腿的凳子——一个也不能少,并且需要一个合适的工程组织保持其平衡。没有一方可以凌驾于其他任何一方,否则这个组织就无法与客户需求保持一致,或者无法在产品质量上下足功夫。这 3个专业类似政府部门间的制衡机制,这套机制确保了我们能理解客户需要,设计高品质产品,同时每个发布的产品都在各方面满足顾客的期望。

           这里需要强调的是,我们一直在招募这三个领域最优秀的人才,他们的招聘条件同样严格,只是每个领域的技能和关注方面有所差异。PM通常热衷与客户一起构思应该设计什么样的产品,然后与Dev和Test同事协作完成所需要的产品。Dev对设计高品质软件更富有激情 —— 产品应是革新的、简单的、可靠的、安全的、可扩展的、高性能的并能经受起时间考验。Test则爱好,在我们向客户发布产品前,竭尽所能找寻出软件中所存在的所有问题和漏洞。

           我们的面试官有一项非常重要任务,就是找出应聘人员的才能和激情所在,然后引导他们向那个方向发展。当然,在个人职业生涯中激情和才华可能发生改变,员工个人也可能因为从事的工作领域不同而有所改变——我本人就曾是从Dev转为PM。这是很自然的,我们实际上也鼓励这种做法以构建更好的队伍。

    其他领域

           除了以上三个历来被视为微软“核心”的专业,另外几个专业也变得日益重要。例如,使产品使用更自然、直观的用户体验专家(User Experience,简称UX)。良好的用户使用体验能让人爱上一件产品,反之则甚至可以让用户不愿去触碰它。用户体验无疑对为终端用户设计的产品至关重要,同时对我们的开发人员、 I T专业人士以及信息工作者而言也是如此。

           当我们进入“软件+服务“的时代,各种与构架、开发和运行极大型基础设施的领域变得越来越重要。需要重申的是,这些曾经只存在MSN和Live 等网络产品开发过程的专业,现在对所有产品组都变得日益关键,因为他们正逐步将产品融入这个 “软件+服务”的新模式。

           很多应聘人员问我在微软什么样的角色更适合他们,以及如何发展他们的职业。我能想到的最好建议是在他们真正热衷的一个技术或角色上下功夫。正如我刚才说过,我们对所有专业同等对待,一个均衡的组织需要在各个领域上都有突出人才。尽管不同专业需要不同专业技能和爱好的人才,但所有专业都存在创新和有所作为的机会。所有领域都提供了技术晋升和管理晋升的阶梯。事实上,如果你留意微软高层管理人员会发现他们中有从各种领域脱颖而出的 —— 他们的共同点是热爱他们所从事的工作。

           我希望本次讨论对那些对此感兴趣的人有帮助,如果你有问题请随时在这篇文章之后留言。

           下次再聊 -- 再见!

                                                                            Prakash (孙博凯)

     

    Over the last several months in my role here in China, I have given talks at several leading universities and met with many of the leading faculty and students working on technologies related to the Data Platform. I’ve also spoken at several industry conferences, meeting with customers, partners, analysts and other industry folks. There are many topics that come up at these meetings – changing technology trends, distributed development, the tremendous growth of Asia etc. But one topic that seems to come up more than almost any other is the question of how we organize and conduct our product development in Microsoft. I suppose this is only natural – Microsoft is one of the most successful software companies in the world, and the software industry here in this region is poised for tremendous growth, so it makes sense that people in the industry are eager to learn from the our experience over the last quarter century.

    This is actually a very big topic and within Microsoft we have an Engineering Excellence group that actually runs courses that can span several days and provide an overview of Microsoft’s software development methodology, our engineering system, organizational structures, best practices, tools and technologies we use internally ensure quality, reliability, security etc and a variety of related topic. By no means would we claim that we have all this figured out perfectly and have a perfect system, but there is indeed a lot of accumulated knowledge and experience that we can share. And we do actually share this information, in appropriate form, with others in our industry, worldwide and also in this region.

    As this is indeed a large topic, I don’t want to get too deep into this here, but I do want to address one aspect of our engineering system – the core disciplines that we organize our R&D teams around and the particular roles that each of these disciplines plays. I want to discuss this because I believe Microsoft does this a little bit differently from the rest of the industry even in the US, and especially here in China there is not a good understanding of these core disciplines and what role each of them plays.

    Traditionally, the Microsoft engineering system has consisted of 3 “core” disciplines: “Development”, “Test”, and “Program Management”, also known as Dev/Test/PM for short. I’m going to touch on each of these briefly here, but I like to introduce them in a different order:

    PM: When we think of engineering disciplines, most people start with “Dev”.  For me however, things really start with the Program Management discipline. At Microsoft, “PM” means many different things, but for me the core essence of the PM role is two things:

    1.       The first part of the PM’s job is to understand the customer’s requirements and translate that into a functional specification of what we should build. This is where it all begins. If we don’t understand the customer, it is not very likely that we’ll end up building the right thing.

    2.       The second part of the PM’s job is to work with Dev and Test to translate the initial specification into a living, breathing product.

    I find that many people, especially here in China, think “Project Management” when they hear PM. Indeed, Project Management is part of a PM’s job (under #2 above), but it is only a part of the PM’s job. The real skill that a PM brings is the expertise to listen to customers, understand the world from their point of view, and then to design a solution for their problem. This does not just mean giving customers what they ask for literally, but to truly understand them and design a solution that solves their problems even if the customers could never imagine the solution – as the famous saying goes, if we had only listened to customers, we would have looked for a faster horse, not come up with the automobile.

    Dev:  Of all the engineering disciplines, this one is probably the one people think about the most commonly. Dev is short-hand for “Development”, the folks who responsibility it is to actually design and build the software that we ship. The essential job of Dev is to take the functional specification produced by PM and translate that into an actual implementation. In the world of mission-critical system-level software, this implementation better be extremely reliable, secure, manageable, scalable and high-performance.  And the designs and implementations Dev produces better stand the test of time and last for several versions and years to come.

    Test: The test discipline in Microsoft is much misunderstood, certainly externally, but sometimes internally as well. When I first came to Microsoft many years ago, I was (pleasantly) surprised to find that Microsoft had almost as many, if not more, testers as developers. Coming from a company that had a much less developed testing discipline (and where as a result, quality assurance was considerably weak), it took a little while to get used to what the essence of the Test discipline really is. The reality is that, in Microsoft, how fast we can ship software depends on not how quickly we can design and implement it but rather on how quickly we can test it. This is because every piece of software we ship, especially on the systems-software side, has to pass an extremely high quality bar. The Test discipline is really an complex area, and one where have learnt a lot over the years in terms of different types of testing that we employ – unit tests, functional test, integration tests, stress and long-haul tests, performance tests, security tests, localization tests, etc. etc. The set of tools and techniques we employ in test is truly some of the most impressive and complex – automated test harnesses, automated test generators, automated test failure analyzers, automated security “fuzzers”,  fail-point and state-machine based testing.

    The three “core” engineering disciplines described above are like the 3 legs of a chair – you need all three of them, and in a balance, to have a proper engineering organization. No one leg can dominate the other – otherwise, you get an organization that may not be in touch with customers needs or one that does not pay enough attention to quality. Indeed, the three disciplines are a little bit like the branches of government – they form a system of checks and balances that ensures we understand what customers want, we design and build that with high quality, and we ensure that we deliver a product that meets customer expectations in every regard.

    It is also important to emphasize that we aim to attract the best talent to all three core disciplines – the bar is equally high for all the disciplines, it just happens to be that the passion and skill-set for each is a little different. PMs usually have a passion for working with customers, conceptualizing what the product should do, and then working with their Dev and Test peers to coordinate all the work to make sure we deliver exactly that. Developers have a passion for building top-quality software – software that is innovative, simple, reliable, secure, scalable, high-performance and stands the test of time. And Testers are passionate about finding all kinds of ways to break software and making sure making sure we find all the issues and bugs before we ship it to customers.

    When we interview candidates, a very important part of what we do is find out which discipline the person’s talent and passion really lie in and directs them accordingly. Of course, over the course of one’s career, one’s passion and talent may change, and the person may change disciplines as a result – I myself started in the Dev discipline before switching to PM. This is only natural and we actually encourage that as a way to build better teams.

    Other disciplines

    It is also important to point out that although the three disciplines mentioned above are what have traditionally been considered the “core” disciplines at Microsoft, there are several other disciplines that are also becoming increasingly important. For example, User Experience (UX) professionals are essential to ensuring that products are intuitive and natural for users to use. A great user experience can make the difference a product that customers love versus one they merely tolerate. UX is certainly very important for products aimed at end consumers, but it is also important for all our audiences – Developers, IT Professionals, Information Workers.

    As we move into the Software+Services era, a variety of disciplines related to architecting, building and running extremely large-scale infrastructure becomes increasingly important. Again, while this has been true for some time for our consumer facing web properties such as MSN and Live, it is now becoming increasingly important for all our product groups as more and more of them take steps to evolve their products along the Software+Services model.

    Many candidates I talk to often want to discuss what role at Microsoft would be the best fit for them and how they can grow their careers. The best advice I can think of is to work on a technology and a role that they are really passionate about. As I mentioned above, we value all the disciplines equally and a well-balanced organization needs great people in all the different roles. While different disciplines appeal to people with different passions and skill-sets, all the disciplines offer opportunities for innovation and great work. And all of them offer opportunities for advancement and leadership. Indeed if you look across the senior levels of Microsoft, there are leaders who emerged from various disciplines – what they shared was a passion for what the work they were doing.

    I hope this discussion of the different engineering disciplines at Microsoft and the approach we take to them shall be useful for the many people who seem to be interested in this topic. If you have any questions or comments, feel free to post a reply to his entry.

    Until next time – 再见!

                                                              

    我在微软做PM (转载原文http://blogs.msdn.com/stbcblog/)

    做一个PM并不容易。 (这年头,谁容易呀...)自从我的title正式改为PM以来,我曾无数次被问过这样的问题。

    - 你在微软做什么呢?

    - PM

    - 哇,这么年轻就当上Project Manager啦!

    - 不,我是Program Manager。

    - 哦,可是Program Manager是什么呢?

    这的确是个好问题。微软并没有Project Manager这个职位,因此所谓PM指的都是Program Manager。顺便说一下,我叫陆榕,是开发工具组的一个PM,正在参与下一版本Visual Studio Team Architect版本的开发。

    我想, 解释微软的PM的工作职责一定是PM工作的一部分,不然为什么你们会看到这篇文章呢…想要三言两语说清这件事似乎并不容易。曾经听过一个比喻, 如果把一个项目比作一个大蛋糕, 开发人员会切走一大块, 测试人员会切走一大块, 用户体验专家会切走一大块, 用户教育人员也会切走一大块, 而剩下的所有东西 – 无论是剩下的大块蛋糕, 还是落下的小块奶油、半个草莓、开发人员和测试人员拿走的蛋糕之间所留下的那一小条蛋糕等等,统统都归PM。这个比喻不完全准确,但至少说明了为什么我说三言两语说不清这件事情。

    好了,言归正传。就我的理解,总结起来PM的职责包括但不局限于以下事务: 

    a) 了解并理解客户需求

    b) 设计产品功能

    c) 与项目组中其他人员沟通,使他们理解并认同你的设计

    d) 为项目制定进度表,管理项目进度

    e) 扫清一切影响进度的障碍,使产品按时按质交付

    f) 向项目组以外的人介绍和演示产品(老板、其他组、合作伙伴、客户…)

    我承认,这些描述也许仍然无济于事。那么让我们来看看具体的例子吧…软件开发是一项合理的人类社会活动(当然!),因此环顾四周便很容易找到可与软件开发类比的其他社会活动。如果您是个DIY爱好者,那么您一定有过许多类似这样的经历:自己筹办婚礼,自己设计装修房子,自己制定旅行计划…这些事情都可以看作是项目,而您也许多次扮演了项目中PM的角色。

    假设,您正打算帮您的父母好好重整一下他们现在的住所,因为那间房子是十年前装修的,已经不够舒适了。现在您是PM,您的父母是用户,您还分别找到了一个很有经验的装修团队和一个很专业的监理团队。

    ** 您早已注意到这个老房子的书房里一盏灯的线路有问题,这必须在装修时弄好。

    —— 这叫PM在现有版本中发现需要修复的问题。

    ** 与老妈聊天时,她提到最近每天晚上10点开始播的韩剧很好看,就是晚上在客厅里看电视觉得挺冷的。您说,那我给您在客厅按个空调吧。

    —— 这叫了解客户的需求。

    ** 老妈说,哟,这得多费电哪。于是您说,那就在卧室里给您再按个电视吧。我给您卧室里设计个电视柜。

    —— 这叫理解用户真正需要,并设计产品功能来满足需求。

    ** 于是您开始设计电视柜了。您先考虑了一下该买个多大的电视,然后又考虑电视柜得打在什么位置,长宽高是多少,在什么位置有几个抽屉,抽屉把手用什么样的,需要承重多少等等等等。等一切都想清楚了,您把所有这些都写进了装修合同里。

    —— 这叫设计产品功能,并编写功能说明 (Functional Specification)。

    ** 带着合同,您就与装修团队和监理团队见面了。您先向他们阐述了您的想法,并请他们仔细阅读合同,看看是否合理。他们对此设计没有提出异议,因此彼此立刻签署了合同。

    —— 这叫使项目其他成员理解并认同您的设计。

    ** 于是您请他们分别估计工作量,装修团队说需要2个月,监理团队估计在那之后他们还需要1个月。因此您将进度表(Schedule)定为3个月长,并在其中设置了多个里程碑(Milestone)。

    —— 这叫为项目制定进度表。

    ** 第二天,装修团队打来电话说您想要的那种墙面漆涂料最近缺货,没有涂料便没法刷墙,也将影响其它任务的工期。迫在眉睫,您忽然想起了有位朋友刚买了这种涂料,便询问他是在哪里买的。得知某郊区卖场还有剩余,将此信息告诉装修团队,于是刷墙得以如期进行。

    —— 这叫扫清项目障碍。

    ** 两周后是第一个里程碑,您来到房子一看,墙面已粉刷一新。但被告知最近天气多雨,墙面漆要多花几天才能干透。于是您及时调整进度安排,将修理电线线路等任务提前。

    —— 这叫管理项目进度。

    ** 两个月后,监理团队告诉您,他们看了做好的电视柜,发现长度略长于合同规定尺寸,其中两只抽屉无法打开。您找到装修团队,与监理团队一起商量。鉴于修复长度问题成本较高,而且对用户使用影响不大,决定不修复。但抽屉的使用为基本功能,需修复。

    —— 这叫鉴别bug。

    ** 三个月后,项目顺利完工。您带着父母一一参观房子装修后的每个角落,向他们介绍如何使用等。

    —— 这叫向用户演示产品。

    当您看到用户 - 老妈舒舒服服地躺在被窝里看着韩剧时,看到老爸的书房里灯再次明亮如初,您的心里是不是感到满足呢?

    在微软,我们的用户将不仅仅是两个人。除了英语版本,我们还发布多种语言的本地化版本。我们的用户可能相貌不同、说的语言不同、还可能身处世界的不同角落,但我们的产品和我们的设计都将同样影响着他们,提高他们的工作效率、丰富他们的生活。

    当然,我们所要设计的产品远远比一个电视柜要复杂。在微软,我们的软件设计不仅要切实满足用户的需求,还要让用户感觉好用。如果您对设计实用又好用的软件充满热情,那么微软的PM职位将非常适合您。

    当然,我们的项目管理也远远比管理装修工程复杂。在微软,PM需要和许多人沟通,可以说沟通是PM工作中相当重要的组成部分。大型项目中最需要的不是更多的人,而是人与人之间的交流。PM要承担起团队润滑剂的职责,确保项目这部大机器能顺畅运转。我认为,沟通并不仅仅指通常意义上的“能说会道”,也不局限于中文/英语的流畅程度。好的沟通是需要技巧的。首先,要仔细聆听对方的观点。听完后最好再进一步领悟对方隐含的意思或是站在对方的立场思考他/她的出发点。在这个基础上,再表达自己的观点就会有的放矢,就比较容易达到沟通的效果。一味的表达自己,有时效果并不理想。如果您喜欢与人沟通,或是您充满了沟通的天赋,那么微软的PM职位将会适合您。

    微软有许多不同的职位,职位没有高低好坏之分,只是工作内容不同罢了。唯一的标准是,您喜欢什么样的工作?

    一年前,我是开发测试人员。那个时候,我最感兴趣的是尽可能多地找出产品的bug(当然是在产品发布前…),天生就是个喜欢拆东西的小孩…

    随着对微软开发模型的了解,我慢慢地发现了令我更感兴趣的事情,那就是寻找客户需求,并且设计自己的产品功能!我对这件事情越来越感到着迷,并告诉了老板我的想法。后来,我得知我们的团队将要招聘一名PM,抵制不住诱惑,便从一名Tester转成了PM… 一年来,我感到很快乐。尽管现在我仍然对测试怀有兴趣,偶尔也报一些bug,但我从来没有后悔当时的决定,因为我找到了我想要的工作。

    您找到了吗?

    附送照片一张。这是我最喜爱的一面白板,因为这里记载着我们在上一个开发项目中留下的每一个脚印。

           clip_image002[10]

    陆榕

    寻找和留住人才:在华跨国企业的管理挑战<节选>(转载原文http://blogs.msdn.com/stbcblog/)

    本文作者:Nancy R. Lockwood,高级人力资源管理师,全球人力资源管理师,美国人力资源管理协会研究部人力资源内容项目经理

    如您希望转载或引用《寻找和留住人才:在华跨国企业的管理挑战》全文或部分章节,请直接联系美国人力资源管理协会有关授权事宜。

    打造人才发展通道

    在跨国企业建立切实的员工继任计划也是人才管理的另一个重要挑战。将员工继任计划视为人才管理战略的关键组成部分,微软在这方面成绩也很突出。他们认为要保有人才,重要的是要让员工认识到,他们无论从技术晋升阶梯或是管理晋升阶梯均可以取得卓越的成就。中国的员工希望能够有一个领导或经理的头衔,但是真正的大挑战是建立人才发展和职业晋升的通道。”Hoskin 说。美国人力资源管理协会的此次调查发现,由于中国的变化速度远远超过世界其他国家,所以人力资源管理者必须能够提供迅速满足员工发展需求的机会,否则大量的人才就会流失到那些能给他们提供更好机会的企业中去。但是我们也必须注意到中国的员工面对企业和国内市场的快速发展,也呈现出急躁、急功近利的短视取向,因此必然产生这样的矛盾,即如Hoskin所说企业只给拥有必需的技能的员工提供拥有更多责任和义务的岗位。因此企业在进行人员流失管理时,必须分清哪些员工是企业真正需要的核心人才,进而给予良好的发展空间。

    在中国, 微软最重要的人才库是计算机学科的毕业生。微软的Hoskin说:“我们需要一个强大的平台来吸引和培养他们”。在今后的三至五年内,这家公司预计将在中国大规模地扩充其员工队伍,将从1,200人扩展到3,000人。要实现这个目标,微软会在其中国研发部门一年投资1亿美金。“那将是在人才方面的大投资,而其最终结果是带来智力资产、人才和他们的能力和才干。” 在微软, 品牌在吸引和留住人才方面起着关键作用。Hoskin认为,作为底线,向未来员工表明的第一件事就是他们将能够参加高层次的技术研究工作,开发将改变全球亿万人民生活的产品,“这个远景对人们极具吸引力。”

    为了留住人才,微软力图创建一个更好的工作环境。公司内设立了按摩椅供员工休息放松,上下午提供新鲜水果和饮料,在每个单位设有星巴克咖啡店,每一层楼设有X-box游戏机、双人对抗游戏和乒乓球桌。针对直接从学校聘用的众多毕业生,微软专门将工作环境模拟为学校环境。结果是,员工乐在其中,努力工作,大家自愿延长了工作时间。

    微软严肃对待人员培训和发展。目前,微软中国研发部门有大约100个培训项目,比如提高操作技能和工作流程有效性的工程卓越项目,提供国际性体验的项目(包括马可波罗项目和丝绸之路专家项目)。在马可波罗项目中,美国总部经验丰富的工程师被派往中国研发部门,驻点36个月,讲授技术和开发流程。丝绸之路专家项目将中国本地员工派往美国轮训46周,了解微软文化,认识产品团队伙伴成员,增加和提高产品知识和能力,同时也了解美国的文化。回国后,他们再将知识传递给微软中国研发部门。这两个项目均是从学习和经营的目的出发。总体来看,这些具有创新性质的行动,体现出微软的人才管理战略很好地服务于公司的使命。

    今后的5年将是在中国的跨国企业的关键发展阶段,微软将继续培养人才并加大投资生产下一代影响全球亿万人的微软产品。比尔·盖茨在最近一次访问中国时强调,公司将一如既往地致力于中国环境保护,并且计划开发新产品和软件从而给全球大约50 亿人带来社会的和经济的机会。Hoskin认为,微软将精心描绘其全球战略,开发出创新型产品,并且将寻求能够开发、生产和完善这些产品的人才。他介绍道:“为了推动微软的发展,我们必须培养最优秀、最聪慧的领导者。”

     

    注:Joe Hoskin, 微软中国研发集团高级人力资源经理

    携手客户开发产品(转载原文http://blogs.msdn.com/stbcblog/)

     

    clip_image002      在整个微软产品开发周期中, 往往受关注的是计划(Plan),设计(Design)和实施(Implement)三个阶段, 因为其中投入了大部分的人力、物力和时间。但一个产品真正意义上的第一次考验是在稳定(Stabilize)阶段,微软通常会在产品Pre-release前, 邀请重要客户参与技术先行体验计划 (Technical Adoption Program, 以下简称TAP),将该产品的Beta或者RC版本完整地运用于客户真实的工作环境,在评估和采纳我们技术的时候提高客户/合作伙伴的使用体验,产品研发团队也会根据实际的使用情况和客户反馈取舍部分产品特性,使产品能够按时按质发布。

    2007年4月至9月间,我作为微软服务部门技术专案经理有幸与服务器与开发工具事业部的同事合作,成功地在中远集装箱运输有限公司 (以下简称中远集运) 实施了Microsoft® System Center Configuration Manager 2007(以下简称SCCM 2007)全亚洲唯一的TAP项目, 以下就和大家一起分享我们的收获。

          经过相关讨论和协议签署后,我同十几位开发、测试工程师一起根据中远集运提供的IT现状资料,配合我们产品的特性,量身定制了一套SCCM 2007系统架构;在中远集运工作现场辅导其IT管理人员成功部署和升级了SCCM 2007 Beta和RTM版本;并一同测试了包括软件分发/升级,OSD发布,软硬件资产管理,远程控制等多个功能模块。由于客户实际使用环境的复杂性,部署过程中我们碰到了不少在产品开发中从未预期的状况,因此顺利完成此次项目管理和技术支持对一个年轻的研发小组来说是不小的成就:不仅增加了研发团队与客户交流的机会、提高沟通能力, 进一步认识了客户使用微软产品的方式,并收集了大量宝贵的数据与这一产品全球开发团队及时分享,为今后“智”造出更符合客户需求的产品提供了很好的依据。

          令我们整个项目组特别自豪的是,这个技术先行体验项目让中国客户的意见在产品发布前就得到了全球研发团队的重视,SCCM 2007在发布Beta版时就开始有了中文版本,大大提高了中国客户的使用体验。

    胡俊

    注:作者不久前成为服务器与开发工具事业部(中国)的一名项目经理(PM)。

    Microsoft’s Silverlight Powers Online Video with High-Definition

    Summary:

    IT Times published an insightful feature story introducing Microsoft’s new online media solution called Silverlight, an innovation that powers up existing online video services like 6.cn with HD video playback functions and efficiently lowers transmission flow.  On the other hand, this new technology is well integrated with online search engines, presaging significant improvement in the business of online video services that remain undecided on their profit models.

     

    The article begins with a depiction of the better video quality Silverlight brings to the existing online video sites. According to Wang Wei, CEO of Tudou.com, although HD playback requires more powerful processors in the server, the better algorithm of both coding and de-coding are more vital. With the award-winning Windows Media technology, Silverlight can not only improve the quality of the video, but will also lower the transmission flow, making it more practical for users to watch videos online with better quality and speed.

     

    The second part of the article brings in the business prospective of Silverlight. The integration of Silverlight and online search engines such as baidu.com and Google is impressive and innovative. Users could literally use subtitles in a video as a search keyword, as long as the video is built on the Silverlight platform. Pang Fei, an engineer from Baidu confirmed this after experiencing Silverlight.  On the other hand, by presenting rich media experience, Silverlight could offer richer advertising models for online videos.

     

    During the development of Silverlight, Microsoft CRD participated in its core development. A team was specially set up in Shanghai and made great efforts on the localization of Silverlight. Currently there are several well-known websites testing Silverlight on their services. According to Microsoft, 2008 will be the year Silverlight will change the online video market.

     

    Key Messages Captured:

    1.       Silverlight, as the advanced platform designed by Microsoft, could offer greater online video quality and better loading speed.

    2.       It is highly possible that with its rich media algorithm, Silverlight could help online video services find the profit models they’ve been seeking.

    3.       CRD STB has made great efforts in the development of Silverlight, in both the research and localization of the technology.

     

    Third Party Endorsement:

    Pang Fei, Baidu Software Engineer: “Silverlight could creatively make words in either videos or animations searchable on search engines, which would provide more business opportunities to those websites.”

     

    Microsoft Spokesperson:

    Xu Pengyang, Group Manager of Silverlight Shanghai Team: “The current advertising model in online video is to embed the ad during playback, which is a practice not well received by users. Silverlight, on the other hand, could provide richer ad models with greater algorithms and functions.”

     

     

    Publication:

    IT Times: invested by Shanghai Telecom, is a highly specified weekly IT publication in Shanghai targeting industry customers and small and medium size enterprises. Fold A targets industry and professional reader while Fold B targets general readers. IT Times is directly distributed to Shanghai Telecom’s small and medium size enterprise customers. It’s available on the Oriental Newspaper and Book Retail Chains, too. Readership includes professionals in the IT industry, IT professionals of small and medium size enterprises of a wide range of industries and the general public interested in IT developments.

    March 02

    Gates to tap young minds

    Gates to tap young minds
    MICROSOFT TO PROVIDE DEVELOPMENT TOOLS
    Article Launched: 02/19/2008 01:34:26 AM PST

    In a speech at Stanford University today, Microsoft Chairman Bill Gates is expected to announce a software giveaway campaign that will unlock high-end developer tools used to create everything from games to cell phone applications to millions of college and high school students around the world.

    The program, dubbed Microsoft DreamSpark, will initially start in 10 nations, including the United States, China, the United Kingdom, France and Germany. It will be expanded to more countries in six months.

    "Where do the great breakthroughs come from? Are they coming out of corporate board rooms or out of the minds of students?" said Joe Wilson, Microsoft's senior director of academic initiatives, who disclosed the program in a briefing Monday. "Some of the greatest innovations in our space have come from student minds. Yahoo, Microsoft, Google, Dell - at the time these companies were conceived, their founders were students."

    Analysts say the program will greatly benefit students, Microsoft and, possibly, society if more young people are exposed to programming opportunities at little cost. For many students, paying for the development tools, which can cost thousands of dollars, is a big hurdle, said Rob Enderle, founder and principal analyst at the Enderle Group, a technology consulting firm. Enabling them to get their hands on high-level development tools could whet the appetite of more students for software engineering careers.

    "The breadth of the tools we are providing - I don't think anyone has done this," Wilson said.

    Giving away Microsoft software also helps to ensure the next generation of code writers is well-versed in the Redmond, Wash., company's technology. Other companies, including IBM, Sun Microsystems and Adobe have launched similar programs in the past.

    "When kids come out of school, they carry those skills with them and will advocate that technology," Enderle said. "It's making sure the students are speaking their language. And it's not like they are losing a lot of money giving this away."

    Because they are minors and can't sign license agreements, high school students will have access to the tools only through their teachers. They will be able to do that beginning in the fall.

    "You want to make sure they have oversight," Enderle said. "Younger kids with access to powerful tools could do ugly things - you could see them breaching security, playing pranks."

    The campaign is good strategic thinking, the kind of long-term bets often made by founders looking for a payoff a decade from now, he added. Microsoft Chief Executive Steve Ballmer, while not a co-founder, has been with the company from virtually the beginning.

    "At the end of the day, they could be creating some good commercial opportunities for themselves," said Charles King, an analyst with Pund-IT Research. "They are putting powerful tools in the hands of kids who could do some interesting things with them. The tools they are offering are pretty comprehensive. It doesn't look like a pilot program."

    March 01

    Bill Gates links up with LinkedIn

    Bill Gates links up with LinkedIn

    Microsoft Chairman Bill Gates speaks at Memorial Auditorium at Stanford University in Stanford, Calif., Tuesday, Feb. 19, 2008.

    YouNewsTV™

    Story Published: Feb 28, 2008 at 8:40 AM PST

    Story Updated: Feb 28, 2008 at 8:45 AM PST

    By Associated Press

    SAN FRANCISCO (AP) - Microsoft Corp.'s big bet on Facebook's online social network isn't stopping Chairman Bill Gates from promoting other popular Internet hangouts.

    Gates is helping out LinkedIn Corp.'s online professional network by setting up a profile on the service and posing a question to help draw more attention to a makeover of the Web site's front page.

    The question, scheduled to be posted Thursday, will solicit suggestions on the best way to encourage more young people to pursue careers in science and technology.

    Meanwhile, LinkedIn will encourage its 19 million members to try out a new tool that will let them broadcast their daily activities to their connections. The "status" feature copies one of the top applications on Facebook's site, which revolves around a more playful premise than LinkedIn's buttoned-down atmosphere.

    Gates plans to use LinkedIn's status feature, although he decided against listing "trying to buy Yahoo" as his current activity. He instead will start off by letting everyone know "Bill is checking out LinkedIn."

    The decision to take a closer look at LinkedIn might please a few industry analysts who have argued Microsoft would be better off buying several up-and-coming Internet startups like LinkedIn instead of pursuing its current bid to acquire slumping Yahoo Inc. for more than $40 billion.

    Although LinkedIn is frequently mentioned as an attractive takeover candidate, the Mountain View-based company so far has indicated it is more likely to make an initial public offering of stock during the next year or two. LinkedIn spokeswoman Kay Luo declined to comment on Microsoft's possible interest.

    Microsoft late last year invested $240 million for a 1.6 percent stake in Palo Alto-based Facebook Inc., whose 66 million members make it the Internet's second largest social network behind News Corp.'s MySpace.

    Gates is among Facebook members, although he reportedly stopped using the site recently because he was tired of sifting through the thousands of requests from requests from strangers who wanted to befriend him. Microsoft declined to comment Wednesday about Gates' status on Facebook.

    LinkedIn offers privacy controls that will enable Gates to block requests to connect with him on the network.

    Gates probably will want to use that tool because LinkedIn members have a keen interest in the billionaire. Even before he set up his LinkedIn profile, Gates was the most searched person on the site, edging out Democratic presidential candidates Barack Obama and Hillary Clinton.