Feedback
- What’s your struggle?
- Introduction
Welcome fellow upgrade master!
- Why am I writing this book?
- Who is this book for?
- What can you expect?
- What not to expect?
- What if you don’t use PHP?
- What if your project has the latest and greatest dependencies?
Who am I?
- Getting closer
- Finding the trauma
- Japanese Culture
Why “Upgrade Every day”
- My first (and last) rewrite
- What already works in other life areas
- Compound Effect
- Change is the only constant
Compound Experience
- Compound Experience over Single Shot
- My First Upgrade: A Cautionary Tale
- Mythbusters
Refactor to Microservices
- Turning the Tide
Controller-by-Controller Framework Flip
- What is a Better Way?
Upgrade is Expensive
- Keeping Codebase Out-of-Date is Expensive
- Upgrade as an Ordinary Habit
Upgrade Takes Years to Finish
- Parkinson’s Law
Only the In-House Team Can Handle the Upgrade
You Can’t Upgrade What You Don’t Understand
Upgrade is One Huge Pull Request
- The Bigger the Changes, the More Risk
- What is a Better Way?
If it Works, Don’t Touch It
Once We Finish an Upgrade, We Start the Next Upgrade Again
We Lose the Knowledge Base if We Outsource the Upgrade
Our Team Must Have PHP Experts to Make the Upgrade Happen
We Can’t Stop Feature Development for a Year
Upgrade has to happen in one go
- Prepare
- Why is preparation so important?
- Work for a client
- Pick your project to upgrade
Before we start planning
- 1. Start with “why”
- 2. Validate motivation
- 3. Find client expectations and adjust them to reality
- 4. Address their fears
- 5. All-on-board or none
Why outsource the upgrade
- Thinking Features vs. Thinking Upgrades
Refactoring is not Upgrade
- What we do when we refactor?
- What we do when we upgrade?
Under a Year…
- How to split too big upgrades?
- What if it takes… 3 years or more?
- Timebox to activate Occam’s razor
Build Shared Vision
- How does the project look like after the upgrade?
Two Types of Upgrade
Separate Code and Infrastructure upgrade
- How far should we jump the PHP versions?
Smallest step Possible
Less is More
- Reduce, reduce, reduce
- New tool/package → + maintenance cost
Climbing Huge Mountain
- Make Safe Spots
- Staying in the Present Moment - One Move at a Time
- Take a Break
- The Mountain Climber Way
Planning the Upgrade
- Low Hanging Fruit First
- Rule of Smallest Gap Jump
- Build on Strong Foundations only
- Keep having fun
How many hours a week?
- Too fast, too furious
Think Big
- Analyse and Plan
Why…?
- It Protects you
- It Protects the Client
- “I already know the codebase, no need for looking into it”
More than Meets the Eye
- Known problems
- Unknown forces
Friction Patterns
Difficulty Factor
- From Pride to Beginners’ Mind
- Learned Helplessness
Focus Groups
- 1. General
- 2. Autoload
- 3. Testing
- 4. Static Analysis
- 5. Continuous Integration
- 6. Framework-related
- 7. Database-related
Building Battle Plan
- Why we need a plan?
- Real-project Intro Analysis
- Multi pronged Attack
- Execute
Before we Execute
CI is the King
- More than meets the CI? AI
Action: Setup CI Safetynet
- Trigger in CI
- 2. Know your PHP version
- 3. Add
composer validate
Deeper Composer Analysis
Spot Deprecations Early
PHPStan Without Levels first
Rector without Rules First
Symfony Service Types before FQNs