SlideShare a Scribd company logo
1 of 45
Relentless Refactoring Strategic improvement through  Domain-Driven Design Mark Rickerby
@maetl maetl.net github.com/maetl
Introducing the most popular software architecture in the world...
¶ Big Ball of Mud
 
The year 2000 in web software ,[object Object],brutalist structure organic miasma procedural PHP, Perl, ASP, etc... spaghetti code jungle  J2EE framework standards indirection and bloat
The year 2000 in web software ,[object Object],brutalist structure organic miasma
[object Object],[object Object]
Design patterns ,[object Object]
Design patterns ,[object Object]
Convention over configuration ,[object Object],app/controllers/CategoriesController.php app/controllers/ProductsController.php app/models/Category.php app/models/Product.php app/templates/categories/* app/templates/products/*
What is the model? ,[object Object],app/controllers/CategoriesController.php app/controllers/ProductsController.php app/models/Category.php app/models/Product.php app/templates/categories/* app/templates/products/*
Anemic models ,[object Object],—  the   app/models   convention is a sensible default for basic CMS driven websites —  Active Record  fools developers into thinking that persistence is the core concept of the ‘M’ in MVC
Eventual inconsistency ,[object Object],—  when the software model does not capture rich relationships and behavior,  controllers  and  templates  expedite the process of adding new functionality
Eventual inconsistency ,[object Object],app/controllers/CategoriesController.php app/controllers/CheckoutController.php app/controllers/ProductsController.php app/models/Category.php app/models/Product.php app/templates/categories/* app/templates/checkout/* app/templates/products/*
Ad-hoc development ,[object Object],—  when in doubt, developers add new behavior to existing methods —  bug-fixes and knowledge about system behavior accumulates in procedural code
Metaphor shear ,[object Object]
Ad-hoc duplication ,[object Object],$units = $config->defaultWeightUnits; $w = explode(' ', $product->weight); if ($w[1] != 'lbs') {     $weight = convertWeight(                  $w[0], $units, 'lbs'                ); } else {     $weight = $w[0]; }  
Ad-hoc behaviour ,[object Object],class Product extends ActiveRecord {    public function create($imported=false) {       if ($imported) {        // edge case when the        // product is created from        // a bulk import      }    }    }
 
¶ Domain Driven Design
Domain Driven Design ,[object Object],really a book about refactoring
Discover missing concepts ,[object Object],—  focus on conceptual integrity —  be prepared to look at things in a different way —  constantly refine the language used to describe the software domain
A unified language ,[object Object],$ mv app/models app/model  
A unified language ,[object Object],Entity~  persistent ‘noun’ with identity and state eg: product, category Value~   atomic object with no unique identity eg: price, currency, weight Service~   stateless ‘verb’, action or process Aggregate~   a cluster of related objects
Ad-hoc duplication ,[object Object],$units = $config->defaultWeightUnits; $w = explode(' ', $product->weight); if ($w[1] != 'lbs') {     $weight = convertWeight(                  $w[0], $units, 'lbs'                ); } else {     $weight = $w[0]; }
Small values  ,[object Object],app/model/Product.php app/model/Weight.php $weight = $product->weight->lbs();  
Ad-hoc behaviour ,[object Object],class Product extends ActiveRecord {     public function create($imported=false)     {        if ($imported) {         // edge case when the         // product is created from         // a bulk import       }     }      } 
Service layer ,[object Object],class ProductImporter extends BulkImporter {         public function importProduct($product)     {        // no longer an edge case     } }
Aggregate roots ,[object Object],app/model/Attribute.php app/model/AttributeValue.php app/model/Product.php app/model/ProductAttribute.php app/model/ProductDetails.php app/model/Sku.php class Product extends Aggregate {}
Benefits of a richer model ,[object Object],—  easier to localize changes when behavior and data are close together —  negotiate complexity with precise language —  objects have a single responsibility; easier to understand and maintain
Design is continuous ,[object Object],—  models are dynamic; always changing and growing —  models are explanatory; define domain knowledge in code
Ambiguities ,[object Object],—  avoid trying to build a monolithic model that captures every aspect of the domain —  tackle ambiguity by grouping the model into  Bounded Contexts
Model namespace ,[object Object],app/model/ collections /ProductList.php app/model/ entities /Product.php app/model/ services /ShippingProvider.php app/model/ services /TaxRate.php app/model/ values /Weight.php app/model/ values /Price.php  
Model namespace ,[object Object],app/model/ Invoicing /TaxRate.php app/model/ Shipping /Provider.php app/model/ Storefront /Price.php app/model/ Storefront /Product.php app/model/ Storefront /ProductList.php app/model/ Storefront /Weight.php  
Shared core ,[object Object],app/model/Core/Price.php app/model/Core/Weight.php app/model/Core/Product.php app/model/Invoicing/TaxRate.php app/model/Shipping/Provider.php app/model/Storefront/ProductList.php
Context map ,[object Object]
Homonyms ,[object Object],—  the same word is used to describe many different concepts —  the same concept has many different responsibilities
Bounded contexts ,[object Object],app/model/Core/Price.php app/model/Core/Weight.php app/model/Core/Product.php app/model/Invoicing/TaxRate.php app/model/Shipping/Product.php app/model/Shipping/Provider.php app/model/Storefront/Product.php app/model/Storefront/ProductList.php
Anticorruption layer ,[object Object]
Refactoring is design ,[object Object]
Refactoring is design ,[object Object]
Application boundaries ,[object Object],Introduce Strangler~ new abstraction that overtakes the host system like a strangling vine Extract Service~ spawn a separate application by extracting a service from the original system
Summary ,[object Object],Separate infrastructure from the model Use precise language to define domain concepts Model complex behaviour in bounded contexts
Thanks Mark Rickerby, 2011

More Related Content

Viewers also liked

Viewers also liked (12)

2 hrly eb ch 05 business model
2 hrly eb ch 05 business model2 hrly eb ch 05 business model
2 hrly eb ch 05 business model
 
Carpet manufacturers
Carpet manufacturersCarpet manufacturers
Carpet manufacturers
 
Class 5
Class 5Class 5
Class 5
 
Phase 1 Task 2 Business Models
Phase 1 Task 2 Business ModelsPhase 1 Task 2 Business Models
Phase 1 Task 2 Business Models
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
E business models
E business modelsE business models
E business models
 
Brownfield Domain Driven Design
Brownfield Domain Driven DesignBrownfield Domain Driven Design
Brownfield Domain Driven Design
 
E Commerce Presentation
E  Commerce  PresentationE  Commerce  Presentation
E Commerce Presentation
 
E-Commerce PPT
E-Commerce PPTE-Commerce PPT
E-Commerce PPT
 
E commerce business models
E commerce business modelsE commerce business models
E commerce business models
 
E commerce ppt
E commerce pptE commerce ppt
E commerce ppt
 
E commerce
E commerceE commerce
E commerce
 

Similar to Relentless Refactoring

Refactoring Large Web Applications with Backbone.js
Refactoring Large Web Applications with Backbone.jsRefactoring Large Web Applications with Backbone.js
Refactoring Large Web Applications with Backbone.jsStacy London
 
Refactor Large applications with Backbone
Refactor Large applications with BackboneRefactor Large applications with Backbone
Refactor Large applications with BackboneColdFusionConference
 
Refactor Large apps with Backbone
Refactor Large apps with BackboneRefactor Large apps with Backbone
Refactor Large apps with BackbonedevObjective
 
Beyond MVC: from Model to Domain
Beyond MVC: from Model to DomainBeyond MVC: from Model to Domain
Beyond MVC: from Model to DomainJeremy Cook
 
React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)Chiew Carol
 
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!Kacper Gunia
 
Beyond MVC: from Model to Domain
Beyond MVC: from Model to DomainBeyond MVC: from Model to Domain
Beyond MVC: from Model to DomainJeremy Cook
 
The Magic's in the Glue: Daniela Florescu Presentation on XQuery and the Cloud
The Magic's in the Glue:  Daniela Florescu Presentation on XQuery and the CloudThe Magic's in the Glue:  Daniela Florescu Presentation on XQuery and the Cloud
The Magic's in the Glue: Daniela Florescu Presentation on XQuery and the CloudDave Kellogg
 
Introduction to Plugin Programming, WordCamp Miami 2011
Introduction to Plugin Programming, WordCamp Miami 2011Introduction to Plugin Programming, WordCamp Miami 2011
Introduction to Plugin Programming, WordCamp Miami 2011David Carr
 
Rp 6 session 2 naresh bhatia
Rp 6  session 2 naresh bhatiaRp 6  session 2 naresh bhatia
Rp 6 session 2 naresh bhatiasapientindia
 
From Backbone to Ember and Back(bone) Again
From Backbone to Ember and Back(bone) AgainFrom Backbone to Ember and Back(bone) Again
From Backbone to Ember and Back(bone) Againjonknapp
 
Modular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJSModular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJSGunnar Hillert
 
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)arcware
 
SeedStack feature tour
SeedStack feature tourSeedStack feature tour
SeedStack feature tourSeedStack
 
Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#Pascal Laurin
 
Behaviour driven infrastructure
Behaviour driven infrastructureBehaviour driven infrastructure
Behaviour driven infrastructureLindsay Holmwood
 

Similar to Relentless Refactoring (20)

Refactoring Large Web Applications with Backbone.js
Refactoring Large Web Applications with Backbone.jsRefactoring Large Web Applications with Backbone.js
Refactoring Large Web Applications with Backbone.js
 
Refactor Large applications with Backbone
Refactor Large applications with BackboneRefactor Large applications with Backbone
Refactor Large applications with Backbone
 
Refactor Large apps with Backbone
Refactor Large apps with BackboneRefactor Large apps with Backbone
Refactor Large apps with Backbone
 
Beyond MVC: from Model to Domain
Beyond MVC: from Model to DomainBeyond MVC: from Model to Domain
Beyond MVC: from Model to Domain
 
React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)
 
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
 
Beyond MVC: from Model to Domain
Beyond MVC: from Model to DomainBeyond MVC: from Model to Domain
Beyond MVC: from Model to Domain
 
Domain Event - The Hidden Gem of DDD
Domain Event - The Hidden Gem of DDDDomain Event - The Hidden Gem of DDD
Domain Event - The Hidden Gem of DDD
 
The Magic's in the Glue: Daniela Florescu Presentation on XQuery and the Cloud
The Magic's in the Glue:  Daniela Florescu Presentation on XQuery and the CloudThe Magic's in the Glue:  Daniela Florescu Presentation on XQuery and the Cloud
The Magic's in the Glue: Daniela Florescu Presentation on XQuery and the Cloud
 
Introduction to Plugin Programming, WordCamp Miami 2011
Introduction to Plugin Programming, WordCamp Miami 2011Introduction to Plugin Programming, WordCamp Miami 2011
Introduction to Plugin Programming, WordCamp Miami 2011
 
Rp 6 session 2 naresh bhatia
Rp 6  session 2 naresh bhatiaRp 6  session 2 naresh bhatia
Rp 6 session 2 naresh bhatia
 
From Backbone to Ember and Back(bone) Again
From Backbone to Ember and Back(bone) AgainFrom Backbone to Ember and Back(bone) Again
From Backbone to Ember and Back(bone) Again
 
Having Fun with Play
Having Fun with PlayHaving Fun with Play
Having Fun with Play
 
Modular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJSModular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJS
 
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
 
SeedStack feature tour
SeedStack feature tourSeedStack feature tour
SeedStack feature tour
 
Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#
 
Behaviour driven infrastructure
Behaviour driven infrastructureBehaviour driven infrastructure
Behaviour driven infrastructure
 
AngularJs Crash Course
AngularJs Crash CourseAngularJs Crash Course
AngularJs Crash Course
 
Automation for the Humans
Automation for the HumansAutomation for the Humans
Automation for the Humans
 

More from Mark Rickerby

Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven DevelopmentMark Rickerby
 
Readme Driven Development
Readme Driven DevelopmentReadme Driven Development
Readme Driven DevelopmentMark Rickerby
 
Evolving Software Patterns
Evolving Software PatternsEvolving Software Patterns
Evolving Software PatternsMark Rickerby
 
Understanding Uncertainty
Understanding UncertaintyUnderstanding Uncertainty
Understanding UncertaintyMark Rickerby
 
Getting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe TestingGetting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe TestingMark Rickerby
 
The Relativity of Rates
The Relativity of RatesThe Relativity of Rates
The Relativity of RatesMark Rickerby
 
Adaptive Design & Rapid Prototyping
Adaptive Design & Rapid PrototypingAdaptive Design & Rapid Prototyping
Adaptive Design & Rapid PrototypingMark Rickerby
 

More from Mark Rickerby (10)

The D3 Toolbox
The D3 ToolboxThe D3 Toolbox
The D3 Toolbox
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
 
Readme Driven Development
Readme Driven DevelopmentReadme Driven Development
Readme Driven Development
 
Evolving Software Patterns
Evolving Software PatternsEvolving Software Patterns
Evolving Software Patterns
 
NetArt History
NetArt HistoryNetArt History
NetArt History
 
Understanding Uncertainty
Understanding UncertaintyUnderstanding Uncertainty
Understanding Uncertainty
 
Getting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe TestingGetting to Grips with SilverStripe Testing
Getting to Grips with SilverStripe Testing
 
Historiographica
HistoriographicaHistoriographica
Historiographica
 
The Relativity of Rates
The Relativity of RatesThe Relativity of Rates
The Relativity of Rates
 
Adaptive Design & Rapid Prototyping
Adaptive Design & Rapid PrototypingAdaptive Design & Rapid Prototyping
Adaptive Design & Rapid Prototyping
 

Recently uploaded

Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 

Recently uploaded (20)

Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 

Relentless Refactoring