SlideShare a Scribd company logo
1 of 30
Distributed DevelopmentProject FreeSpace Alexey Suvorovalexey@activemesa.com Dmitri Nesterukdmitri@activemesa.com
This Talk Is About… Speed How to get things done faster Quality How to get feedback faster How to get more testing done Manageability Cloud monitoring & control Decentralization/fault-tolerance Not only development!
Joel’s Test  Do you use source control? Can you make a build in one step? Do you make daily builds? Do you have a bug database? Do you fix bugs before writing new code? Do you have an up-to-date schedule? Do you have a spec? Do programmers have quiet working conditions? Do you use the best tools money can buy? Do you have testers? Do new candidates write code during their interview? Do you do hallway usability testing? Typical answer: No.
Best Tools Money Can Buy? Hardware Fast CPU Lots of RAM SSDs Multiple monitors Software Commercial issue tracking Paid source code hosting File sync services ReSharper
In large/complex projects IDE interaction is slow Code analysis is slow Compilation is slow Testing is slow (Re)deployment is slow
IDE interaction is slow IDEs are slow, but we cannot ditch them We have nearly few software options for optimizing IDEs E.g., VS is both disk I/O-bound (SSD a must) and CPU-bound We cannot relocate, e.g., the ReSharper cache into a distributed service IDEs can be spawned on same project in many machines Multiple screens/remote desktop windows Synchronizable with Dropbox, SugarSync, etc. But project/solution reloads in VS will kill you
Code analysis is slow In-depth analysis of either compiled or source code is computationally intensive NDepend, FxCop and others can all be run remotely Not just on the build server Most of these tools output report files Can send these to origin Some of these tools can be made to work on per-file/per-project rather than per-solution
Compilation is slow Compilation is C#/VB.NET – acceptable F# – slow C++ – atrociously slow Made worse by pre/post-build PostSharp Entity Framework Code Contracts Moles Etc. VS compilation process inefficient Will rebuild projects that haven’t changed Will not parallelize by default MSBuild is parallelizable /m:n Can spawn multiple processes
Testing is (painfully) slow Unit testing is badly parallelized MbUnit’s [Parallelizable] Same in NUnit 3 Can easily parallelize at different granularity Test case/method Test fixture Test assembly
Fear of Builds/Tests Developers loath to compile or run tests too frequently Disruption of focus leads them to Surf the web Go for coffee <insert your pastime here> Everyone loses Loss of concentration/motivation Developers never ‘in the zone’ TDD does not work
Who cares? Developers Employers Fixed salary Don’t care about TTM Accustomed to substandard tools/equipment View compilation as a one-time process Don’t care about frequent/continuous testing See manual deployment as normal More concerned with saving money than getting things done Uninformed about good/best practices Not concerned with quick delivery (in case of service companies that charge by the hour)
Problem: nobody recognizes compilation/testing as wasted time
How to speed things up? Optimize or buy a faster computer SSDs More RAM Faster CPUs Costly! Has to be done for every developer. Alternatively… use existing infrastructure Both physical (e.g., dev machines) and virtual Distribute workload between machines Use idle resources – no need to buy new machines.
Status Quo Computers get faster More cores per CPU Faster hard drives (SSD, hybrid) Software gets more demanding Windows eats more and more RAM & HDD VS is slower Everyone else follows suit The overall development experience isnot getting any better
Why Distributed? Resource under-utilization A typical enterprise (IT-specific or not) is unlikely to use 100% of processing resources Resource overload Bottlenecks in servers Resource costs Server-grade hardware Reliability concerns (e.g. RAID)
Three Pillars of Distribution Get data on everyone’s machine Cloud storage/file sync Verification necessary Get machines chatting with one another XMPPclient on each node Load balance and optimize execution plan Send commands to do work, get results Work items synchronized via cloud storage Redundancy/reliability guarantees Integrate with existing systems Easy because XMPP uses XML
Scale Vectors Core Machine Better support for Multi-Core Exists in some cases MSBuild MbUnit (+ NUnit 3) Could be leveraged in the general case Not easy! Needs to mind end user’s preferences Support arbitrary networks (both on- and off-site) Need to control code sync (security) Can go for full resource utilization (esp. off-hours) Speculative processing E.g., Monte-Carlo simulations Operations which are prohibitively resource-intensive E.g., mutation tests
Leveraging the Model Compilation Compiling on dev’s machine is counterproductive Compilation of some languages (C++, Scala) takes far too much time But the problem exists everywhere (.Net, Java) Deployment Testing Large test base cannot be run on a dev’s machine CI is not the answer Constrained to a single machine Can be distributed, but not straightforward Code analysis Very costly Coverage analysis Extremely costly
Challenges Load balancing File synchronization Security
Compilation MSBuild Builds all major types of VS projects Can parallelize locally (/m:n, n=# of processes) Builds block VS Build on the UI thread Builds often inefficient Cannot build only projects affected by changes Cannot use multiple machines
Distributed Compilation Dramatically speed up solution build Determine project dependencies Build different projects on separate machines Use multiple MSBuild processes per machine Depending on CPU count & power Does not distract the developer Development machine usable without interruption Quicker feedback on errors Allows to instrument a continuous build policy Build on ever file save
Distributed Testing Testing is slow Unit testing is largely not parallelized MbUnit [Paralellizable] Nunit will only support it in v.3 Not parallelized between several machines Testing in specific environment difficult Requires complicated (possibly manual) deployment processes Developer typically only tests on their own box (+ maybe CI server) Distributed testing ensures tests work everywhere
Side Effects Side effects are unwelcome on users’ machines Environment changes may have undesired consequences Builds are typically exempt from this They do not affect anything beyond solution work folders Unit tests may or may not affect host system Integration tests typically do affect hosts Require ‘clean’ set-ups
Isolation No side-effects Irrelevant, just take care of load Side effects Process-level virtualization (for existing machines) JauntePE App-V Virtual machines Hyper-V ESX
Virtualized Testing Creation of multiple physical nodes is costly Physical machine re-configuration takes too much time Can configure a virtual test environment with Hyper-V System Center Virtual Machine Manager Virtual/physical migrations Different hardware requirements Multi-CPU system Fast disks Very large amounts of RAM
Project FreeSpace Private Cloud Infrastructure XMPP + file sync Single-MSI deployment Plugin architecture Fully self-updating Decentralized service orchestration Self-organizing Each node has identical capability Easy to administer
Project FreeSpace Features Distributed Compilation Initially MSBuild Distributed Unit Testing Initially via Gallio test automation framework Distributed Integration Testing Virtual machine management Initially via Hyper-V Distributed deployment E.g., create new VM for testers with appropriate binaries etc.
Benefit Summary Better than Continuous Integration Better than Continuous Testing Better than local compilation Better than local testing
Better Than Continuous Integration Good for long-running builds/tests Happens on a single machine Can set up, e.g., multiple instances, but it’s not straightforward Not designed for distributed builds Not optimized for idle processing Assumes server is dedicated Does not give immediate feedback Typically works on commit I.e., detects source control changes
Better Than Continuous Testing Testing is often more costly than compilation Typically, tests run on commit Continuous testing (e.g., Mighty Moose) systems ensure that Tests run on each save Only tests affected by changes are executed Fast feedback… But not instant – you still need to recompile. Given the option, why not build/test thingsall the time?

More Related Content

What's hot

Driving application development through behavior driven development
Driving application development through behavior driven developmentDriving application development through behavior driven development
Driving application development through behavior driven development
Einar Ingebrigtsen
 
Continuous Deployment
Continuous DeploymentContinuous Deployment
Continuous Deployment
Timothy Fitz
 
Introduction To Continuous Integration
Introduction To Continuous IntegrationIntroduction To Continuous Integration
Introduction To Continuous Integration
Christopher Read
 

What's hot (20)

Introduction to Automated Testing
Introduction to Automated TestingIntroduction to Automated Testing
Introduction to Automated Testing
 
My journey as a developer
My journey as a developerMy journey as a developer
My journey as a developer
 
DevOps For Solo Developers
DevOps For Solo DevelopersDevOps For Solo Developers
DevOps For Solo Developers
 
Driving application development through behavior driven development
Driving application development through behavior driven developmentDriving application development through behavior driven development
Driving application development through behavior driven development
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
CNUG TDD June 2014
CNUG TDD June 2014CNUG TDD June 2014
CNUG TDD June 2014
 
Software architecture in a DevOps world
Software architecture in a DevOps worldSoftware architecture in a DevOps world
Software architecture in a DevOps world
 
Optimizing Java
Optimizing JavaOptimizing Java
Optimizing Java
 
Chapter 3 Reducing Risks Using CI
Chapter 3 Reducing Risks Using CIChapter 3 Reducing Risks Using CI
Chapter 3 Reducing Risks Using CI
 
TDC 2021 - Better software, faster: Principles of Continuous Delivery and DevOps
TDC 2021 - Better software, faster: Principles of Continuous Delivery and DevOpsTDC 2021 - Better software, faster: Principles of Continuous Delivery and DevOps
TDC 2021 - Better software, faster: Principles of Continuous Delivery and DevOps
 
Put "fast" back in "fast feedback"
Put "fast" back in "fast feedback"Put "fast" back in "fast feedback"
Put "fast" back in "fast feedback"
 
Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)
 
Continuous Deployment
Continuous DeploymentContinuous Deployment
Continuous Deployment
 
Introduction To Continuous Integration
Introduction To Continuous IntegrationIntroduction To Continuous Integration
Introduction To Continuous Integration
 
The Continuous delivery value - Funaro
The Continuous delivery value - FunaroThe Continuous delivery value - Funaro
The Continuous delivery value - Funaro
 
Continuous Integration, the minimum viable product
Continuous Integration, the minimum viable productContinuous Integration, the minimum viable product
Continuous Integration, the minimum viable product
 
ალექსანდრე ნემსაძე - Release it
ალექსანდრე ნემსაძე - Release itალექსანდრე ნემსაძე - Release it
ალექსანდრე ნემსაძე - Release it
 
Debugging distributed systems
Debugging distributed systemsDebugging distributed systems
Debugging distributed systems
 
JUG CH September 2021 - Debugging distributed systems
JUG CH September 2021 - Debugging distributed systemsJUG CH September 2021 - Debugging distributed systems
JUG CH September 2021 - Debugging distributed systems
 
Skills Matter DevSecOps eXchange Forum 2022 - Software architecture in a DevO...
Skills Matter DevSecOps eXchange Forum 2022 - Software architecture in a DevO...Skills Matter DevSecOps eXchange Forum 2022 - Software architecture in a DevO...
Skills Matter DevSecOps eXchange Forum 2022 - Software architecture in a DevO...
 

Viewers also liked (8)

Проект X2C
Проект X2CПроект X2C
Проект X2C
 
Domain Transformations
Domain TransformationsDomain Transformations
Domain Transformations
 
Developer Efficiency
Developer EfficiencyDeveloper Efficiency
Developer Efficiency
 
Converting Managed Languages to C++
Converting Managed Languages to C++Converting Managed Languages to C++
Converting Managed Languages to C++
 
Code Generation
Code GenerationCode Generation
Code Generation
 
JetBrains ReSharper
JetBrains ReSharperJetBrains ReSharper
JetBrains ReSharper
 
ReSharper Presentation for NUGs
ReSharper Presentation for NUGsReSharper Presentation for NUGs
ReSharper Presentation for NUGs
 
JetBrains ReSharper
JetBrains ReSharperJetBrains ReSharper
JetBrains ReSharper
 

Similar to Distributed Development

Gozengo sauce presentation
Gozengo sauce presentationGozengo sauce presentation
Gozengo sauce presentation
Daniel Straus
 
Lessons learned in implementing test on-commit for mobile devices
Lessons learned in implementing test on-commit for mobile devicesLessons learned in implementing test on-commit for mobile devices
Lessons learned in implementing test on-commit for mobile devices
Johan Hoberg
 

Similar to Distributed Development (20)

Continues Integration for Android
Continues Integration for AndroidContinues Integration for Android
Continues Integration for Android
 
Testing 101
Testing 101Testing 101
Testing 101
 
Continuous Integration: A Case Study
Continuous Integration: A Case StudyContinuous Integration: A Case Study
Continuous Integration: A Case Study
 
Test-Driven Development In Action
Test-Driven Development In ActionTest-Driven Development In Action
Test-Driven Development In Action
 
DevOps and Build Automation
DevOps and Build AutomationDevOps and Build Automation
DevOps and Build Automation
 
Continous Integration: A Case Study
Continous Integration: A Case StudyContinous Integration: A Case Study
Continous Integration: A Case Study
 
Automating Perl deployments with Hudson
Automating Perl deployments with HudsonAutomating Perl deployments with Hudson
Automating Perl deployments with Hudson
 
Unit Testing, TDD and the Walking Skeleton
Unit Testing, TDD and the Walking SkeletonUnit Testing, TDD and the Walking Skeleton
Unit Testing, TDD and the Walking Skeleton
 
DevOps - Boldly Go for Distro
DevOps - Boldly Go for DistroDevOps - Boldly Go for Distro
DevOps - Boldly Go for Distro
 
Rv11
Rv11Rv11
Rv11
 
[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...
[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...
[DPE Summit] How Improving the Testing Experience Goes Beyond Quality: A Deve...
 
Presentation 1 open source tools in continuous integration environment v1.0
Presentation 1   open source tools in continuous integration environment v1.0Presentation 1   open source tools in continuous integration environment v1.0
Presentation 1 open source tools in continuous integration environment v1.0
 
IMC Summit 2016 Breakout - Noah Arliss - The Truth: How to Test Your Distribu...
IMC Summit 2016 Breakout - Noah Arliss - The Truth: How to Test Your Distribu...IMC Summit 2016 Breakout - Noah Arliss - The Truth: How to Test Your Distribu...
IMC Summit 2016 Breakout - Noah Arliss - The Truth: How to Test Your Distribu...
 
Gozengo sauce presentation
Gozengo sauce presentationGozengo sauce presentation
Gozengo sauce presentation
 
How Gozengo Implemented a Continuous Deployment Culture from Day One
How Gozengo Implemented a Continuous Deployment Culture from Day OneHow Gozengo Implemented a Continuous Deployment Culture from Day One
How Gozengo Implemented a Continuous Deployment Culture from Day One
 
TDD Workshop UTN 2012
TDD Workshop UTN 2012TDD Workshop UTN 2012
TDD Workshop UTN 2012
 
Performance Analysis of Idle Programs
Performance Analysis of Idle ProgramsPerformance Analysis of Idle Programs
Performance Analysis of Idle Programs
 
Agile and continuous delivery – How IBM Watson Workspace is built
Agile and continuous delivery – How IBM Watson Workspace is builtAgile and continuous delivery – How IBM Watson Workspace is built
Agile and continuous delivery – How IBM Watson Workspace is built
 
Lessons learned in implementing test on-commit for mobile devices
Lessons learned in implementing test on-commit for mobile devicesLessons learned in implementing test on-commit for mobile devices
Lessons learned in implementing test on-commit for mobile devices
 
Lessons Learned in Software Development: QA Infrastructure – Maintaining Rob...
Lessons Learned in Software Development: QA Infrastructure – Maintaining Rob...Lessons Learned in Software Development: QA Infrastructure – Maintaining Rob...
Lessons Learned in Software Development: QA Infrastructure – Maintaining Rob...
 

More from Dmitri Nesteruk

Dynamics CRM Data Integration
Dynamics CRM Data IntegrationDynamics CRM Data Integration
Dynamics CRM Data Integration
Dmitri Nesteruk
 
ReSharper Architecture & Extensions
ReSharper Architecture & ExtensionsReSharper Architecture & Extensions
ReSharper Architecture & Extensions
Dmitri Nesteruk
 
.Net Multithreading and Parallelization
.Net Multithreading and Parallelization.Net Multithreading and Parallelization
.Net Multithreading and Parallelization
Dmitri Nesteruk
 
Functional Programming in F#
Functional Programming in F#Functional Programming in F#
Functional Programming in F#
Dmitri Nesteruk
 

More from Dmitri Nesteruk (20)

Good Ideas in Programming Languages
Good Ideas in Programming LanguagesGood Ideas in Programming Languages
Good Ideas in Programming Languages
 
Design Pattern Observations
Design Pattern ObservationsDesign Pattern Observations
Design Pattern Observations
 
CallSharp: Automatic Input/Output Matching in .NET
CallSharp: Automatic Input/Output Matching in .NETCallSharp: Automatic Input/Output Matching in .NET
CallSharp: Automatic Input/Output Matching in .NET
 
Design Patterns in Modern C++
Design Patterns in Modern C++Design Patterns in Modern C++
Design Patterns in Modern C++
 
C# Tricks
C# TricksC# Tricks
C# Tricks
 
Introduction to Programming Bots
Introduction to Programming BotsIntroduction to Programming Bots
Introduction to Programming Bots
 
Monte Carlo C++
Monte Carlo C++Monte Carlo C++
Monte Carlo C++
 
Tpl DataFlow
Tpl DataFlowTpl DataFlow
Tpl DataFlow
 
YouTrack: Not Just an Issue Tracker
YouTrack: Not Just an Issue TrackerYouTrack: Not Just an Issue Tracker
YouTrack: Not Just an Issue Tracker
 
Victor CG Erofeev - Metro UI
Victor CG Erofeev - Metro UIVictor CG Erofeev - Metro UI
Victor CG Erofeev - Metro UI
 
Dynamics CRM Data Integration
Dynamics CRM Data IntegrationDynamics CRM Data Integration
Dynamics CRM Data Integration
 
ReSharper Architecture & Extensions
ReSharper Architecture & ExtensionsReSharper Architecture & Extensions
ReSharper Architecture & Extensions
 
Web mining
Web miningWeb mining
Web mining
 
Data mapping tutorial
Data mapping tutorialData mapping tutorial
Data mapping tutorial
 
Reactive Extensions
Reactive ExtensionsReactive Extensions
Reactive Extensions
 
Design Patterns in .Net
Design Patterns in .NetDesign Patterns in .Net
Design Patterns in .Net
 
Metaprogramming
MetaprogrammingMetaprogramming
Metaprogramming
 
.Net Multithreading and Parallelization
.Net Multithreading and Parallelization.Net Multithreading and Parallelization
.Net Multithreading and Parallelization
 
AOP via PIAB and Unity
AOP via PIAB and UnityAOP via PIAB and Unity
AOP via PIAB and Unity
 
Functional Programming in F#
Functional Programming in F#Functional Programming in F#
Functional Programming in F#
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Recently uploaded (20)

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 

Distributed Development

  • 1. Distributed DevelopmentProject FreeSpace Alexey Suvorovalexey@activemesa.com Dmitri Nesterukdmitri@activemesa.com
  • 2. This Talk Is About… Speed How to get things done faster Quality How to get feedback faster How to get more testing done Manageability Cloud monitoring & control Decentralization/fault-tolerance Not only development!
  • 3. Joel’s Test Do you use source control? Can you make a build in one step? Do you make daily builds? Do you have a bug database? Do you fix bugs before writing new code? Do you have an up-to-date schedule? Do you have a spec? Do programmers have quiet working conditions? Do you use the best tools money can buy? Do you have testers? Do new candidates write code during their interview? Do you do hallway usability testing? Typical answer: No.
  • 4. Best Tools Money Can Buy? Hardware Fast CPU Lots of RAM SSDs Multiple monitors Software Commercial issue tracking Paid source code hosting File sync services ReSharper
  • 5. In large/complex projects IDE interaction is slow Code analysis is slow Compilation is slow Testing is slow (Re)deployment is slow
  • 6. IDE interaction is slow IDEs are slow, but we cannot ditch them We have nearly few software options for optimizing IDEs E.g., VS is both disk I/O-bound (SSD a must) and CPU-bound We cannot relocate, e.g., the ReSharper cache into a distributed service IDEs can be spawned on same project in many machines Multiple screens/remote desktop windows Synchronizable with Dropbox, SugarSync, etc. But project/solution reloads in VS will kill you
  • 7. Code analysis is slow In-depth analysis of either compiled or source code is computationally intensive NDepend, FxCop and others can all be run remotely Not just on the build server Most of these tools output report files Can send these to origin Some of these tools can be made to work on per-file/per-project rather than per-solution
  • 8. Compilation is slow Compilation is C#/VB.NET – acceptable F# – slow C++ – atrociously slow Made worse by pre/post-build PostSharp Entity Framework Code Contracts Moles Etc. VS compilation process inefficient Will rebuild projects that haven’t changed Will not parallelize by default MSBuild is parallelizable /m:n Can spawn multiple processes
  • 9. Testing is (painfully) slow Unit testing is badly parallelized MbUnit’s [Parallelizable] Same in NUnit 3 Can easily parallelize at different granularity Test case/method Test fixture Test assembly
  • 10. Fear of Builds/Tests Developers loath to compile or run tests too frequently Disruption of focus leads them to Surf the web Go for coffee <insert your pastime here> Everyone loses Loss of concentration/motivation Developers never ‘in the zone’ TDD does not work
  • 11. Who cares? Developers Employers Fixed salary Don’t care about TTM Accustomed to substandard tools/equipment View compilation as a one-time process Don’t care about frequent/continuous testing See manual deployment as normal More concerned with saving money than getting things done Uninformed about good/best practices Not concerned with quick delivery (in case of service companies that charge by the hour)
  • 12. Problem: nobody recognizes compilation/testing as wasted time
  • 13. How to speed things up? Optimize or buy a faster computer SSDs More RAM Faster CPUs Costly! Has to be done for every developer. Alternatively… use existing infrastructure Both physical (e.g., dev machines) and virtual Distribute workload between machines Use idle resources – no need to buy new machines.
  • 14. Status Quo Computers get faster More cores per CPU Faster hard drives (SSD, hybrid) Software gets more demanding Windows eats more and more RAM & HDD VS is slower Everyone else follows suit The overall development experience isnot getting any better
  • 15. Why Distributed? Resource under-utilization A typical enterprise (IT-specific or not) is unlikely to use 100% of processing resources Resource overload Bottlenecks in servers Resource costs Server-grade hardware Reliability concerns (e.g. RAID)
  • 16. Three Pillars of Distribution Get data on everyone’s machine Cloud storage/file sync Verification necessary Get machines chatting with one another XMPPclient on each node Load balance and optimize execution plan Send commands to do work, get results Work items synchronized via cloud storage Redundancy/reliability guarantees Integrate with existing systems Easy because XMPP uses XML
  • 17. Scale Vectors Core Machine Better support for Multi-Core Exists in some cases MSBuild MbUnit (+ NUnit 3) Could be leveraged in the general case Not easy! Needs to mind end user’s preferences Support arbitrary networks (both on- and off-site) Need to control code sync (security) Can go for full resource utilization (esp. off-hours) Speculative processing E.g., Monte-Carlo simulations Operations which are prohibitively resource-intensive E.g., mutation tests
  • 18. Leveraging the Model Compilation Compiling on dev’s machine is counterproductive Compilation of some languages (C++, Scala) takes far too much time But the problem exists everywhere (.Net, Java) Deployment Testing Large test base cannot be run on a dev’s machine CI is not the answer Constrained to a single machine Can be distributed, but not straightforward Code analysis Very costly Coverage analysis Extremely costly
  • 19. Challenges Load balancing File synchronization Security
  • 20. Compilation MSBuild Builds all major types of VS projects Can parallelize locally (/m:n, n=# of processes) Builds block VS Build on the UI thread Builds often inefficient Cannot build only projects affected by changes Cannot use multiple machines
  • 21. Distributed Compilation Dramatically speed up solution build Determine project dependencies Build different projects on separate machines Use multiple MSBuild processes per machine Depending on CPU count & power Does not distract the developer Development machine usable without interruption Quicker feedback on errors Allows to instrument a continuous build policy Build on ever file save
  • 22. Distributed Testing Testing is slow Unit testing is largely not parallelized MbUnit [Paralellizable] Nunit will only support it in v.3 Not parallelized between several machines Testing in specific environment difficult Requires complicated (possibly manual) deployment processes Developer typically only tests on their own box (+ maybe CI server) Distributed testing ensures tests work everywhere
  • 23. Side Effects Side effects are unwelcome on users’ machines Environment changes may have undesired consequences Builds are typically exempt from this They do not affect anything beyond solution work folders Unit tests may or may not affect host system Integration tests typically do affect hosts Require ‘clean’ set-ups
  • 24. Isolation No side-effects Irrelevant, just take care of load Side effects Process-level virtualization (for existing machines) JauntePE App-V Virtual machines Hyper-V ESX
  • 25. Virtualized Testing Creation of multiple physical nodes is costly Physical machine re-configuration takes too much time Can configure a virtual test environment with Hyper-V System Center Virtual Machine Manager Virtual/physical migrations Different hardware requirements Multi-CPU system Fast disks Very large amounts of RAM
  • 26. Project FreeSpace Private Cloud Infrastructure XMPP + file sync Single-MSI deployment Plugin architecture Fully self-updating Decentralized service orchestration Self-organizing Each node has identical capability Easy to administer
  • 27. Project FreeSpace Features Distributed Compilation Initially MSBuild Distributed Unit Testing Initially via Gallio test automation framework Distributed Integration Testing Virtual machine management Initially via Hyper-V Distributed deployment E.g., create new VM for testers with appropriate binaries etc.
  • 28. Benefit Summary Better than Continuous Integration Better than Continuous Testing Better than local compilation Better than local testing
  • 29. Better Than Continuous Integration Good for long-running builds/tests Happens on a single machine Can set up, e.g., multiple instances, but it’s not straightforward Not designed for distributed builds Not optimized for idle processing Assumes server is dedicated Does not give immediate feedback Typically works on commit I.e., detects source control changes
  • 30. Better Than Continuous Testing Testing is often more costly than compilation Typically, tests run on commit Continuous testing (e.g., Mighty Moose) systems ensure that Tests run on each save Only tests affected by changes are executed Fast feedback… But not instant – you still need to recompile. Given the option, why not build/test thingsall the time?
  • 31. Better Than Local Compilation Does not block IDE Scales across your network Much faster builds Immediate feedback
  • 32. Better Than Local Testing Much faster recompilation Tests do not tax developer CPU Allows for immediate testing in different environments Tests happen in parallel (where possible)