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

Introduction to Automated Testing
Introduction to Automated TestingIntroduction to Automated Testing
Introduction to Automated TestingLars Thorup
 
My journey as a developer
My journey as a developerMy journey as a developer
My journey as a developerMehdi Khalili
 
DevOps For Solo Developers
DevOps For Solo DevelopersDevOps For Solo Developers
DevOps For Solo DevelopersJure Cuhalev
 
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 developmentEinar Ingebrigtsen
 
Software architecture in a DevOps world
Software architecture in a DevOps worldSoftware architecture in a DevOps world
Software architecture in a DevOps worldBert Jan Schrijver
 
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 DevOpsBert Jan Schrijver
 
Put "fast" back in "fast feedback"
Put "fast" back in "fast feedback"Put "fast" back in "fast feedback"
Put "fast" back in "fast feedback"Lars Thorup
 
Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)Arto Santala
 
Continuous Deployment
Continuous DeploymentContinuous Deployment
Continuous DeploymentTimothy Fitz
 
Introduction To Continuous Integration
Introduction To Continuous IntegrationIntroduction To Continuous Integration
Introduction To Continuous IntegrationChristopher Read
 
The Continuous delivery value - Funaro
The Continuous delivery value - FunaroThe Continuous delivery value - Funaro
The Continuous delivery value - FunaroCodemotion
 
Continuous Integration, the minimum viable product
Continuous Integration, the minimum viable productContinuous Integration, the minimum viable product
Continuous Integration, the minimum viable productJulian Simpson
 
ალექსანდრე ნემსაძე - Release it
ალექსანდრე ნემსაძე - Release itალექსანდრე ნემსაძე - Release it
ალექსანდრე ნემსაძე - Release itunihack
 
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 systemsBert Jan Schrijver
 
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...Bert Jan Schrijver
 

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

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

Continues Integration for Android
Continues Integration for AndroidContinues Integration for Android
Continues Integration for AndroidCODETE
 
Continuous Integration: A Case Study
Continuous Integration: A Case StudyContinuous Integration: A Case Study
Continuous Integration: A Case StudyIndicThreads
 
Test-Driven Development In Action
Test-Driven Development In ActionTest-Driven Development In Action
Test-Driven Development In ActionJon Kruger
 
DevOps and Build Automation
DevOps and Build AutomationDevOps and Build Automation
DevOps and Build AutomationHeiswayi Nrird
 
Continous Integration: A Case Study
Continous Integration: A Case StudyContinous Integration: A Case Study
Continous Integration: A Case StudyTalentica Software
 
Automating Perl deployments with Hudson
Automating Perl deployments with HudsonAutomating Perl deployments with Hudson
Automating Perl deployments with Hudsonnachbaur
 
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 SkeletonSeb Rose
 
DevOps - Boldly Go for Distro
DevOps - Boldly Go for DistroDevOps - Boldly Go for Distro
DevOps - Boldly Go for DistroPaul Boos
 
[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...Roberto Pérez Alcolea
 
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.0Jasmine Conseil
 
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...In-Memory Computing Summit
 
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 OneSauce Labs
 
Gozengo sauce presentation
Gozengo sauce presentationGozengo sauce presentation
Gozengo sauce presentationDaniel Straus
 
Performance Analysis of Idle Programs
Performance Analysis of Idle ProgramsPerformance Analysis of Idle Programs
Performance Analysis of Idle Programsgreenwop
 
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 builtVincent Burckhardt
 
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 devicesJohan Hoberg
 
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...Cωνσtantίnoς Giannoulis
 

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...
 
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
 
Gozengo sauce presentation
Gozengo sauce presentationGozengo sauce presentation
Gozengo sauce presentation
 
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

Good Ideas in Programming Languages
Good Ideas in Programming LanguagesGood Ideas in Programming Languages
Good Ideas in Programming LanguagesDmitri Nesteruk
 
Design Pattern Observations
Design Pattern ObservationsDesign Pattern Observations
Design Pattern ObservationsDmitri Nesteruk
 
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 .NETDmitri Nesteruk
 
Design Patterns in Modern C++
Design Patterns in Modern C++Design Patterns in Modern C++
Design Patterns in Modern C++Dmitri Nesteruk
 
Introduction to Programming Bots
Introduction to Programming BotsIntroduction to Programming Bots
Introduction to Programming BotsDmitri Nesteruk
 
YouTrack: Not Just an Issue Tracker
YouTrack: Not Just an Issue TrackerYouTrack: Not Just an Issue Tracker
YouTrack: Not Just an Issue TrackerDmitri Nesteruk
 
Victor CG Erofeev - Metro UI
Victor CG Erofeev - Metro UIVictor CG Erofeev - Metro UI
Victor CG Erofeev - Metro UIDmitri Nesteruk
 
Dynamics CRM Data Integration
Dynamics CRM Data IntegrationDynamics CRM Data Integration
Dynamics CRM Data IntegrationDmitri Nesteruk
 
ReSharper Architecture & Extensions
ReSharper Architecture & ExtensionsReSharper Architecture & Extensions
ReSharper Architecture & ExtensionsDmitri Nesteruk
 
.Net Multithreading and Parallelization
.Net Multithreading and Parallelization.Net Multithreading and Parallelization
.Net Multithreading and ParallelizationDmitri 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

Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
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
 
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
 
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
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
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
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
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
 

Recently uploaded (20)

Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
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
 
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
 
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
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
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
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
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)
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
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
 

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)