SlideShare a Scribd company logo
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 (20)

PPT
UML
Niit
 
PDF
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
Peter Marshall
 
PPTX
Scrum Portugal Meeting 1 Lisbon - ALM
Marco Silva
 
PPTX
Teamwork and agile methodologies
Stefano Paluello
 
PPTX
Agile Requirements Engineering Practices: An Empirical Study
Asanka Dilruk
 
PPSX
Agile vs Iterative vs Waterfall models
Marraju Bollapragada V
 
PPTX
Why Automated Testing Matters To DevOps
dpaulmerrill
 
PDF
Scrum and Agile SDLC 101
Aniruddha Ray (Ani)
 
PPTX
Incorporating Performance Testing in Agile Development Process
Michael Vax
 
PPTX
How Microsoft ALM Tools Can Improve Your Bottom Line
Imaginet
 
PPTX
DevOps Tactical Adoption Theory: Continuous Testing
Berk Dülger
 
PPTX
Architecture In An Agile World
James Cooper
 
PDF
Behavior Driven Development (BDD)
Ajay Danait
 
PPT
Agile process
SatishreddyMandadi
 
PDF
XP In 10 slides
Robert Burrell Donkin
 
PPT
Anti Patterns Siddhesh Lecture1 Of3
Siddhesh Bhobe
 
PPT
Agile Software Development with XP
Vashira Ravipanich
 
PPT
Scrum Testing Methodology
Gaya1985
 
PPT
Agile Development | Agile Process Models
Ahsan Rahim
 
PDF
Behavior Driven Development—A Guide to Agile Practices by Josh Eastman
QA or the Highway
 
UML
Niit
 
Pete Marshall - casmadrid2015 - Continuous Delivery in Legacy Environments
Peter Marshall
 
Scrum Portugal Meeting 1 Lisbon - ALM
Marco Silva
 
Teamwork and agile methodologies
Stefano Paluello
 
Agile Requirements Engineering Practices: An Empirical Study
Asanka Dilruk
 
Agile vs Iterative vs Waterfall models
Marraju Bollapragada V
 
Why Automated Testing Matters To DevOps
dpaulmerrill
 
Scrum and Agile SDLC 101
Aniruddha Ray (Ani)
 
Incorporating Performance Testing in Agile Development Process
Michael Vax
 
How Microsoft ALM Tools Can Improve Your Bottom Line
Imaginet
 
DevOps Tactical Adoption Theory: Continuous Testing
Berk Dülger
 
Architecture In An Agile World
James Cooper
 
Behavior Driven Development (BDD)
Ajay Danait
 
Agile process
SatishreddyMandadi
 
XP In 10 slides
Robert Burrell Donkin
 
Anti Patterns Siddhesh Lecture1 Of3
Siddhesh Bhobe
 
Agile Software Development with XP
Vashira Ravipanich
 
Scrum Testing Methodology
Gaya1985
 
Agile Development | Agile Process Models
Ahsan Rahim
 
Behavior Driven Development—A Guide to Agile Practices by Josh Eastman
QA or the Highway
 

Viewers also liked (11)

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

Similar to Large scale agile development practices (20)

PPTX
Agile & DevOps - It's all about project success
Adam Stephensen
 
PPTX
DevOps and Build Automation
Heiswayi Nrird
 
PDF
No Devops Without Continuous Testing
Parasoft
 
PPT
xp.ppt programming softwares engineering
programizconsultancy
 
PPTX
Enterprise DevOps: Scaling Build, Deploy, Test, Release
IBM UrbanCode Products
 
PPTX
Introduction to DevOps slides-converted (1).pptx
aasssss1
 
PDF
Visual Studio ALM and DevOps Tools Walkthrough
Angela Dugan
 
PPTX
Agile Development unleashed
livgeni
 
PDF
Ibm innovate ci for system z
Rosalind Radcliffe
 
PPTX
DevOps CTO Masterclass | Webinar Oct. 2020
Cyber-Duck
 
PPTX
Agile Chennai 2021 | Achieving High DevOps Maturity through Platform Engineer...
AgileNetwork
 
PPT
How to run an Enterprise PHP Shop
Jim Plush
 
PDF
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
DevOps for Enterprise Systems
 
PPTX
Agile architecture made real
Alexis Hui
 
PPTX
Test team dynamics, Антон Мужайло
Sigma Software
 
PDF
Webinar - Design Thinking for Platform Engineering
OpenCredo
 
PPTX
Introduction to Software Engineering
International Islamic University Islamabad
 
PPTX
Making software development processes to work for you
Ambientia
 
PDF
L5555555555555555555555 Agile Scrum Framework.pdf
rahulprasad894389
 
PPT
Testwarez 2009 Use Proper Tool
Adam Sandman
 
Agile & DevOps - It's all about project success
Adam Stephensen
 
DevOps and Build Automation
Heiswayi Nrird
 
No Devops Without Continuous Testing
Parasoft
 
xp.ppt programming softwares engineering
programizconsultancy
 
Enterprise DevOps: Scaling Build, Deploy, Test, Release
IBM UrbanCode Products
 
Introduction to DevOps slides-converted (1).pptx
aasssss1
 
Visual Studio ALM and DevOps Tools Walkthrough
Angela Dugan
 
Agile Development unleashed
livgeni
 
Ibm innovate ci for system z
Rosalind Radcliffe
 
DevOps CTO Masterclass | Webinar Oct. 2020
Cyber-Duck
 
Agile Chennai 2021 | Achieving High DevOps Maturity through Platform Engineer...
AgileNetwork
 
How to run an Enterprise PHP Shop
Jim Plush
 
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
DevOps for Enterprise Systems
 
Agile architecture made real
Alexis Hui
 
Test team dynamics, Антон Мужайло
Sigma Software
 
Webinar - Design Thinking for Platform Engineering
OpenCredo
 
Introduction to Software Engineering
International Islamic University Islamabad
 
Making software development processes to work for you
Ambientia
 
L5555555555555555555555 Agile Scrum Framework.pdf
rahulprasad894389
 
Testwarez 2009 Use Proper Tool
Adam Sandman
 
Ad

More from Skills Matter (20)

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

Recently uploaded (20)

PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PPTX
UiPath Academic Alliance Educator Panels: Session 2 - Business Analyst Content
DianaGray10
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
UiPath Academic Alliance Educator Panels: Session 2 - Business Analyst Content
DianaGray10
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 

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