Mario Rodriguez Senior Program Manager Team Foundation Server Lessons Learned Through Dogfooding

  • View
    216

  • Download
    1

Embed Size (px)

Citation preview

  • Slide 1
  • Mario Rodriguez Senior Program Manager Team Foundation Server Lessons Learned Through Dogfooding
  • Slide 2
  • Opening the Kimono How not to screw up like we did
  • Slide 3
  • Slide 4
  • Possible Agenda 1. How we use Visual Studio and Team Foundation Server to build Visual Studio and Team Foundation Server. How much dogfood are we talking about? 2. Lessons weve learned along the way. How did it taste? What have we learned?
  • Slide 5
  • Dogfood? Really?
  • Slide 6
  • TFS at Microsoft 42 instances 19,700 unique users 6,154 team projects 7.9 million work items 95% of the data is version control
  • Slide 7
  • Team Foundation Server - How big is big? 1,032,045,223 files 2,024,223 checkins 911,432 work items 3,612 unique users 17.3 TB of data Largest table: 3.1TB; 4.3 billion rows
  • Slide 8
  • Experience 116 scenarios 1,562 experiences 7,902 user stories
  • Slide 9
  • 11,962 areas and iterations 2 million check-ins 1 billion files
  • Slide 10
  • Slide 11
  • Lessons we learned 1 5 3 4 6 7 8 9 10 2
  • Slide 12
  • We started too aggressive
  • Slide 13
  • Phase your rollouts and react/learn along the way 10
  • Slide 14
  • We bite more than we can chew
  • Slide 15
  • Slide 16
  • Its impossible to ship everything in the box 9
  • Slide 17
  • We did not practice Agile
  • Slide 18
  • Slide 19
  • 8 FebruaryJanuar y March TFS 2008 TFS 2010 Dev11 3 weeks 6 weeks 10 12 weeks
  • Slide 20
  • Execution Sprint 1 Sprint 2 Sprint 3 Sprint 4 Sprint 5 Sprint 6 STABILIZATION Milestone Y 3-week sprints Milestone X
  • Slide 21
  • Sprint Done List Sprint 1 Sprint 2 Sprint 3
  • Slide 22
  • 8
  • Slide 23
  • 8
  • Slide 24
  • We introduced too much process
  • Slide 25
  • 56 visible fields!
  • Slide 26
  • 96 visible fields!
  • Slide 27
  • Autonomy, Mastery, Purpose It requires resisting the temptation to control people, and instead doing everything we can to reawaken their deep-seated sense of autonomy. Daniel Pink, Drive Autonomy The urge to direct our own lives Mastery The desire to get better and better at something that matters Purpose The yearning to do something that we do in the service of something larger than ourselves.
  • Slide 28
  • Slide 29
  • Autonomous Teams, Central Reporting Visual Studio Business Applications Feature Crews VS Pro Waterfall VS Ultimate Scrum Team Test Scrum TFS Scrum P&P XP&SCRUM
  • Slide 30
  • 7
  • Slide 31
  • We tried to do everything in Visual Studio
  • Slide 32
  • 6
  • Slide 33
  • Slide 34
  • Slide 35
  • 6
  • Slide 36
  • We made some bad calls on reporting
  • Slide 37
  • Slide 38
  • 5
  • Slide 39
  • We went fast really fast
  • Slide 40
  • Slide 41
  • Managing Debt ZBB Exit Criteria Bug jail
  • Slide 42
  • 4
  • Slide 43
  • We were not serious about upgrade
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • 3
  • Slide 48
  • Powerful but Simple What?
  • Slide 49
  • Powerful Powerful and Simple
  • Slide 50
  • Slide 51
  • Slide 52
  • BUT it also applies to Your process Your work item form Your branch hierarchy Your security model Your build lab Your testing tools Your 2
  • Slide 53
  • 2
  • Slide 54
  • We setup our own server EARLY
  • Slide 55
  • Activities of Daily Coding (ADC) Such as: checking in code, viewing project metrics, assigning work, merging changes, code reviews, measuring progress 1
  • Slide 56
  • Wouldnt it be great if you could SORT ON TREES!!!!!
  • Slide 57
  • 1
  • Slide 58
  • Summary 1. If it still tastes like dogfood its not done 2. Balance power and simplicity 3. Upgrade, upgrade, upgrade! 4. Debt kills 5. Reporting must be easy 6. Visual Studio is NOT a project management tool 7. Autonomy is both difficult and necessary 8. Agile development leads to better decision making 9. Its impossible to ship everything in the box 10. Plan your rollout
  • Slide 59
  • Thank you! mailto: [email protected]@microsoft.com
  • Slide 60
  • Slide 61
  • 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
  • Slide 62
  • TFS on Windows Azure http://channel9.msdn.com/Events/PDC/PDC10/FT07 http://blogs.msdn.com/b/bharry/archive/2010/10/28/tfs-on- windows-azure-at-the-pdc.aspx
  • Slide 63
  • TFS 2008 Architecture Version Control Work Items BuildsBuilds IntegrationIntegration WarehouseWarehouse
  • Slide 64
  • TFS 2010 Architecture ConfigurationConfiguration WarehouseWarehouse Project Collection
  • Slide 65
  • TFS On Azure Architecture
  • Slide 66
  • Porting to SQL Azure Unsupported features Full Text Search OPENXML System Messages Non Clustered Tables SELECT INTO SQL Profiler Compression New Failure modes Maximum Size Limit High Latencies from our Office
  • Slide 67
  • OPENXML to TVP CREATE PROC prc_QueryJobs(@xml NVARCHAR(MAX)) [] INSERT @jobs (JobId) SELECT i FROM OPENXML(@docHandle, N'/jobs/j') WITH (i UNIQUEIDENTIFIER) => CREATE PROC prc_QueryJobs(@jobs typ_JobTable) SELECT JobId FROM @jobs
  • Slide 68
  • OPEN XML to TVP metaData = new SqlMetaData("Id", System.Data.SqlDbType.UniqueIdentifier) public IEnumerator GetEnumerator() { foreach (Guid jobId in m_updates) { m_record.SetGuid(0, jobId); yield return m_record; }
  • Slide 69
  • SELECT INTO to INSERT SELECT JobId FROM @Jobs INTO #JobsToDelete => CREATE TABLE #JobsToDelete (JobId UNIQUEIDENTIFIER) CREATE CLUSTERED INDEX idx ON #JobsToDelete(JobId) INSERT #JobsToDelete SELECT JobId FROM @Jobs
  • Slide 70
  • System Messages RAISERROR (500002, 16, -1, @procedureName) => RAISETFSERROR(500002, 16, -1, @procedureName) Which expands to: SET @errorMsg = dbo.func_GetMessage(500002); RAISERROR(@errorMsg, 16, -1, @procedureName)
  • Slide 71
  • New Failure modes The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows. The service is currently busy. Retry the request after 10 seconds. The service has encountered an error processing your request. Please try again.
  • Slide 72
  • Extending Beyond Windows Identities App-Level Identity Central directory of users Account owns user identities Who wants another username+password? Additional identity management scenarios Third-Party Identity Everybody has one Web-only login Users are unknown until first login Identities are typically personal Irrevocable vs.
  • Slide 73
  • Identity Management Groups are managed in TFS Authentication outsourced to ACS User Token is replaced by a set of claims User is identified by his primary email address
  • Slide 74
  • AppFabric Access Control Services WS* ADFS WS* ADFS Service Identities Windows LiveID Google Yahoo! OpenID Google Yahoo! OpenID Web or Rich Application Web or Rich Application Claims Core Multi-tenant Data Store Identity Federation Service Facebook Connect
  • Slide 75
  • ACS Authentication Flow
  • Slide 76
  • Code Movement Sprint 1 Sprint 2 Sprint 3 Merge
  • Slide 77
  • Code Movement Sprint 1 Sprint 2 Sprint 3 Merge
  • Slide 78
  • Code Movement Sprint 1 Sprint 2 Sprint 3 Merge
  • Slide 79
  • User Story Done List Sprint 1
  • Slide 80
  • Sprint Done List Sprint 1 Sprint 2 Sprint 3
  • Slide 81
  • Merge (RI) Done List Sprint 1 Sprint 2 Sprint 3 Merge
  • Slide 82
  • Milestone Quality Gates Sprint 1 Sprint 2 Sprint 3 Milestone