230 likes | 333 Views
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
E N D
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 • Supplying algorithms and methods • Influencing product features • Writing shipping code • Seeding a new product
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
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
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
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
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
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
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
‘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
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); }
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); }
Other Productization work • Funding, business model, management • Testing, release management, product support • Marketing, technical evangelism
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
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
How to Succeed • Identify your transfer goal • Choose your technology carefully • Pick the right target team • Communicate • Persistent and flexible • Keep perspective
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
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?
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?
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
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
Summary • Productization is tough but worthwhile • Set your own goals, understand other people’s goals • Communicate, be persistent, and patient