SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
# W PA Z
A D VA N C E D D E V E L O P E R M E E T U P
C H R I S
K L O S O W S K I
• Co-Lead Developer - Easy
Digital Downloads
• Founding Developer - Post
Promoter Pro
• Writing - KungFuGrep.com
• Home brewing
• Weird Dad
• @cklosowski (usually)
cklosowski
easydigitaldownloads.com | kungfugrep.com
T I M E I S M O N E Y
R A N G I N G F R O M $ 3 0 - $ 1 5 0 / H O U R , D E V T I M E I S N ’ T C H E A P
P R E V E N T I N E F F I C I E N C Y
T H R O U G H C O D E , W E C A N R E D U C E D E V T I M E
Reduce Code Complexity
Reuse Common Patterns
Refactor When Needed
C O N T E X T S W I T C H I N G I S B A D
H T T P : / / C H R I S K . I O / I / C O N T E X T
I N A P E R F E C T W O R L D …
C O N T E X T S W I T C H I N G I S A N E C E S S A RY E V I L
O P T I M I Z I N G W O R K F L O W
M A K I N G O U R A C T U A L “ F L O W ” T I M E M O R E E F F E C T I V E
R E D U C E C O M P L E X I T Y
T H E H A R D E R T O R E A D , T H E H A R D E R T O F I X
“Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by
definition, not smart enough to debug it.”
-Brian Kernighan: Co-Developer of Unix
W H AT I S
C O M P L E X I T Y ?
• Difficult to read
• “Tricky” solutions
• Cyclomatic complexity
• Examples…?
• You Bet!
if ( true === $foo ) {
foreach ( $bar as $key => $baz ) {
$bar[ $key ] = strtolower( $baz );
}
}
H A R D T O R E A D
function execute_data_input( $data = array() ) {
// Hard to know what is needed to use `execute_data_input`
}
function execute_data_input( $arg1 = '', $arg2 = '', $arg3 = '' ) {
// Easily readable and defined argument sets
}
T R I C K Y C O D E
// Input
$utm = array(
'campaign' => 'PostPromoterPro',
'source' => 'twitter',
'medium' => 'social',
);
// Output is a string
utm_campaign=PostPromoterPro&utm_source=twitter&utm_medium=social
T R I C K Y C O D E
$utm_string .= implode( '&', array_map( function ( $v,
$k ) { return 'utm_' . $k . '=' . $v; }, $utm,
array_keys( $utm ) ) );
$first = true;
foreach ( $utm as $key => $value ) {
if ( ! $first ) {
$utm_string .= '&';
}
$utm_string .= 'utm_' . $key . '=' . $value;
$first = false;
}
R E U S E C O M M O N PAT T E R N S
C R E AT E C O M M O N PAT T E R N S A N D C O N V E N T I O N S
R E U S I N G Y O U R
PAT T E R N S
• Standardize
• Function Naming
• Variable Naming
• Directory Structure
• Abstract Data Models
• Build Base Classes
A L L A B O U T T H AT B A S ES L I D E S W I T H O U T A P U N A R E N ’ T R E A L LY S L I D E S …
‣ EDD_Recurring_Gateway
‣ EDD_Recurring_2Checkout extends EDD_Recurring_Gateway
‣ EDD_Recurring_Authorize extends EDD_Recurring_Gateway
‣ EDD_Recurring_Stripe extends EDD_Recurring_Gateway
‣ EDD_Recurring_PayPal extends EDD_Recurring_Gateway
‣ …
Object Inheritance - When you extend a class, the
subclass inherits all of the public and protected methods
from the parent class. Unless a class overrides those
methods, they will retain their original functionality.
B U I L D A T E M P L AT EH T T P S : / / G I T H U B . C O M / E A S Y D I G I TA L D O W N L O A D S / E D D - E X T E N S I O N - B O I L E R P L AT E
R E FA C T O R I N G I S O K
I T ’ S N O T A N E V I L W O R D A N D I S S O M E T I M E S N E C E S S A RY
Code refactoring is the process of restructuring existing code without
changing its external behavior.
W H Y R E FA C T O R
W E ’ R E N O T M A K I N G I T D O A N Y T H I N G D I F F E R E N T ! ?
B E N E F I T S O F
R E FA C T O R I N G
• Performance Improvements
• Improve Readability
• Reduce Complexity
• Seeing a Trend?
• Improve Matainability
• Adapt New Best Practices
• Foundation Improvements
• Improve Extensibility
S T O RY T I M E
A ‘ R E C U R R I N G PAY M E N T S ’ C O M I N G O F A G E TA L E
August 30, 2012
First Commit, Ever
The Recurring Payments Story
January 23, 2015
Pressnomics 3
May 19, 2015
2.4 Development Starts
Jan 28, 2016
Preview Post
Feb 24, 2016
2.4 Goes Live
Jan 21, 2016
Live on AffiliateWP
The Recurring Payments Story
The Recurring Payments Story
• No “Backwards Compatibility”
• Introduced Gateway Base Class
• Introduced Classes for:
• Subscriber
• Subscription
• Emails
• Reminders
• Completely Refactored
• Raised the Price
Reduce, Reuse, Refactor

Contenu connexe

Tendances

PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!Blanca Mancilla
 
Sopa --de--letras
Sopa --de--letrasSopa --de--letras
Sopa --de--letrasDavid Marin
 
Distinctive characteristics of High-performance computing
Distinctive characteristics of High-performance computingDistinctive characteristics of High-performance computing
Distinctive characteristics of High-performance computingTyrone Systems
 
Delight Your Customers with Modern SEO
Delight Your Customers with Modern SEODelight Your Customers with Modern SEO
Delight Your Customers with Modern SEOCharlotte Han
 
Sopa de-letras-130327160455-phpapp01
Sopa de-letras-130327160455-phpapp01Sopa de-letras-130327160455-phpapp01
Sopa de-letras-130327160455-phpapp01Julian Posada
 
my portfoliopresentation
my portfoliopresentationmy portfoliopresentation
my portfoliopresentationJoseReyes
 
What Officience Outsourcing team does
What Officience Outsourcing team doesWhat Officience Outsourcing team does
What Officience Outsourcing team doesThanh An LE NGUYEN
 
I Don't Hate You, I Just Hate Your Code
I Don't Hate You, I Just Hate Your CodeI Don't Hate You, I Just Hate Your Code
I Don't Hate You, I Just Hate Your CodeBrian Richards
 
3D Printing Solutions from Make Whale
3D Printing Solutions from Make Whale3D Printing Solutions from Make Whale
3D Printing Solutions from Make WhaleArjun Gera
 
If you know where it will end up, it's not innovative enough - CloudConf 2017
If you know where it will end up, it's not innovative enough - CloudConf 2017If you know where it will end up, it's not innovative enough - CloudConf 2017
If you know where it will end up, it's not innovative enough - CloudConf 2017Jacopo Romei
 
How to Find Amazing Content Ideas on Reddit
How to Find Amazing Content Ideas on RedditHow to Find Amazing Content Ideas on Reddit
How to Find Amazing Content Ideas on RedditDaniel Russell
 
Corel draw graphics suite x7
Corel draw graphics suite x7Corel draw graphics suite x7
Corel draw graphics suite x7Purnama Bakti
 
Corel draw graphics suite x7
Corel draw graphics suite x7Corel draw graphics suite x7
Corel draw graphics suite x7William Souza
 
Corel draw graphics suite x6
Corel draw graphics suite x6Corel draw graphics suite x6
Corel draw graphics suite x6Mark Kumar
 

Tendances (20)

PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!PyLadies Talk: Learn to love the command line!
PyLadies Talk: Learn to love the command line!
 
Sopa --de--letras
Sopa --de--letrasSopa --de--letras
Sopa --de--letras
 
Text hierarchy
Text hierarchyText hierarchy
Text hierarchy
 
Techquiz
TechquizTechquiz
Techquiz
 
Distinctive characteristics of High-performance computing
Distinctive characteristics of High-performance computingDistinctive characteristics of High-performance computing
Distinctive characteristics of High-performance computing
 
Delight Your Customers with Modern SEO
Delight Your Customers with Modern SEODelight Your Customers with Modern SEO
Delight Your Customers with Modern SEO
 
Corel draw x4
Corel draw x4Corel draw x4
Corel draw x4
 
Sopa de-letras-130327160455-phpapp01
Sopa de-letras-130327160455-phpapp01Sopa de-letras-130327160455-phpapp01
Sopa de-letras-130327160455-phpapp01
 
my portfoliopresentation
my portfoliopresentationmy portfoliopresentation
my portfoliopresentation
 
What Officience Outsourcing team does
What Officience Outsourcing team doesWhat Officience Outsourcing team does
What Officience Outsourcing team does
 
I Don't Hate You, I Just Hate Your Code
I Don't Hate You, I Just Hate Your CodeI Don't Hate You, I Just Hate Your Code
I Don't Hate You, I Just Hate Your Code
 
3D Printing Solutions from Make Whale
3D Printing Solutions from Make Whale3D Printing Solutions from Make Whale
3D Printing Solutions from Make Whale
 
If you know where it will end up, it's not innovative enough - CloudConf 2017
If you know where it will end up, it's not innovative enough - CloudConf 2017If you know where it will end up, it's not innovative enough - CloudConf 2017
If you know where it will end up, it's not innovative enough - CloudConf 2017
 
Practica 3ro trips
Practica 3ro tripsPractica 3ro trips
Practica 3ro trips
 
How to Find Amazing Content Ideas on Reddit
How to Find Amazing Content Ideas on RedditHow to Find Amazing Content Ideas on Reddit
How to Find Amazing Content Ideas on Reddit
 
Corel draw graphics suite x7
Corel draw graphics suite x7Corel draw graphics suite x7
Corel draw graphics suite x7
 
Sopa de-letras-
Sopa de-letras-Sopa de-letras-
Sopa de-letras-
 
Corel draw graphics suite x7
Corel draw graphics suite x7Corel draw graphics suite x7
Corel draw graphics suite x7
 
Corel draw graphics suite x7
Corel draw graphics suite x7Corel draw graphics suite x7
Corel draw graphics suite x7
 
Corel draw graphics suite x6
Corel draw graphics suite x6Corel draw graphics suite x6
Corel draw graphics suite x6
 

Similaire à Reduce, Reuse, Refactor

Dr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyceDr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyceMichał Kurzeja
 
From Content Strategy to Drupal Site Building - Connecting the dots
From Content Strategy to Drupal Site Building - Connecting the dotsFrom Content Strategy to Drupal Site Building - Connecting the dots
From Content Strategy to Drupal Site Building - Connecting the dotsRonald Ashri
 
From Content Strategy to Drupal Site Building - Connecting the Dots
From Content Strategy to Drupal Site Building - Connecting the DotsFrom Content Strategy to Drupal Site Building - Connecting the Dots
From Content Strategy to Drupal Site Building - Connecting the DotsRonald Ashri
 
Strangler Pattern in practice @PHPers Day 2019
Strangler Pattern in practice @PHPers Day 2019Strangler Pattern in practice @PHPers Day 2019
Strangler Pattern in practice @PHPers Day 2019Michał Kurzeja
 
Data Modelling at Scale
Data Modelling at ScaleData Modelling at Scale
Data Modelling at ScaleDavid Simons
 
Choosing the Right Database
Choosing the Right DatabaseChoosing the Right Database
Choosing the Right DatabaseDavid Simons
 
Switching horses midstream - From Waterfall to Agile
Switching horses midstream - From Waterfall to AgileSwitching horses midstream - From Waterfall to Agile
Switching horses midstream - From Waterfall to AgileDoc Norton
 
ATDD BY Example With Cucumber
ATDD BY Example With CucumberATDD BY Example With Cucumber
ATDD BY Example With CucumberDoug Morgan
 
High quality Front-End
High quality Front-EndHigh quality Front-End
High quality Front-EndDavid Simons
 
Choosing the right database
Choosing the right databaseChoosing the right database
Choosing the right databaseDavid Simons
 
Bristol Uni - Use Cases of NoSQL
Bristol Uni - Use Cases of NoSQLBristol Uni - Use Cases of NoSQL
Bristol Uni - Use Cases of NoSQLDavid Simons
 
From the right process to a solid cultural change
From the right process to a solid cultural changeFrom the right process to a solid cultural change
From the right process to a solid cultural changeFrancesco Zaia
 
Artificial Intelligence – Case-based reasoning for recommender systems – Invi...
Artificial Intelligence – Case-based reasoning for recommender systems – Invi...Artificial Intelligence – Case-based reasoning for recommender systems – Invi...
Artificial Intelligence – Case-based reasoning for recommender systems – Invi...Thomas Roth-Berghofer
 
Thomas Roth-Berghofer (University of West London) – Artificial Intelligence -...
Thomas Roth-Berghofer (University of West London) – Artificial Intelligence -...Thomas Roth-Berghofer (University of West London) – Artificial Intelligence -...
Thomas Roth-Berghofer (University of West London) – Artificial Intelligence -...Techsylvania
 
TDC2016SP - Trilha Frameworks JavaScript
TDC2016SP - Trilha Frameworks JavaScriptTDC2016SP - Trilha Frameworks JavaScript
TDC2016SP - Trilha Frameworks JavaScripttdc-globalcode
 

Similaire à Reduce, Reuse, Refactor (20)

Content First in Action
Content First in ActionContent First in Action
Content First in Action
 
Dr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyceDr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyce
 
From Content Strategy to Drupal Site Building - Connecting the dots
From Content Strategy to Drupal Site Building - Connecting the dotsFrom Content Strategy to Drupal Site Building - Connecting the dots
From Content Strategy to Drupal Site Building - Connecting the dots
 
From Content Strategy to Drupal Site Building - Connecting the Dots
From Content Strategy to Drupal Site Building - Connecting the DotsFrom Content Strategy to Drupal Site Building - Connecting the Dots
From Content Strategy to Drupal Site Building - Connecting the Dots
 
Strangler Pattern in practice @PHPers Day 2019
Strangler Pattern in practice @PHPers Day 2019Strangler Pattern in practice @PHPers Day 2019
Strangler Pattern in practice @PHPers Day 2019
 
Data Modelling at Scale
Data Modelling at ScaleData Modelling at Scale
Data Modelling at Scale
 
Choosing the Right Database
Choosing the Right DatabaseChoosing the Right Database
Choosing the Right Database
 
Switching horses midstream - From Waterfall to Agile
Switching horses midstream - From Waterfall to AgileSwitching horses midstream - From Waterfall to Agile
Switching horses midstream - From Waterfall to Agile
 
ATDD BY Example With Cucumber
ATDD BY Example With CucumberATDD BY Example With Cucumber
ATDD BY Example With Cucumber
 
High quality Front-End
High quality Front-EndHigh quality Front-End
High quality Front-End
 
Choosing the right database
Choosing the right databaseChoosing the right database
Choosing the right database
 
New Android Languages
New Android LanguagesNew Android Languages
New Android Languages
 
Bristol Uni - Use Cases of NoSQL
Bristol Uni - Use Cases of NoSQLBristol Uni - Use Cases of NoSQL
Bristol Uni - Use Cases of NoSQL
 
BoSUSA18 | Bob Moesta| The 5 Skills Of An Innovator
BoSUSA18 | Bob Moesta| The 5 Skills Of An InnovatorBoSUSA18 | Bob Moesta| The 5 Skills Of An Innovator
BoSUSA18 | Bob Moesta| The 5 Skills Of An Innovator
 
From the right process to a solid cultural change
From the right process to a solid cultural changeFrom the right process to a solid cultural change
From the right process to a solid cultural change
 
Artificial Intelligence – Case-based reasoning for recommender systems – Invi...
Artificial Intelligence – Case-based reasoning for recommender systems – Invi...Artificial Intelligence – Case-based reasoning for recommender systems – Invi...
Artificial Intelligence – Case-based reasoning for recommender systems – Invi...
 
Thomas Roth-Berghofer (University of West London) – Artificial Intelligence -...
Thomas Roth-Berghofer (University of West London) – Artificial Intelligence -...Thomas Roth-Berghofer (University of West London) – Artificial Intelligence -...
Thomas Roth-Berghofer (University of West London) – Artificial Intelligence -...
 
TDC2016SP - Trilha Frameworks JavaScript
TDC2016SP - Trilha Frameworks JavaScriptTDC2016SP - Trilha Frameworks JavaScript
TDC2016SP - Trilha Frameworks JavaScript
 
React for Beginners
React for BeginnersReact for Beginners
React for Beginners
 
Witchcraft
WitchcraftWitchcraft
Witchcraft
 

Dernier

React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 

Dernier (20)

React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 

Reduce, Reuse, Refactor

  • 1. # W PA Z A D VA N C E D D E V E L O P E R M E E T U P
  • 2. C H R I S K L O S O W S K I • Co-Lead Developer - Easy Digital Downloads • Founding Developer - Post Promoter Pro • Writing - KungFuGrep.com • Home brewing • Weird Dad • @cklosowski (usually)
  • 4. T I M E I S M O N E Y R A N G I N G F R O M $ 3 0 - $ 1 5 0 / H O U R , D E V T I M E I S N ’ T C H E A P
  • 5. P R E V E N T I N E F F I C I E N C Y T H R O U G H C O D E , W E C A N R E D U C E D E V T I M E Reduce Code Complexity Reuse Common Patterns Refactor When Needed
  • 6.
  • 7.
  • 8. C O N T E X T S W I T C H I N G I S B A D H T T P : / / C H R I S K . I O / I / C O N T E X T
  • 9. I N A P E R F E C T W O R L D … C O N T E X T S W I T C H I N G I S A N E C E S S A RY E V I L
  • 10. O P T I M I Z I N G W O R K F L O W M A K I N G O U R A C T U A L “ F L O W ” T I M E M O R E E F F E C T I V E
  • 11. R E D U C E C O M P L E X I T Y T H E H A R D E R T O R E A D , T H E H A R D E R T O F I X “Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” -Brian Kernighan: Co-Developer of Unix
  • 12. W H AT I S C O M P L E X I T Y ? • Difficult to read • “Tricky” solutions • Cyclomatic complexity • Examples…? • You Bet!
  • 13. if ( true === $foo ) { foreach ( $bar as $key => $baz ) { $bar[ $key ] = strtolower( $baz ); } } H A R D T O R E A D function execute_data_input( $data = array() ) { // Hard to know what is needed to use `execute_data_input` } function execute_data_input( $arg1 = '', $arg2 = '', $arg3 = '' ) { // Easily readable and defined argument sets }
  • 14. T R I C K Y C O D E // Input $utm = array( 'campaign' => 'PostPromoterPro', 'source' => 'twitter', 'medium' => 'social', ); // Output is a string utm_campaign=PostPromoterPro&utm_source=twitter&utm_medium=social
  • 15. T R I C K Y C O D E $utm_string .= implode( '&', array_map( function ( $v, $k ) { return 'utm_' . $k . '=' . $v; }, $utm, array_keys( $utm ) ) ); $first = true; foreach ( $utm as $key => $value ) { if ( ! $first ) { $utm_string .= '&'; } $utm_string .= 'utm_' . $key . '=' . $value; $first = false; }
  • 16. R E U S E C O M M O N PAT T E R N S C R E AT E C O M M O N PAT T E R N S A N D C O N V E N T I O N S
  • 17. R E U S I N G Y O U R PAT T E R N S • Standardize • Function Naming • Variable Naming • Directory Structure • Abstract Data Models • Build Base Classes
  • 18. A L L A B O U T T H AT B A S ES L I D E S W I T H O U T A P U N A R E N ’ T R E A L LY S L I D E S … ‣ EDD_Recurring_Gateway ‣ EDD_Recurring_2Checkout extends EDD_Recurring_Gateway ‣ EDD_Recurring_Authorize extends EDD_Recurring_Gateway ‣ EDD_Recurring_Stripe extends EDD_Recurring_Gateway ‣ EDD_Recurring_PayPal extends EDD_Recurring_Gateway ‣ … Object Inheritance - When you extend a class, the subclass inherits all of the public and protected methods from the parent class. Unless a class overrides those methods, they will retain their original functionality.
  • 19. B U I L D A T E M P L AT EH T T P S : / / G I T H U B . C O M / E A S Y D I G I TA L D O W N L O A D S / E D D - E X T E N S I O N - B O I L E R P L AT E
  • 20. R E FA C T O R I N G I S O K I T ’ S N O T A N E V I L W O R D A N D I S S O M E T I M E S N E C E S S A RY Code refactoring is the process of restructuring existing code without changing its external behavior.
  • 21. W H Y R E FA C T O R W E ’ R E N O T M A K I N G I T D O A N Y T H I N G D I F F E R E N T ! ?
  • 22. B E N E F I T S O F R E FA C T O R I N G • Performance Improvements • Improve Readability • Reduce Complexity • Seeing a Trend? • Improve Matainability • Adapt New Best Practices • Foundation Improvements • Improve Extensibility
  • 23. S T O RY T I M E A ‘ R E C U R R I N G PAY M E N T S ’ C O M I N G O F A G E TA L E
  • 24. August 30, 2012 First Commit, Ever The Recurring Payments Story January 23, 2015 Pressnomics 3 May 19, 2015 2.4 Development Starts Jan 28, 2016 Preview Post Feb 24, 2016 2.4 Goes Live Jan 21, 2016 Live on AffiliateWP
  • 26. The Recurring Payments Story • No “Backwards Compatibility” • Introduced Gateway Base Class • Introduced Classes for: • Subscriber • Subscription • Emails • Reminders • Completely Refactored • Raised the Price