Title: ProductiZing Research
1ProductiZing Research
John L. Miller, Software Architect Microsoft
Research Cambridge 11-July 2007
2Agenda
- What is Productization?
- Why is it difficult?
- Can I do it myself?
- Advice from the field
3What is Productizing
- Migrating research results
- Affecting an existing product
- Supplying algorithms and methods
- Influencing product features
- Writing shipping code
- Seeding a new product
4BM25F 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
5Sideshow a feature
- Gadget Bar for Windows
- Prototyped shared at Microsoft years ago
- Now part of Vistathe Sidebar
- Product team wrote their own code
- strikingly similar appearance and features
6TrueSkillTM 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
7Pastry 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
8The 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
9Why 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
10Productizing PNRP timeline
Jan 01
Jan 02
Jan 03
1-Algorithm
2-Prototyped
3-Designed
4-Implemented
5-Tested
6-Released
- 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)
11Product 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 gt
bulletproofing
12Example 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)
13Example 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 0x08x",
__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_E
RROR, L"s(d) - Unable to create pen 0x08x",
__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 0x08x",
__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 0x08x", __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 0x08x", __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
0x08x", __TFUNCTION__,
__LINE__, hrRet) else
hContext NULL
return(hrRet)
14Other Productization work
- Funding, business model, management
- Testing, release management, product support
- Marketing, technical evangelism
15Can 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
16How 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
17How to Succeed
- Identify your transfer goal
- Choose your technology carefully
- Pick the right target team
- Communicate
- Persistent and flexible
- Keep perspective
18Identify 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
19Choose 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?
20Picking 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?
21Communicate
- 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
22Keep 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
23Summary
- Productization is tough but worthwhile
- Set your own goals, understand other peoples
goals - Communicate, be persistent, and patient