infrastructure code in agile software development
DESCRIPTION
This presentation i gave in an ILTAM group meeting discusses common problems with Infrastructure code development and how Agile helps to deal with themTRANSCRIPT
Infrastructure code in agile Infrastructure code in agile software developmentsoftware development
Elad Sofer – Agile [email protected]
Twitter :@eladsof
What is infrastructure codeWhat is infrastructure code??
A Software layer with an API used in a larger context, by multiple users for different reasons. In some cases this layer is completely independent of business and is generally valueless on it’s own.
Infrastructure code is Good!Infrastructure code is Good!
• Supports the DRY principle.– Copy/Paste is EVIL!– Saves time/money.
• Increase quality of code by reducing complexity.
• Helps managing shared resources.
• Helps defining in-code standards.
Software infrastructure Software infrastructure The traditional way -The traditional way -Common problemsCommon problems
#1 - It’s never DONE#1 - It’s never DONE
#2 - Too big to handle#2 - Too big to handle
#3 – Who’s code is this?#3 – Who’s code is this?
#4 – Becomes the bottleneck#4 – Becomes the bottleneck
#5 – Too much functionality#5 – Too much functionality
#6 – House of cards#6 – House of cards
#7 – Hero culture#7 – Hero culture
#8 – #8 – Component TeamsComponent Teams
#8 – #8 – Component TeamsComponent Teams
Release feature list:
Feature 1 – A(20%) B(30%) I(50%)
Feature 2 – A(40%) B(20%) I(40%)
Feature 3 – B(50%) C(10%), I(40%)
Feature 4 – A(40%) C(10%), I(50%)
Feature 5 – A(20%) C(50%) I(30%)Total Effort needed:
A – 120
B – 100
C – 70
D – 210
20%
14%
42%
24%
#8 – #8 – Component TeamsComponent Teams
• Move people from team to team to match requirements.– Decreases job satisfaction, hurts performance.– What will happen next release ?
• Leave team formation as is:– Some teams will be “unemployed” – What will they
do ?• Need to “invent” work for them.
– Other teams will have too much pressure.• Change the scope of the release to equalize
efforts:– Not aligned with business needs.– Still bottlenecks exists on feature level.– The problem will be worst next release.
Software infrastructure Software infrastructure The agile wayThe agile way
Agile s/w developmentAgile s/w development
• Iterative / Incremental.• Simplicity.• Shared code ownership.• Flow – Reduce bottlenecks.• Business oriented.• Fast feedback – fail fast!• Collaborative.• Balance discipline and flexibility.
Incremental developmentIncremental development
SimplicitySimplicity
Shared code ownershipShared code ownership..
Feature areasFeature areas
UI
Business logic
Data model
Infrastructure
Security related Feature
s
User admin related features
Item CRUD related feature
s
Reporting related features
Feature teamsFeature teams
• All teams have infrastructure development ability.– This might take some time.
• Immediately reduces bottlenecks, reduces risk.– Infra code is tested immediately.
• Increases flexibility – allows development by business value.
• Increases business understanding inside teams.• Requires commitment and effort to implement.
• Requires increased communication between teams (this is a good thing!)
Business results oriented.Business results oriented.
Infrastructure growsInfrastructure grows
Collaborative.Collaborative.
spiral (waterfall) vs. iterative spiral (waterfall) vs. iterative
Balance discipline and flexibility. Balance discipline and flexibility.
• Make sure people follow the process.– Communicate changes in the infra.– Do not develop unnecessary functionality.– Transparency.
• Allow people to break the rules and experiment.– Sometimes it’s ok to try new stuff, as long as they
have a business justification.• Failure IS an option
– This allows learning & improving.