SlideShare a Scribd company logo
1 of 46
EXPERIENCE REPORT:
LARGE SCALE AGILE
DEVELOPMENT PRACTICES
Daphne Chong (@daphnechong)
Niall Connaughton (@nconnaughton)
What was the project?
 C# Winforms
 SQL Server database
 Large CRUD system
 App deployed to client sites
 Started in 2001
 Market leading product
What was the project?
 Low volume
 Performance important, but not critical
 Goal was a stable, consistent, feature-rich app
 Rapid release cycle (after any successful build)
In 2006…
 60 Developers
 5 million lines of code (including tests)
 ~100 solutions, 250 projects
 300+ db tables
 160,000 automated tests
Today…
 60 Developers
 ~10 million lines of code
 485 solutions
 470 db tables
 343,090 automated tests
The Pit of Success
We want our customers to simply fall into winning
practices by using our platform and frameworks
– Rico Mariani
Build platforms [where] developers just fall into
doing the “right thing”... Types should be defined
with a clear contact that communicates effectively
how they are to be used (and how not to)
– Brad Abrams
Pit of Success – Technical
Factors
 Inheritance
 Template Method pattern
 Strict naming conventions
 Common reusable controls
 Own type system
 Single generic repository – handled common
scenarios in CRUD, transactions, referential
integrity, caching, persistence
Pit of Success
 Tried to avoid too much divergence in code
 Made it difficult for people to stray from the “true
path”
Typical Application Layers
Typical Application Layers
Finding the value
Consistency
 70 % of a dev’s time is understanding existing code
– Peter Hallam [2]
 If you can reduce that even by a small amount, it’s
significant productivity gain
Consistency
 Consistent approach to everything
 Naming conventions – project, solutions, file locations,
namespaces, class names, methods, database tables
and columns
 Formatting
 UI look and feel (achieved through base controls)
 Patterns of design
Consistency
 Standardised on a core set of technologies that
best fit the application
 Avoided “technology soup” support and
maintenance
 Reduced learning curve for new developers
Insane things we did
 60 devs, no feature branches!
 SourceSafe 
 Highly sensitive to the build breaking
 True continuous integration
 Mitigated by clients opting in to “alpha”, “beta” or
“stable” versions
 Two large re-writes of architecture
 Result was more suited to our needs than if we had
kept the first and refactored it progressively
How did we build?
 Full build from batch file
 Update source files
 Solutions built in dependency order defined in xml
 All binaries output to one folder
 Build on dev machine = 20-25 minutes
 Build server with RAID = 4 minutes
 Quick build tool (written in c#)
 Only build solutions that have changes
Development - Architecture
 Built our own architecture
 Re-usable controls
 Comprehensive base classes
 Own type system
 Primitive types as well as Custom types
 Could define helper methods .IsEmpty,
.SubstringSafe() , IsInRange()
Development - Architecture
 Architecture constantly extended
 Approach was always unified though the
architecture
 Enabled good ideas to have widespread effect
Development – Technical debt
 Management support for improving bad code
 Aggressive attitude to technical debt
 Very little dead code
 Example: methods with 7 overloads that can’t be
deleted because don’t know who’s consuming them
Development – Technical debt
 Constant small amount of pain
 Rare occurrences of large amounts of pain
 Once a hard cost has been paid, make sure that
nobody ever has to pay the cost again
Development - Custom Tools
 Automated repetitive and error prone tasks
 Custom ORM generator
 Database upgrading tool
 GUI binding helpers to ensure targets exist
 Build monitor system tray application
 Code Generators for new modules
 Automated deployment tool
Testing
 Two types of tests
 Business Tests: user functionality
 Meta Tests: code design and contracts
Testing
 Most of our tests were actually integration tests of
varying scope
 Didn’t use a mocking framework (not yet well
known)
 Created our own stubs by inheriting from the
concrete class and overriding any methods that
used resources, etc.
Business Tests
 Generally state based logic
 Easy to read and write
 Fairly resilient throughout refactoring
 Derived from a base TestCase with ~25 basic tests
 Array properties don’t return null
 Properties don’t throw NullReferenceExceptions
 Don’t alter the state of the object before shown in GUI
Business Tests - Example
Meta Tests
 Don’t test direct functionality
 Enforced consistency, patterns and code contracts
 Implemented using reflection and attributes
 Slow to run, but very valuable
Meta Tests – Examples
 Check code conforms to conventions and contracts
 Public constructor with a specific parameter exists
 Assemblies are strong named
 Check for memory leaks
 Check that each model had an associated test
[TestsSubclassesOf(typeof(BusinessBase))]
public abstract class BusinessBaseTest
{
// contract tests here
}
Meta Tests
 The Meta Tests help to enforce the rules, rather
than having a “bad cop” in your team
 Not political or personal
 Once established, it gave power to the rest of the
team to contribute new tests and rules
Meta Tests
 Allowed the architecture to grow rapidly
 Already know the code conforms to a particular
standard
How do you run 343,000 tests?
 Initial approach similar to CruiseControl
 One machine building and running all tests
 Results emailed after completion
 … stalled once we hit 25,000 tests
 … Took 4 hrs to run
 Feedback cycle wasn’t fast enough
Growth of Tests
Distributed Testing Framework
 Highly customised
 Tests distributed to up to 60 agents
 Build time around 1 hour
 if built on single agent = 30-40 hours
 Package on successful build
 Agents ran on idle developer machines
 Ran 24/7
Distributed Testing Framework
Distributed Testing Framework
 Developer submitted builds could be processed
(i.e. pre-checkin)
 Task tray to signal progress
 Red light = broken tests, broken build or checkin
embargo
 Green light = OK to check in
Team
 Very Flat structure
 6-8 devs in architecture team (“Blue Code”)
 Business & GUI architecture
 Development tools
 Testing framework
 Database development
 Upgrading code
 Most other developers building business rules into
software (“Red Code”)
Architecture vs Business teams
Team - Architecture
 Made up less than 20% of team
 Improved productivity by much more than 20%
 Allowed devs to focus on smaller slice of stack and
get quicker feedback cycles
Team - Business
 Low barrier to entry for development
 Junior or new developers could be productive very
quickly
 Varied skill sets in the team were utilitsed
accordingly
 Technically minded people drawn to architecture
 Business minded people focused on implementing
customer requirements
Team – Sharing Information
 Free flowing collaboration
 Some development overhead in helping other
people
 Some information silo-ing
Team – Pair Programming
 Initially strict pairing
 Became “organic”
 Not enforced
 Never discouraged
Team – Work Ethic
 People took a lot of responsibility and
accountability of their own accord
 Boy scout rule – leave things cleaner than when
you found it
 Always fix broken windows
Work satisfaction
 Low turnover rates for first 4 years
 Lots of smart people to work with
 More meritocracy than political
 Developers took pride in their work
 Ability to implement large scale change open to
everyone
Work Satisfaction – flip side
 Hard to have interesting work for 60 developers
 Could be pigeon-holed into the business layer
 More stress than an average agile environment
 Long work hours implied because there’s only one
build – responsibility to keep the dev machine
going. No leaving the build broken or failing tests
throughout lunch or overnight.
Conclusion
 Team made a lot of investment in design and
conformity
 Easy to do with a CRUD system, harder with other
types of business software
 Project has expanded and moved on, but the
architecture has evolved with it and is still in use
Thanks to…
Zubin Appoo
Senior Manager, Product Development
www.cargowise.com
References
 [1] Brad Abrams, The Pit of Success
http://blogs.msdn.com/b/brada/archive/2003/10/02/50420.aspx
 [2] Peter Hallam, What do Programmers Really do Anyway?
http://blogs.msdn.com/b/peterhal/archive/2006/01/04/509302.aspx

More Related Content

What's hot

UML
UMLUML
UML
Niit
 
Teamwork and agile methodologies
Teamwork and agile methodologiesTeamwork and agile methodologies
Teamwork and agile methodologies
Stefano Paluello
 

What's hot (20)

UML
UMLUML
UML
 
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy EnvironmentsPete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
 
Scrum Portugal Meeting 1 Lisbon - ALM
Scrum Portugal Meeting 1 Lisbon - ALMScrum Portugal Meeting 1 Lisbon - ALM
Scrum Portugal Meeting 1 Lisbon - ALM
 
Teamwork and agile methodologies
Teamwork and agile methodologiesTeamwork and agile methodologies
Teamwork and agile methodologies
 
Agile Requirements Engineering Practices: An Empirical Study
Agile Requirements Engineering Practices: An Empirical StudyAgile Requirements Engineering Practices: An Empirical Study
Agile Requirements Engineering Practices: An Empirical Study
 
Agile vs Iterative vs Waterfall models
Agile vs Iterative vs Waterfall models Agile vs Iterative vs Waterfall models
Agile vs Iterative vs Waterfall models
 
Why Automated Testing Matters To DevOps
Why Automated Testing Matters To DevOpsWhy Automated Testing Matters To DevOps
Why Automated Testing Matters To DevOps
 
Scrum and Agile SDLC 101
Scrum and Agile SDLC 101Scrum and Agile SDLC 101
Scrum and Agile SDLC 101
 
Incorporating Performance Testing in Agile Development Process
Incorporating Performance Testing in Agile Development ProcessIncorporating Performance Testing in Agile Development Process
Incorporating Performance Testing in Agile Development Process
 
How Microsoft ALM Tools Can Improve Your Bottom Line
How Microsoft ALM Tools Can Improve Your Bottom LineHow Microsoft ALM Tools Can Improve Your Bottom Line
How Microsoft ALM Tools Can Improve Your Bottom Line
 
DevOps Tactical Adoption Theory: Continuous Testing
DevOps Tactical Adoption Theory: Continuous TestingDevOps Tactical Adoption Theory: Continuous Testing
DevOps Tactical Adoption Theory: Continuous Testing
 
Architecture In An Agile World
Architecture In An Agile WorldArchitecture In An Agile World
Architecture In An Agile World
 
Behavior Driven Development (BDD)
Behavior Driven Development (BDD)Behavior Driven Development (BDD)
Behavior Driven Development (BDD)
 
Agile process
Agile processAgile process
Agile process
 
XP In 10 slides
XP In 10 slidesXP In 10 slides
XP In 10 slides
 
Anti Patterns Siddhesh Lecture1 Of3
Anti Patterns Siddhesh Lecture1 Of3Anti Patterns Siddhesh Lecture1 Of3
Anti Patterns Siddhesh Lecture1 Of3
 
Agile Software Development with XP
Agile Software Development with XPAgile Software Development with XP
Agile Software Development with XP
 
Scrum Testing Methodology
Scrum Testing MethodologyScrum Testing Methodology
Scrum Testing Methodology
 
Agile Development | Agile Process Models
Agile Development | Agile Process ModelsAgile Development | Agile Process Models
Agile Development | Agile Process Models
 
Behavior Driven Development—A Guide to Agile Practices by Josh Eastman
Behavior Driven Development—A Guide to Agile Practices by Josh EastmanBehavior Driven Development—A Guide to Agile Practices by Josh Eastman
Behavior Driven Development—A Guide to Agile Practices by Josh Eastman
 

Viewers also liked

Lessons for Large Scale Lean and Agile Product Development - Atlassian Summit...
Lessons for Large Scale Lean and Agile Product Development - Atlassian Summit...Lessons for Large Scale Lean and Agile Product Development - Atlassian Summit...
Lessons for Large Scale Lean and Agile Product Development - Atlassian Summit...
Atlassian
 
Managing Large-Scale Agile Transformations - Experiences At Yahoo!
Managing Large-Scale Agile Transformations - Experiences At Yahoo!Managing Large-Scale Agile Transformations - Experiences At Yahoo!
Managing Large-Scale Agile Transformations - Experiences At Yahoo!
Tathagat Varma
 
Large scale agile_svante_lidman
Large scale agile_svante_lidmanLarge scale agile_svante_lidman
Large scale agile_svante_lidman
Svante Lidman
 

Viewers also liked (11)

Agile conference 2013
Agile conference 2013Agile conference 2013
Agile conference 2013
 
Scrum_BLR 10th meet up 13 sept-2014 - The Slippery Slope from Agile to Scrum ...
Scrum_BLR 10th meet up 13 sept-2014 - The Slippery Slope from Agile to Scrum ...Scrum_BLR 10th meet up 13 sept-2014 - The Slippery Slope from Agile to Scrum ...
Scrum_BLR 10th meet up 13 sept-2014 - The Slippery Slope from Agile to Scrum ...
 
Lessons for Large Scale Lean and Agile Product Development - Atlassian Summit...
Lessons for Large Scale Lean and Agile Product Development - Atlassian Summit...Lessons for Large Scale Lean and Agile Product Development - Atlassian Summit...
Lessons for Large Scale Lean and Agile Product Development - Atlassian Summit...
 
Mixed methods in a Large Scale Agile Environment AgileCamp 2014
Mixed methods in a Large Scale Agile Environment AgileCamp 2014Mixed methods in a Large Scale Agile Environment AgileCamp 2014
Mixed methods in a Large Scale Agile Environment AgileCamp 2014
 
Managing Large Scale Agile Transformation
Managing Large Scale Agile TransformationManaging Large Scale Agile Transformation
Managing Large Scale Agile Transformation
 
Jurg van Vliet - Agile Infrastructures
Jurg van Vliet - Agile InfrastructuresJurg van Vliet - Agile Infrastructures
Jurg van Vliet - Agile Infrastructures
 
Managing Large-Scale Agile Transformations - Experiences At Yahoo!
Managing Large-Scale Agile Transformations - Experiences At Yahoo!Managing Large-Scale Agile Transformations - Experiences At Yahoo!
Managing Large-Scale Agile Transformations - Experiences At Yahoo!
 
Scrum, Kanban, and Gantt scheduling in one project – nonsense or necessity? -...
Scrum, Kanban, and Gantt scheduling in one project – nonsense or necessity? -...Scrum, Kanban, and Gantt scheduling in one project – nonsense or necessity? -...
Scrum, Kanban, and Gantt scheduling in one project – nonsense or necessity? -...
 
Grunder för självorganisation devlin 2014
Grunder för självorganisation   devlin 2014Grunder för självorganisation   devlin 2014
Grunder för självorganisation devlin 2014
 
Large scale agile_svante_lidman
Large scale agile_svante_lidmanLarge scale agile_svante_lidman
Large scale agile_svante_lidman
 
Vad är SAFe och är det bra? devlin 2014
Vad är SAFe och är det bra?  devlin 2014Vad är SAFe och är det bra?  devlin 2014
Vad är SAFe och är det bra? devlin 2014
 

Similar to Large scale agile development practices

Introduction to DevOps slides-converted (1).pptx
Introduction to DevOps slides-converted (1).pptxIntroduction to DevOps slides-converted (1).pptx
Introduction to DevOps slides-converted (1).pptx
aasssss1
 

Similar to Large scale agile development practices (20)

Agile & DevOps - It's all about project success
Agile & DevOps - It's all about project successAgile & DevOps - It's all about project success
Agile & DevOps - It's all about project success
 
DevOps and Build Automation
DevOps and Build AutomationDevOps and Build Automation
DevOps and Build Automation
 
No Devops Without Continuous Testing
No Devops Without Continuous TestingNo Devops Without Continuous Testing
No Devops Without Continuous Testing
 
xp.ppt programming softwares engineering
xp.ppt programming softwares engineeringxp.ppt programming softwares engineering
xp.ppt programming softwares engineering
 
Enterprise DevOps: Scaling Build, Deploy, Test, Release
Enterprise DevOps: Scaling Build, Deploy, Test, ReleaseEnterprise DevOps: Scaling Build, Deploy, Test, Release
Enterprise DevOps: Scaling Build, Deploy, Test, Release
 
Introduction to DevOps slides-converted (1).pptx
Introduction to DevOps slides-converted (1).pptxIntroduction to DevOps slides-converted (1).pptx
Introduction to DevOps slides-converted (1).pptx
 
Visual Studio ALM and DevOps Tools Walkthrough
Visual Studio ALM and DevOps Tools WalkthroughVisual Studio ALM and DevOps Tools Walkthrough
Visual Studio ALM and DevOps Tools Walkthrough
 
Agile Development unleashed
Agile Development unleashedAgile Development unleashed
Agile Development unleashed
 
Ibm innovate ci for system z
Ibm innovate ci for system zIbm innovate ci for system z
Ibm innovate ci for system z
 
DevOps CTO Masterclass | Webinar Oct. 2020
DevOps CTO Masterclass | Webinar Oct. 2020DevOps CTO Masterclass | Webinar Oct. 2020
DevOps CTO Masterclass | Webinar Oct. 2020
 
Agile Chennai 2021 | Achieving High DevOps Maturity through Platform Engineer...
Agile Chennai 2021 | Achieving High DevOps Maturity through Platform Engineer...Agile Chennai 2021 | Achieving High DevOps Maturity through Platform Engineer...
Agile Chennai 2021 | Achieving High DevOps Maturity through Platform Engineer...
 
How to run an Enterprise PHP Shop
How to run an Enterprise PHP ShopHow to run an Enterprise PHP Shop
How to run an Enterprise PHP Shop
 
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems SoftwareLessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
 
Agile architecture made real
Agile architecture made realAgile architecture made real
Agile architecture made real
 
Test team dynamics, Антон Мужайло
Test team dynamics, Антон МужайлоTest team dynamics, Антон Мужайло
Test team dynamics, Антон Мужайло
 
Webinar - Design Thinking for Platform Engineering
Webinar - Design Thinking for Platform EngineeringWebinar - Design Thinking for Platform Engineering
Webinar - Design Thinking for Platform Engineering
 
Introduction to Software Engineering
Introduction to Software EngineeringIntroduction to Software Engineering
Introduction to Software Engineering
 
Making software development processes to work for you
Making software development processes to work for youMaking software development processes to work for you
Making software development processes to work for you
 
Testwarez 2009 Use Proper Tool
Testwarez 2009 Use Proper ToolTestwarez 2009 Use Proper Tool
Testwarez 2009 Use Proper Tool
 
Microsoft Teams as a Platform - Microsoft 365 Application Platform Maturity M...
Microsoft Teams as a Platform - Microsoft 365 Application Platform Maturity M...Microsoft Teams as a Platform - Microsoft 365 Application Platform Maturity M...
Microsoft Teams as a Platform - Microsoft 365 Application Platform Maturity M...
 

More from Skills Matter

Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheim
Skills Matter
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-dive
Skills Matter
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_t
Skills Matter
 

More from Skills Matter (20)

5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applications
 
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmScala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
 
Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheim
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
 
Cukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlCukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberl
 
Cukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsCukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.js
 
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
 
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
 
Progressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldProgressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source world
 
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
 
Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#
 
A poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingA poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testing
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-dive
 
Serendipity-neo4j
Serendipity-neo4jSerendipity-neo4j
Serendipity-neo4j
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelism
 
Plug 20110217
Plug   20110217Plug   20110217
Plug 20110217
 
Lug presentation
Lug presentationLug presentation
Lug presentation
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_t
 
Plug saiku
Plug   saikuPlug   saiku
Plug saiku
 

Recently uploaded

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Recently uploaded (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
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
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
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...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
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...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
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?
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 

Large scale agile development practices

  • 1. EXPERIENCE REPORT: LARGE SCALE AGILE DEVELOPMENT PRACTICES Daphne Chong (@daphnechong) Niall Connaughton (@nconnaughton)
  • 2. What was the project?  C# Winforms  SQL Server database  Large CRUD system  App deployed to client sites  Started in 2001  Market leading product
  • 3. What was the project?  Low volume  Performance important, but not critical  Goal was a stable, consistent, feature-rich app  Rapid release cycle (after any successful build)
  • 4. In 2006…  60 Developers  5 million lines of code (including tests)  ~100 solutions, 250 projects  300+ db tables  160,000 automated tests
  • 5. Today…  60 Developers  ~10 million lines of code  485 solutions  470 db tables  343,090 automated tests
  • 6. The Pit of Success We want our customers to simply fall into winning practices by using our platform and frameworks – Rico Mariani Build platforms [where] developers just fall into doing the “right thing”... Types should be defined with a clear contact that communicates effectively how they are to be used (and how not to) – Brad Abrams
  • 7. Pit of Success – Technical Factors  Inheritance  Template Method pattern  Strict naming conventions  Common reusable controls  Own type system  Single generic repository – handled common scenarios in CRUD, transactions, referential integrity, caching, persistence
  • 8. Pit of Success  Tried to avoid too much divergence in code  Made it difficult for people to stray from the “true path”
  • 12. Consistency  70 % of a dev’s time is understanding existing code – Peter Hallam [2]  If you can reduce that even by a small amount, it’s significant productivity gain
  • 13. Consistency  Consistent approach to everything  Naming conventions – project, solutions, file locations, namespaces, class names, methods, database tables and columns  Formatting  UI look and feel (achieved through base controls)  Patterns of design
  • 14. Consistency  Standardised on a core set of technologies that best fit the application  Avoided “technology soup” support and maintenance  Reduced learning curve for new developers
  • 15. Insane things we did  60 devs, no feature branches!  SourceSafe   Highly sensitive to the build breaking  True continuous integration  Mitigated by clients opting in to “alpha”, “beta” or “stable” versions  Two large re-writes of architecture  Result was more suited to our needs than if we had kept the first and refactored it progressively
  • 16. How did we build?  Full build from batch file  Update source files  Solutions built in dependency order defined in xml  All binaries output to one folder  Build on dev machine = 20-25 minutes  Build server with RAID = 4 minutes  Quick build tool (written in c#)  Only build solutions that have changes
  • 17. Development - Architecture  Built our own architecture  Re-usable controls  Comprehensive base classes  Own type system  Primitive types as well as Custom types  Could define helper methods .IsEmpty, .SubstringSafe() , IsInRange()
  • 18. Development - Architecture  Architecture constantly extended  Approach was always unified though the architecture  Enabled good ideas to have widespread effect
  • 19. Development – Technical debt  Management support for improving bad code  Aggressive attitude to technical debt  Very little dead code  Example: methods with 7 overloads that can’t be deleted because don’t know who’s consuming them
  • 20. Development – Technical debt  Constant small amount of pain  Rare occurrences of large amounts of pain  Once a hard cost has been paid, make sure that nobody ever has to pay the cost again
  • 21. Development - Custom Tools  Automated repetitive and error prone tasks  Custom ORM generator  Database upgrading tool  GUI binding helpers to ensure targets exist  Build monitor system tray application  Code Generators for new modules  Automated deployment tool
  • 22. Testing  Two types of tests  Business Tests: user functionality  Meta Tests: code design and contracts
  • 23. Testing  Most of our tests were actually integration tests of varying scope  Didn’t use a mocking framework (not yet well known)  Created our own stubs by inheriting from the concrete class and overriding any methods that used resources, etc.
  • 24. Business Tests  Generally state based logic  Easy to read and write  Fairly resilient throughout refactoring  Derived from a base TestCase with ~25 basic tests  Array properties don’t return null  Properties don’t throw NullReferenceExceptions  Don’t alter the state of the object before shown in GUI
  • 25. Business Tests - Example
  • 26. Meta Tests  Don’t test direct functionality  Enforced consistency, patterns and code contracts  Implemented using reflection and attributes  Slow to run, but very valuable
  • 27. Meta Tests – Examples  Check code conforms to conventions and contracts  Public constructor with a specific parameter exists  Assemblies are strong named  Check for memory leaks  Check that each model had an associated test [TestsSubclassesOf(typeof(BusinessBase))] public abstract class BusinessBaseTest { // contract tests here }
  • 28. Meta Tests  The Meta Tests help to enforce the rules, rather than having a “bad cop” in your team  Not political or personal  Once established, it gave power to the rest of the team to contribute new tests and rules
  • 29. Meta Tests  Allowed the architecture to grow rapidly  Already know the code conforms to a particular standard
  • 30. How do you run 343,000 tests?  Initial approach similar to CruiseControl  One machine building and running all tests  Results emailed after completion  … stalled once we hit 25,000 tests  … Took 4 hrs to run  Feedback cycle wasn’t fast enough
  • 32. Distributed Testing Framework  Highly customised  Tests distributed to up to 60 agents  Build time around 1 hour  if built on single agent = 30-40 hours  Package on successful build  Agents ran on idle developer machines  Ran 24/7
  • 34. Distributed Testing Framework  Developer submitted builds could be processed (i.e. pre-checkin)  Task tray to signal progress  Red light = broken tests, broken build or checkin embargo  Green light = OK to check in
  • 35. Team  Very Flat structure  6-8 devs in architecture team (“Blue Code”)  Business & GUI architecture  Development tools  Testing framework  Database development  Upgrading code  Most other developers building business rules into software (“Red Code”)
  • 37. Team - Architecture  Made up less than 20% of team  Improved productivity by much more than 20%  Allowed devs to focus on smaller slice of stack and get quicker feedback cycles
  • 38. Team - Business  Low barrier to entry for development  Junior or new developers could be productive very quickly  Varied skill sets in the team were utilitsed accordingly  Technically minded people drawn to architecture  Business minded people focused on implementing customer requirements
  • 39. Team – Sharing Information  Free flowing collaboration  Some development overhead in helping other people  Some information silo-ing
  • 40. Team – Pair Programming  Initially strict pairing  Became “organic”  Not enforced  Never discouraged
  • 41. Team – Work Ethic  People took a lot of responsibility and accountability of their own accord  Boy scout rule – leave things cleaner than when you found it  Always fix broken windows
  • 42. Work satisfaction  Low turnover rates for first 4 years  Lots of smart people to work with  More meritocracy than political  Developers took pride in their work  Ability to implement large scale change open to everyone
  • 43. Work Satisfaction – flip side  Hard to have interesting work for 60 developers  Could be pigeon-holed into the business layer  More stress than an average agile environment  Long work hours implied because there’s only one build – responsibility to keep the dev machine going. No leaving the build broken or failing tests throughout lunch or overnight.
  • 44. Conclusion  Team made a lot of investment in design and conformity  Easy to do with a CRUD system, harder with other types of business software  Project has expanded and moved on, but the architecture has evolved with it and is still in use
  • 45. Thanks to… Zubin Appoo Senior Manager, Product Development www.cargowise.com
  • 46. References  [1] Brad Abrams, The Pit of Success http://blogs.msdn.com/b/brada/archive/2003/10/02/50420.aspx  [2] Peter Hallam, What do Programmers Really do Anyway? http://blogs.msdn.com/b/peterhal/archive/2006/01/04/509302.aspx

Editor's Notes

  1. \