SlideShare a Scribd company logo

Old Code, New Tricks

M. Scott Ford
M. Scott Ford
M. Scott FordCEO & Co-founder, Corgibytes, LLC at Corgibytes, LLC

Slides from my Agile 2015 presentation, "Old Code, New Tricks". https://agile2015.sched.org/event/c43203024d8f7d3fe307028911a57033

Old Code, New Tricks

1 of 44
Download to read offline
OLD CODE, NEW TRICKSOR, HOW I LEARNED TO LOVE LEGACY CODE AND YOU CAN, TOO.
By M. Scott Ford
Founder, Corgibytes @mscottford
@mscottford
WHY WAS THIS MY FAVORITE PROJECT?
@mscottford
DISSATISFIED?
WHY WAS I SO
• Product vs. Services?
• Desktop vs. Web?
• Startup vs. Enterprise?
• Hacker vs. Craftsman?
• Self Employed?
@mscottford
PRODUCT LIFE CYCLE
INTRODUCTION
GROWTH
MATURITY
DEVELOPMENT
@mscottford
PRODUCT LIFE CYCLE
INTRODUCTION
GROWTH
MATURITY
DEVELOPMENT
OBSCURITY
DECLINE
@mscottford
PRODUCT LIFE CYCLE
INTRODUCTION
GROWTH
MATURITY
DEVELOPMENT
OBSCURITY
DECLINE
MAKING
Ad

Recommended

Rapid Prototyping - a good idea for Startups - battling the human condition
Rapid Prototyping - a good idea for Startups - battling the human conditionRapid Prototyping - a good idea for Startups - battling the human condition
Rapid Prototyping - a good idea for Startups - battling the human conditionBBC News Labs
 
Programação simultânea em pares
Programação simultânea em paresProgramação simultânea em pares
Programação simultânea em paresHerez Moise Kattan
 
New Ideas for Old Code - Greach
New Ideas for Old Code - GreachNew Ideas for Old Code - Greach
New Ideas for Old Code - GreachHamletDRC
 
Embracing the Red Bar: A Technique for Safely Refactoring Your Test Suite
Embracing the Red Bar: A Technique for Safely Refactoring Your Test SuiteEmbracing the Red Bar: A Technique for Safely Refactoring Your Test Suite
Embracing the Red Bar: A Technique for Safely Refactoring Your Test SuiteM. Scott Ford
 
Introduction to Mob Programming
Introduction to Mob ProgrammingIntroduction to Mob Programming
Introduction to Mob ProgrammingHerez Moise Kattan
 

More Related Content

Viewers also liked

When code gets_older
When code gets_olderWhen code gets_older
When code gets_olderSven Peters
 
The Craftsman Developer In An Agile World
The Craftsman Developer In An Agile WorldThe Craftsman Developer In An Agile World
The Craftsman Developer In An Agile WorldOpenAgile Romania
 
Code Refactoring
Code RefactoringCode Refactoring
Code RefactoringYu-Chih Lin
 
Clean architecture
Clean architectureClean architecture
Clean architectureandbed
 
Google Design sprint
Google Design sprintGoogle Design sprint
Google Design sprintBruno Mendes
 
Maintenance Technical Debt
Maintenance Technical DebtMaintenance Technical Debt
Maintenance Technical DebtGlobant
 
Documentation in the agile software development process
Documentation in the agile software development processDocumentation in the agile software development process
Documentation in the agile software development processFabian Kiss
 

Viewers also liked (8)

When code gets_older
When code gets_olderWhen code gets_older
When code gets_older
 
The Craftsman Developer In An Agile World
The Craftsman Developer In An Agile WorldThe Craftsman Developer In An Agile World
The Craftsman Developer In An Agile World
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
Software documentation
Software documentationSoftware documentation
Software documentation
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Google Design sprint
Google Design sprintGoogle Design sprint
Google Design sprint
 
Maintenance Technical Debt
Maintenance Technical DebtMaintenance Technical Debt
Maintenance Technical Debt
 
Documentation in the agile software development process
Documentation in the agile software development processDocumentation in the agile software development process
Documentation in the agile software development process
 

Similar to Old Code, New Tricks

MenderCon 2020 Keynote Presentation
MenderCon 2020 Keynote PresentationMenderCon 2020 Keynote Presentation
MenderCon 2020 Keynote PresentationM. Scott Ford
 
Nick Fine - Scientific Design
Nick Fine - Scientific Design Nick Fine - Scientific Design
Nick Fine - Scientific Design uxbri
 
Forgetting to Drain The Swamp + Other Lessons of Running a Creative Business
Forgetting to Drain The Swamp + Other Lessons of Running a Creative BusinessForgetting to Drain The Swamp + Other Lessons of Running a Creative Business
Forgetting to Drain The Swamp + Other Lessons of Running a Creative BusinessDoug Eymer
 
Innovation, Brand Engagement and the Maker Movement
Innovation, Brand Engagement and the Maker MovementInnovation, Brand Engagement and the Maker Movement
Innovation, Brand Engagement and the Maker MovementwonderMakr
 
Emergent Patterns in DevOps
Emergent Patterns in DevOpsEmergent Patterns in DevOps
Emergent Patterns in DevOpsGeorge Miranda
 
IT Pro Job Search Strategies 2017 Centriq
IT Pro Job Search Strategies 2017 CentriqIT Pro Job Search Strategies 2017 Centriq
IT Pro Job Search Strategies 2017 CentriqTina Pugh
 
Practical Cyber: Lessons from 500,000 Miles of Security Evangelism
Practical Cyber: Lessons from 500,000 Miles of Security EvangelismPractical Cyber: Lessons from 500,000 Miles of Security Evangelism
Practical Cyber: Lessons from 500,000 Miles of Security EvangelismBen Johnson
 
Creating A Digital Content Factory: Getting Started with Intelligent Content
Creating A Digital Content Factory: Getting Started with Intelligent ContentCreating A Digital Content Factory: Getting Started with Intelligent Content
Creating A Digital Content Factory: Getting Started with Intelligent ContentScott Abel
 
Coder Job Search Strategies 2017 Centriq
Coder Job Search Strategies 2017 CentriqCoder Job Search Strategies 2017 Centriq
Coder Job Search Strategies 2017 CentriqTina Pugh
 
The Black Magic Of Engineering Management
The Black Magic Of Engineering ManagementThe Black Magic Of Engineering Management
The Black Magic Of Engineering ManagementSauce Labs
 
The Black Magic of Engineering Management
The Black Magic of Engineering ManagementThe Black Magic of Engineering Management
The Black Magic of Engineering ManagementAdam Christian
 
Some Perspective (Nspire Discovery Series)
Some Perspective (Nspire Discovery Series)Some Perspective (Nspire Discovery Series)
Some Perspective (Nspire Discovery Series)Satish Kanwar
 
Breaking the myths of the rockstar developer - Drupalcon Vienna 2017
Breaking the myths of the rockstar developer  - Drupalcon Vienna 2017Breaking the myths of the rockstar developer  - Drupalcon Vienna 2017
Breaking the myths of the rockstar developer - Drupalcon Vienna 2017Salvador Molina (Slv_)
 
Writing a Persuasive Document
Writing a Persuasive DocumentWriting a Persuasive Document
Writing a Persuasive DocumentErin Blasco
 
The #Hiring Manifesto
The #Hiring ManifestoThe #Hiring Manifesto
The #Hiring ManifestoArbunize
 
Reading an ad, writing an application, getting a job... with an anthropology ...
Reading an ad, writing an application, getting a job... with an anthropology ...Reading an ad, writing an application, getting a job... with an anthropology ...
Reading an ad, writing an application, getting a job... with an anthropology ...Greg Downey
 
SpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerSpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerVMware Tanzu
 
ITM - Delivering the Promise of Cross-Media with Premedia
ITM - Delivering the Promise of Cross-Media with PremediaITM - Delivering the Promise of Cross-Media with Premedia
ITM - Delivering the Promise of Cross-Media with PremediaJeffrey Stewart
 

Similar to Old Code, New Tricks (20)

MenderCon 2020 Keynote Presentation
MenderCon 2020 Keynote PresentationMenderCon 2020 Keynote Presentation
MenderCon 2020 Keynote Presentation
 
Nick Fine - Scientific Design
Nick Fine - Scientific Design Nick Fine - Scientific Design
Nick Fine - Scientific Design
 
Forgetting to Drain The Swamp + Other Lessons of Running a Creative Business
Forgetting to Drain The Swamp + Other Lessons of Running a Creative BusinessForgetting to Drain The Swamp + Other Lessons of Running a Creative Business
Forgetting to Drain The Swamp + Other Lessons of Running a Creative Business
 
Innovation, Brand Engagement and the Maker Movement
Innovation, Brand Engagement and the Maker MovementInnovation, Brand Engagement and the Maker Movement
Innovation, Brand Engagement and the Maker Movement
 
Emergent Patterns in DevOps
Emergent Patterns in DevOpsEmergent Patterns in DevOps
Emergent Patterns in DevOps
 
IT Pro Job Search Strategies 2017 Centriq
IT Pro Job Search Strategies 2017 CentriqIT Pro Job Search Strategies 2017 Centriq
IT Pro Job Search Strategies 2017 Centriq
 
Practical Cyber: Lessons from 500,000 Miles of Security Evangelism
Practical Cyber: Lessons from 500,000 Miles of Security EvangelismPractical Cyber: Lessons from 500,000 Miles of Security Evangelism
Practical Cyber: Lessons from 500,000 Miles of Security Evangelism
 
Creating A Digital Content Factory: Getting Started with Intelligent Content
Creating A Digital Content Factory: Getting Started with Intelligent ContentCreating A Digital Content Factory: Getting Started with Intelligent Content
Creating A Digital Content Factory: Getting Started with Intelligent Content
 
Coder Job Search Strategies 2017 Centriq
Coder Job Search Strategies 2017 CentriqCoder Job Search Strategies 2017 Centriq
Coder Job Search Strategies 2017 Centriq
 
The Black Magic Of Engineering Management
The Black Magic Of Engineering ManagementThe Black Magic Of Engineering Management
The Black Magic Of Engineering Management
 
The Black Magic of Engineering Management
The Black Magic of Engineering ManagementThe Black Magic of Engineering Management
The Black Magic of Engineering Management
 
Some Perspective (Nspire Discovery Series)
Some Perspective (Nspire Discovery Series)Some Perspective (Nspire Discovery Series)
Some Perspective (Nspire Discovery Series)
 
WTI Framework Preso.pptx
WTI Framework Preso.pptxWTI Framework Preso.pptx
WTI Framework Preso.pptx
 
Breaking the myths of the rockstar developer - Drupalcon Vienna 2017
Breaking the myths of the rockstar developer  - Drupalcon Vienna 2017Breaking the myths of the rockstar developer  - Drupalcon Vienna 2017
Breaking the myths of the rockstar developer - Drupalcon Vienna 2017
 
Writing a Persuasive Document
Writing a Persuasive DocumentWriting a Persuasive Document
Writing a Persuasive Document
 
The #Hiring Manifesto
The #Hiring ManifestoThe #Hiring Manifesto
The #Hiring Manifesto
 
Reading an ad, writing an application, getting a job... with an anthropology ...
Reading an ad, writing an application, getting a job... with an anthropology ...Reading an ad, writing an application, getting a job... with an anthropology ...
Reading an ad, writing an application, getting a job... with an anthropology ...
 
Antony Williams, the ChemConnector – a career path through a diverse series o...
Antony Williams, the ChemConnector – a career path through a diverse series o...Antony Williams, the ChemConnector – a career path through a diverse series o...
Antony Williams, the ChemConnector – a career path through a diverse series o...
 
SpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerSpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software Engineer
 
ITM - Delivering the Promise of Cross-Media with Premedia
ITM - Delivering the Promise of Cross-Media with PremediaITM - Delivering the Promise of Cross-Media with Premedia
ITM - Delivering the Promise of Cross-Media with Premedia
 

More from M. Scott Ford

PyGeekle 2022 - A Deep Dive into Measuring Dependency Freshness with LibYear
PyGeekle 2022 - A Deep Dive into Measuring Dependency Freshness with LibYearPyGeekle 2022 - A Deep Dive into Measuring Dependency Freshness with LibYear
PyGeekle 2022 - A Deep Dive into Measuring Dependency Freshness with LibYearM. Scott Ford
 
Communication is Just as Important as Code
Communication is Just as Important as CodeCommunication is Just as Important as Code
Communication is Just as Important as CodeM. Scott Ford
 
MenderCon 2021 - Keynote
MenderCon 2021 - KeynoteMenderCon 2021 - Keynote
MenderCon 2021 - KeynoteM. Scott Ford
 
Moving a Monolith to Kubernetes
Moving a Monolith to KubernetesMoving a Monolith to Kubernetes
Moving a Monolith to KubernetesM. Scott Ford
 
Makers and menders - Finding Talent for Legacy Code Projects
Makers and menders - Finding Talent for Legacy Code ProjectsMakers and menders - Finding Talent for Legacy Code Projects
Makers and menders - Finding Talent for Legacy Code ProjectsM. Scott Ford
 
A deep dive into measuring dependency freshness with lib year
A deep dive into measuring dependency freshness with lib yearA deep dive into measuring dependency freshness with lib year
A deep dive into measuring dependency freshness with lib yearM. Scott Ford
 
Building a Bridge to a Legacy Application: How Hard Can That Be?
Building a Bridge to a Legacy Application: How Hard Can That Be?Building a Bridge to a Legacy Application: How Hard Can That Be?
Building a Bridge to a Legacy Application: How Hard Can That Be?M. Scott Ford
 
Important metrics for Measuring Code Health
Important metrics for Measuring Code HealthImportant metrics for Measuring Code Health
Important metrics for Measuring Code HealthM. Scott Ford
 

More from M. Scott Ford (8)

PyGeekle 2022 - A Deep Dive into Measuring Dependency Freshness with LibYear
PyGeekle 2022 - A Deep Dive into Measuring Dependency Freshness with LibYearPyGeekle 2022 - A Deep Dive into Measuring Dependency Freshness with LibYear
PyGeekle 2022 - A Deep Dive into Measuring Dependency Freshness with LibYear
 
Communication is Just as Important as Code
Communication is Just as Important as CodeCommunication is Just as Important as Code
Communication is Just as Important as Code
 
MenderCon 2021 - Keynote
MenderCon 2021 - KeynoteMenderCon 2021 - Keynote
MenderCon 2021 - Keynote
 
Moving a Monolith to Kubernetes
Moving a Monolith to KubernetesMoving a Monolith to Kubernetes
Moving a Monolith to Kubernetes
 
Makers and menders - Finding Talent for Legacy Code Projects
Makers and menders - Finding Talent for Legacy Code ProjectsMakers and menders - Finding Talent for Legacy Code Projects
Makers and menders - Finding Talent for Legacy Code Projects
 
A deep dive into measuring dependency freshness with lib year
A deep dive into measuring dependency freshness with lib yearA deep dive into measuring dependency freshness with lib year
A deep dive into measuring dependency freshness with lib year
 
Building a Bridge to a Legacy Application: How Hard Can That Be?
Building a Bridge to a Legacy Application: How Hard Can That Be?Building a Bridge to a Legacy Application: How Hard Can That Be?
Building a Bridge to a Legacy Application: How Hard Can That Be?
 
Important metrics for Measuring Code Health
Important metrics for Measuring Code HealthImportant metrics for Measuring Code Health
Important metrics for Measuring Code Health
 

Recently uploaded

unit I lecture 2 - Software Engineering Ethics - Software Process.pdf
unit I lecture 2 - Software Engineering Ethics - Software Process.pdfunit I lecture 2 - Software Engineering Ethics - Software Process.pdf
unit I lecture 2 - Software Engineering Ethics - Software Process.pdfStephenTec
 
Self scaling Multi cloud nomad workloads
Self scaling Multi cloud nomad workloadsSelf scaling Multi cloud nomad workloads
Self scaling Multi cloud nomad workloadsBram Vogelaar
 
Microsoft 365 De Security pdf
Microsoft 365 De Security pdfMicrosoft 365 De Security pdf
Microsoft 365 De Security pdfMarkus Moeller
 
unit 1 lecture 1 - Introduction - Software Engineering Myths.pdf
unit 1 lecture 1 - Introduction - Software Engineering Myths.pdfunit 1 lecture 1 - Introduction - Software Engineering Myths.pdf
unit 1 lecture 1 - Introduction - Software Engineering Myths.pdfStephenTec
 
MSR2022_Hackathon.pdf
MSR2022_Hackathon.pdfMSR2022_Hackathon.pdf
MSR2022_Hackathon.pdfnatarajan8993
 
unit I lecture 5 - Software Development Life Cycle.pdf
unit I lecture 5 - Software Development Life Cycle.pdfunit I lecture 5 - Software Development Life Cycle.pdf
unit I lecture 5 - Software Development Life Cycle.pdfStephenTec
 
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...confluent
 
unit I lecture 3 - Software Process Models.pdf
unit I lecture 3 - Software Process Models.pdfunit I lecture 3 - Software Process Models.pdf
unit I lecture 3 - Software Process Models.pdfStephenTec
 
App Builder - Hierarchical Data Apps.pptx
App Builder - Hierarchical Data Apps.pptxApp Builder - Hierarchical Data Apps.pptx
App Builder - Hierarchical Data Apps.pptxPoojitha B
 
Microsoft Dynamics 365 IA - Copilot/ Fabric
Microsoft Dynamics 365 IA - Copilot/ FabricMicrosoft Dynamics 365 IA - Copilot/ Fabric
Microsoft Dynamics 365 IA - Copilot/ FabricJuan Fabian
 
SATToSE_2023_Presentation_slideshare.pdf
SATToSE_2023_Presentation_slideshare.pdfSATToSE_2023_Presentation_slideshare.pdf
SATToSE_2023_Presentation_slideshare.pdfnatarajan8993
 
BotSE2022-Natarajan.pdf
BotSE2022-Natarajan.pdfBotSE2022-Natarajan.pdf
BotSE2022-Natarajan.pdfnatarajan8993
 
owasp top 10 security risk categories and CWE
owasp top 10 security risk categories and CWEowasp top 10 security risk categories and CWE
owasp top 10 security risk categories and CWEArun Voleti
 
India's_Generative_AI_Startup_Landscape_Report_2023_Inc42 (1).pdf
India's_Generative_AI_Startup_Landscape_Report_2023_Inc42 (1).pdfIndia's_Generative_AI_Startup_Landscape_Report_2023_Inc42 (1).pdf
India's_Generative_AI_Startup_Landscape_Report_2023_Inc42 (1).pdfgranitesrijan
 
Manual de la Mezcladora SoundCraft Notepad -12Fx
Manual de la Mezcladora SoundCraft Notepad -12FxManual de la Mezcladora SoundCraft Notepad -12Fx
Manual de la Mezcladora SoundCraft Notepad -12Fxjavierdavidvelasco17
 
Get Your Hands Off the Teams Work.pdf
Get Your Hands Off the Teams Work.pdfGet Your Hands Off the Teams Work.pdf
Get Your Hands Off the Teams Work.pdfAngela Johnson
 
Steps to Build a PWA with Odoo.pdf
Steps to Build a PWA with Odoo.pdfSteps to Build a PWA with Odoo.pdf
Steps to Build a PWA with Odoo.pdfayushinwizards
 
100 TOOLS TO MEASURE AND ANALYSE YOUR DIGITAL MARKETING EFFORTS
100 TOOLS TO MEASURE AND ANALYSE YOUR DIGITAL MARKETING EFFORTS100 TOOLS TO MEASURE AND ANALYSE YOUR DIGITAL MARKETING EFFORTS
100 TOOLS TO MEASURE AND ANALYSE YOUR DIGITAL MARKETING EFFORTSi-engage
 

Recently uploaded (20)

unit I lecture 2 - Software Engineering Ethics - Software Process.pdf
unit I lecture 2 - Software Engineering Ethics - Software Process.pdfunit I lecture 2 - Software Engineering Ethics - Software Process.pdf
unit I lecture 2 - Software Engineering Ethics - Software Process.pdf
 
Self scaling Multi cloud nomad workloads
Self scaling Multi cloud nomad workloadsSelf scaling Multi cloud nomad workloads
Self scaling Multi cloud nomad workloads
 
Microsoft 365 De Security pdf
Microsoft 365 De Security pdfMicrosoft 365 De Security pdf
Microsoft 365 De Security pdf
 
unit 1 lecture 1 - Introduction - Software Engineering Myths.pdf
unit 1 lecture 1 - Introduction - Software Engineering Myths.pdfunit 1 lecture 1 - Introduction - Software Engineering Myths.pdf
unit 1 lecture 1 - Introduction - Software Engineering Myths.pdf
 
MSR2022_Hackathon.pdf
MSR2022_Hackathon.pdfMSR2022_Hackathon.pdf
MSR2022_Hackathon.pdf
 
unit I lecture 5 - Software Development Life Cycle.pdf
unit I lecture 5 - Software Development Life Cycle.pdfunit I lecture 5 - Software Development Life Cycle.pdf
unit I lecture 5 - Software Development Life Cycle.pdf
 
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
 
unit I lecture 3 - Software Process Models.pdf
unit I lecture 3 - Software Process Models.pdfunit I lecture 3 - Software Process Models.pdf
unit I lecture 3 - Software Process Models.pdf
 
App Builder - Hierarchical Data Apps.pptx
App Builder - Hierarchical Data Apps.pptxApp Builder - Hierarchical Data Apps.pptx
App Builder - Hierarchical Data Apps.pptx
 
Microsoft Dynamics 365 IA - Copilot/ Fabric
Microsoft Dynamics 365 IA - Copilot/ FabricMicrosoft Dynamics 365 IA - Copilot/ Fabric
Microsoft Dynamics 365 IA - Copilot/ Fabric
 
Features of IETM Software -Code and Pixels
Features of IETM Software -Code and PixelsFeatures of IETM Software -Code and Pixels
Features of IETM Software -Code and Pixels
 
SATToSE_2023_Presentation_slideshare.pdf
SATToSE_2023_Presentation_slideshare.pdfSATToSE_2023_Presentation_slideshare.pdf
SATToSE_2023_Presentation_slideshare.pdf
 
BotSE2022-Natarajan.pdf
BotSE2022-Natarajan.pdfBotSE2022-Natarajan.pdf
BotSE2022-Natarajan.pdf
 
owasp top 10 security risk categories and CWE
owasp top 10 security risk categories and CWEowasp top 10 security risk categories and CWE
owasp top 10 security risk categories and CWE
 
India's_Generative_AI_Startup_Landscape_Report_2023_Inc42 (1).pdf
India's_Generative_AI_Startup_Landscape_Report_2023_Inc42 (1).pdfIndia's_Generative_AI_Startup_Landscape_Report_2023_Inc42 (1).pdf
India's_Generative_AI_Startup_Landscape_Report_2023_Inc42 (1).pdf
 
Manual de la Mezcladora SoundCraft Notepad -12Fx
Manual de la Mezcladora SoundCraft Notepad -12FxManual de la Mezcladora SoundCraft Notepad -12Fx
Manual de la Mezcladora SoundCraft Notepad -12Fx
 
Get Your Hands Off the Teams Work.pdf
Get Your Hands Off the Teams Work.pdfGet Your Hands Off the Teams Work.pdf
Get Your Hands Off the Teams Work.pdf
 
Steps to Build a PWA with Odoo.pdf
Steps to Build a PWA with Odoo.pdfSteps to Build a PWA with Odoo.pdf
Steps to Build a PWA with Odoo.pdf
 
Importance Of Smaket In Your Buussiness
Importance Of Smaket In Your BuussinessImportance Of Smaket In Your Buussiness
Importance Of Smaket In Your Buussiness
 
100 TOOLS TO MEASURE AND ANALYSE YOUR DIGITAL MARKETING EFFORTS
100 TOOLS TO MEASURE AND ANALYSE YOUR DIGITAL MARKETING EFFORTS100 TOOLS TO MEASURE AND ANALYSE YOUR DIGITAL MARKETING EFFORTS
100 TOOLS TO MEASURE AND ANALYSE YOUR DIGITAL MARKETING EFFORTS
 

Old Code, New Tricks