SlideShare una empresa de Scribd logo
1 de 33
Developing NuGet
JEFF HANDLEY | DEVELOPMENT LEAD | NUGET | MICROSOFT
@JEFFHANDLEY
JEFFHANDLEY.COM
1
Airborne (1993)
2SOURCE: WWW.IMDB.COM
3
4
5
NuGet Landscape
WHAT MAKES UP THE NUGET PROJECT
6
NuGet Project
Open Source (owned by Outercurve Foundation)
◦ Releases shipped by Microsoft
Included in all Visual Studio installations
Millions of users (some knowingly, some not) around the world
Dozens of high-profile dependent projects at Microsoft
International contributors
◦ Only a few external contributors are in the US
Very large backlog of issues
Conflicting requirements
Backward compatibility
Mixture of hard and soft deadlines
Extremely costly test passes
7
Outercurve and Microsoft
NUGET CLIENT
Outercurve’s
NuGet Project
Microsoft’s
NuGet-Based
Package Manager
In the Box with
Visual Studio
NUGET GALLERY
Outercurve’s NuGet
Gallery Project
www.nuget.org
Azure Hosting
provided by
Microsoft
Operated by
Microsoft on behalf
of Outercurve
8
NuGet’s Core Team
NUGET CLIENT
Visual Studio Extension
WebMatrix Extension
NuGet.exe Command-Line
NuGet Packages
3 Developers
2 Testers
NUGET GALLERY
www.nuget.org
staging.nuget.org
docs.nuget.org
build.nuget.org
3 Developers
2 Testers
Always 1 member on ops/support rotation
9
NuGet’s Core Team
NUGET CLIENT
Visual Studio Extension
WebMatrix Extension
NuGet.exe Command-Line
NuGet Packages
3 Developers
2 Testers
NUGET GALLERY
www.nuget.org
staging.nuget.org
docs.nuget.org
build.nuget.org
3 Developers
2 Testers
Always 1 member on ops/support rotation
10
Release Management
NUGET CLIENT
11
NuGet Releases
New release every 10 weeks
since NuGet 1.5
12
2/ 12/ 2011
1.1
3/ 30/ 2011
1.2
4/ 25/ 2011
1.3
6/ 17/ 2011
1.4 8/ 30/ 2011
1.5
12/ 13/ 2011
1.6 4/ 4/ 2012
1.7
5/ 23/ 2012
1.8 6/ 19/ 2012
2.0
10/ 4/ 2012
2.1 12/ 12/ 2012
2.2
2/ 15/ 2013
2.2.1 4/ 25/ 2013
2.5
6/ 26/ 2013
2.6 8/ 22/ 2013
2.7
10/ 7/ 2013
2.7.1
1/ 14/ 2011
1.0
NuGet in Visual Studio Releases
13
2/ 12/ 2011
1.1
3/ 30/ 2011
1.2
4/ 25/ 2011
1.3
6/ 17/ 2011
1.4 8/ 30/ 2011
1.5
12/ 13/ 2011
1.6
Introduced
with
ASP.NET
MVC3
and
WebPages v1
4/ 4/ 2012
1.7
5/ 23/ 2012
1.8 6/ 19/ 2012
2.0
10/ 4/ 2012
2.1 12/ 12/ 2012
2.2
2/ 15/ 2013
2.2.1 4/ 25/ 2013
2.5
6/ 26/ 2013
2.6
8/ 22/ 2012
Visual Studio
2012 RTM
4/ 4/ 2013
Visual Studio
2012 Update 2
6/ 26/ 2013
Visual Studio
2013 Preview
9/ 9/ 2013
Visual Studio
2013 RC
1/ 14/ 2011
1.0
5/ 31/ 2012
Visual Studio
2012 RC
2/ 28/ 2012
Visual Studio
2012 Beta
8/ 22/ 2013
2.7
10/ 7/ 2013
2.7.1
Visual Studio
2013 RTM
Release Tiers
CI build from Outercurve Foundation always available at http://build.nuget.org
◦ Usually 100 or fewer users
◦ Build created from every commit
Beta/RC builds from Microsoft occasionally available at http://nuget.codeplex.com
◦ 1,000 – 2,500 users
◦ Published after we hit code-complete
◦ Real-world testing of newly introduced features or significant design changes
Final builds from Microsoft published to the Visual Studio Extension Gallery
◦ 500,000 – 750,000 users
◦ Released after our test team signs off, a few weeks before Visual Studio locks down for its next release
◦ Last stage real-world testing from users that are knowingly using NuGet and are a bit more forgiving
In the box with Visual Studio
◦ Millions of users
◦ Many of these users don’t know what NuGet is and will file Visual Studio bugs if we break them
14
Backlog
CodePlex: 858 open issues as of 10/4/2013
Microsoft Internal Issues
◦ TFS: Fluctuates from 0 to 25
◦ Dr. Watson reports
◦ Microsoft Connect
◦ Microsoft shipping requirements
◦ Future Visual Studio release issues
Strategic Product Features
◦ Schedule alignment for release within Visual Studio and Visual Studio Update
15
Strategic Product Features
Package Manager for the Microsoft Development Platform
◦ Not just ASP.NET
◦ Not just .NET
◦ Includes C++, Windows Store, and Windows Phone
◦ Cross-platform support with Command-Line, Xamarin Studio, MonoDevelop, and SharpDevelop
Improving Package Discovery (through collaboration with the NuGet Gallery crew)
Avoiding Package Version Hell
Platform Multi-Targeting and Re-Targeting
New Usage Workflows for Improved Application Maintenance and Ecosystem Growth
Helping Improve Gallery Reliability
16
Triaging Issues
1. Is it a high-priority issue (crash, hang, regression)?
◦ Include it in the current release
2. Is the bug fix or feature needed for the current release?
◦ Include it in the current release
3. Is it a high value item that fits in the next release?
◦ Include it in the next release
4. Do we agree with the concept?
◦ Put it in the “Up For Grabs” release
◦ Ideally picked up by the community
◦ High-voted items are reviewed when planning releases and some items are pulled in
5. Do we disagree with the concept?
◦ Close it
17
Priorities
1. Strategic roadmap that integrates with the Microsoft development platform
◦ Features planned for 2-3 releases at a time
◦ Align with Visual Studio releases: Preview, Beta, RC, RTM, Visual Studio Update
2. Community-reported high-value bug fixes or features
◦ Including those that come with external pull requests
3. Highly-voted community feature requests
4. Community-reported high-value bug fixes
5. Microsoft partner team bug reports
6. Microsoft partner team feature requests
7. Community-reported low-value bug fixes
18
Philosophy
Small and easy bug fixes are low priority
◦ Otherwise, we’d spend 100% of our time making small changes that affect only a handful of users
Don’t prematurely act upon cool ideas
◦ Does the idea spark new strategic concepts?
◦ Do other new ideas relate?
◦ Can the feature be implemented with backwards compatibility?
◦ Could this feature become obsolete based on other potential strategic directions?
Favor community-requested features over partner team features
◦ Avoids scenario-specific features that conflict with broad usage
◦ Encourages partner teams to find workarounds with existing features
◦ Those workarounds often surface pain points others might also be experiencing
We’d rather delight 1,000,000 external users than gain 1 more internal partner team
19
Conflicting Requirements
Microsoft’s Customers vs. NuGet’s Ecosystem
◦ Group Policy control over package sources
Bold New Features vs. Backwards
Compatibility
◦ Package Restore
◦ Build-time reference resolution
NuGet User Experience vs. Microsoft’s
shipping requirements
◦ Online consent
◦ Loading only Microsoft-signed assemblies
◦ Modified content files
Favor user desires as much as possible
Work within the constraints of Microsoft’s
shipping requirements
Negotiate and compromise with
privacy, security, and legal representatives to
arrive at acceptable implementations
20
Source Control
NUGET CLIENT
21
master
merge
Feature
A
Feature
B
Branch: 2.7
Branch: 2.7.1
mergemerge
Branch: 2.8
Tag: 2.7
Tag: 2.7.1
Git
Branch per feature
Branch per version
Tag for release
22
Continuous Integration
Outercurve Builds
◦ TeamCity – running on Virtual Machines in Windows Azure
◦ 1 VM build agent with .NET 4.0 for building the VS Extension for VS 2010 and VS 2012
◦ 1 VM build agent with .NET 4.5 for building the VS Extension for VS 2013
◦ Hosted at http://build.nuget.org
◦ Produces non-localized, unsigned builds with Outercurve branding and licensing
◦ “Developer Branches” build configuration builds all “dev-” prefixed branches
Microsoft Builds
◦ TeamCity – running on Virtual Machines in a group lab
◦ 1 VM build agent with .NET 4.0 for building the VS Extension for VS 2010 and VS 2012
◦ 1 VM build agent with .NET 4.5 for building the VS Extension for VS 2013
◦ Only accessible on the corporate network
◦ Produces localized, signed builds with Microsoft branding and licensing
23
Going Dark
Microsoft-confidential work cannot go to CodePlex
◦ Integration with new versions of Visual Studio
◦ Support for new platforms (e.g. Windows Phone 8)
Team Foundation Service private project
◦ Fork the NuGet Git repo into that project
◦ Move confidential development into that fork
◦ Keep all other development on CodePlex
Merge commits into TFS daily
Configure our Internal Builds to use the TFS fork instead of CodePlex
24
Testing
NUGET CLIENT
25
Release Timing
Release sign-off takes about 4 weeks after code-complete
◦ 40% of our 10-week release cadence is spent testing and fixing bugs
Snap releases to the Visual Studio schedule
Release to the gallery first, and then integrate into Visual Studio’s build
Between Visual Studio Beta and RTM, we have 2 or 3 tight quality-driven releases
◦ Meet Microsoft’s release requirements
◦ Address any partner team blocking issues
◦ Focus on extremely broad use of the product
After Visual Studio hits RTM, we go big with features and aim for a 3-month release
26
Test Matrix Dimensions
Visual Studio SKUS
◦ VS 2010
◦ Express for Web
◦ Express for Phone
◦ Pro+
◦ VS 2012+ - All SKUs
Project Types
◦ Virtually all Microsoft Project Types
◦ Lightswitch
◦ Windows Store
◦ Windows Phone
◦ Portable Class Libraries
Languages: C#, VB, F#, JavaScript
Operating Systems
◦ Windows XP
◦ Windows Server 2003+
◦ Windows Vista and Windows 7
◦ Windows 8
◦ Windows 8.1
Different types of NuGet Packages
Different types of NuGet Package Sources
◦ Gallery
◦ NuGet.Server
◦ Local Disk
◦ UNC Share
Source Control Integration
◦ TFS
◦ Git, Mercurial
◦ None 
NuGet Clients
◦ VS Extension
◦ WebMatrix Extension
◦ NuGet.exe Command-Line
Plus, all of the combinations of actual features
27
Achieving Release Sign-Off
Unit Tests managed and run by developers
End-to-end Functional tests managed and run by developers and through automation
◦ Based on a PowerShell test system included within our project
◦ Runs within Visual Studio, automating VS through the DTE
QA Tests for interactive testing
◦ Mostly automated, but exploratory testing always finds more bugs
◦ Run across a farm of machines in our group’s test lab, covering the machine configuration matrix
◦ A representative set of combinations give us confidence
◦ Uses an internal VS automation library to simulate user actions in VS
Group-wide bug bashes
Company-wide partner team bug bashes
Public Beta testing from CodePlex builds
Reach 0 bugs in CodePlex for the current release
28
Throughput
109 Weeks
• Total time working
on those 10 releases
10 Releases
• 816 work items have
been completed
3 Developers
• Averaging 27 work
items per release
2 Testers
• Each testing 3.7 bug
fixes or features per
week
29
Success
Never defined by throughput
No regressions
No minor updates necessary
Users delighted by new features
Took steps toward our strategic roadmap
Addressed highly-voted community bugs and features
Accepted a level of failure in smaller user base releases
30
Success Rate
NuGet 1.6
◦ Required a 1.6.1 update
◦ Regressions
◦ Missed bugs in new features
NuGet 1.7
◦ Success
NuGet 1.8
◦ Success
NuGet 2.0
◦ Success
NuGet 2.1
◦ Success
NuGet 2.2
◦ Success
NuGet 2.5
◦ Success
NuGet 2.6
◦ Success
NuGet 2.7
◦ Required a 2.7.1 update
◦ Regression
◦ Missed bugs in new features
31
Tiered Releases are Key
Our tiered release approach worked for 2.7
2.7.1 update in place in time for integrating
into Visual Studio
Thousands of users affected instead of millions
As Visual Studio’s broad user base jumps from
NuGet 2.2 to NuGet 2.7, they’ll have no idea
we ever introduced regressions
You wouldn’t have noticed the camera in
Airborne if I hadn’t pointed it out to you
32
Q & A
Get a NuGet Sticker!
Twitter: @jeffhandley
Website: jeffhandley.com
33

Más contenido relacionado

La actualidad más candente

Organize your chickens: NuGet for the enterprise
Organize your chickens: NuGet for the enterpriseOrganize your chickens: NuGet for the enterprise
Organize your chickens: NuGet for the enterpriseMaarten Balliauw
 
Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...Justin James
 
Maven beyond hello_world
Maven beyond hello_worldMaven beyond hello_world
Maven beyond hello_worldGabriel Dogaru
 
Master Continuous Delivery with CloudBees Jenkins Platform
Master Continuous Delivery with CloudBees Jenkins PlatformMaster Continuous Delivery with CloudBees Jenkins Platform
Master Continuous Delivery with CloudBees Jenkins Platformdcjuengst
 
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosTesting fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosMicael Gallego
 
Fluo CICD OpenStack Summit
Fluo CICD OpenStack SummitFluo CICD OpenStack Summit
Fluo CICD OpenStack SummitMiguel Zuniga
 
Deploying software at Scale
Deploying software at ScaleDeploying software at Scale
Deploying software at ScaleKris Buytaert
 
Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)
Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)
Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)Per Henrik Lausten
 
Jenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with JenkinsJenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with JenkinsAll Things Open
 
A CI/CD Pipeline to Deploy and Maintain OpenStack - cfgmgmtcamp2015
A CI/CD Pipeline to Deploy and Maintain OpenStack - cfgmgmtcamp2015A CI/CD Pipeline to Deploy and Maintain OpenStack - cfgmgmtcamp2015
A CI/CD Pipeline to Deploy and Maintain OpenStack - cfgmgmtcamp2015Simon McCartney
 
OSDC 2017 - Julien Pivotto - Automating Jenkins
OSDC 2017 - Julien Pivotto - Automating JenkinsOSDC 2017 - Julien Pivotto - Automating Jenkins
OSDC 2017 - Julien Pivotto - Automating JenkinsNETWAYS
 
2014 land your-first_patch_neutron
2014 land your-first_patch_neutron2014 land your-first_patch_neutron
2014 land your-first_patch_neutronRossella Sblendido
 
Micronaut: A new way to build microservices
Micronaut: A new way to build microservicesMicronaut: A new way to build microservices
Micronaut: A new way to build microservicesLuram Archanjo
 
Introduction to Containers & Diving a little deeper into the benefits of Con...
 Introduction to Containers & Diving a little deeper into the benefits of Con... Introduction to Containers & Diving a little deeper into the benefits of Con...
Introduction to Containers & Diving a little deeper into the benefits of Con...Synergetics Learning and Cloud Consulting
 
Uyuni Community Hours 27.11.2020
Uyuni Community Hours 27.11.2020Uyuni Community Hours 27.11.2020
Uyuni Community Hours 27.11.2020Uyuni Project
 
Gitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTreeGitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTreeTeerapat Khunpech
 
JUC Europe 2015: Plugin Development with Gradle and Groovy
JUC Europe 2015: Plugin Development with Gradle and GroovyJUC Europe 2015: Plugin Development with Gradle and Groovy
JUC Europe 2015: Plugin Development with Gradle and GroovyCloudBees
 
Controlling Component Chaos with NuGet and Versioning
Controlling Component Chaos with NuGet and VersioningControlling Component Chaos with NuGet and Versioning
Controlling Component Chaos with NuGet and VersioningPerforce
 
Ci jenkins maven svn
Ci jenkins maven svnCi jenkins maven svn
Ci jenkins maven svnAnkur Goyal
 

La actualidad más candente (20)

Organize your chickens: NuGet for the enterprise
Organize your chickens: NuGet for the enterpriseOrganize your chickens: NuGet for the enterprise
Organize your chickens: NuGet for the enterprise
 
Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...
 
Maven beyond hello_world
Maven beyond hello_worldMaven beyond hello_world
Maven beyond hello_world
 
Master Continuous Delivery with CloudBees Jenkins Platform
Master Continuous Delivery with CloudBees Jenkins PlatformMaster Continuous Delivery with CloudBees Jenkins Platform
Master Continuous Delivery with CloudBees Jenkins Platform
 
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosTesting fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornos
 
Fluo CICD OpenStack Summit
Fluo CICD OpenStack SummitFluo CICD OpenStack Summit
Fluo CICD OpenStack Summit
 
Deploying software at Scale
Deploying software at ScaleDeploying software at Scale
Deploying software at Scale
 
Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)
Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)
Source Control with Domino Designer 8.5.3 and Git (DanNotes, November 28, 2012)
 
Jenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with JenkinsJenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with Jenkins
 
A CI/CD Pipeline to Deploy and Maintain OpenStack - cfgmgmtcamp2015
A CI/CD Pipeline to Deploy and Maintain OpenStack - cfgmgmtcamp2015A CI/CD Pipeline to Deploy and Maintain OpenStack - cfgmgmtcamp2015
A CI/CD Pipeline to Deploy and Maintain OpenStack - cfgmgmtcamp2015
 
OSDC 2017 - Julien Pivotto - Automating Jenkins
OSDC 2017 - Julien Pivotto - Automating JenkinsOSDC 2017 - Julien Pivotto - Automating Jenkins
OSDC 2017 - Julien Pivotto - Automating Jenkins
 
2014 land your-first_patch_neutron
2014 land your-first_patch_neutron2014 land your-first_patch_neutron
2014 land your-first_patch_neutron
 
Micronaut: A new way to build microservices
Micronaut: A new way to build microservicesMicronaut: A new way to build microservices
Micronaut: A new way to build microservices
 
Introduction to Containers & Diving a little deeper into the benefits of Con...
 Introduction to Containers & Diving a little deeper into the benefits of Con... Introduction to Containers & Diving a little deeper into the benefits of Con...
Introduction to Containers & Diving a little deeper into the benefits of Con...
 
Uyuni Community Hours 27.11.2020
Uyuni Community Hours 27.11.2020Uyuni Community Hours 27.11.2020
Uyuni Community Hours 27.11.2020
 
Gitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTreeGitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTree
 
JUC Europe 2015: Plugin Development with Gradle and Groovy
JUC Europe 2015: Plugin Development with Gradle and GroovyJUC Europe 2015: Plugin Development with Gradle and Groovy
JUC Europe 2015: Plugin Development with Gradle and Groovy
 
Controlling Component Chaos with NuGet and Versioning
Controlling Component Chaos with NuGet and VersioningControlling Component Chaos with NuGet and Versioning
Controlling Component Chaos with NuGet and Versioning
 
Dev ops using Jenkins
Dev ops using JenkinsDev ops using Jenkins
Dev ops using Jenkins
 
Ci jenkins maven svn
Ci jenkins maven svnCi jenkins maven svn
Ci jenkins maven svn
 

Destacado

Using nu get the way you should svcc
Using nu get the way you should   svccUsing nu get the way you should   svcc
Using nu get the way you should svccMaarten Balliauw
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Felipe Klerk Signorini
 
Running in the Cloud - First Belgian Azure project
Running in the Cloud - First Belgian Azure projectRunning in the Cloud - First Belgian Azure project
Running in the Cloud - First Belgian Azure projectMaarten Balliauw
 
Fun with ASP.NET MVC 3, MEF and NuGet (#comdaybe)
Fun with ASP.NET MVC 3, MEF and NuGet (#comdaybe)Fun with ASP.NET MVC 3, MEF and NuGet (#comdaybe)
Fun with ASP.NET MVC 3, MEF and NuGet (#comdaybe)Maarten Balliauw
 
Unit testing with NUnit
Unit testing with NUnitUnit testing with NUnit
Unit testing with NUnitkleinron
 
NuGet 3.0 - Transitioning from OData to JSON-LD
NuGet 3.0 - Transitioning from OData to JSON-LDNuGet 3.0 - Transitioning from OData to JSON-LD
NuGet 3.0 - Transitioning from OData to JSON-LDJeff Handley
 
Design Thinking em Projetos de Engenharia de Software
Design Thinking em Projetos de Engenharia de Software 	Design Thinking em Projetos de Engenharia de Software
Design Thinking em Projetos de Engenharia de Software UFPA
 
Especificação de Requisitos de Software
Especificação de Requisitos de SoftwareEspecificação de Requisitos de Software
Especificação de Requisitos de SoftwareRalph Rassweiler
 
NUnit Features Presentation
NUnit Features PresentationNUnit Features Presentation
NUnit Features PresentationShir Brass
 
Easymock Tutorial
Easymock TutorialEasymock Tutorial
Easymock TutorialSbin m
 
An Introduction to Unit Test Using NUnit
An Introduction to Unit Test Using NUnitAn Introduction to Unit Test Using NUnit
An Introduction to Unit Test Using NUnitweili_at_slideshare
 
Gestion paquetes NuGet con Visual Studio Team Services y MyGet
Gestion paquetes NuGet con Visual Studio Team Services y MyGetGestion paquetes NuGet con Visual Studio Team Services y MyGet
Gestion paquetes NuGet con Visual Studio Team Services y MyGetLuis Fraile
 
Domain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVCDomain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVCSteven Smith
 
Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#Pascal Laurin
 

Destacado (20)

Using nu get the way you should svcc
Using nu get the way you should   svccUsing nu get the way you should   svcc
Using nu get the way you should svcc
 
Computrace grc
Computrace grcComputrace grc
Computrace grc
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016
 
Running in the Cloud - First Belgian Azure project
Running in the Cloud - First Belgian Azure projectRunning in the Cloud - First Belgian Azure project
Running in the Cloud - First Belgian Azure project
 
Fun with ASP.NET MVC 3, MEF and NuGet (#comdaybe)
Fun with ASP.NET MVC 3, MEF and NuGet (#comdaybe)Fun with ASP.NET MVC 3, MEF and NuGet (#comdaybe)
Fun with ASP.NET MVC 3, MEF and NuGet (#comdaybe)
 
NuGet vs Maven
NuGet vs MavenNuGet vs Maven
NuGet vs Maven
 
Unit testing with NUnit
Unit testing with NUnitUnit testing with NUnit
Unit testing with NUnit
 
NuGet 3.0 - Transitioning from OData to JSON-LD
NuGet 3.0 - Transitioning from OData to JSON-LDNuGet 3.0 - Transitioning from OData to JSON-LD
NuGet 3.0 - Transitioning from OData to JSON-LD
 
Nunit
NunitNunit
Nunit
 
Design Thinking em Projetos de Engenharia de Software
Design Thinking em Projetos de Engenharia de Software 	Design Thinking em Projetos de Engenharia de Software
Design Thinking em Projetos de Engenharia de Software
 
Unit Testing (C#)
Unit Testing (C#)Unit Testing (C#)
Unit Testing (C#)
 
N Unit Presentation
N Unit PresentationN Unit Presentation
N Unit Presentation
 
Especificação de Requisitos de Software
Especificação de Requisitos de SoftwareEspecificação de Requisitos de Software
Especificação de Requisitos de Software
 
NUnit Features Presentation
NUnit Features PresentationNUnit Features Presentation
NUnit Features Presentation
 
Easymock Tutorial
Easymock TutorialEasymock Tutorial
Easymock Tutorial
 
An Introduction to Unit Test Using NUnit
An Introduction to Unit Test Using NUnitAn Introduction to Unit Test Using NUnit
An Introduction to Unit Test Using NUnit
 
Types of pattern
Types of patternTypes of pattern
Types of pattern
 
Gestion paquetes NuGet con Visual Studio Team Services y MyGet
Gestion paquetes NuGet con Visual Studio Team Services y MyGetGestion paquetes NuGet con Visual Studio Team Services y MyGet
Gestion paquetes NuGet con Visual Studio Team Services y MyGet
 
Domain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVCDomain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVC
 
Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#
 

Similar a Developing NuGet

Staying connected: An Overview of Announcements from Microsoft’s Connect();
Staying connected: An Overview of Announcements from Microsoft’s Connect();Staying connected: An Overview of Announcements from Microsoft’s Connect();
Staying connected: An Overview of Announcements from Microsoft’s Connect();dotNet Miami
 
Why the yocto project for my io t project elc_edinburgh_2018
Why the yocto project for my io t project elc_edinburgh_2018Why the yocto project for my io t project elc_edinburgh_2018
Why the yocto project for my io t project elc_edinburgh_2018Mender.io
 
Weave GitOps 2022.09 Release: A Fast & Reliable Path to Production with Progr...
Weave GitOps 2022.09 Release: A Fast & Reliable Path to Production with Progr...Weave GitOps 2022.09 Release: A Fast & Reliable Path to Production with Progr...
Weave GitOps 2022.09 Release: A Fast & Reliable Path to Production with Progr...Weaveworks
 
Webinar: Capabilities, Confidence and Community – What Flux GA Means for You
Webinar: Capabilities, Confidence and Community – What Flux GA Means for YouWebinar: Capabilities, Confidence and Community – What Flux GA Means for You
Webinar: Capabilities, Confidence and Community – What Flux GA Means for YouWeaveworks
 
Continuous Delivery: 5 years later (Incontro DevOps 2018)
Continuous Delivery: 5 years later (Incontro DevOps 2018)Continuous Delivery: 5 years later (Incontro DevOps 2018)
Continuous Delivery: 5 years later (Incontro DevOps 2018)Giovanni Toraldo
 
Node.js what's next (Index 2018)
Node.js what's next (Index 2018)Node.js what's next (Index 2018)
Node.js what's next (Index 2018)Gibson Fahnestock
 
Visual Studio Release Management - New weltanschauung or natural evolution? @...
Visual Studio Release Management - New weltanschauung or natural evolution? @...Visual Studio Release Management - New weltanschauung or natural evolution? @...
Visual Studio Release Management - New weltanschauung or natural evolution? @...Giulio Vian
 
Efficient platform engineering with Microk8s & gopaddle.pdf
Efficient platform engineering  with  Microk8s & gopaddle.pdfEfficient platform engineering  with  Microk8s & gopaddle.pdf
Efficient platform engineering with Microk8s & gopaddle.pdfVinothini Raju
 
Reproducible development to live applications with Red Hat CDK and Red Hat Op...
Reproducible development to live applications with Red Hat CDK and Red Hat Op...Reproducible development to live applications with Red Hat CDK and Red Hat Op...
Reproducible development to live applications with Red Hat CDK and Red Hat Op...Lalatendu Mohanty
 
GeoServer Developers Workshop
GeoServer Developers WorkshopGeoServer Developers Workshop
GeoServer Developers WorkshopJody Garnett
 
Webinar by ZNetLive & Plesk- Winning the Game for WebOps and DevOps
Webinar by ZNetLive & Plesk- Winning the Game for WebOps and DevOps Webinar by ZNetLive & Plesk- Winning the Game for WebOps and DevOps
Webinar by ZNetLive & Plesk- Winning the Game for WebOps and DevOps ZNetLive
 
Accelerating DevOps at the SF DevOps MeetUp
Accelerating DevOps at the SF DevOps MeetUpAccelerating DevOps at the SF DevOps MeetUp
Accelerating DevOps at the SF DevOps MeetUpjwi11iams
 
Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...
Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...
Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...ICS
 
Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?LOGINPHP360
 
ASP.NET Core: The best of the new bits
ASP.NET Core: The best of the new bitsASP.NET Core: The best of the new bits
ASP.NET Core: The best of the new bitsKen Cenerelli
 
(WPF + WinForms) * .NET Core = Modern Desktop
(WPF + WinForms) * .NET Core = Modern Desktop(WPF + WinForms) * .NET Core = Modern Desktop
(WPF + WinForms) * .NET Core = Modern DesktopOren Novotny
 
Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?LOGINPHP360
 
Docker based-Pipelines with Codefresh
Docker based-Pipelines with CodefreshDocker based-Pipelines with Codefresh
Docker based-Pipelines with CodefreshCodefresh
 
Speed & Agility of Innovation with Docker & Kubernetes
Speed & Agility of Innovation with Docker & KubernetesSpeed & Agility of Innovation with Docker & Kubernetes
Speed & Agility of Innovation with Docker & KubernetesICS
 
Increase the Velocity of Your Software Releases Using GitHub and DeployHub
Increase the Velocity of Your Software Releases Using GitHub and DeployHubIncrease the Velocity of Your Software Releases Using GitHub and DeployHub
Increase the Velocity of Your Software Releases Using GitHub and DeployHubDevOps.com
 

Similar a Developing NuGet (20)

Staying connected: An Overview of Announcements from Microsoft’s Connect();
Staying connected: An Overview of Announcements from Microsoft’s Connect();Staying connected: An Overview of Announcements from Microsoft’s Connect();
Staying connected: An Overview of Announcements from Microsoft’s Connect();
 
Why the yocto project for my io t project elc_edinburgh_2018
Why the yocto project for my io t project elc_edinburgh_2018Why the yocto project for my io t project elc_edinburgh_2018
Why the yocto project for my io t project elc_edinburgh_2018
 
Weave GitOps 2022.09 Release: A Fast & Reliable Path to Production with Progr...
Weave GitOps 2022.09 Release: A Fast & Reliable Path to Production with Progr...Weave GitOps 2022.09 Release: A Fast & Reliable Path to Production with Progr...
Weave GitOps 2022.09 Release: A Fast & Reliable Path to Production with Progr...
 
Webinar: Capabilities, Confidence and Community – What Flux GA Means for You
Webinar: Capabilities, Confidence and Community – What Flux GA Means for YouWebinar: Capabilities, Confidence and Community – What Flux GA Means for You
Webinar: Capabilities, Confidence and Community – What Flux GA Means for You
 
Continuous Delivery: 5 years later (Incontro DevOps 2018)
Continuous Delivery: 5 years later (Incontro DevOps 2018)Continuous Delivery: 5 years later (Incontro DevOps 2018)
Continuous Delivery: 5 years later (Incontro DevOps 2018)
 
Node.js what's next (Index 2018)
Node.js what's next (Index 2018)Node.js what's next (Index 2018)
Node.js what's next (Index 2018)
 
Visual Studio Release Management - New weltanschauung or natural evolution? @...
Visual Studio Release Management - New weltanschauung or natural evolution? @...Visual Studio Release Management - New weltanschauung or natural evolution? @...
Visual Studio Release Management - New weltanschauung or natural evolution? @...
 
Efficient platform engineering with Microk8s & gopaddle.pdf
Efficient platform engineering  with  Microk8s & gopaddle.pdfEfficient platform engineering  with  Microk8s & gopaddle.pdf
Efficient platform engineering with Microk8s & gopaddle.pdf
 
Reproducible development to live applications with Red Hat CDK and Red Hat Op...
Reproducible development to live applications with Red Hat CDK and Red Hat Op...Reproducible development to live applications with Red Hat CDK and Red Hat Op...
Reproducible development to live applications with Red Hat CDK and Red Hat Op...
 
GeoServer Developers Workshop
GeoServer Developers WorkshopGeoServer Developers Workshop
GeoServer Developers Workshop
 
Webinar by ZNetLive & Plesk- Winning the Game for WebOps and DevOps
Webinar by ZNetLive & Plesk- Winning the Game for WebOps and DevOps Webinar by ZNetLive & Plesk- Winning the Game for WebOps and DevOps
Webinar by ZNetLive & Plesk- Winning the Game for WebOps and DevOps
 
Accelerating DevOps at the SF DevOps MeetUp
Accelerating DevOps at the SF DevOps MeetUpAccelerating DevOps at the SF DevOps MeetUp
Accelerating DevOps at the SF DevOps MeetUp
 
Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...
Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...
Software Update Mechanisms: Selecting the Best Solutin for Your Embedded Linu...
 
Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?
 
ASP.NET Core: The best of the new bits
ASP.NET Core: The best of the new bitsASP.NET Core: The best of the new bits
ASP.NET Core: The best of the new bits
 
(WPF + WinForms) * .NET Core = Modern Desktop
(WPF + WinForms) * .NET Core = Modern Desktop(WPF + WinForms) * .NET Core = Modern Desktop
(WPF + WinForms) * .NET Core = Modern Desktop
 
Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?
 
Docker based-Pipelines with Codefresh
Docker based-Pipelines with CodefreshDocker based-Pipelines with Codefresh
Docker based-Pipelines with Codefresh
 
Speed & Agility of Innovation with Docker & Kubernetes
Speed & Agility of Innovation with Docker & KubernetesSpeed & Agility of Innovation with Docker & Kubernetes
Speed & Agility of Innovation with Docker & Kubernetes
 
Increase the Velocity of Your Software Releases Using GitHub and DeployHub
Increase the Velocity of Your Software Releases Using GitHub and DeployHubIncrease the Velocity of Your Software Releases Using GitHub and DeployHub
Increase the Velocity of Your Software Releases Using GitHub and DeployHub
 

Último

CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 

Último (20)

CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 

Developing NuGet

  • 1. Developing NuGet JEFF HANDLEY | DEVELOPMENT LEAD | NUGET | MICROSOFT @JEFFHANDLEY JEFFHANDLEY.COM 1
  • 3. 3
  • 4. 4
  • 5. 5
  • 6. NuGet Landscape WHAT MAKES UP THE NUGET PROJECT 6
  • 7. NuGet Project Open Source (owned by Outercurve Foundation) ◦ Releases shipped by Microsoft Included in all Visual Studio installations Millions of users (some knowingly, some not) around the world Dozens of high-profile dependent projects at Microsoft International contributors ◦ Only a few external contributors are in the US Very large backlog of issues Conflicting requirements Backward compatibility Mixture of hard and soft deadlines Extremely costly test passes 7
  • 8. Outercurve and Microsoft NUGET CLIENT Outercurve’s NuGet Project Microsoft’s NuGet-Based Package Manager In the Box with Visual Studio NUGET GALLERY Outercurve’s NuGet Gallery Project www.nuget.org Azure Hosting provided by Microsoft Operated by Microsoft on behalf of Outercurve 8
  • 9. NuGet’s Core Team NUGET CLIENT Visual Studio Extension WebMatrix Extension NuGet.exe Command-Line NuGet Packages 3 Developers 2 Testers NUGET GALLERY www.nuget.org staging.nuget.org docs.nuget.org build.nuget.org 3 Developers 2 Testers Always 1 member on ops/support rotation 9
  • 10. NuGet’s Core Team NUGET CLIENT Visual Studio Extension WebMatrix Extension NuGet.exe Command-Line NuGet Packages 3 Developers 2 Testers NUGET GALLERY www.nuget.org staging.nuget.org docs.nuget.org build.nuget.org 3 Developers 2 Testers Always 1 member on ops/support rotation 10
  • 12. NuGet Releases New release every 10 weeks since NuGet 1.5 12 2/ 12/ 2011 1.1 3/ 30/ 2011 1.2 4/ 25/ 2011 1.3 6/ 17/ 2011 1.4 8/ 30/ 2011 1.5 12/ 13/ 2011 1.6 4/ 4/ 2012 1.7 5/ 23/ 2012 1.8 6/ 19/ 2012 2.0 10/ 4/ 2012 2.1 12/ 12/ 2012 2.2 2/ 15/ 2013 2.2.1 4/ 25/ 2013 2.5 6/ 26/ 2013 2.6 8/ 22/ 2013 2.7 10/ 7/ 2013 2.7.1 1/ 14/ 2011 1.0
  • 13. NuGet in Visual Studio Releases 13 2/ 12/ 2011 1.1 3/ 30/ 2011 1.2 4/ 25/ 2011 1.3 6/ 17/ 2011 1.4 8/ 30/ 2011 1.5 12/ 13/ 2011 1.6 Introduced with ASP.NET MVC3 and WebPages v1 4/ 4/ 2012 1.7 5/ 23/ 2012 1.8 6/ 19/ 2012 2.0 10/ 4/ 2012 2.1 12/ 12/ 2012 2.2 2/ 15/ 2013 2.2.1 4/ 25/ 2013 2.5 6/ 26/ 2013 2.6 8/ 22/ 2012 Visual Studio 2012 RTM 4/ 4/ 2013 Visual Studio 2012 Update 2 6/ 26/ 2013 Visual Studio 2013 Preview 9/ 9/ 2013 Visual Studio 2013 RC 1/ 14/ 2011 1.0 5/ 31/ 2012 Visual Studio 2012 RC 2/ 28/ 2012 Visual Studio 2012 Beta 8/ 22/ 2013 2.7 10/ 7/ 2013 2.7.1 Visual Studio 2013 RTM
  • 14. Release Tiers CI build from Outercurve Foundation always available at http://build.nuget.org ◦ Usually 100 or fewer users ◦ Build created from every commit Beta/RC builds from Microsoft occasionally available at http://nuget.codeplex.com ◦ 1,000 – 2,500 users ◦ Published after we hit code-complete ◦ Real-world testing of newly introduced features or significant design changes Final builds from Microsoft published to the Visual Studio Extension Gallery ◦ 500,000 – 750,000 users ◦ Released after our test team signs off, a few weeks before Visual Studio locks down for its next release ◦ Last stage real-world testing from users that are knowingly using NuGet and are a bit more forgiving In the box with Visual Studio ◦ Millions of users ◦ Many of these users don’t know what NuGet is and will file Visual Studio bugs if we break them 14
  • 15. Backlog CodePlex: 858 open issues as of 10/4/2013 Microsoft Internal Issues ◦ TFS: Fluctuates from 0 to 25 ◦ Dr. Watson reports ◦ Microsoft Connect ◦ Microsoft shipping requirements ◦ Future Visual Studio release issues Strategic Product Features ◦ Schedule alignment for release within Visual Studio and Visual Studio Update 15
  • 16. Strategic Product Features Package Manager for the Microsoft Development Platform ◦ Not just ASP.NET ◦ Not just .NET ◦ Includes C++, Windows Store, and Windows Phone ◦ Cross-platform support with Command-Line, Xamarin Studio, MonoDevelop, and SharpDevelop Improving Package Discovery (through collaboration with the NuGet Gallery crew) Avoiding Package Version Hell Platform Multi-Targeting and Re-Targeting New Usage Workflows for Improved Application Maintenance and Ecosystem Growth Helping Improve Gallery Reliability 16
  • 17. Triaging Issues 1. Is it a high-priority issue (crash, hang, regression)? ◦ Include it in the current release 2. Is the bug fix or feature needed for the current release? ◦ Include it in the current release 3. Is it a high value item that fits in the next release? ◦ Include it in the next release 4. Do we agree with the concept? ◦ Put it in the “Up For Grabs” release ◦ Ideally picked up by the community ◦ High-voted items are reviewed when planning releases and some items are pulled in 5. Do we disagree with the concept? ◦ Close it 17
  • 18. Priorities 1. Strategic roadmap that integrates with the Microsoft development platform ◦ Features planned for 2-3 releases at a time ◦ Align with Visual Studio releases: Preview, Beta, RC, RTM, Visual Studio Update 2. Community-reported high-value bug fixes or features ◦ Including those that come with external pull requests 3. Highly-voted community feature requests 4. Community-reported high-value bug fixes 5. Microsoft partner team bug reports 6. Microsoft partner team feature requests 7. Community-reported low-value bug fixes 18
  • 19. Philosophy Small and easy bug fixes are low priority ◦ Otherwise, we’d spend 100% of our time making small changes that affect only a handful of users Don’t prematurely act upon cool ideas ◦ Does the idea spark new strategic concepts? ◦ Do other new ideas relate? ◦ Can the feature be implemented with backwards compatibility? ◦ Could this feature become obsolete based on other potential strategic directions? Favor community-requested features over partner team features ◦ Avoids scenario-specific features that conflict with broad usage ◦ Encourages partner teams to find workarounds with existing features ◦ Those workarounds often surface pain points others might also be experiencing We’d rather delight 1,000,000 external users than gain 1 more internal partner team 19
  • 20. Conflicting Requirements Microsoft’s Customers vs. NuGet’s Ecosystem ◦ Group Policy control over package sources Bold New Features vs. Backwards Compatibility ◦ Package Restore ◦ Build-time reference resolution NuGet User Experience vs. Microsoft’s shipping requirements ◦ Online consent ◦ Loading only Microsoft-signed assemblies ◦ Modified content files Favor user desires as much as possible Work within the constraints of Microsoft’s shipping requirements Negotiate and compromise with privacy, security, and legal representatives to arrive at acceptable implementations 20
  • 22. master merge Feature A Feature B Branch: 2.7 Branch: 2.7.1 mergemerge Branch: 2.8 Tag: 2.7 Tag: 2.7.1 Git Branch per feature Branch per version Tag for release 22
  • 23. Continuous Integration Outercurve Builds ◦ TeamCity – running on Virtual Machines in Windows Azure ◦ 1 VM build agent with .NET 4.0 for building the VS Extension for VS 2010 and VS 2012 ◦ 1 VM build agent with .NET 4.5 for building the VS Extension for VS 2013 ◦ Hosted at http://build.nuget.org ◦ Produces non-localized, unsigned builds with Outercurve branding and licensing ◦ “Developer Branches” build configuration builds all “dev-” prefixed branches Microsoft Builds ◦ TeamCity – running on Virtual Machines in a group lab ◦ 1 VM build agent with .NET 4.0 for building the VS Extension for VS 2010 and VS 2012 ◦ 1 VM build agent with .NET 4.5 for building the VS Extension for VS 2013 ◦ Only accessible on the corporate network ◦ Produces localized, signed builds with Microsoft branding and licensing 23
  • 24. Going Dark Microsoft-confidential work cannot go to CodePlex ◦ Integration with new versions of Visual Studio ◦ Support for new platforms (e.g. Windows Phone 8) Team Foundation Service private project ◦ Fork the NuGet Git repo into that project ◦ Move confidential development into that fork ◦ Keep all other development on CodePlex Merge commits into TFS daily Configure our Internal Builds to use the TFS fork instead of CodePlex 24
  • 26. Release Timing Release sign-off takes about 4 weeks after code-complete ◦ 40% of our 10-week release cadence is spent testing and fixing bugs Snap releases to the Visual Studio schedule Release to the gallery first, and then integrate into Visual Studio’s build Between Visual Studio Beta and RTM, we have 2 or 3 tight quality-driven releases ◦ Meet Microsoft’s release requirements ◦ Address any partner team blocking issues ◦ Focus on extremely broad use of the product After Visual Studio hits RTM, we go big with features and aim for a 3-month release 26
  • 27. Test Matrix Dimensions Visual Studio SKUS ◦ VS 2010 ◦ Express for Web ◦ Express for Phone ◦ Pro+ ◦ VS 2012+ - All SKUs Project Types ◦ Virtually all Microsoft Project Types ◦ Lightswitch ◦ Windows Store ◦ Windows Phone ◦ Portable Class Libraries Languages: C#, VB, F#, JavaScript Operating Systems ◦ Windows XP ◦ Windows Server 2003+ ◦ Windows Vista and Windows 7 ◦ Windows 8 ◦ Windows 8.1 Different types of NuGet Packages Different types of NuGet Package Sources ◦ Gallery ◦ NuGet.Server ◦ Local Disk ◦ UNC Share Source Control Integration ◦ TFS ◦ Git, Mercurial ◦ None  NuGet Clients ◦ VS Extension ◦ WebMatrix Extension ◦ NuGet.exe Command-Line Plus, all of the combinations of actual features 27
  • 28. Achieving Release Sign-Off Unit Tests managed and run by developers End-to-end Functional tests managed and run by developers and through automation ◦ Based on a PowerShell test system included within our project ◦ Runs within Visual Studio, automating VS through the DTE QA Tests for interactive testing ◦ Mostly automated, but exploratory testing always finds more bugs ◦ Run across a farm of machines in our group’s test lab, covering the machine configuration matrix ◦ A representative set of combinations give us confidence ◦ Uses an internal VS automation library to simulate user actions in VS Group-wide bug bashes Company-wide partner team bug bashes Public Beta testing from CodePlex builds Reach 0 bugs in CodePlex for the current release 28
  • 29. Throughput 109 Weeks • Total time working on those 10 releases 10 Releases • 816 work items have been completed 3 Developers • Averaging 27 work items per release 2 Testers • Each testing 3.7 bug fixes or features per week 29
  • 30. Success Never defined by throughput No regressions No minor updates necessary Users delighted by new features Took steps toward our strategic roadmap Addressed highly-voted community bugs and features Accepted a level of failure in smaller user base releases 30
  • 31. Success Rate NuGet 1.6 ◦ Required a 1.6.1 update ◦ Regressions ◦ Missed bugs in new features NuGet 1.7 ◦ Success NuGet 1.8 ◦ Success NuGet 2.0 ◦ Success NuGet 2.1 ◦ Success NuGet 2.2 ◦ Success NuGet 2.5 ◦ Success NuGet 2.6 ◦ Success NuGet 2.7 ◦ Required a 2.7.1 update ◦ Regression ◦ Missed bugs in new features 31
  • 32. Tiered Releases are Key Our tiered release approach worked for 2.7 2.7.1 update in place in time for integrating into Visual Studio Thousands of users affected instead of millions As Visual Studio’s broad user base jumps from NuGet 2.2 to NuGet 2.7, they’ll have no idea we ever introduced regressions You wouldn’t have noticed the camera in Airborne if I hadn’t pointed it out to you 32
  • 33. Q & A Get a NuGet Sticker! Twitter: @jeffhandley Website: jeffhandley.com 33