The devteam at LesFurets digested Kanban at code level to switch from delivering a batch of 100 features in a month, to delivering daily releases of 1-5 features.
At the Lean IT Summit, Dimitri Baeli shared the learnings and take-aways of a crazy code management strategy which turned out to be a great way of working with many good surprises, and opened the team to Lean practices.
Discover more Lean IT stories on www.lean-it-summit.com
4. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
The engine
• Complex forms
• 40-200 Fields (Expedia is around 10 fields)
• Risk pricing engine
• 50+ external webservices called in real time
• Collect answers within seconds
• 2B+ fields mapping per year
• Embedded online subscription module
LesFurets
WebSite
Panel Partners
Data Partners
5. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Competitive Advantage(s)
Product Catalogue :
Number of Panel members
Speed of getting new Panel members
Acquisition price compared to google, …
Quality of the offers presented to the users
Quality of the clients presented to the partners
UX of the WebSite :
Speed of getting a proposal, clarity of the proposal
Avoid mistakes along the form filling
6. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
The IT Team
• 23 Developers & 2 Ops
• 2 Functional Teams & 1 Infrastructure & Team
• 1 Single code base of 500.000 lines
• 40.000 unit tests (low level automated tests)
• 200 selenium tests (browser based automated tests)
•1-3 release per day of 1-10 changes
• 1 branch per feature : released when ready
• Soon known as “Kanban as code”
• 20-30 branches in parallel, 1-10 released per day
@beatiefurets
github.com/lesfurets
14. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Learning #1 : Release early, release often
• To reduce the Time to Market :
• Release small batches of features
• Release often
• Releasing often
• Change the way source code is managed
• Change in the QA strategy (Dev QA their own changes)
• Test tooling is provisioned for the des
• Fast Feedbacks as a gift
32. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Minimum viable vocabulary (1/2)
•Commit:
• is a change within the code base
• described as a “diff” from original (or patch)
• History :
• Sequence of Commits (changes)
• Branch:
• A full copy of the code base at a given time
• Can be seen as an alternate history
• Merge:
• Replay commits of a branch on another
branch 1
branch
commit 1
commit 2
commit 4
commit
merge
commit 3
33. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Minimum viable vocabulary (2/2)
• Conflict:
• when 2 commits aren’t compatible
• from 2 branches
• Resolution :
• give a solution to the conflict
• Rebase :
• change the start point of a branch
• time travel (get into the future)
branch 1
branch 2 commit 2
commit a
conflict
commit 3
commit 2
commit a
commit 3
rebase
49. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
• Keep Scrum monthly planning with Weekly releases
•Changes:
• Use the patch process to deliver features (cherry pick)
• Build down to 3 minutes (vs 15 minutes)
•Blockers:
• Regression Testing + Recette
• Code level management (release branch)
• Painful weekly patch release
2013 : Getting Weekly
50. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Learning #2 : Patch process as release process
•When something goes wrongs on the live system
•Do you have a strong process to release a fix ?
• NO => you’re living dangerously => get one
• YES => why don’t you use it for usual releases ?
•Anyway :
• Get a robust and fast delivery process is not an option !
63. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Learning #4 : Don’t block the others
•We keep the features separated until the last moment
• Other teams are merging by default !!!
• Continuous Merge (as test tooling):
• Detect conflicts with others (without requiring you to get their code)
• Allow you to avoid conflits
• Allow you to drop your code temporarely
•Bonus:
• Avoid unfinished code to be used by the others
64. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Break release branches, release from trunk
• Improvments:
• Automated release from finished development
• Per feature code review & demo
• 15 minutes regression testing (testing architecture)
• Release by 1 dev alone
• Monitoring & Root cause analysis of issues
2014: Daily Releases
66. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Take away : Kanban as Code
The Goals:
• # A Flow of Features at code level (Branches)
• # Release what is ready when it’s ready (Start by finishing)
• # Branches are your Kanban card (Step 1 of a pull system)
Why does it work :
• # Enforce the features to be independent (Really Independent !)
• # Low risk of conflict on 500.000 Line of Code (daily)
• # No branch can block another one (or it the same)
75. @YourTwitterHandle@YourTwitterHandle@beastiefurets@dbaeli
Learning #3: Avoid merge & conflicts
• For 2 Features developed separately:
• Merge = enforce to release together
• But Merging new code is the default for many teams
•Avoid merges (or release immediately):
• Trunk Based Development
• Any alternatives ?