SlideShare a Scribd company logo
Designing a Serverless Application
with Domain Driven Design
Susanne Kaiser
Independent Tech Consultant
@suksr
$2,840,000,000,000
TWOTRILLIONEIGHTHUNDREDFOURTYBILLION USD
Costs of Poor Software Quality in the US in 2018 (by CISQ report )
Source: https://www.it-cisq.org/the-cost-of-poor-quality-software-in-the-us-a-2018-report @suksr
Areas of Cost Relating To Poor Software Quality
Source: https://www.it-cisq.org/the-cost-of-poor-quality-software-in-the-us-a-2018-report @suksr
Some Indicators for Poor Software Quality (extracted from CISQ report )
t
Defects
0%
Increasing defect trend
Low test coverage
Cyclomatic complexity
Large inheritance depth
High amount of effort to
understand piece of code
Badly engineered
software
Lack of domain
knowledge
Based on: https://www.it-cisq.org/the-cost-of-poor-quality-software-in-the-us-a-2018-report
Communication and
coordination breakdowns
in (large) teams
High degree of class
coupling
@suksr
Domain Driven Design (DDD)
Business Domain Needs Strategy
Software Design
@suksr
Domain Driven Design (DDD) – Terminology
Strategic Design
Tactical Design
Bounded Context
Ubiquitous Language
Core Subdomain
Supporting Subdomain
Generic Subdomain
Problem Space
Solution Space
Context Maps
Anti-Corruption Layer
Shared Kernel
Open Host Service
Separate Ways
Partnership
Customer-Supplier
Conformist
Domain Model
Entity
Value Object
Aggregate
Repository
Factory
Application Service
Domain Service
Domain Event
@suksr
DDD & Wardley Maps
ValueChainInvisibleVisible
Evolution
Genesis Custom-Built Product (+rental) Commodity
(+utility)
Position
Movement
Uncharted Industrialised
@suksr
ValueChain
InvisibleVisible
Evolution
Visualisation of a
value chain’s
evolution
Genesis Custom-Built Product (+rental) Commodity (+utility)
Position
Movement
Wardley Maps BY SIMON WARDLEY
Uncharted Industrialised
@suksr
Wardley Maps – VALUE CHAIN
Who are your users?
ValueChain
InvisibleVisible
@suksr
Wardley Maps – VALUE CHAIN
Who are your users?
What are your users’ needs?
ValueChain
InvisibleVisible
@suksr
Wardley Maps – VALUE CHAIN
Who are your users?
What are your users’ needs?
What are the components/activities to fulfill
your users’ needs incl. dependencies?
ValueChain
InvisibleVisible
Position
@suksr
Wardley Maps – LANDSCAPE
ValueChain
InvisibleVisible
Evolution
Components along
evolution axes
Genesis Custom-Built Product (+rental) Commodity (+utility)
Position
Movement
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Everything evolves
Past Current Future
Supply CompetitionDemand Competition
Uncharted Industrialised
Wardley Maps – PATTERNS
Movement
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Past Current Future
Characteristics changeUncharted
Undefined market
Uncertain
Unpredictable
Rare
Poorly understood
Forming market
Learning on use
Increasing understanding
Slowly increasing
consumption
Rapid increases in
learning
Growing market
Learning on operation
Increasing education
Rapidly increasing
consumption
Rapid increase in use
Mature market
Known / accepted
Stable
Widespread and stabilising
Commonly understood
(in term of use)
Industrialised
Wardley Maps – PATTERNS
Movement
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Wardley Maps – PRINCIPLES
Use appropriate methods
per evolution stage
Build in-house
Use/buy off-the-shelf product
Outsource to utility suppliers
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Use appropriate methods
per evolution stage
Wardley Maps – PRINCIPLES
Build in-house
Use/buy off-the-shelf product
Outsource to utility suppliers
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Use appropriate methods
per evolution stage
Wardley Maps – PRINCIPLES
Build in-house
Use/buy off-the-shelf product
Outsource to utility suppliers
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Know your users &
focus on user needs
Wardley Maps – PRINCIPLES
Build in-house / Agile
Use/buy off-the-shelf product / Lean
Outsource to utility suppliers / Six Sigma
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
DDD & Wardley Maps
Ubiquitous Language
Domain Knowledge
Understanding the problem domain first
Problem Domain
Domain
Experts
Development
Teams
Collaboration
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
DDD & Wardley Maps Problem Domain
Strategic Design
DDD Patterns &
Practices
Tactical Design
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
DDD & Wardley Maps Problem Domain
Strategic Design
DDD Patterns &
Practices
Tactical Design
Analysing the
business
domain
Discovering
Subdomains
Problem Space
Decomposing
into modular
components
(Bounded
Contexts)
Mapping
interaction
patterns
between BC
(Context Maps)
Solution Space
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
DDD & Wardley Maps Problem Domain
Strategic Design
DDD Patterns &
Practices
Tactical Design
Architecting a solution
fitting the problem
domain as closely as
possible
Provides
building blocks
to implement
domain model
Analysing the
business
domain
Discovering
Subdomains
Problem Space
Decomposing
into modular
components
(Bounded
Contexts (BC)
Mapping
interaction
patterns
between BC
(Context Maps)
Solution Space
@suksr
Solution Space
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Distilling the problem
domain & discovering the
core subdomain
DDD & Wardley Maps
Core
Subdomain
Problem Domain
STRATEGIC DESIGN (PROBLEM SPACE)
Supporting
Subdomain
Generic
Subdomain
ProblemSpace
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Distilling the problem
domain & discovering the
core subdomain
DDD & Wardley Maps
Core
Subdomain
Problem Domain
Competitive advantage
Complex
Changes often
Build in-house
STRATEGIC DESIGN (PROBLEM SPACE)
Supporting
Subdomain
Generic
Subdomain
ProblemSpace
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Distilling the problem
domain & discovering the
core subdomain
DDD & Wardley Maps
Core
Subdomain
Problem Domain
Competitive advantage
Complex
Changes often
Build in-house
No competitive advantage
Quite simple
Does not change often
Prefer to buy/use off-the-shelf
STRATEGIC DESIGN (PROBLEM SPACE)
Supporting
Subdomain
Generic
Subdomain
ProblemSpace
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Distilling the problem
domain & discovering the
core subdomain
DDD & Wardley Maps
Core
Subdomain
Problem Domain
Competitive advantage
Complex
Changes often
Build in-house
No competitive advantage
Quite simple
Does not change often
Prefer to buy/use off-the-shelf
No competitive advantage
Generally complex
Does not change often
Buy/use off-the-shelf / outsource
STRATEGIC DESIGN (PROBLEM SPACE)
Supporting
Subdomain
Generic
Subdomain
ProblemSpace
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Model Driven Design
DDD & Wardley Maps
STRATEGIC DESIGN (SOLUTION SPACE)
Development
Teams
Domain
Experts
Ubiquitous
Language
Analysis
Model
Code
Model
Domain Model
Core
Subdomain
Supporting
Subdomain
Generic
Subdomain
Problem Domain
ProblemSpaceSolutionSpace
abstracted by
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Bounded Contexts
DDD & Wardley Maps
STRATEGIC DESIGN (SOLUTION SPACE)
Core
Subdomain
Supporting
Subdomain
Generic
Subdomain
Problem Domain
ProblemSpaceSolutionSpace
Linguistic/semantic
boundary
Ownership boundary
Model boundary
Physical boundary
Different architectural
patterns per context
possible
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
ProblemSpace
Evaluate
Submissions
Manage
Event
Organiser
Build & Publish
Schedule
Communicate
w/ Speakers
Signup/Signin
Know your users &
focus on user needs
Submit
Session
DDD & Wardley Maps
STRATEGIC DESIGN (PROBLEM SPACE)
Speaker
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
ProblemSpace
Evaluate
Submissions
Manage
Event
Organiser
Build & Publish
Schedule
Communicate
w/ Speakers
Signup/Signin
Speaker
Submit
Session
DDD & Wardley Maps
STRATEGIC DESIGN (PROBLEM SPACE) Discovering
subdomains
Supporting GenericCore
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
ProblemSpace
Evaluate
Submissions
Manage
Event
Organiser
Build & Publish
Schedule
Communicate
w/ Speakers
Signup/Signin
Speaker
Submit
Session
DDD & Wardley Maps
STRATEGIC DESIGN (SOLUTION SPACE)
Supporting GenericCore
Event Evaluation AccountSchedule MessageSession
Domain Models
SolutionSpace
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
ProblemSpace
Evaluate
Submissions
Manage
Event
Organiser
Build & Publish
Schedule
Communicate
w/ Speakers
Signup/Signin
Speaker
Submit
Session
DDD & Wardley Maps
Supporting GenericCore
Event Evaluation AccountSchedule Message
Speaker
Session
CfP
SolutionSpace
STRATEGIC DESIGN (SOLUTION SPACE)
Domain Models
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
ProblemSpace
Evaluate
Submissions
Manage
Event
Organiser
Build & Publish
Schedule
Communicate
w/ Speakers
Signup/Signin
Speaker
Submit
Session
DDD & Wardley Maps
Supporting GenericCore
Event Evaluation AccountSchedule Message
Speaker Profile
Submitted
Session
CfP
Settings
Recipient
Open CfP Evaluated
Session
Scheduled
Session
SolutionSpace
STRATEGIC DESIGN (SOLUTION SPACE)
Domain Models
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
ProblemSpace
Evaluate
Submissions
Manage
Event
Organiser
Build & Publish
Schedule
Communicate
w/ Speakers
Signup/Signin
Speaker
Submit
Session
DDD & Wardley Maps
Supporting GenericCore
SolutionSpace
STRATEGIC DESIGN (SOLUTION SPACE)
Bounded Contexts
Linguistic/semantic
boundary
Model integrity boundary
Event Evaluation AccountSchedule MessageSubmitted
Session
CfP
Settings
Recipient
Open CfP Evaluated
Session
Scheduled
Session
Speaker Profile Session
Evaluation
Submission
Handling
Event
Mngmnt.
Schedule
Mngmnt.
Messaging
Account
Handling
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
ProblemSpace
Evaluate
Submissions
Manage
Event
Organiser
Build & Publish
Schedule
Communicate
w/ Speakers
Signup/Signin
Speaker
Submit
Session
DDD & Wardley Maps
Supporting GenericCore
SolutionSpace
STRATEGIC DESIGN (SOLUTION SPACE)
Submission
Handling
Event
Mngmnt.
Session
Evaluation
Messaging Account
Handling
Schedule
Mngmnt.
Bounded Contexts
Ownership boundary
Linguistic/semantic
boundary
Model integrity boundary
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
ProblemSpace
Evaluate
Submissions
Manage
Event
Organiser
Build & Publish
Schedule
Communicate
w/ Speakers
Signup/Signin
Speaker
Submit
Session
DDD & Wardley Maps
Supporting GenericCore
SolutionSpace
STRATEGIC DESIGN (SOLUTION SPACE)
Submission
Handling
Event
Mngmnt.
Session
Evaluation
Messaging Account
Handling
Schedule
Mngmnt.
Bounded Contexts
Ownership boundary
Linguistic/semantic
boundary
Model integrity boundary
Physical boundary
SCM
Data store
CI/CD
Artefact
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
ProblemSpace Evaluate
Submissions
Manage
Event
Organiser
Build & Publish
Schedule
Communicate
w/ Speakers
Signup/Signin
Speaker
Submit
Session
DDD & Wardley Maps
Supporting GenericCore
SolutionSpace
TACTICAL DESIGN
Submission
Handling
Event
Mngmnt.
Session
Evaluation
Messaging Account
Handling
Schedule
Mngmnt.
Architectural
Patterns
Architectural patterns can
differ per Bounded Context,
e.g.
StrategicDesignTacticalDesign
Layered
Architecture
Hexagonal
Architecture
CQRS
@suksr
Hexagonal Architecture
Business
Logic
Application
REST-API
Port
Port
Message Broker
Adapter
Adapter
Adapter
Port
Inner
Outer
Outside
@suksr
Hexagonal Architecture
Business
Logic
Application
Port
Adapter
BOUNDED CONTEXT: EVENT MANAGEMENT
EventController
AWS API Gateway
Port
REST-API with
AWS API-Gateway and
AWS Lambda
EventController
AWS API Gateway
newEvent deleteEvent activateEvent
POST
/events
DELETE
/events/{id}
POST
/events/{id}/activate
Inner
Outer
Outside
@suksr
export class EventsController {
private readonly eventsService: EventApplicationService;
public constructor(eventsService: EventApplicationService) {
this.eventsService = eventsService;
}
public activateEvent: Handler = async (event: APIGatewayEvent, context: Context, callback: Callback) => {
if (!event.pathParameters) {
return callback(undefined, failure({ status: "error", error: "no event id specified" }));
}
if (!event.requestContext.authorizer) {
return callback(undefined, failure({ status: "error", error: "no authorized user specified" }));
}
try {
const eventId = new EventId(event.pathParameters.id);
const userId = new UserId(event.requestContext.authorizer.claims['cognito:username']);
await this.eventsService.activateEvent(eventId, userId);
callback(undefined, success({status: "ok"}));
} catch(e) {
return callback(undefined, failure({ status: "error", error: e }));
}
};
public newEvent: Handler = async (event: APIGatewayEvent, context: Context, callback: Callback) => {
// ... //
}
REST-API
AdapterPort
Lambda
Function
Lambda
Function
Hexagonal Architecture
BOUNDED CONTEXT: EVENT MANAGEMENT
@suksr
Hexagonal Architecture
Business
Logic
Application
Port
BOUNDED CONTEXT: EVENT MANAGEMENT
EventController
AWS API Gateway
Port
Data Storage with
AWS DynamoDB
DynamoDBEventRepository
Inner
Outer
Outside
@suksr
export default class DynamoDBEventRepository implements EventRepository {
private static TABLE_NAME: string = "events";
private readonly dynamoDbClient: AWS.DynamoDB.DocumentClient;
constructor() {
this.dynamoDbClient = new AWS.DynamoDB.DocumentClient();
}
public async eventOfId(id: EventId): Promise<Event|null> {
const params : DocumentClient.GetItemInput = {
TableName: DynamoDBEventRepository.TABLE_NAME,
Key: {
eventId: id
}
};
const result: DocumentClient.GetItemOutput = await this.dynamoDbClient.get(params).promise();
const item: AttributeMap|undefined = result.Item;
if (item) {
const id = new EventId(item.eventId);
const name = Name.create(item.name);
const description = Description.create(item.description);
const period = Period.create(item.period.startDate, item.period.endDate);
return Event.create(id, name, item.eventStatus, period, description);
}
return null;
}
public saveEvent(event: Event) {
const params : DocumentClient.PutItemInput = {
// ... //
};
return this.dynamoDbClient.put(params).promise();
}
}
Hexagonal Architecture
Database
AdapterPort
DynamoDB
Client
BOUNDED CONTEXT: EVENT MANAGEMENT
@suksr
Hexagonal Architecture
Business
Logic
Application
Port
BOUNDED CONTEXT: EVENT MANAGEMENT
EventController
AWS API Gateway
Port
DynamoDBEventRepository
Business Logic
Implementation
Inner
Outer
Outside
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Evaluate
Submissions
Manage
Event
Organiser
Build & Publish
Schedule
Communicate
w/ Speakers
Signup/Signin
Speaker
Submit
Session
DDD & Wardley Maps
Supporting GenericCore
TACTICAL DESIGN
Submission
Handling
Event
Mngmnt.
Session
Evaluation
Messaging Account
Handling
Schedule
Mngmnt.
Business Logic
Implementation Patterns
Business logic implementation
patterns can differ per
Bounded Context, e.g.
Domain
Model
Active
Record
Transaction
Script
@suksr
ProblemSpaceSolutionSpace
StrategicDesignTacticalDesign
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Evaluate
Submissions
Manage
Event
Organiser
Build & Publish
Schedule
Communicate
w/ Speakers
Signup/Signin
Speaker
Submit
Session
DDD & Wardley Maps
Supporting GenericCore
TACTICAL DESIGN
Submission
Handling
Event
Mngmnt.
Session
Evaluation
Messaging Account
Handling
Schedule
Mngmnt.
Building Blocks of
Domain Models
● Value Object
● Entity
● Aggregate
● Repository
● ApplicationService
● Domain Event
● ...
@suksr
ProblemSpaceSolutionSpace
StrategicDesignTacticalDesign
Domain Model
BC: EVENT MANAGEMENT
Event
create: Event
activate
reschedule
rename
EventId
id: string
Name
create: Name
name: string
EventStatus
CREATED
ACTIVATED
DEACTIVATED
deactivate
Description
create:
Description
desc: string
Period
create: Period
start: Date
end: Date
Value
Object
Entity
Aggregate
Root
Aggregate
Application
Port
EventController
AWS API Gateway
Port
DynamoDBEventRepository
Event
@suksr
export default class Event {
readonly id: EventId;
name: Name;
description?: Description;
status: EventStatus;
period: Period;
private constructor(id: EventId, name: Name, status: EventStatus, period: Period, description?: Description) {
this.id = id;
this.name = name;
this.description = description;
this.status = status;
this.period = period;
}
public activate() {
if (this.status === EventStatus.CLOSED) {
throw new Error("You cannot activate a closed event");
}
if (this.status === EventStatus.ACTIVATED) {
throw new Error("This event has already been activated");
}
this.status = EventStatus.ACTIVATED;
}
public rename(name: Name) {
if (!name) {
throw new Error("You cannot rename the event to an empty name");
}
this.name = name;
}
// ... //
}
Aggregate
@suksr
Domain Model
BC: EVENT MANAGEMENT
Application
EventController
AWS API Gateway
DynamoDBEventRepository
Event
EventApplicationService
EventRepository
@suksr
export default class EventApplicationService {
private readonly eventRepository: EventRepository;
constructor(eventRepository: EventRepository) {
this.eventRepository = eventRepository;
}
public async activateEvent(id: EventId) {
const event = await this.eventRepository.eventOfId(id);
if (!event) {
throw new Error("Could not deactivate event with id " + id + ", since event does not exist.");
}
event.activate();
await this.eventRepository.saveEvent(event);
}
// ... //
}
ApplicationService
Domain Model
EVENT MANAGEMENT
@suksr
Domain Model
EVENT MANAGEMENT
Application
EventController
AWS API Gateway
DynamoDBEventRepository
Event
EventApplicationService
EventRepository
export default interface EventRepository {
saveEvent(event: Event): void;
eventOfId(id: EventId): Promise<Event|null>;
// ... //
}
@suksr
ValueChain
InvisibleVisible
Genesis Custom-Built Product (+rental) Commodity (+utility)
Evolution
Evaluate
Submissions
Manage
Event
Organiser
Build & Publish
Schedule
Communicate
w/ Speakers
Signup/Signin
Speaker
Submit
Session
DDD & Wardley Maps
Supporting GenericCore
TACTICAL DESIGN
Submission
Handling
Event
Mngmnt.
Session
Evaluation
Messaging Account
Handling
Schedule
Mngmnt.
DDD suits best for the
core subdomain
Movement
Build in-house
Use/buy off-the-shelf product
Outsource to utility suppliers
- or -
- or -
@suksr
ProblemSpaceSolutionSpace
StrategicDesignTacticalDesign
Business
Domain
Needs Strategy
Better Software Design
Ubiquitous Language
Domain Knowledge
Domain
Experts
Development
Teams
Collaboration
Gaining Domain Knowledge
Aligning Software Design
to Business Domain
Core
Subdomain
Discovering the
Core Subdomain
Do not apply DDD
everywhere!
Focus on your core!
Core
Subdomain
DDD helps with ...
@suksr
But ...
Some References
https://learnwardleymapping.com/
https://medium.com/wardleymaps
https://miro.com/blog/wardley-maps-whiteboard-canvas/
https://community.wardleymaps.com/

More Related Content

What's hot

Power bi premium
Power bi premiumPower bi premium
Power bi premium
Ike Ellis
 
Visualizing Big Data Insights with Amazon QuickSight
Visualizing Big Data Insights with Amazon QuickSightVisualizing Big Data Insights with Amazon QuickSight
Visualizing Big Data Insights with Amazon QuickSight
Amazon Web Services
 
Day 4 - Cloud Migration - But How?
Day 4 - Cloud Migration - But How?Day 4 - Cloud Migration - But How?
Day 4 - Cloud Migration - But How?
Amazon Web Services
 
Azure cloud migration simplified
Azure cloud migration simplifiedAzure cloud migration simplified
Azure cloud migration simplified
Girlo
 
Let's Talk About: Database Migration Service
Let's Talk About: Database Migration ServiceLet's Talk About: Database Migration Service
Let's Talk About: Database Migration Service
Pedro Sousa
 
Running Kubernetes on AWS
Running Kubernetes on AWSRunning Kubernetes on AWS
Running Kubernetes on AWS
Amazon Web Services
 
MULTI-CLOUD ARCHITECTURE
MULTI-CLOUD ARCHITECTUREMULTI-CLOUD ARCHITECTURE
MULTI-CLOUD ARCHITECTURE
Maganathin Veeraragaloo
 
2016 06 - design your api management strategy - axway - Api Management
2016 06 - design your api management strategy - axway - Api Management2016 06 - design your api management strategy - axway - Api Management
2016 06 - design your api management strategy - axway - Api Management
SmartWave
 
Customer migration to azure sql database from on-premises SQL, for a SaaS app...
Customer migration to azure sql database from on-premises SQL, for a SaaS app...Customer migration to azure sql database from on-premises SQL, for a SaaS app...
Customer migration to azure sql database from on-premises SQL, for a SaaS app...
George Walters
 
(BIZ305) Case Study: Migrating Oracle E-Business Suite to AWS | AWS re:Invent...
(BIZ305) Case Study: Migrating Oracle E-Business Suite to AWS | AWS re:Invent...(BIZ305) Case Study: Migrating Oracle E-Business Suite to AWS | AWS re:Invent...
(BIZ305) Case Study: Migrating Oracle E-Business Suite to AWS | AWS re:Invent...
Amazon Web Services
 
Reduce Costs and Build a Strong Operational Foundation with the AWS Migration...
Reduce Costs and Build a Strong Operational Foundation with the AWS Migration...Reduce Costs and Build a Strong Operational Foundation with the AWS Migration...
Reduce Costs and Build a Strong Operational Foundation with the AWS Migration...
Amazon Web Services
 
DevOps feedback loops
DevOps feedback loopsDevOps feedback loops
DevOps feedback loops
Paul Peissner
 
Visualizing Big Data Insights with Amazon QuickSight
Visualizing Big Data Insights with Amazon QuickSightVisualizing Big Data Insights with Amazon QuickSight
Visualizing Big Data Insights with Amazon QuickSight
Amazon Web Services
 
Microsoft Azure Overview Infographic
Microsoft Azure Overview InfographicMicrosoft Azure Overview Infographic
Microsoft Azure Overview Infographic
Microsoft Azure
 
Azure Cloud Adoption Framework + Governance - Sana Khan and Jay Kumar
Azure Cloud Adoption Framework + Governance - Sana Khan and Jay Kumar Azure Cloud Adoption Framework + Governance - Sana Khan and Jay Kumar
Azure Cloud Adoption Framework + Governance - Sana Khan and Jay Kumar
Timothy McAliley
 
Cloud Migration Cookbook: A Guide To Moving Your Apps To The Cloud
Cloud Migration Cookbook: A Guide To Moving Your Apps To The CloudCloud Migration Cookbook: A Guide To Moving Your Apps To The Cloud
Cloud Migration Cookbook: A Guide To Moving Your Apps To The Cloud
New Relic
 
Dell Technologies Dell EMC ISILON Storage On One Single Page - POSTER - v1a S...
Dell Technologies Dell EMC ISILON Storage On One Single Page - POSTER - v1a S...Dell Technologies Dell EMC ISILON Storage On One Single Page - POSTER - v1a S...
Dell Technologies Dell EMC ISILON Storage On One Single Page - POSTER - v1a S...
Smarter.World
 
Data Center Migration Essentials - Adam Saint-Prix Tim Wong
Data Center Migration Essentials - Adam Saint-Prix Tim WongData Center Migration Essentials - Adam Saint-Prix Tim Wong
Data Center Migration Essentials - Adam Saint-Prix Tim Wong
Atlassian
 
Executing a Large-Scale Migration to AWS
Executing a Large-Scale Migration to AWSExecuting a Large-Scale Migration to AWS
Executing a Large-Scale Migration to AWS
Amazon Web Services
 

What's hot (20)

Power bi premium
Power bi premiumPower bi premium
Power bi premium
 
Visualizing Big Data Insights with Amazon QuickSight
Visualizing Big Data Insights with Amazon QuickSightVisualizing Big Data Insights with Amazon QuickSight
Visualizing Big Data Insights with Amazon QuickSight
 
Day 4 - Cloud Migration - But How?
Day 4 - Cloud Migration - But How?Day 4 - Cloud Migration - But How?
Day 4 - Cloud Migration - But How?
 
Azure cloud migration simplified
Azure cloud migration simplifiedAzure cloud migration simplified
Azure cloud migration simplified
 
Let's Talk About: Database Migration Service
Let's Talk About: Database Migration ServiceLet's Talk About: Database Migration Service
Let's Talk About: Database Migration Service
 
Running Kubernetes on AWS
Running Kubernetes on AWSRunning Kubernetes on AWS
Running Kubernetes on AWS
 
Cloud Migration Workshop
Cloud Migration WorkshopCloud Migration Workshop
Cloud Migration Workshop
 
MULTI-CLOUD ARCHITECTURE
MULTI-CLOUD ARCHITECTUREMULTI-CLOUD ARCHITECTURE
MULTI-CLOUD ARCHITECTURE
 
2016 06 - design your api management strategy - axway - Api Management
2016 06 - design your api management strategy - axway - Api Management2016 06 - design your api management strategy - axway - Api Management
2016 06 - design your api management strategy - axway - Api Management
 
Customer migration to azure sql database from on-premises SQL, for a SaaS app...
Customer migration to azure sql database from on-premises SQL, for a SaaS app...Customer migration to azure sql database from on-premises SQL, for a SaaS app...
Customer migration to azure sql database from on-premises SQL, for a SaaS app...
 
(BIZ305) Case Study: Migrating Oracle E-Business Suite to AWS | AWS re:Invent...
(BIZ305) Case Study: Migrating Oracle E-Business Suite to AWS | AWS re:Invent...(BIZ305) Case Study: Migrating Oracle E-Business Suite to AWS | AWS re:Invent...
(BIZ305) Case Study: Migrating Oracle E-Business Suite to AWS | AWS re:Invent...
 
Reduce Costs and Build a Strong Operational Foundation with the AWS Migration...
Reduce Costs and Build a Strong Operational Foundation with the AWS Migration...Reduce Costs and Build a Strong Operational Foundation with the AWS Migration...
Reduce Costs and Build a Strong Operational Foundation with the AWS Migration...
 
DevOps feedback loops
DevOps feedback loopsDevOps feedback loops
DevOps feedback loops
 
Visualizing Big Data Insights with Amazon QuickSight
Visualizing Big Data Insights with Amazon QuickSightVisualizing Big Data Insights with Amazon QuickSight
Visualizing Big Data Insights with Amazon QuickSight
 
Microsoft Azure Overview Infographic
Microsoft Azure Overview InfographicMicrosoft Azure Overview Infographic
Microsoft Azure Overview Infographic
 
Azure Cloud Adoption Framework + Governance - Sana Khan and Jay Kumar
Azure Cloud Adoption Framework + Governance - Sana Khan and Jay Kumar Azure Cloud Adoption Framework + Governance - Sana Khan and Jay Kumar
Azure Cloud Adoption Framework + Governance - Sana Khan and Jay Kumar
 
Cloud Migration Cookbook: A Guide To Moving Your Apps To The Cloud
Cloud Migration Cookbook: A Guide To Moving Your Apps To The CloudCloud Migration Cookbook: A Guide To Moving Your Apps To The Cloud
Cloud Migration Cookbook: A Guide To Moving Your Apps To The Cloud
 
Dell Technologies Dell EMC ISILON Storage On One Single Page - POSTER - v1a S...
Dell Technologies Dell EMC ISILON Storage On One Single Page - POSTER - v1a S...Dell Technologies Dell EMC ISILON Storage On One Single Page - POSTER - v1a S...
Dell Technologies Dell EMC ISILON Storage On One Single Page - POSTER - v1a S...
 
Data Center Migration Essentials - Adam Saint-Prix Tim Wong
Data Center Migration Essentials - Adam Saint-Prix Tim WongData Center Migration Essentials - Adam Saint-Prix Tim Wong
Data Center Migration Essentials - Adam Saint-Prix Tim Wong
 
Executing a Large-Scale Migration to AWS
Executing a Large-Scale Migration to AWSExecuting a Large-Scale Migration to AWS
Executing a Large-Scale Migration to AWS
 

Similar to Designing a Serverless Application with Domain Driven Design

Preparing for a future Microservices journey using DDD & Wardley Maps
Preparing for a future Microservices journey using DDD & Wardley MapsPreparing for a future Microservices journey using DDD & Wardley Maps
Preparing for a future Microservices journey using DDD & Wardley Maps
Susanne Kaiser
 
Cloud Native Cost Optimization UCC
Cloud Native Cost Optimization UCCCloud Native Cost Optimization UCC
Cloud Native Cost Optimization UCC
Adrian Cockcroft
 
Preparing for a future Microservices journey - Susanne Kaiser
Preparing for a future Microservices journey - Susanne Kaiser Preparing for a future Microservices journey - Susanne Kaiser
Preparing for a future Microservices journey - Susanne Kaiser
camunda services GmbH
 
Best Practices for Building a Warehouse Quickly
Best Practices for Building a Warehouse QuicklyBest Practices for Building a Warehouse Quickly
Best Practices for Building a Warehouse Quickly
WhereScape
 
Summer "Tuning" in Jira and DevSecOps
Summer "Tuning" in Jira and DevSecOpsSummer "Tuning" in Jira and DevSecOps
Summer "Tuning" in Jira and DevSecOps
AUGNYC
 
VMworld 2014: Art of IT Infrastructure Design
VMworld 2014: Art of IT Infrastructure DesignVMworld 2014: Art of IT Infrastructure Design
VMworld 2014: Art of IT Infrastructure Design
VMworld
 
Microservices the Good Bad and the Ugly
Microservices the Good Bad and the UglyMicroservices the Good Bad and the Ugly
Microservices the Good Bad and the Ugly
Adrian Cockcroft
 
BusinessIntelligenze - On Cloud BI (English)
BusinessIntelligenze - On Cloud BI (English)BusinessIntelligenze - On Cloud BI (English)
BusinessIntelligenze - On Cloud BI (English)BusinessIntelligenze
 
Introduction to Wardley Maps
Introduction to Wardley MapsIntroduction to Wardley Maps
Introduction to Wardley Maps
Steve Purkis
 
Preparing for a future microservices journey (with Wardley Maps)
Preparing for a future microservices journey (with Wardley Maps)Preparing for a future microservices journey (with Wardley Maps)
Preparing for a future microservices journey (with Wardley Maps)
Susanne Kaiser
 
Technology and Digital Platform | 2019 partner summit
Technology and Digital Platform | 2019 partner summitTechnology and Digital Platform | 2019 partner summit
Technology and Digital Platform | 2019 partner summit
Andrew Kumar
 
Introducing domain driven design - dogfood con 2018
Introducing domain driven design - dogfood con 2018Introducing domain driven design - dogfood con 2018
Introducing domain driven design - dogfood con 2018
Steven Smith
 
SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI...
SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI...SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI...
SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI...
Wojciech Seliga
 
Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...
Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...
Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...
Spark Summit
 
Higher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with HabitatHigher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with Habitat
Nell Shamrell-Harrington
 
06Class_Presentation_AS463561.pdf
06Class_Presentation_AS463561.pdf06Class_Presentation_AS463561.pdf
06Class_Presentation_AS463561.pdf
ssusere16b3b
 
Containers and the Docker EE Difference and usecases
Containers and the Docker EE Difference and usecasesContainers and the Docker EE Difference and usecases
Containers and the Docker EE Difference and usecases
Ashnikbiz
 
Tech-Cell-The Catalyst to Digital Transformation_00.pdf
Tech-Cell-The Catalyst to Digital Transformation_00.pdfTech-Cell-The Catalyst to Digital Transformation_00.pdf
Tech-Cell-The Catalyst to Digital Transformation_00.pdf
binhinindia
 
Improving Your Company’s Health with Middleware Takeout
Improving Your Company’s Health with Middleware TakeoutImproving Your Company’s Health with Middleware Takeout
Improving Your Company’s Health with Middleware Takeout
VMware Tanzu
 
Dockercon State of the Art in Microservices
Dockercon State of the Art in MicroservicesDockercon State of the Art in Microservices
Dockercon State of the Art in Microservices
Adrian Cockcroft
 

Similar to Designing a Serverless Application with Domain Driven Design (20)

Preparing for a future Microservices journey using DDD & Wardley Maps
Preparing for a future Microservices journey using DDD & Wardley MapsPreparing for a future Microservices journey using DDD & Wardley Maps
Preparing for a future Microservices journey using DDD & Wardley Maps
 
Cloud Native Cost Optimization UCC
Cloud Native Cost Optimization UCCCloud Native Cost Optimization UCC
Cloud Native Cost Optimization UCC
 
Preparing for a future Microservices journey - Susanne Kaiser
Preparing for a future Microservices journey - Susanne Kaiser Preparing for a future Microservices journey - Susanne Kaiser
Preparing for a future Microservices journey - Susanne Kaiser
 
Best Practices for Building a Warehouse Quickly
Best Practices for Building a Warehouse QuicklyBest Practices for Building a Warehouse Quickly
Best Practices for Building a Warehouse Quickly
 
Summer "Tuning" in Jira and DevSecOps
Summer "Tuning" in Jira and DevSecOpsSummer "Tuning" in Jira and DevSecOps
Summer "Tuning" in Jira and DevSecOps
 
VMworld 2014: Art of IT Infrastructure Design
VMworld 2014: Art of IT Infrastructure DesignVMworld 2014: Art of IT Infrastructure Design
VMworld 2014: Art of IT Infrastructure Design
 
Microservices the Good Bad and the Ugly
Microservices the Good Bad and the UglyMicroservices the Good Bad and the Ugly
Microservices the Good Bad and the Ugly
 
BusinessIntelligenze - On Cloud BI (English)
BusinessIntelligenze - On Cloud BI (English)BusinessIntelligenze - On Cloud BI (English)
BusinessIntelligenze - On Cloud BI (English)
 
Introduction to Wardley Maps
Introduction to Wardley MapsIntroduction to Wardley Maps
Introduction to Wardley Maps
 
Preparing for a future microservices journey (with Wardley Maps)
Preparing for a future microservices journey (with Wardley Maps)Preparing for a future microservices journey (with Wardley Maps)
Preparing for a future microservices journey (with Wardley Maps)
 
Technology and Digital Platform | 2019 partner summit
Technology and Digital Platform | 2019 partner summitTechnology and Digital Platform | 2019 partner summit
Technology and Digital Platform | 2019 partner summit
 
Introducing domain driven design - dogfood con 2018
Introducing domain driven design - dogfood con 2018Introducing domain driven design - dogfood con 2018
Introducing domain driven design - dogfood con 2018
 
SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI...
SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI...SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI...
SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI...
 
Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...
Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...
Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...
 
Higher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with HabitatHigher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with Habitat
 
06Class_Presentation_AS463561.pdf
06Class_Presentation_AS463561.pdf06Class_Presentation_AS463561.pdf
06Class_Presentation_AS463561.pdf
 
Containers and the Docker EE Difference and usecases
Containers and the Docker EE Difference and usecasesContainers and the Docker EE Difference and usecases
Containers and the Docker EE Difference and usecases
 
Tech-Cell-The Catalyst to Digital Transformation_00.pdf
Tech-Cell-The Catalyst to Digital Transformation_00.pdfTech-Cell-The Catalyst to Digital Transformation_00.pdf
Tech-Cell-The Catalyst to Digital Transformation_00.pdf
 
Improving Your Company’s Health with Middleware Takeout
Improving Your Company’s Health with Middleware TakeoutImproving Your Company’s Health with Middleware Takeout
Improving Your Company’s Health with Middleware Takeout
 
Dockercon State of the Art in Microservices
Dockercon State of the Art in MicroservicesDockercon State of the Art in Microservices
Dockercon State of the Art in Microservices
 

Recently uploaded

Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 

Recently uploaded (20)

Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 

Designing a Serverless Application with Domain Driven Design

  • 1. Designing a Serverless Application with Domain Driven Design Susanne Kaiser Independent Tech Consultant @suksr
  • 2. $2,840,000,000,000 TWOTRILLIONEIGHTHUNDREDFOURTYBILLION USD Costs of Poor Software Quality in the US in 2018 (by CISQ report ) Source: https://www.it-cisq.org/the-cost-of-poor-quality-software-in-the-us-a-2018-report @suksr
  • 3. Areas of Cost Relating To Poor Software Quality Source: https://www.it-cisq.org/the-cost-of-poor-quality-software-in-the-us-a-2018-report @suksr
  • 4. Some Indicators for Poor Software Quality (extracted from CISQ report ) t Defects 0% Increasing defect trend Low test coverage Cyclomatic complexity Large inheritance depth High amount of effort to understand piece of code Badly engineered software Lack of domain knowledge Based on: https://www.it-cisq.org/the-cost-of-poor-quality-software-in-the-us-a-2018-report Communication and coordination breakdowns in (large) teams High degree of class coupling @suksr
  • 5. Domain Driven Design (DDD) Business Domain Needs Strategy Software Design @suksr
  • 6. Domain Driven Design (DDD) – Terminology Strategic Design Tactical Design Bounded Context Ubiquitous Language Core Subdomain Supporting Subdomain Generic Subdomain Problem Space Solution Space Context Maps Anti-Corruption Layer Shared Kernel Open Host Service Separate Ways Partnership Customer-Supplier Conformist Domain Model Entity Value Object Aggregate Repository Factory Application Service Domain Service Domain Event @suksr
  • 7. DDD & Wardley Maps ValueChainInvisibleVisible Evolution Genesis Custom-Built Product (+rental) Commodity (+utility) Position Movement Uncharted Industrialised @suksr
  • 8. ValueChain InvisibleVisible Evolution Visualisation of a value chain’s evolution Genesis Custom-Built Product (+rental) Commodity (+utility) Position Movement Wardley Maps BY SIMON WARDLEY Uncharted Industrialised @suksr
  • 9. Wardley Maps – VALUE CHAIN Who are your users? ValueChain InvisibleVisible @suksr
  • 10. Wardley Maps – VALUE CHAIN Who are your users? What are your users’ needs? ValueChain InvisibleVisible @suksr
  • 11. Wardley Maps – VALUE CHAIN Who are your users? What are your users’ needs? What are the components/activities to fulfill your users’ needs incl. dependencies? ValueChain InvisibleVisible Position @suksr
  • 12. Wardley Maps – LANDSCAPE ValueChain InvisibleVisible Evolution Components along evolution axes Genesis Custom-Built Product (+rental) Commodity (+utility) Position Movement @suksr
  • 13. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Everything evolves Past Current Future Supply CompetitionDemand Competition Uncharted Industrialised Wardley Maps – PATTERNS Movement @suksr
  • 14. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Past Current Future Characteristics changeUncharted Undefined market Uncertain Unpredictable Rare Poorly understood Forming market Learning on use Increasing understanding Slowly increasing consumption Rapid increases in learning Growing market Learning on operation Increasing education Rapidly increasing consumption Rapid increase in use Mature market Known / accepted Stable Widespread and stabilising Commonly understood (in term of use) Industrialised Wardley Maps – PATTERNS Movement @suksr
  • 15. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Wardley Maps – PRINCIPLES Use appropriate methods per evolution stage Build in-house Use/buy off-the-shelf product Outsource to utility suppliers @suksr
  • 16. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Use appropriate methods per evolution stage Wardley Maps – PRINCIPLES Build in-house Use/buy off-the-shelf product Outsource to utility suppliers @suksr
  • 17. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Use appropriate methods per evolution stage Wardley Maps – PRINCIPLES Build in-house Use/buy off-the-shelf product Outsource to utility suppliers @suksr
  • 18. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Know your users & focus on user needs Wardley Maps – PRINCIPLES Build in-house / Agile Use/buy off-the-shelf product / Lean Outsource to utility suppliers / Six Sigma @suksr
  • 19. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution DDD & Wardley Maps Ubiquitous Language Domain Knowledge Understanding the problem domain first Problem Domain Domain Experts Development Teams Collaboration @suksr
  • 20. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution DDD & Wardley Maps Problem Domain Strategic Design DDD Patterns & Practices Tactical Design @suksr
  • 21. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution DDD & Wardley Maps Problem Domain Strategic Design DDD Patterns & Practices Tactical Design Analysing the business domain Discovering Subdomains Problem Space Decomposing into modular components (Bounded Contexts) Mapping interaction patterns between BC (Context Maps) Solution Space @suksr
  • 22. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution DDD & Wardley Maps Problem Domain Strategic Design DDD Patterns & Practices Tactical Design Architecting a solution fitting the problem domain as closely as possible Provides building blocks to implement domain model Analysing the business domain Discovering Subdomains Problem Space Decomposing into modular components (Bounded Contexts (BC) Mapping interaction patterns between BC (Context Maps) Solution Space @suksr Solution Space
  • 23. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Distilling the problem domain & discovering the core subdomain DDD & Wardley Maps Core Subdomain Problem Domain STRATEGIC DESIGN (PROBLEM SPACE) Supporting Subdomain Generic Subdomain ProblemSpace @suksr
  • 24. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Distilling the problem domain & discovering the core subdomain DDD & Wardley Maps Core Subdomain Problem Domain Competitive advantage Complex Changes often Build in-house STRATEGIC DESIGN (PROBLEM SPACE) Supporting Subdomain Generic Subdomain ProblemSpace @suksr
  • 25. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Distilling the problem domain & discovering the core subdomain DDD & Wardley Maps Core Subdomain Problem Domain Competitive advantage Complex Changes often Build in-house No competitive advantage Quite simple Does not change often Prefer to buy/use off-the-shelf STRATEGIC DESIGN (PROBLEM SPACE) Supporting Subdomain Generic Subdomain ProblemSpace @suksr
  • 26. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Distilling the problem domain & discovering the core subdomain DDD & Wardley Maps Core Subdomain Problem Domain Competitive advantage Complex Changes often Build in-house No competitive advantage Quite simple Does not change often Prefer to buy/use off-the-shelf No competitive advantage Generally complex Does not change often Buy/use off-the-shelf / outsource STRATEGIC DESIGN (PROBLEM SPACE) Supporting Subdomain Generic Subdomain ProblemSpace @suksr
  • 27. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Model Driven Design DDD & Wardley Maps STRATEGIC DESIGN (SOLUTION SPACE) Development Teams Domain Experts Ubiquitous Language Analysis Model Code Model Domain Model Core Subdomain Supporting Subdomain Generic Subdomain Problem Domain ProblemSpaceSolutionSpace abstracted by @suksr
  • 28. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Bounded Contexts DDD & Wardley Maps STRATEGIC DESIGN (SOLUTION SPACE) Core Subdomain Supporting Subdomain Generic Subdomain Problem Domain ProblemSpaceSolutionSpace Linguistic/semantic boundary Ownership boundary Model boundary Physical boundary Different architectural patterns per context possible @suksr
  • 29. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution ProblemSpace Evaluate Submissions Manage Event Organiser Build & Publish Schedule Communicate w/ Speakers Signup/Signin Know your users & focus on user needs Submit Session DDD & Wardley Maps STRATEGIC DESIGN (PROBLEM SPACE) Speaker @suksr
  • 30. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution ProblemSpace Evaluate Submissions Manage Event Organiser Build & Publish Schedule Communicate w/ Speakers Signup/Signin Speaker Submit Session DDD & Wardley Maps STRATEGIC DESIGN (PROBLEM SPACE) Discovering subdomains Supporting GenericCore @suksr
  • 31. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution ProblemSpace Evaluate Submissions Manage Event Organiser Build & Publish Schedule Communicate w/ Speakers Signup/Signin Speaker Submit Session DDD & Wardley Maps STRATEGIC DESIGN (SOLUTION SPACE) Supporting GenericCore Event Evaluation AccountSchedule MessageSession Domain Models SolutionSpace @suksr
  • 32. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution ProblemSpace Evaluate Submissions Manage Event Organiser Build & Publish Schedule Communicate w/ Speakers Signup/Signin Speaker Submit Session DDD & Wardley Maps Supporting GenericCore Event Evaluation AccountSchedule Message Speaker Session CfP SolutionSpace STRATEGIC DESIGN (SOLUTION SPACE) Domain Models @suksr
  • 33. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution ProblemSpace Evaluate Submissions Manage Event Organiser Build & Publish Schedule Communicate w/ Speakers Signup/Signin Speaker Submit Session DDD & Wardley Maps Supporting GenericCore Event Evaluation AccountSchedule Message Speaker Profile Submitted Session CfP Settings Recipient Open CfP Evaluated Session Scheduled Session SolutionSpace STRATEGIC DESIGN (SOLUTION SPACE) Domain Models @suksr
  • 34. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution ProblemSpace Evaluate Submissions Manage Event Organiser Build & Publish Schedule Communicate w/ Speakers Signup/Signin Speaker Submit Session DDD & Wardley Maps Supporting GenericCore SolutionSpace STRATEGIC DESIGN (SOLUTION SPACE) Bounded Contexts Linguistic/semantic boundary Model integrity boundary Event Evaluation AccountSchedule MessageSubmitted Session CfP Settings Recipient Open CfP Evaluated Session Scheduled Session Speaker Profile Session Evaluation Submission Handling Event Mngmnt. Schedule Mngmnt. Messaging Account Handling @suksr
  • 35. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution ProblemSpace Evaluate Submissions Manage Event Organiser Build & Publish Schedule Communicate w/ Speakers Signup/Signin Speaker Submit Session DDD & Wardley Maps Supporting GenericCore SolutionSpace STRATEGIC DESIGN (SOLUTION SPACE) Submission Handling Event Mngmnt. Session Evaluation Messaging Account Handling Schedule Mngmnt. Bounded Contexts Ownership boundary Linguistic/semantic boundary Model integrity boundary @suksr
  • 36. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution ProblemSpace Evaluate Submissions Manage Event Organiser Build & Publish Schedule Communicate w/ Speakers Signup/Signin Speaker Submit Session DDD & Wardley Maps Supporting GenericCore SolutionSpace STRATEGIC DESIGN (SOLUTION SPACE) Submission Handling Event Mngmnt. Session Evaluation Messaging Account Handling Schedule Mngmnt. Bounded Contexts Ownership boundary Linguistic/semantic boundary Model integrity boundary Physical boundary SCM Data store CI/CD Artefact @suksr
  • 37. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution ProblemSpace Evaluate Submissions Manage Event Organiser Build & Publish Schedule Communicate w/ Speakers Signup/Signin Speaker Submit Session DDD & Wardley Maps Supporting GenericCore SolutionSpace TACTICAL DESIGN Submission Handling Event Mngmnt. Session Evaluation Messaging Account Handling Schedule Mngmnt. Architectural Patterns Architectural patterns can differ per Bounded Context, e.g. StrategicDesignTacticalDesign Layered Architecture Hexagonal Architecture CQRS @suksr
  • 39. Hexagonal Architecture Business Logic Application Port Adapter BOUNDED CONTEXT: EVENT MANAGEMENT EventController AWS API Gateway Port REST-API with AWS API-Gateway and AWS Lambda EventController AWS API Gateway newEvent deleteEvent activateEvent POST /events DELETE /events/{id} POST /events/{id}/activate Inner Outer Outside @suksr
  • 40. export class EventsController { private readonly eventsService: EventApplicationService; public constructor(eventsService: EventApplicationService) { this.eventsService = eventsService; } public activateEvent: Handler = async (event: APIGatewayEvent, context: Context, callback: Callback) => { if (!event.pathParameters) { return callback(undefined, failure({ status: "error", error: "no event id specified" })); } if (!event.requestContext.authorizer) { return callback(undefined, failure({ status: "error", error: "no authorized user specified" })); } try { const eventId = new EventId(event.pathParameters.id); const userId = new UserId(event.requestContext.authorizer.claims['cognito:username']); await this.eventsService.activateEvent(eventId, userId); callback(undefined, success({status: "ok"})); } catch(e) { return callback(undefined, failure({ status: "error", error: e })); } }; public newEvent: Handler = async (event: APIGatewayEvent, context: Context, callback: Callback) => { // ... // } REST-API AdapterPort Lambda Function Lambda Function Hexagonal Architecture BOUNDED CONTEXT: EVENT MANAGEMENT @suksr
  • 41. Hexagonal Architecture Business Logic Application Port BOUNDED CONTEXT: EVENT MANAGEMENT EventController AWS API Gateway Port Data Storage with AWS DynamoDB DynamoDBEventRepository Inner Outer Outside @suksr
  • 42. export default class DynamoDBEventRepository implements EventRepository { private static TABLE_NAME: string = "events"; private readonly dynamoDbClient: AWS.DynamoDB.DocumentClient; constructor() { this.dynamoDbClient = new AWS.DynamoDB.DocumentClient(); } public async eventOfId(id: EventId): Promise<Event|null> { const params : DocumentClient.GetItemInput = { TableName: DynamoDBEventRepository.TABLE_NAME, Key: { eventId: id } }; const result: DocumentClient.GetItemOutput = await this.dynamoDbClient.get(params).promise(); const item: AttributeMap|undefined = result.Item; if (item) { const id = new EventId(item.eventId); const name = Name.create(item.name); const description = Description.create(item.description); const period = Period.create(item.period.startDate, item.period.endDate); return Event.create(id, name, item.eventStatus, period, description); } return null; } public saveEvent(event: Event) { const params : DocumentClient.PutItemInput = { // ... // }; return this.dynamoDbClient.put(params).promise(); } } Hexagonal Architecture Database AdapterPort DynamoDB Client BOUNDED CONTEXT: EVENT MANAGEMENT @suksr
  • 43. Hexagonal Architecture Business Logic Application Port BOUNDED CONTEXT: EVENT MANAGEMENT EventController AWS API Gateway Port DynamoDBEventRepository Business Logic Implementation Inner Outer Outside @suksr
  • 44. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Evaluate Submissions Manage Event Organiser Build & Publish Schedule Communicate w/ Speakers Signup/Signin Speaker Submit Session DDD & Wardley Maps Supporting GenericCore TACTICAL DESIGN Submission Handling Event Mngmnt. Session Evaluation Messaging Account Handling Schedule Mngmnt. Business Logic Implementation Patterns Business logic implementation patterns can differ per Bounded Context, e.g. Domain Model Active Record Transaction Script @suksr ProblemSpaceSolutionSpace StrategicDesignTacticalDesign
  • 45. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Evaluate Submissions Manage Event Organiser Build & Publish Schedule Communicate w/ Speakers Signup/Signin Speaker Submit Session DDD & Wardley Maps Supporting GenericCore TACTICAL DESIGN Submission Handling Event Mngmnt. Session Evaluation Messaging Account Handling Schedule Mngmnt. Building Blocks of Domain Models ● Value Object ● Entity ● Aggregate ● Repository ● ApplicationService ● Domain Event ● ... @suksr ProblemSpaceSolutionSpace StrategicDesignTacticalDesign
  • 46. Domain Model BC: EVENT MANAGEMENT Event create: Event activate reschedule rename EventId id: string Name create: Name name: string EventStatus CREATED ACTIVATED DEACTIVATED deactivate Description create: Description desc: string Period create: Period start: Date end: Date Value Object Entity Aggregate Root Aggregate Application Port EventController AWS API Gateway Port DynamoDBEventRepository Event @suksr
  • 47. export default class Event { readonly id: EventId; name: Name; description?: Description; status: EventStatus; period: Period; private constructor(id: EventId, name: Name, status: EventStatus, period: Period, description?: Description) { this.id = id; this.name = name; this.description = description; this.status = status; this.period = period; } public activate() { if (this.status === EventStatus.CLOSED) { throw new Error("You cannot activate a closed event"); } if (this.status === EventStatus.ACTIVATED) { throw new Error("This event has already been activated"); } this.status = EventStatus.ACTIVATED; } public rename(name: Name) { if (!name) { throw new Error("You cannot rename the event to an empty name"); } this.name = name; } // ... // } Aggregate @suksr
  • 48. Domain Model BC: EVENT MANAGEMENT Application EventController AWS API Gateway DynamoDBEventRepository Event EventApplicationService EventRepository @suksr
  • 49. export default class EventApplicationService { private readonly eventRepository: EventRepository; constructor(eventRepository: EventRepository) { this.eventRepository = eventRepository; } public async activateEvent(id: EventId) { const event = await this.eventRepository.eventOfId(id); if (!event) { throw new Error("Could not deactivate event with id " + id + ", since event does not exist."); } event.activate(); await this.eventRepository.saveEvent(event); } // ... // } ApplicationService Domain Model EVENT MANAGEMENT @suksr
  • 50. Domain Model EVENT MANAGEMENT Application EventController AWS API Gateway DynamoDBEventRepository Event EventApplicationService EventRepository export default interface EventRepository { saveEvent(event: Event): void; eventOfId(id: EventId): Promise<Event|null>; // ... // } @suksr
  • 51. ValueChain InvisibleVisible Genesis Custom-Built Product (+rental) Commodity (+utility) Evolution Evaluate Submissions Manage Event Organiser Build & Publish Schedule Communicate w/ Speakers Signup/Signin Speaker Submit Session DDD & Wardley Maps Supporting GenericCore TACTICAL DESIGN Submission Handling Event Mngmnt. Session Evaluation Messaging Account Handling Schedule Mngmnt. DDD suits best for the core subdomain Movement Build in-house Use/buy off-the-shelf product Outsource to utility suppliers - or - - or - @suksr ProblemSpaceSolutionSpace StrategicDesignTacticalDesign
  • 52. Business Domain Needs Strategy Better Software Design Ubiquitous Language Domain Knowledge Domain Experts Development Teams Collaboration Gaining Domain Knowledge Aligning Software Design to Business Domain Core Subdomain Discovering the Core Subdomain Do not apply DDD everywhere! Focus on your core! Core Subdomain DDD helps with ... @suksr But ...