SlideShare une entreprise Scribd logo
1  sur  105
Télécharger pour lire hors ligne
@skwp @reverbdotcom #wcr14
Yan Pritzker
CTO, Reverb.com

@skwp @reverbdotcom
Domain Driven Rails
https://speakerdeck.com/skwp
@skwp @reverbdotcom #wcr14
Are you happy with the 

SIZE and COMPLEXITY 

of your models?
@skwp @reverbdotcom #wcr14
Are you happy with the 

SCALABILITY

of your team?
@skwp @reverbdotcom #wcr14
Are you happy with the 

ADAPTABILITY

of your business?
@skwp @reverbdotcom #wcr14
What are you
building?
@skwp @reverbdotcom #wcr14
Rails is a
detail!"
Decouple
all things"
Is the code
better?"
Keep it
Railsy"
@skwp @reverbdotcom #wcr14
Somewhere
in between
Simple

CRUD"
Apps"
Complex

Enterprise

Logic"
@skwp @reverbdotcom #wcr14
I want to discover 

relevant compromises 

rather than defend ideals
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Over
115

Model
Classes
@skwp @reverbdotcom #wcr14
Over
1000

Total
Classes
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Not great, but we have only
three chubby models
@skwp @reverbdotcom #wcr14
Are monoliths
bad for business?
@skwp @reverbdotcom #wcr14
Quick Iterations
Low Operational 

Complexity
Refactoring
Monolith
ServiceService
Service
Service
Service
Early 2013 - Startup / Proof of Concept
Monolith
ServiceService
Service
Service
Service
2014 - Growth Phase
@skwp @reverbdotcom #wcr14
http://martinfowler.com/articles/distributed-objects-
microservices.html
“I'm wary of distribution and 

my default inclination is to prefer
a monolithic design”
“While small microservices are certainly simpler to reason
about, I worry that this pushes complexity into the
interconnections between services”
“Refactoring becomes much harder when you have to do it
across remote boundaries.”
@skwp @reverbdotcom #wcr14
Quick Iterations
Low Operational 

Complexity
May lead to a BBOM
@skwp @reverbdotcom #wcr14
Maintainable
Monoliths
Can Be
Achieved
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Product

400 LOC

~150 LOC non-ActiveRecord
Churn: 49 changes this year"
Order

333 LOC

~200 LOC non-ActiveRecord
Churn: 36 changes this year
User

338 LOC

~200 LOC non-ActiveRecord
Churn: 29 changes this year
CHURN
Product
Order
User
@skwp @reverbdotcom #wcr14
Commonly used
classes are hard
to refactor
@skwp @reverbdotcom #wcr14
Stop 

modifying 

code!
(Open/Closed Principle)
@skwp @reverbdotcom #wcr14
Don’t put
different rates
of change
together"
Kent Beck - Smalltalk Best Practice Patterns
(see also: Single Responsibility Principle)
@skwp @reverbdotcom #wcr14
Don’t put
different rates
of change
together"
Kent Beck - Smalltalk Best Practice Patterns
Data Model
Business Logic
@skwp @reverbdotcom #wcr14
Separate 

what the system is "
from what the
system does"
James Copelien & Trygve Reenskaug
(Data, Context, Interaction)
@skwp @reverbdotcom #wcr14
Where does business
logic go?
@skwp @reverbdotcom #wcr14
Controller
2005
ActiveRecord
Mailers
Services
User
@skwp @reverbdotcom #wcr14
Console?"
Rake task?"
Background jobs?"
API layer?"
Testing?
What about…
@skwp @reverbdotcom #wcr14
Order
Fat models?
@skwp @reverbdotcom #wcr14
Order
Refund
@skwp @reverbdotcom #wcr14
Order
Refund
Ship
@skwp @reverbdotcom #wcr14
Order
Refund
Ship
Check Fraud Risk
@skwp @reverbdotcom #wcr14
“Active Record is a good choice
for domain logic that isn't too
complex, such as creates, reads,
updates, and deletes”
Martin Fowler
@skwp @reverbdotcom #wcr14
If Controller and Model
are all you have then 

one has to be skinny and
one has to be fat
@skwp @reverbdotcom #wcr14
Domain Layer
skinny framework, 

healthy business logic,"
no fat anywhere
http://joncairns.com/2013/04/fat-model-
skinny-controller-is-a-load-of-rubbish/
Model
Controller
View
The Rails Way
The
Way
Active
Record
Use Cases
Grape
API
ControllersCron
Redis
Rake
HTTP
Services
Workers
R
Entities
Roles
DB
Listeners
Events
@skwp @reverbdotcom #wcr14
app/reverb
for app specific
@skwp @reverbdotcom #wcr14
lib/reverb
for Open Source / Generic
@skwp @reverbdotcom #wcr14
Reverb::
Namespace to avoid
collisions with gems
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
This is a

marketplace!
http://blog.
8thlight.com/uncle-
bob/2011/09/30/
Screaming-
Architecture.html
@skwp @reverbdotcom #wcr14
http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-
architecture.html
@skwp @reverbdotcom #wcr14
see also Hexagonal, Ports & Adapters, DCI
@skwp @reverbdotcom #wcr14
Clean 

Enough 

Architecture"
@skwp @reverbdotcom #wcr14
Choosing the
right fight
@skwp @reverbdotcom #wcr14
http://blog.8thlight.com/mike-ebert/2013/03/23/the-
repository-pattern.html
@skwp @reverbdotcom #wcr14
http://blog.8thlight.com/mike-ebert/2013/03/23/the-
repository-pattern.html
(but you should still read this)
@skwp @reverbdotcom #wcr14
User.where(…)
User.active
User.find(1)
This is easy to replace with

something other than AR. 

Repository not required.
Don’t leak SQL outside of AR
@skwp @reverbdotcom #wcr14
Domain Logic in
ActiveRecord and
Controllers

leads to Churn
@skwp @reverbdotcom #wcr14
Use Cases
Reify complex business logic

into classes
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
This is not"
Rails
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Explicitly Require Dependency
http://myronmars.to/n/dev-blog/2012/12/5-reasons-to-avoid-
bundler-require
Invoke It
@skwp @reverbdotcom #wcr14
Code Reuse!
Thin Shell
@skwp @reverbdotcom #wcr14
Stubby
Happy Path
@skwp @reverbdotcom #wcr14
Testing conditionals and side
effects has nothing to do with Rails
@skwp @reverbdotcom #wcr14
Naming
The hardest problem in computer science
@skwp @reverbdotcom #wcr14
OrderService
@skwp @reverbdotcom #wcr14
Order

Service
@skwp @reverbdotcom #wcr14
Order

Service
NounService Grows Unbounded
@skwp @reverbdotcom #wcr14
Use verbs to
narrow your scope
@skwp @reverbdotcom #wcr14
Order
@skwp @reverbdotcom #wcr14
Order
ShipOrder
@skwp @reverbdotcom #wcr14
Order
ShipOrder
Cancel

Order
@skwp @reverbdotcom #wcr14
Order
ShipOrder
Cancel

Order
Refund

Order
@skwp @reverbdotcom #wcr14
Order
ShipOrder
Cancel

Order
Refund

Order
Does not

grow over time
@skwp @reverbdotcom #wcr14
ShipOrder
Cancel

Order
Refund

Order
Don’t change"
once you write them
@skwp @reverbdotcom #wcr14
Ubiquitous Language
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
What is this?
@skwp @reverbdotcom #wcr14
Roles
Add methods to objects on demand
in the context of a Use Case
@skwp @reverbdotcom #wcr14
Decorator
@skwp @reverbdotcom #wcr14
We added these methods
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Methods related to each"
other but loosely related"
to the parent concept"
and used only in a few"
Use Cases
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Events
Add behavior with listeners
without modifying code
@skwp @reverbdotcom #wcr14
Order
ActiveRecord Callbacks
Send Email
@skwp @reverbdotcom #wcr14
Order
ActiveRecord Callbacks
Send Email
Call External Service
@skwp @reverbdotcom #wcr14
Order
ActiveRecord Callbacks
Send Email
Call External Service
Conditional

Callbacks
@skwp @reverbdotcom #wcr14
AR callbacks become
more complex as the
system supports more
use cases
@skwp @reverbdotcom #wcr14
Different use cases may
trigger different events
even when working with
the same model
Instead
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Add another listener to add behavior

The core class doesn’t change
@skwp @reverbdotcom #wcr14
Global listeners for cross-cutting concerns

without littering code
Wisper::GlobalListeners.add(Reverb::Listeners::AnalyticsListener.new)"
@skwp @reverbdotcom #wcr14
Controller is a listener too
@skwp @reverbdotcom #wcr14
Policy Objects
Reify complex business rules
into objects
@skwp @reverbdotcom #wcr14
Likely to change
Unlikely to change
@skwp @reverbdotcom #wcr14
refactored for readability
@skwp @reverbdotcom #wcr14
Injectable, but has a default
Simple code, only need to test one path

for the imperative side effect"
(sending an email)
@skwp @reverbdotcom #wcr14
Distillation Time
@skwp @reverbdotcom #wcr14
Language of codebase 

reflects language of business
@skwp @reverbdotcom #wcr14
Separate behaviors (what the system
does) from models (what the system is)
@skwp @reverbdotcom #wcr14
Rates of Change
@skwp @reverbdotcom #wcr14
Is this all Unicorns
and Rainbows?
@skwp @reverbdotcom #wcr14
Sprawl?"
Onboarding?"
Naming?"
Documentation?"
@skwp @reverbdotcom #wcr14
http://blog.mattwynne.net/category/hexagonal-rails/
http://clean-ruby.com/
Resources
http://confreaks.com/videos/759-rubymidwest2011-keynote-
architecture-the-lost-years
http://blog.8thlight.com/uncle-bob/2011/09/30/Screaming-
Architecture.html
http://www.artima.com/articles/dci_vision.html
http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-
architecture.html
https://speakerdeck.com/skwp
@skwp @reverbdotcom #wcr14
We Are Hiring Always"
jobs.reverb.com
Ruby, ElasticSearch, DevOps,
Designers, Android, and more!
jobs@reverb.com

Contenu connexe

Tendances

Flutter state management from zero to hero
Flutter state management from zero to heroFlutter state management from zero to hero
Flutter state management from zero to heroAhmed Abu Eldahab
 
Single Responsibility Principle
Single Responsibility PrincipleSingle Responsibility Principle
Single Responsibility PrincipleEyal Golan
 
Introduction to Java 11
Introduction to Java 11 Introduction to Java 11
Introduction to Java 11 Knoldus Inc.
 
Sling models by Justin Edelson
Sling models by Justin Edelson Sling models by Justin Edelson
Sling models by Justin Edelson AEM HUB
 
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023Steve Pember
 
Soap web service
Soap web serviceSoap web service
Soap web serviceNITT, KAMK
 
Coding Standards & Best Practices for iOS/C#
Coding Standards & Best Practices for iOS/C#Coding Standards & Best Practices for iOS/C#
Coding Standards & Best Practices for iOS/C#Asim Rais Siddiqui
 
Mocking in Java with Mockito
Mocking in Java with MockitoMocking in Java with Mockito
Mocking in Java with MockitoRichard Paul
 
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud GatewaySpring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud GatewayIván López Martín
 
ReST (Representational State Transfer) Explained
ReST (Representational State Transfer) ExplainedReST (Representational State Transfer) Explained
ReST (Representational State Transfer) ExplainedDhananjay Nene
 
Architecting for the Cloud using NetflixOSS - Codemash Workshop
Architecting for the Cloud using NetflixOSS - Codemash WorkshopArchitecting for the Cloud using NetflixOSS - Codemash Workshop
Architecting for the Cloud using NetflixOSS - Codemash WorkshopSudhir Tonse
 
Modules in AngularJs
Modules in AngularJsModules in AngularJs
Modules in AngularJsK Arunkumar
 
AEM and Sling
AEM and SlingAEM and Sling
AEM and SlingLo Ki
 
Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Jean-Michel Doudoux
 
JSMVCOMFG - To sternly look at JavaScript MVC and Templating Frameworks
JSMVCOMFG - To sternly look at JavaScript MVC and Templating FrameworksJSMVCOMFG - To sternly look at JavaScript MVC and Templating Frameworks
JSMVCOMFG - To sternly look at JavaScript MVC and Templating FrameworksMario Heiderich
 

Tendances (20)

Flutter state management from zero to hero
Flutter state management from zero to heroFlutter state management from zero to hero
Flutter state management from zero to hero
 
JPA and Hibernate
JPA and HibernateJPA and Hibernate
JPA and Hibernate
 
Single Responsibility Principle
Single Responsibility PrincipleSingle Responsibility Principle
Single Responsibility Principle
 
Introduction to Java 11
Introduction to Java 11 Introduction to Java 11
Introduction to Java 11
 
Sling models by Justin Edelson
Sling models by Justin Edelson Sling models by Justin Edelson
Sling models by Justin Edelson
 
Solid principles
Solid principlesSolid principles
Solid principles
 
Callback Function
Callback FunctionCallback Function
Callback Function
 
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
 
Soap web service
Soap web serviceSoap web service
Soap web service
 
Coding Standards & Best Practices for iOS/C#
Coding Standards & Best Practices for iOS/C#Coding Standards & Best Practices for iOS/C#
Coding Standards & Best Practices for iOS/C#
 
Mocking in Java with Mockito
Mocking in Java with MockitoMocking in Java with Mockito
Mocking in Java with Mockito
 
KrakenD API Gateway
KrakenD API GatewayKrakenD API Gateway
KrakenD API Gateway
 
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud GatewaySpring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
 
ReST (Representational State Transfer) Explained
ReST (Representational State Transfer) ExplainedReST (Representational State Transfer) Explained
ReST (Representational State Transfer) Explained
 
Architecting for the Cloud using NetflixOSS - Codemash Workshop
Architecting for the Cloud using NetflixOSS - Codemash WorkshopArchitecting for the Cloud using NetflixOSS - Codemash Workshop
Architecting for the Cloud using NetflixOSS - Codemash Workshop
 
Modules in AngularJs
Modules in AngularJsModules in AngularJs
Modules in AngularJs
 
AEM and Sling
AEM and SlingAEM and Sling
AEM and Sling
 
Spring jdbc
Spring jdbcSpring jdbc
Spring jdbc
 
Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20
 
JSMVCOMFG - To sternly look at JavaScript MVC and Templating Frameworks
JSMVCOMFG - To sternly look at JavaScript MVC and Templating FrameworksJSMVCOMFG - To sternly look at JavaScript MVC and Templating Frameworks
JSMVCOMFG - To sternly look at JavaScript MVC and Templating Frameworks
 

Similaire à Domain Driven Rails

JS Chicago Meetup 2/23/16 - Redux & Routes
JS Chicago Meetup 2/23/16 - Redux & RoutesJS Chicago Meetup 2/23/16 - Redux & Routes
JS Chicago Meetup 2/23/16 - Redux & RoutesNick Dreckshage
 
Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...
Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...
Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...Quentin Adam
 
The Twelve Factor Container
The Twelve Factor ContainerThe Twelve Factor Container
The Twelve Factor ContainerVMware Tanzu
 
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and HowBoston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and HowAndreas Grabner
 
RxJS - The Basics & The Future
RxJS - The Basics & The FutureRxJS - The Basics & The Future
RxJS - The Basics & The FutureTracy Lee
 
Reactive All the Way Down the Stack
Reactive All the Way Down the StackReactive All the Way Down the Stack
Reactive All the Way Down the StackSteve Pember
 
The Power of RxJS in Nativescript + Angular
The Power of RxJS in Nativescript + AngularThe Power of RxJS in Nativescript + Angular
The Power of RxJS in Nativescript + AngularTracy Lee
 
Better and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and EnjoymentBetter and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and EnjoymentChris Holland
 
Do you really want to go fully micro?
Do you really want to go fully micro?Do you really want to go fully micro?
Do you really want to go fully micro?Robert Munteanu
 
From Rails legacy to DDD - Pivorak, Lviv
From Rails legacy to DDD - Pivorak, LvivFrom Rails legacy to DDD - Pivorak, Lviv
From Rails legacy to DDD - Pivorak, LvivAndrzej Krzywda
 
What is quality code? From cruft to craft
What is quality code? From cruft to craftWhat is quality code? From cruft to craft
What is quality code? From cruft to craftNick DeNardis
 
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"Daniel Bryant
 
Undercover Scrum Master - Agile2019
Undercover Scrum Master - Agile2019Undercover Scrum Master - Agile2019
Undercover Scrum Master - Agile2019Dane Weber
 
Git Workflow Strategies for Technical Debt Management
Git Workflow Strategies for Technical Debt ManagementGit Workflow Strategies for Technical Debt Management
Git Workflow Strategies for Technical Debt ManagementRaquel Pau
 
apidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheim
apidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheimapidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheim
apidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheimapidays
 
"Design and Test First"-Workflow für REST APIs
"Design and Test First"-Workflow für REST APIs"Design and Test First"-Workflow für REST APIs
"Design and Test First"-Workflow für REST APIsMarkus Decke
 
Rowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on nativeRowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on nativeOdessaJS Conf
 
Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)Chris Tankersley
 
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...Alexander Dean
 
Everything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisEverything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisQAware GmbH
 

Similaire à Domain Driven Rails (20)

JS Chicago Meetup 2/23/16 - Redux & Routes
JS Chicago Meetup 2/23/16 - Redux & RoutesJS Chicago Meetup 2/23/16 - Redux & Routes
JS Chicago Meetup 2/23/16 - Redux & Routes
 
Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...
Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...
Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...
 
The Twelve Factor Container
The Twelve Factor ContainerThe Twelve Factor Container
The Twelve Factor Container
 
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and HowBoston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
 
RxJS - The Basics & The Future
RxJS - The Basics & The FutureRxJS - The Basics & The Future
RxJS - The Basics & The Future
 
Reactive All the Way Down the Stack
Reactive All the Way Down the StackReactive All the Way Down the Stack
Reactive All the Way Down the Stack
 
The Power of RxJS in Nativescript + Angular
The Power of RxJS in Nativescript + AngularThe Power of RxJS in Nativescript + Angular
The Power of RxJS in Nativescript + Angular
 
Better and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and EnjoymentBetter and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and Enjoyment
 
Do you really want to go fully micro?
Do you really want to go fully micro?Do you really want to go fully micro?
Do you really want to go fully micro?
 
From Rails legacy to DDD - Pivorak, Lviv
From Rails legacy to DDD - Pivorak, LvivFrom Rails legacy to DDD - Pivorak, Lviv
From Rails legacy to DDD - Pivorak, Lviv
 
What is quality code? From cruft to craft
What is quality code? From cruft to craftWhat is quality code? From cruft to craft
What is quality code? From cruft to craft
 
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"
 
Undercover Scrum Master - Agile2019
Undercover Scrum Master - Agile2019Undercover Scrum Master - Agile2019
Undercover Scrum Master - Agile2019
 
Git Workflow Strategies for Technical Debt Management
Git Workflow Strategies for Technical Debt ManagementGit Workflow Strategies for Technical Debt Management
Git Workflow Strategies for Technical Debt Management
 
apidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheim
apidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheimapidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheim
apidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheim
 
"Design and Test First"-Workflow für REST APIs
"Design and Test First"-Workflow für REST APIs"Design and Test First"-Workflow für REST APIs
"Design and Test First"-Workflow für REST APIs
 
Rowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on nativeRowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on native
 
Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)
 
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
 
Everything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisEverything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der Praxis
 

Plus de Yan Pritzker

Bitcoin not Blockchain
Bitcoin not BlockchainBitcoin not Blockchain
Bitcoin not BlockchainYan Pritzker
 
CTO - Startup to Growth
CTO - Startup to GrowthCTO - Startup to Growth
CTO - Startup to GrowthYan Pritzker
 
Outsource Everything
Outsource EverythingOutsource Everything
Outsource EverythingYan Pritzker
 
Building Self Documenting REST APIs
Building Self Documenting REST APIsBuilding Self Documenting REST APIs
Building Self Documenting REST APIsYan Pritzker
 
Building Services on and off Rails
Building Services on and off RailsBuilding Services on and off Rails
Building Services on and off RailsYan Pritzker
 
Virtualization and Cloud Computing with Elastic Server On Demand
Virtualization and Cloud Computing with Elastic Server On DemandVirtualization and Cloud Computing with Elastic Server On Demand
Virtualization and Cloud Computing with Elastic Server On DemandYan Pritzker
 

Plus de Yan Pritzker (11)

Bitcoin not Blockchain
Bitcoin not BlockchainBitcoin not Blockchain
Bitcoin not Blockchain
 
CTO - Startup to Growth
CTO - Startup to GrowthCTO - Startup to Growth
CTO - Startup to Growth
 
Outsource Everything
Outsource EverythingOutsource Everything
Outsource Everything
 
Building Self Documenting REST APIs
Building Self Documenting REST APIsBuilding Self Documenting REST APIs
Building Self Documenting REST APIs
 
Pasted image-3237
Pasted image-3237Pasted image-3237
Pasted image-3237
 
Pasted image-1795
Pasted image-1795Pasted image-1795
Pasted image-1795
 
Pasted image-3237
Pasted image-3237Pasted image-3237
Pasted image-3237
 
Pasted image-1795
Pasted image-1795Pasted image-1795
Pasted image-1795
 
Pasted image-1706
Pasted image-1706Pasted image-1706
Pasted image-1706
 
Building Services on and off Rails
Building Services on and off RailsBuilding Services on and off Rails
Building Services on and off Rails
 
Virtualization and Cloud Computing with Elastic Server On Demand
Virtualization and Cloud Computing with Elastic Server On DemandVirtualization and Cloud Computing with Elastic Server On Demand
Virtualization and Cloud Computing with Elastic Server On Demand
 

Dernier

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 

Dernier (20)

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 

Domain Driven Rails