SlideShare a Scribd company logo
1 of 29
Building a Boomerang that doesn't come back
(to haunt you)
BOL.COM SPACES SUMMIT 2017
By Mattijs Meiboom ( )mmeiboom@bol.com
3 years at bol.com
So ware Engineer (Fulfilment Space)
Team 21b (C4)
Today: Boomerang!
About me
Provides a structure to the code base
Helps us develop & test in isolation
Protects us against the scary world
outside
WE WANT SOMETHING THAT…
HEXAGONAL ARCHITECTURE
TEST AUTONOMY
“Allow an application to equally be
driven by users, programs, automated
tests or batch scripts, and to be
developed and tested in isolation from
its eventual run-time devices and
databases.”— Alistair Cockburn
“Improve testability by building tests
that are reliable, give fast feedback,
are independent and isolated.”
Execute a task on a single node at some interval
Scheduling
Leadership election
Internal locking
AN EXAMPLE: JOB SCHEDULING
AN EXAMPLE: JOB SCHEDULING
public interface Job {
void run();
}
AN EXAMPLE: JOB SCHEDULING
public interface Scheduler {
void register(Job job);
}
AN EXAMPLE: JOB SCHEDULING
public class ReceivedReturnsJob implements Job {
private final ReceivedReturnsCollector collector;
public ReceivedReturnsJob (
ReceivedReturnsCollector collector,
Scheduler scheduler
) {
this.collector = collector;
scheduler.register(this);
}
@Override
public void run() {
collector.collect();
}
AN EXAMPLE: JOB SCHEDULING
public class SingleNodeScheduler extends ... implements Scheduler {
@Override
public void register(Job job) {
jobs.add(job);
}
@Override
protected void onAcquiredLeadership() {
jobs.forEach(this::scheduleJob);
}
private void scheduleJob(Job job) {
Subscription subscription = Observable.interval(...)
.subscribe(timeout -> { // hiding locking and other details
job.run();
});
}
}
HEXAGONAL ARCHITECTURE
TEST AUTONOMY
“Allow an application to equally be
driven by users, programs, automated
tests or batch scripts, and to be
developed and tested in isolation from
its eventual run-time devices and
databases.”— Alistair Cockburn
“Improve testability by building tests
that are reliable, give fast feedback,
are independent and isolated.”
Structure
Separation of responsibilites…
…also for testing
It hasn’t been perfect, but the common ground proves
very valuable.
WHAT HAS IT BROUGHT US SO FAR?
RESOURCES
Freeman & Pryce — Growing object oriented so ware
Pryce — Visualising Test Terminology
Techlab — How structure helps me to maintain so ware
Confluence — Test Autonomy
Questions?
BOL.COM SPACES SUMMIT 2017
Mattijs Meiboom ( )mmeiboom@bol.com

More Related Content

Similar to Building a Boomerang that doesn’t come back (to haunt you) - Mattijs Meiboom

Ivan Pashko - Simplifying test automation with design patterns
Ivan Pashko - Simplifying test automation with design patternsIvan Pashko - Simplifying test automation with design patterns
Ivan Pashko - Simplifying test automation with design patternsIevgenii Katsan
 
RESEARCH ON DISTRIBUTED SOFTWARE TESTING PLATFORM BASED ON CLOUD RESOURCE
RESEARCH ON DISTRIBUTED SOFTWARE TESTING  PLATFORM BASED ON CLOUD RESOURCERESEARCH ON DISTRIBUTED SOFTWARE TESTING  PLATFORM BASED ON CLOUD RESOURCE
RESEARCH ON DISTRIBUTED SOFTWARE TESTING PLATFORM BASED ON CLOUD RESOURCEijcses
 
SiriusCon2016 - Modelling Spacecraft On-board Software with Sirius
SiriusCon2016 - Modelling Spacecraft On-board Software with SiriusSiriusCon2016 - Modelling Spacecraft On-board Software with Sirius
SiriusCon2016 - Modelling Spacecraft On-board Software with SiriusObeo
 
Kirill Rozin - Practical Wars for Automatization
Kirill Rozin - Practical Wars for AutomatizationKirill Rozin - Practical Wars for Automatization
Kirill Rozin - Practical Wars for AutomatizationSergey Arkhipov
 
YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»
YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»
YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»GoQA
 
Automock: Interaction-Based Mock Code Generation
Automock: Interaction-Based Mock Code GenerationAutomock: Interaction-Based Mock Code Generation
Automock: Interaction-Based Mock Code GenerationSabrina Souto
 
Docker & ECS: Secure Nearline Execution
Docker & ECS: Secure Nearline ExecutionDocker & ECS: Secure Nearline Execution
Docker & ECS: Secure Nearline ExecutionBrennan Saeta
 
Tips for Developing and Testing IBM HATS Applications
Tips for Developing and Testing IBM HATS ApplicationsTips for Developing and Testing IBM HATS Applications
Tips for Developing and Testing IBM HATS ApplicationsStrongback Consulting
 
Method, Constructor, Method Overloading, Method Overriding, Inheritance In Java
Method, Constructor, Method Overloading, Method Overriding, Inheritance In  JavaMethod, Constructor, Method Overloading, Method Overriding, Inheritance In  Java
Method, Constructor, Method Overloading, Method Overriding, Inheritance In JavaJamsher bhanbhro
 
VT.NET 20160411: An Intro to Test Driven Development (TDD)
VT.NET 20160411: An Intro to Test Driven Development (TDD)VT.NET 20160411: An Intro to Test Driven Development (TDD)
VT.NET 20160411: An Intro to Test Driven Development (TDD)Rob Hale
 
High Performance Ajax Applications 1197671494632682 2
High Performance Ajax Applications 1197671494632682 2High Performance Ajax Applications 1197671494632682 2
High Performance Ajax Applications 1197671494632682 2Niti Chotkaew
 
High Performance Ajax Applications
High Performance Ajax ApplicationsHigh Performance Ajax Applications
High Performance Ajax ApplicationsJulien Lecomte
 
The Future is Now: Writing Automated Tests To Grow Your Code
The Future is Now: Writing Automated Tests To Grow Your CodeThe Future is Now: Writing Automated Tests To Grow Your Code
The Future is Now: Writing Automated Tests To Grow Your CodeIsaac Murchie
 
Online examination documentation
Online examination documentationOnline examination documentation
Online examination documentationWakimul Alam
 
Hadoop cluster performance profiler
Hadoop cluster performance profilerHadoop cluster performance profiler
Hadoop cluster performance profilerIhor Bobak
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven DevelopmentJohn Blum
 
Level Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With TestcontainersLevel Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With TestcontainersVMware Tanzu
 
Constructor destructor.ppt
Constructor destructor.pptConstructor destructor.ppt
Constructor destructor.pptKarthik Sekar
 

Similar to Building a Boomerang that doesn’t come back (to haunt you) - Mattijs Meiboom (20)

Ivan Pashko - Simplifying test automation with design patterns
Ivan Pashko - Simplifying test automation with design patternsIvan Pashko - Simplifying test automation with design patterns
Ivan Pashko - Simplifying test automation with design patterns
 
RESEARCH ON DISTRIBUTED SOFTWARE TESTING PLATFORM BASED ON CLOUD RESOURCE
RESEARCH ON DISTRIBUTED SOFTWARE TESTING  PLATFORM BASED ON CLOUD RESOURCERESEARCH ON DISTRIBUTED SOFTWARE TESTING  PLATFORM BASED ON CLOUD RESOURCE
RESEARCH ON DISTRIBUTED SOFTWARE TESTING PLATFORM BASED ON CLOUD RESOURCE
 
SiriusCon2016 - Modelling Spacecraft On-board Software with Sirius
SiriusCon2016 - Modelling Spacecraft On-board Software with SiriusSiriusCon2016 - Modelling Spacecraft On-board Software with Sirius
SiriusCon2016 - Modelling Spacecraft On-board Software with Sirius
 
Kirill Rozin - Practical Wars for Automatization
Kirill Rozin - Practical Wars for AutomatizationKirill Rozin - Practical Wars for Automatization
Kirill Rozin - Practical Wars for Automatization
 
YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»
YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»
YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»
 
Automock: Interaction-Based Mock Code Generation
Automock: Interaction-Based Mock Code GenerationAutomock: Interaction-Based Mock Code Generation
Automock: Interaction-Based Mock Code Generation
 
Docker & ECS: Secure Nearline Execution
Docker & ECS: Secure Nearline ExecutionDocker & ECS: Secure Nearline Execution
Docker & ECS: Secure Nearline Execution
 
Tips for Developing and Testing IBM HATS Applications
Tips for Developing and Testing IBM HATS ApplicationsTips for Developing and Testing IBM HATS Applications
Tips for Developing and Testing IBM HATS Applications
 
Method, Constructor, Method Overloading, Method Overriding, Inheritance In Java
Method, Constructor, Method Overloading, Method Overriding, Inheritance In  JavaMethod, Constructor, Method Overloading, Method Overriding, Inheritance In  Java
Method, Constructor, Method Overloading, Method Overriding, Inheritance In Java
 
VT.NET 20160411: An Intro to Test Driven Development (TDD)
VT.NET 20160411: An Intro to Test Driven Development (TDD)VT.NET 20160411: An Intro to Test Driven Development (TDD)
VT.NET 20160411: An Intro to Test Driven Development (TDD)
 
Maestro_Abstract
Maestro_AbstractMaestro_Abstract
Maestro_Abstract
 
High Performance Ajax Applications 1197671494632682 2
High Performance Ajax Applications 1197671494632682 2High Performance Ajax Applications 1197671494632682 2
High Performance Ajax Applications 1197671494632682 2
 
High Performance Ajax Applications
High Performance Ajax ApplicationsHigh Performance Ajax Applications
High Performance Ajax Applications
 
Unit tests and TDD
Unit tests and TDDUnit tests and TDD
Unit tests and TDD
 
The Future is Now: Writing Automated Tests To Grow Your Code
The Future is Now: Writing Automated Tests To Grow Your CodeThe Future is Now: Writing Automated Tests To Grow Your Code
The Future is Now: Writing Automated Tests To Grow Your Code
 
Online examination documentation
Online examination documentationOnline examination documentation
Online examination documentation
 
Hadoop cluster performance profiler
Hadoop cluster performance profilerHadoop cluster performance profiler
Hadoop cluster performance profiler
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
 
Level Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With TestcontainersLevel Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With Testcontainers
 
Constructor destructor.ppt
Constructor destructor.pptConstructor destructor.ppt
Constructor destructor.ppt
 

More from Bol.com Techlab

The hitchhiker’s guide to Prometheus
The hitchhiker’s guide to PrometheusThe hitchhiker’s guide to Prometheus
The hitchhiker’s guide to PrometheusBol.com Techlab
 
The Reactive Rollercoaster
The Reactive RollercoasterThe Reactive Rollercoaster
The Reactive RollercoasterBol.com Techlab
 
Best painkiller for Java headache
Best painkiller for Java headacheBest painkiller for Java headache
Best painkiller for Java headacheBol.com Techlab
 
Organizing a conference in 80 days
Organizing a conference in 80 daysOrganizing a conference in 80 days
Organizing a conference in 80 daysBol.com Techlab
 
Three steps to untangle data traffic jams
Three steps to untangle data traffic jamsThree steps to untangle data traffic jams
Three steps to untangle data traffic jamsBol.com Techlab
 
Understanding Operating Systems by breaking them
Understanding Operating Systems by breaking themUnderstanding Operating Systems by breaking them
Understanding Operating Systems by breaking themBol.com Techlab
 
How to train your dragon
How to train your dragonHow to train your dragon
How to train your dragonBol.com Techlab
 
The hitchhiker’s guide to Prometheus
The hitchhiker’s guide to PrometheusThe hitchhiker’s guide to Prometheus
The hitchhiker’s guide to PrometheusBol.com Techlab
 
Software for drafting a cold beer
Software for drafting a cold beerSoftware for drafting a cold beer
Software for drafting a cold beerBol.com Techlab
 
Going to the cloud: Forget EVERYTHING you know!
Going to the cloud: Forget EVERYTHING you know!Going to the cloud: Forget EVERYTHING you know!
Going to the cloud: Forget EVERYTHING you know!Bol.com Techlab
 
How to create your presentation in an iterative way
How to create your presentation in an iterative wayHow to create your presentation in an iterative way
How to create your presentation in an iterative wayBol.com Techlab
 
Jupyter and Pandas to the rescue!
Jupyter and Pandas to the rescue!Jupyter and Pandas to the rescue!
Jupyter and Pandas to the rescue!Bol.com Techlab
 
How the best of Design and Development come together
How the best of Design and Development come togetherHow the best of Design and Development come together
How the best of Design and Development come togetherBol.com Techlab
 
The addition to your team you never knew you needed
The addition to your team you never knew you neededThe addition to your team you never knew you needed
The addition to your team you never knew you neededBol.com Techlab
 
Gravitational waves: A new era in astronomy
Gravitational waves: A new era in astronomyGravitational waves: A new era in astronomy
Gravitational waves: A new era in astronomyBol.com Techlab
 
Consumer Driven Contract Testing
Consumer Driven Contract TestingConsumer Driven Contract Testing
Consumer Driven Contract TestingBol.com Techlab
 
I want to go fast! - Exposing performance bottlenecks
I want to go fast! - Exposing performance bottlenecksI want to go fast! - Exposing performance bottlenecks
I want to go fast! - Exposing performance bottlenecksBol.com Techlab
 
Kubernetes: love at first sight?
Kubernetes: love at first sight?Kubernetes: love at first sight?
Kubernetes: love at first sight?Bol.com Techlab
 

More from Bol.com Techlab (20)

The hitchhiker’s guide to Prometheus
The hitchhiker’s guide to PrometheusThe hitchhiker’s guide to Prometheus
The hitchhiker’s guide to Prometheus
 
Test long and prosper
Test long and prosperTest long and prosper
Test long and prosper
 
The Reactive Rollercoaster
The Reactive RollercoasterThe Reactive Rollercoaster
The Reactive Rollercoaster
 
Best painkiller for Java headache
Best painkiller for Java headacheBest painkiller for Java headache
Best painkiller for Java headache
 
Organizing a conference in 80 days
Organizing a conference in 80 daysOrganizing a conference in 80 days
Organizing a conference in 80 days
 
Three steps to untangle data traffic jams
Three steps to untangle data traffic jamsThree steps to untangle data traffic jams
Three steps to untangle data traffic jams
 
Understanding Operating Systems by breaking them
Understanding Operating Systems by breaking themUnderstanding Operating Systems by breaking them
Understanding Operating Systems by breaking them
 
How to train your dragon
How to train your dragonHow to train your dragon
How to train your dragon
 
The hitchhiker’s guide to Prometheus
The hitchhiker’s guide to PrometheusThe hitchhiker’s guide to Prometheus
The hitchhiker’s guide to Prometheus
 
Software for drafting a cold beer
Software for drafting a cold beerSoftware for drafting a cold beer
Software for drafting a cold beer
 
Going to the cloud: Forget EVERYTHING you know!
Going to the cloud: Forget EVERYTHING you know!Going to the cloud: Forget EVERYTHING you know!
Going to the cloud: Forget EVERYTHING you know!
 
How to create your presentation in an iterative way
How to create your presentation in an iterative wayHow to create your presentation in an iterative way
How to create your presentation in an iterative way
 
Wax on, wax off
Wax on, wax offWax on, wax off
Wax on, wax off
 
Jupyter and Pandas to the rescue!
Jupyter and Pandas to the rescue!Jupyter and Pandas to the rescue!
Jupyter and Pandas to the rescue!
 
How the best of Design and Development come together
How the best of Design and Development come togetherHow the best of Design and Development come together
How the best of Design and Development come together
 
The addition to your team you never knew you needed
The addition to your team you never knew you neededThe addition to your team you never knew you needed
The addition to your team you never knew you needed
 
Gravitational waves: A new era in astronomy
Gravitational waves: A new era in astronomyGravitational waves: A new era in astronomy
Gravitational waves: A new era in astronomy
 
Consumer Driven Contract Testing
Consumer Driven Contract TestingConsumer Driven Contract Testing
Consumer Driven Contract Testing
 
I want to go fast! - Exposing performance bottlenecks
I want to go fast! - Exposing performance bottlenecksI want to go fast! - Exposing performance bottlenecks
I want to go fast! - Exposing performance bottlenecks
 
Kubernetes: love at first sight?
Kubernetes: love at first sight?Kubernetes: love at first sight?
Kubernetes: love at first sight?
 

Recently uploaded

Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
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 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
 
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
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
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
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
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
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
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
 

Recently uploaded (20)

Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
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 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?
 
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
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
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
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
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
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 

Building a Boomerang that doesn’t come back (to haunt you) - Mattijs Meiboom

  • 1. Building a Boomerang that doesn't come back (to haunt you) BOL.COM SPACES SUMMIT 2017 By Mattijs Meiboom ( )mmeiboom@bol.com
  • 2. 3 years at bol.com So ware Engineer (Fulfilment Space) Team 21b (C4) Today: Boomerang! About me
  • 3.
  • 4.
  • 5.
  • 6. Provides a structure to the code base Helps us develop & test in isolation Protects us against the scary world outside WE WANT SOMETHING THAT…
  • 7. HEXAGONAL ARCHITECTURE TEST AUTONOMY “Allow an application to equally be driven by users, programs, automated tests or batch scripts, and to be developed and tested in isolation from its eventual run-time devices and databases.”— Alistair Cockburn “Improve testability by building tests that are reliable, give fast feedback, are independent and isolated.”
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15. Execute a task on a single node at some interval Scheduling Leadership election Internal locking AN EXAMPLE: JOB SCHEDULING
  • 16. AN EXAMPLE: JOB SCHEDULING public interface Job { void run(); }
  • 17. AN EXAMPLE: JOB SCHEDULING public interface Scheduler { void register(Job job); }
  • 18. AN EXAMPLE: JOB SCHEDULING public class ReceivedReturnsJob implements Job { private final ReceivedReturnsCollector collector; public ReceivedReturnsJob ( ReceivedReturnsCollector collector, Scheduler scheduler ) { this.collector = collector; scheduler.register(this); } @Override public void run() { collector.collect(); }
  • 19. AN EXAMPLE: JOB SCHEDULING public class SingleNodeScheduler extends ... implements Scheduler { @Override public void register(Job job) { jobs.add(job); } @Override protected void onAcquiredLeadership() { jobs.forEach(this::scheduleJob); } private void scheduleJob(Job job) { Subscription subscription = Observable.interval(...) .subscribe(timeout -> { // hiding locking and other details job.run(); }); } }
  • 20. HEXAGONAL ARCHITECTURE TEST AUTONOMY “Allow an application to equally be driven by users, programs, automated tests or batch scripts, and to be developed and tested in isolation from its eventual run-time devices and databases.”— Alistair Cockburn “Improve testability by building tests that are reliable, give fast feedback, are independent and isolated.”
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27. Structure Separation of responsibilites… …also for testing It hasn’t been perfect, but the common ground proves very valuable. WHAT HAS IT BROUGHT US SO FAR?
  • 28. RESOURCES Freeman & Pryce — Growing object oriented so ware Pryce — Visualising Test Terminology Techlab — How structure helps me to maintain so ware Confluence — Test Autonomy
  • 29. Questions? BOL.COM SPACES SUMMIT 2017 Mattijs Meiboom ( )mmeiboom@bol.com