1 / 23

ProductiZing Research

ProductiZing Research. John L. Miller, Software Architect Microsoft Research Cambridge 11-July 2007. Agenda. What is Productization? Why is it difficult? Can I do it myself? Advice from the field. What is ‘Productizing’. Migrating research results Affecting an existing product

trory
Download Presentation

ProductiZing Research

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ProductiZing Research John L. Miller, Software Architect Microsoft Research Cambridge 11-July 2007

  2. Agenda • What is Productization? • Why is it difficult? • Can I do it myself? • Advice from the field

  3. What is ‘Productizing’ • Migrating research results • Affecting an existing product • Supplying algorithms and methods • Influencing product features • Writing shipping code • Seeding a new product

  4. BM25F: An algorithm • Algorithm for web search ranking • Devised at MSRC • Results transferred to MS search teams • Product team wrote their own version based upon the research algorithm

  5. Sideshow: a feature • ‘Gadget Bar’ for Windows • Prototyped & shared at Microsoft years ago • Now part of Vista:the Sidebar • Product team wrote their own code • strikingly similar appearance and features

  6. TrueSkillTM : Shipping Code • Player Ranking and Matchmaking • Researched in MSRC • Primary code developed by researchers • Incorporated with some modifications • Basis of matchmaking for most Xbox-360 games

  7. Pastry: external licensing • Pastry / Splitstream / Scribe / Squirrel • P2P communication framework, applications • Shopped inside of Microsoft, but never successfully transferred • Licensed to Skinkers for ‘spin-out’ • LiveStation in Beta, recently in the press

  8. The visible minority • MSRC has dozens of successful tech transfers • Many more never started, or fizzled out • No appropriate target • Best fit already too busy • Change in direction / management • Lack of resources

  9. Why is Productization difficult? • Orders of magnitude more work than research • ‘It cannot fail’ vs. ‘it can succeed’ • Requires influencing people you don’t have any control over • ‘Internal work’ is a priority • Existing teams already have lots to do • Understanding new technology takes work

  10. Productizing PNRP: timeline Jan ‘01 Jan ‘02 Jan ‘03 • 2000-10: PNRP proposed as algorithm by Huitema • 2001-03: Prototype completed • 2 person-months effort • Fully functional IPv4 prototype • Broader than final product, but not as deep • 2002-04: Initial design document first draft completed • 2-3 person-years effort • 40 page protocol spec, 150 page design spec • 2002-08: Code-complete • 1 person-year effort for dev, ~1/2 person year for test • 2003-04: Test-complete, ship bugs fixed • 1.5 person-years effort for dev, ~2 person -years effort for test • 2003-06: Released to Web (RTW) 1-Algorithm 2-Prototyped 3-Designed 4-Implemented 5-Tested 6-Released

  11. ‘Product Quality’ • Strict coding guidelines • Modularity, extensibility, scalability • Diagnostics • Robustness • Prototype • Design for majority case • Failure = exit with apologies • Access violation = fix, re-run • Product code • Design for ALL cases • Failure = work around the problem • Access violation = angry customers => bulletproofing

  12. Example: Prototype void DrawBox(HDC dc, int x, int y) { bool bGot = false; HPEN p, op; if (dc == NULL) { dc = GetDC(NULL); bGot = true; } p = CreatePen(PS_SOLID, 10, RGB(0, 255,0)); op = SelectObject(dc, p); Rectangle(dc, x, y, 200, 200); SelectObject(dc, op); DeleteObject(p); if (bGot) ReleaseDC(dc); }

  13. Example: Product Quality // Pen of 10 pixels for drawing box const int MY_PEN_WIDTH = 10; // Green pen for our box color const COLORREF GREEN_PEN_RGB = RGB(0, 255,0); // All boxes we draw are 200 x 200 const int MY_BOX_WIDTH = 200; const int MY_BOX_HEIGHT = 200; HRESULT DrawBox( IN HDC hContext, IN int iXOffset, IN int iYOffset ) { BOOL fFreeDC = FALSE, fRet = FALSE; int iRet = 0; HRESULT hrRet = S_OK; HPEN hpNew = NULL, hpOld = NULL; // // Get the default screen DC if we don't already have one. // if (NULL == hContext) { hContext = GetDC(NULL); if (NULL == hContext) { hrRet = HRESULT_FROM_WIN32(GetLastError()); TraceMessage(MYAPP_ERROR, L"%s(%d) - Unable to get screen DC: 0x%08x", __TFUNCTION__, __LINE__, hrRet); goto Cleanup; } fFreeDC = TRUE; } // // Create a green pen, and select it to draw our rectangle // hpNew = CreatePen(PS_SOLID, MY_PEN_WIDTH, GREEN_BRUSH_RGB); if (NULL == hpNew) { hrRet = E_FAIL; TraceMessage(MYAPP_ERROR, L"%s(%d) - Unable to create pen: 0x%08x", __TFUNCTION__, __LINE__, hrRet); goto Cleanup; } hpOld = SelectObject(hContext, hpNew); if (NULL == hpOld) { hrRet = E_FAIL; TraceMessage(MYAPP_ERROR, L"%s(%d) - Unable to select our new pen: 0x%08x", __TFUNCTION__, __LINE__, hrRet); goto Cleanup; } // Draw the actual rectangle // fRet = Rectangle(hContext, iXOffset, iYOffset, MY_BOX_WIDTH, MY_BOX_HEIGHT); if (FALSE == fRet) { hrRet = HRESULT_FROM_WIN32(GetLastError()); TraceMessage(MYAPP_ERROR, L"%s(%d) - Unable to Draw the rectangle: 0x%08x", __TFUNCTION__, __LINE__, hrRet); goto Cleanup; } Cleanup: // Clean up the new brush, and select the old brush if there was one // if (NULL != hpNew) { if (NULL != hpOld) { HPEN hpTemp = SelectObject(hpOld); if (NULL != hpTemp) { hrRet = HRESULT_FROM_WIN32(GetLastError()); TraceMessage(MYAPP_ERROR, L"%s(%d) - Unable to reset Pen to original: 0x%08x", __TFUNCTION__, __LINE__, hrRet); } else { hpOld = NULL; } } DeleteObject(hpNew); hpNew = NULL; } // If we allocated a DC, free it. // if (fFreeDC) { iRet = ReleaseDC(hContext); if (0 == iRet) { hrRet = E_FAIL; TraceMessage(MYAPP_ERROR, L"%s(%d) - Unable to release a default DC! Will be fatal soon: 0x%08x", __TFUNCTION__, __LINE__, hrRet); } else { hContext = NULL; } } return(hrRet); }

  14. Other Productization work • Funding, business model, management • Testing, release management, product support • Marketing, technical evangelism

  15. Can I productize it myself? • If you’re a renaissance person, sure! • A better question: should you? • Engineering not as easy as it looks • LOTS of work • Opportunity cost is high • Forza: 2 people x 2.5 years • .NET Generics: 1 person x 3 years

  16. How does Microsoft Cope? • Researchers focus on research • RSDE’s sometimes help with productization • MSR Program Managers • Introductions, relationship help • Product / Research Events • TechFest research showcase • Mindswaps • Other avenues for transfer • External licensing • Spinout

  17. How to Succeed • Identify your transfer goal • Choose your technology carefully • Pick the right target team • Communicate • Persistent and flexible • Keep perspective

  18. Identify your transfer goal • Is the priority transferring your technology, or influencing a product? • What direction will you accept? • ‘just in time’ research for team? • Transfer your original research • What is success? • Team evaluates technology? • Team adjusts course based on your work? • Your research in the hands of users

  19. Choose your technology • Not all research is appropriate for productization • How risky is it? • How practical is it? • How much work is it to adopt? • What is the cost-benefit analysis?

  20. Picking the right partner • Does your work align with their goals? • Do they have a good track record? • Do they have a future? • Is there mutual respect? • Are they at the right stage in the product cycle? • What is their commitment level?

  21. Communicate • Build / maintain trust and respect • Identify potential issues before they become problems • Identify key contributors, owners, and establish rapport • Technical evangelism is an ongoing requirement • Be flexible, adaptable, and patient

  22. Keep perspective • It’s one project of many you will work on • It’s one project of many THEY will work on • What are the chances it’s the most important work you’ll ever do? • People outlive projects

  23. Summary • Productization is tough but worthwhile • Set your own goals, understand other people’s goals • Communicate, be persistent, and patient

More Related