SlideShare a Scribd company logo
1CONFIDENTIAL
Where refactoring meets
Big $$$
First steps
2CONFIDENTIAL
RULES ;)
REFACTORING
3CONFIDENTIAL
By The U.S. Army
4CONFIDENTIAL
Contact informationContact information
@michalgruca
michal.gruca@gmail.com
www.rits.pl
5CONFIDENTIAL
WHO REFACTORS CODE
QUESTION
6CONFIDENTIAL
ON A DAILY BASIS ☺
7CONFIDENTIAL
WHO PLANS REFACTORINGS?
QUESTION
8CONFIDENTIAL
ACADEMIA TIME
REFACTORING
9CONFIDENTIAL
What is refactoringWhat is refactoring
10CONFIDENTIAL
==
Meanwhile in perfect worldMeanwhile in perfect world
11CONFIDENTIAL
• It’s hard to maintain
• Changes in domain are coming
– New requirements are impossible to implement
• There are no tests (sic!)
• Development of new features is so slow
• System is slow
• You just don’t want to go to work anymore
– (nor your colleagues)
Why to refactorWhy to refactor
12CONFIDENTIAL
EVERYDAY REFACTORINGS
REFACTORING TYPES
13CONFIDENTIAL
Everyday refactoring :: DefinitionEveryday refactoring :: Definition
• Rename variable / method / class names
• Extract class / method / variable / parameter
• Move code around
• Removing duplication (DRY)
• Removing dead code
• Cleaning up comments
• Improving encapsulation
• etc
http://www.infoq.com/articles/natural-course-refactoring
14CONFIDENTIAL
• Increases readability of code
• Enables understanding of code
• Introduces patterns
• Simplifies/allows testing
• Cleans up potential, simple, programming mistakes
• Fully supported by IDE in any language
• Is fast, does not need to be planned
• Does not require process, can be done on a go
• Is safe and non-intrusive
– But not always!
Everyday refactoring :: ProsEveryday refactoring :: Pros
By MazeNL77
15CONFIDENTIAL
• In big ball of mud is not always safe!
– Watch out for reflection!
• Without tests and tools (IDE) can be very dangerous
• May be source of funky bugs
• No process, not all developers will adapt
• If backed with restrictive tools, can be counterproductive
– Pre-hooks anyone?
Everyday refactoring :: ConsEveryday refactoring :: Cons
By Indi Samarajiva
16CONFIDENTIAL
BIG BANG
REFACTORING TYPES
17CONFIDENTIAL
Big Bang :: DefinitionBig Bang :: Definition
By Xtraterestrial
18CONFIDENTIAL
• Allows for a fresh start
– New technology stack
– Clean architecture
– Better domain model
• Can be a serious contributor for finding a new job ;)
ProsPros
By MazeNL77
19CONFIDENTIAL
ConsCons
By Indi Samarajiva
20CONFIDENTIAL
ConsCons
• We don’t deliver anything for many, many sprints
• World moves forward, our application does not
• Business is unhappy
• Success of the new project is not guaranteed
By Indi Samarajiva
21CONFIDENTIAL
ConsCons
By Indi Samarajiva
22CONFIDENTIAL
Big Bang :: When to do itBig Bang :: When to do it
By Wayne Ray
23CONFIDENTIAL
SPROUTING
REFACTORING TYPES
24CONFIDENTIAL
• Proposed by Michael Feathers in
“Working Effectively with Legacy Code”
– To refactor methods
– And classes
• Can be used with whole packages, modules,
components, applications
Sprouting :: DefinitionSprouting :: Definition
25CONFIDENTIAL
• Introducing new code in testable manner
• Separate abstractions
• Prevents rooting of new functionalities
• Enables change of architecture
• Allows to update technology stack
• Allows to build independent modules and applications
ProsPros
By MazeNL77
26CONFIDENTIAL
• Requires much more work, people and resources than
standard feature release
• May add serious latency to functions and slow down the
whole system
• Adds more abstraction layers to the project
ConsCons
By Indi Samarajiva
27CONFIDENTIAL
GET PERMISSION
REFACTORING
28CONFIDENTIAL
Decide what to measureDecide what to measure
• How many commits / sprint
• How many commits / file (how often it changes)
– By different users/ In one sprint
• Cyclomatic complexity
• Code coverage
• LOC per sprint
• Findbugs issues
• Requests / second
• Resource (Memory/CPU) usage
• Lead time (how long its on board)
By Martinvl
29CONFIDENTIAL
Measure!Measure!
• Velocity
• Build time
• Number of failing builds
• Number of merges
– +time of each merge
• ROI / sprint
• Code quality
• Freeze time
• Response time
• Maximum load
30CONFIDENTIAL
31CONFIDENTIAL
HOW TO MEASURE
REFACTORING
32CONFIDENTIAL
33CONFIDENTIAL
34CONFIDENTIAL
QA and SupportQA and Support
35CONFIDENTIAL
36CONFIDENTIAL
Show & discussShow & discuss
• Business like numbers
– Even if they don’t understand them
• Setup goals / milestones
• Try to use work time
• Setup day / sprint of excellence
• Organize hackathon / code retreat
• Share knowledge and train colleagues
• Set standards
– And enforce them with pre-commit hooks ;)
37CONFIDENTIAL
Read list :: Build a book clubRead list :: Build a book club
38CONFIDENTIAL
EXAMPLES
39CONFIDENTIAL
• Quarter of development followed by phase 2 with up to 6 months of work for team
– And short break between them
• Funky structure of domain model
– TreeMap<Integer, Map<TabelType, Map<RecordType, List<TableId>>>>
• Only creator understood the design
Everyday refactoring :: Example -> Planned refactoringsEveryday refactoring :: Example -> Planned refactorings
40CONFIDENTIAL
• ~5 year old system
• Build on top of 5+ year old code base
• Sudden plan to change business model without consulting with developers
– Business seen that as a simple change (we have everything)
– Development seen a lot of dependencies
– Unable to do as a simple change request
Big Bang :: Real world example -> Domain changeBig Bang :: Real world example -> Domain change
41CONFIDENTIAL
Sprouting :: Real world exampleSprouting :: Real world example
42CONFIDENTIAL
Sprouting :: Real world exampleSprouting :: Real world example
By Crochetbug
43CONFIDENTIAL
Sprouting :: Real world exampleSprouting :: Real world example
44CONFIDENTIAL
QA SupportQA Support
Case:
Releases are done each week, a lot of DB changes are tangled in, QA has to support each release.
Developers get often issues with not building app, due to DB schema differences. They ask QA for support to get new
schema after each release. A lot of people time is being wasted.
45CONFIDENTIAL
Case:
Product did not have versioning in first place. It was build
by ant only with some hacks to introduce new build tool:
Maven. Whole thing was in one version, always.
One of hacks involved adding qualifier to allow testing on
different environments.
versioningversioning
46CONFIDENTIAL
• Don’t allow that to happen
• Refactoring is everyone business
• Small group of experts
• Not everyone care about code quality
• You may end up with huge rotation
• Ideas are not evenly distributed between teams
Antipattern – refactoring teamAntipattern – refactoring team
47CONFIDENTIAL
• Happens on regular basis
• Everyone participate
• Enables the everyday refactorings
• Does not have to be only about TODOs (duh ;))
TODO huntingTODO hunting
48CONFIDENTIAL
49CONFIDENTIAL
I love your feedback! ☺I love your feedback! ☺
@michalgruca
michal.gruca@gmail.com
www.rits.pl

More Related Content

What's hot

WTF is GitOps and Why You Should Care?
WTF is GitOps and Why You Should Care?WTF is GitOps and Why You Should Care?
WTF is GitOps and Why You Should Care?
Weaveworks
 

What's hot (20)

Open design at large scale
Open design at large scaleOpen design at large scale
Open design at large scale
 
Docker New York City: From GitOps to a scalable CI/CD Pattern for Kubernetes
Docker New York City: From GitOps to a scalable CI/CD Pattern for KubernetesDocker New York City: From GitOps to a scalable CI/CD Pattern for Kubernetes
Docker New York City: From GitOps to a scalable CI/CD Pattern for Kubernetes
 
Continuous integration at CartoDB March '16
Continuous integration at CartoDB March '16Continuous integration at CartoDB March '16
Continuous integration at CartoDB March '16
 
10 years of #devopsdays, but what have we really learned ?
10 years of #devopsdays, but what have we really learned ? 10 years of #devopsdays, but what have we really learned ?
10 years of #devopsdays, but what have we really learned ?
 
DevOps and the Importance of Single Source Code Repos 
DevOps and the Importance of Single Source Code Repos DevOps and the Importance of Single Source Code Repos 
DevOps and the Importance of Single Source Code Repos 
 
DevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaert
DevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaertDevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaert
DevOps Days Kyiv 2019 -- continuous Infrafirstructure First //Kris buytaert
 
Icebreaker with DevOps
Icebreaker with DevOpsIcebreaker with DevOps
Icebreaker with DevOps
 
WTF is GitOps and Why You Should Care?
WTF is GitOps and Why You Should Care?WTF is GitOps and Why You Should Care?
WTF is GitOps and Why You Should Care?
 
Continuous Infrastructure First
Continuous Infrastructure FirstContinuous Infrastructure First
Continuous Infrastructure First
 
The journey to GitOps
The journey to GitOpsThe journey to GitOps
The journey to GitOps
 
Getting your project_started
Getting your project_startedGetting your project_started
Getting your project_started
 
Continuous Testing in DevOps
Continuous Testing in DevOpsContinuous Testing in DevOps
Continuous Testing in DevOps
 
Deploying your SaaS stack OnPrem
Deploying your SaaS stack OnPremDeploying your SaaS stack OnPrem
Deploying your SaaS stack OnPrem
 
Go Faster - Remove Inhibitors to Rapid Innovation
Go Faster - Remove Inhibitors to Rapid InnovationGo Faster - Remove Inhibitors to Rapid Innovation
Go Faster - Remove Inhibitors to Rapid Innovation
 
Application Security Epistemology in a Continuous Delivery World
Application Security Epistemology in a Continuous Delivery WorldApplication Security Epistemology in a Continuous Delivery World
Application Security Epistemology in a Continuous Delivery World
 
Flagger: Istio Progressive Delivery Operator
Flagger: Istio Progressive Delivery OperatorFlagger: Istio Progressive Delivery Operator
Flagger: Istio Progressive Delivery Operator
 
Devops is Dead, Long live Devops
Devops is Dead, Long live DevopsDevops is Dead, Long live Devops
Devops is Dead, Long live Devops
 
Docs or it didn’t happen
Docs or it didn’t happenDocs or it didn’t happen
Docs or it didn’t happen
 
Gitops Hands On
Gitops Hands OnGitops Hands On
Gitops Hands On
 
Continuous Infrastructure First
Continuous Infrastructure FirstContinuous Infrastructure First
Continuous Infrastructure First
 

Viewers also liked

Viewers also liked (14)

Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
 
Peter Palvolgyi: "Overview of Life Long Learning Programmes 2013"
Peter Palvolgyi: "Overview of Life Long Learning Programmes 2013"Peter Palvolgyi: "Overview of Life Long Learning Programmes 2013"
Peter Palvolgyi: "Overview of Life Long Learning Programmes 2013"
 
Nieuwe website PGZ Zaandam
Nieuwe website PGZ ZaandamNieuwe website PGZ Zaandam
Nieuwe website PGZ Zaandam
 
Marek Kosycarz: "Supporting Youth Opportunity in Europe"
Marek Kosycarz: "Supporting Youth Opportunity in Europe"Marek Kosycarz: "Supporting Youth Opportunity in Europe"
Marek Kosycarz: "Supporting Youth Opportunity in Europe"
 
Universo y Cambio
Universo y CambioUniverso y Cambio
Universo y Cambio
 
Ficha informativa_ Futur Simple
Ficha informativa_ Futur SimpleFicha informativa_ Futur Simple
Ficha informativa_ Futur Simple
 
Theme Statements
Theme StatementsTheme Statements
Theme Statements
 
Revisão de matéria
Revisão de matériaRevisão de matéria
Revisão de matéria
 
Ficha formativa_ Relação entre palavras
Ficha formativa_ Relação entre palavrasFicha formativa_ Relação entre palavras
Ficha formativa_ Relação entre palavras
 
Cordales
CordalesCordales
Cordales
 
Cefalometria
CefalometriaCefalometria
Cefalometria
 
Neoclassicism and romanticism
Neoclassicism and romanticismNeoclassicism and romanticism
Neoclassicism and romanticism
 
Arts of the neo classical period (1780-1840)
Arts of the neo classical period (1780-1840)Arts of the neo classical period (1780-1840)
Arts of the neo classical period (1780-1840)
 
Arts of the Neo-Classical and Romantic periods
Arts of the Neo-Classical and Romantic periodsArts of the Neo-Classical and Romantic periods
Arts of the Neo-Classical and Romantic periods
 

Similar to Where refactoring meets big $$$

Similar to Where refactoring meets big $$$ (20)

4Developers 2015: Refactoring za duże pieniądze, pierwsze kroki - Michał Gruca
4Developers 2015: Refactoring za duże pieniądze, pierwsze kroki - Michał Gruca4Developers 2015: Refactoring za duże pieniądze, pierwsze kroki - Michał Gruca
4Developers 2015: Refactoring za duże pieniądze, pierwsze kroki - Michał Gruca
 
Continuous Deployment To The Cloud
Continuous Deployment To The CloudContinuous Deployment To The Cloud
Continuous Deployment To The Cloud
 
Marketing data lake in the cloud
Marketing data lake in the cloud Marketing data lake in the cloud
Marketing data lake in the cloud
 
The Unicorn Project and the Five Ideals.pdf
The Unicorn Project and the Five Ideals.pdfThe Unicorn Project and the Five Ideals.pdf
The Unicorn Project and the Five Ideals.pdf
 
Delivery Pipelines as a First Class Citizen @deliverAgile2019
Delivery Pipelines as a First Class Citizen @deliverAgile2019Delivery Pipelines as a First Class Citizen @deliverAgile2019
Delivery Pipelines as a First Class Citizen @deliverAgile2019
 
Metrics-driven Continuous Delivery
Metrics-driven Continuous DeliveryMetrics-driven Continuous Delivery
Metrics-driven Continuous Delivery
 
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
 
Get your Project back in Shape!
Get your Project back in Shape!Get your Project back in Shape!
Get your Project back in Shape!
 
Legacy On Premise Apps Got You Down? No Problem - DevOps for All
Legacy On Premise Apps Got You Down? No Problem - DevOps for AllLegacy On Premise Apps Got You Down? No Problem - DevOps for All
Legacy On Premise Apps Got You Down? No Problem - DevOps for All
 
GlobalLogic Azure TechTalk ONLINE “Marketing Data Lake in Azure”
GlobalLogic Azure TechTalk ONLINE “Marketing Data Lake in Azure”GlobalLogic Azure TechTalk ONLINE “Marketing Data Lake in Azure”
GlobalLogic Azure TechTalk ONLINE “Marketing Data Lake in Azure”
 
The Power Of Refactoring (php|tek 09)
The Power Of Refactoring (php|tek 09)The Power Of Refactoring (php|tek 09)
The Power Of Refactoring (php|tek 09)
 
Practical Methods for Adopting DevOps - Michael Stahnke
Practical Methods for Adopting DevOps - Michael StahnkePractical Methods for Adopting DevOps - Michael Stahnke
Practical Methods for Adopting DevOps - Michael Stahnke
 
How to Better Manage Technical Debt While Innovating on DevOps
How to Better Manage Technical Debt While Innovating on DevOpsHow to Better Manage Technical Debt While Innovating on DevOps
How to Better Manage Technical Debt While Innovating on DevOps
 
2019 Top Lessons Learned Since the Phoenix Project Was Released
2019 Top Lessons Learned Since the Phoenix Project Was Released2019 Top Lessons Learned Since the Phoenix Project Was Released
2019 Top Lessons Learned Since the Phoenix Project Was Released
 
Automated Testing Environments With Kubernetes & GitLab
Automated Testing Environments With Kubernetes & GitLabAutomated Testing Environments With Kubernetes & GitLab
Automated Testing Environments With Kubernetes & GitLab
 
Continuous Deployment of your Application @JUGtoberfest
Continuous Deployment of your Application @JUGtoberfestContinuous Deployment of your Application @JUGtoberfest
Continuous Deployment of your Application @JUGtoberfest
 
Integrating RightScale, Windows, and .NET for Fun and Profit - RightScale Com...
Integrating RightScale, Windows, and .NET for Fun and Profit - RightScale Com...Integrating RightScale, Windows, and .NET for Fun and Profit - RightScale Com...
Integrating RightScale, Windows, and .NET for Fun and Profit - RightScale Com...
 
Growing Software and Growing Ourselves
Growing Software and Growing OurselvesGrowing Software and Growing Ourselves
Growing Software and Growing Ourselves
 
Refactor your code: when, why and how?
Refactor your code: when, why and how?Refactor your code: when, why and how?
Refactor your code: when, why and how?
 
Boston Data Engineering: Kedro Python Framework for Data Science: Overview an...
Boston Data Engineering: Kedro Python Framework for Data Science: Overview an...Boston Data Engineering: Kedro Python Framework for Data Science: Overview an...
Boston Data Engineering: Kedro Python Framework for Data Science: Overview an...
 

More from Michał Gruca

More from Michał Gruca (9)

Byc liderem - BoilingFrogs 18
Byc liderem - BoilingFrogs 18Byc liderem - BoilingFrogs 18
Byc liderem - BoilingFrogs 18
 
Developer career
Developer careerDeveloper career
Developer career
 
Developer career - I've become senior, what's next?
Developer career - I've become senior, what's next?Developer career - I've become senior, what's next?
Developer career - I've become senior, what's next?
 
Kariera developera
Kariera developeraKariera developera
Kariera developera
 
Impostor syndrome - Dlaczego na githubie i blogu mam pusto
Impostor syndrome - Dlaczego na githubie i blogu mam pustoImpostor syndrome - Dlaczego na githubie i blogu mam pusto
Impostor syndrome - Dlaczego na githubie i blogu mam pusto
 
Continous improvement
Continous improvementContinous improvement
Continous improvement
 
Continous improvement
Continous improvementContinous improvement
Continous improvement
 
Nashorn, what is the whole buzz about
Nashorn, what is the whole buzz aboutNashorn, what is the whole buzz about
Nashorn, what is the whole buzz about
 
Pozytywistyczny developer - czyli ciągła praca u podstaw
Pozytywistyczny developer - czyli ciągła praca u podstawPozytywistyczny developer - czyli ciągła praca u podstaw
Pozytywistyczny developer - czyli ciągła praca u podstaw
 

Recently uploaded

AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
Alluxio, Inc.
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 

Recently uploaded (20)

AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
 
Breaking the Code : A Guide to WhatsApp Business API.pdf
Breaking the Code : A Guide to WhatsApp Business API.pdfBreaking the Code : A Guide to WhatsApp Business API.pdf
Breaking the Code : A Guide to WhatsApp Business API.pdf
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
GraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysisGraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysis
 
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfA Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
 

Where refactoring meets big $$$