Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations

Presentation on theme: "John L. Miller, Software Architect Microsoft Research Cambridge 11-July 2007."— Presentation transcript:

1 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 2

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 3

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 4

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 5

6 TrueSkill TM : 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 6

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 7

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 8

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

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

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 11

12 Example: Prototype 12 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 13 // 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 14

15 Can I productize it myself? If youre 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 15

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

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

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 18

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? 19

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? 20

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 21

22 Keep perspective Its one project of many you will work on Its one project of many THEY will work on What are the chances its the most important work youll ever do? People outlive projects 22

23 Summary Productization is tough but worthwhile Set your own goals, understand other peoples goals Communicate, be persistent, and patient 23

Download ppt "John L. Miller, Software Architect Microsoft Research Cambridge 11-July 2007."

Similar presentations

Ads by Google