SlideShare una empresa de Scribd logo
1 de 53
Descargar para leer sin conexión
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/

Más contenido relacionado

La actualidad más candente

Beyond the Spotify model - Team Topologies - Keynote at JAX DevOps 2019-05-16...
Beyond the Spotify model - Team Topologies - Keynote at JAX DevOps 2019-05-16...Beyond the Spotify model - Team Topologies - Keynote at JAX DevOps 2019-05-16...
Beyond the Spotify model - Team Topologies - Keynote at JAX DevOps 2019-05-16...Matthew Skelton
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Tom Kocjan
 
Unit test your java architecture with ArchUnit
Unit test your java architecture with ArchUnitUnit test your java architecture with ArchUnit
Unit test your java architecture with ArchUnitJeremy Cook
 
Domain driven design and model driven development
Domain driven design and model driven developmentDomain driven design and model driven development
Domain driven design and model driven developmentDmitry Geyzersky
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationOğuzhan Soykan
 
Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean ArchitectureMattia Battiston
 
20221027 - Agile Tour Bordeaux - L'odyssée vers le CI/CD: est-il possible de...
20221027 - Agile Tour Bordeaux - L'odyssée vers le CI/CD: est-il possible  de...20221027 - Agile Tour Bordeaux - L'odyssée vers le CI/CD: est-il possible  de...
20221027 - Agile Tour Bordeaux - L'odyssée vers le CI/CD: est-il possible de...Jérôme Froville
 
From capabilities to services modelling for business-it alignment v.2
From capabilities to services   modelling for business-it alignment v.2From capabilities to services   modelling for business-it alignment v.2
From capabilities to services modelling for business-it alignment v.2Trond Hjorteland
 
Simplify DevOps with Microservices and Mobile Backends.pptx
Simplify DevOps with Microservices and Mobile Backends.pptxSimplify DevOps with Microservices and Mobile Backends.pptx
Simplify DevOps with Microservices and Mobile Backends.pptxssuser5faa791
 
Digital Transformation And Solution Architecture
Digital Transformation And Solution ArchitectureDigital Transformation And Solution Architecture
Digital Transformation And Solution ArchitectureAlan McSweeney
 
Microservices - Death of the Enterprise Service Bus (ESB)? (Update 2016)
Microservices - Death of the Enterprise Service Bus (ESB)? (Update 2016)Microservices - Death of the Enterprise Service Bus (ESB)? (Update 2016)
Microservices - Death of the Enterprise Service Bus (ESB)? (Update 2016)Kai Wähner
 
DevDay2017 ESGI Essential DDD
DevDay2017 ESGI Essential DDDDevDay2017 ESGI Essential DDD
DevDay2017 ESGI Essential DDDGregory Boissinot
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignNader Albert
 
Keynote SUGCON 2021 - Sitecore and SaaS our shared journey
Keynote SUGCON 2021 - Sitecore and SaaS our shared journeyKeynote SUGCON 2021 - Sitecore and SaaS our shared journey
Keynote SUGCON 2021 - Sitecore and SaaS our shared journeyPieter Brinkman
 

La actualidad más candente (20)

Beyond the Spotify model - Team Topologies - Keynote at JAX DevOps 2019-05-16...
Beyond the Spotify model - Team Topologies - Keynote at JAX DevOps 2019-05-16...Beyond the Spotify model - Team Topologies - Keynote at JAX DevOps 2019-05-16...
Beyond the Spotify model - Team Topologies - Keynote at JAX DevOps 2019-05-16...
 
Microstrategy Overview
Microstrategy OverviewMicrostrategy Overview
Microstrategy Overview
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Event storming
Event storming Event storming
Event storming
 
Unit test your java architecture with ArchUnit
Unit test your java architecture with ArchUnitUnit test your java architecture with ArchUnit
Unit test your java architecture with ArchUnit
 
Domain driven design and model driven development
Domain driven design and model driven developmentDomain driven design and model driven development
Domain driven design and model driven development
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) Presentation
 
Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean Architecture
 
20221027 - Agile Tour Bordeaux - L'odyssée vers le CI/CD: est-il possible de...
20221027 - Agile Tour Bordeaux - L'odyssée vers le CI/CD: est-il possible  de...20221027 - Agile Tour Bordeaux - L'odyssée vers le CI/CD: est-il possible  de...
20221027 - Agile Tour Bordeaux - L'odyssée vers le CI/CD: est-il possible de...
 
From capabilities to services modelling for business-it alignment v.2
From capabilities to services   modelling for business-it alignment v.2From capabilities to services   modelling for business-it alignment v.2
From capabilities to services modelling for business-it alignment v.2
 
Simplify DevOps with Microservices and Mobile Backends.pptx
Simplify DevOps with Microservices and Mobile Backends.pptxSimplify DevOps with Microservices and Mobile Backends.pptx
Simplify DevOps with Microservices and Mobile Backends.pptx
 
Digital Transformation And Solution Architecture
Digital Transformation And Solution ArchitectureDigital Transformation And Solution Architecture
Digital Transformation And Solution Architecture
 
Microservices - Death of the Enterprise Service Bus (ESB)? (Update 2016)
Microservices - Death of the Enterprise Service Bus (ESB)? (Update 2016)Microservices - Death of the Enterprise Service Bus (ESB)? (Update 2016)
Microservices - Death of the Enterprise Service Bus (ESB)? (Update 2016)
 
DevDay2017 ESGI Essential DDD
DevDay2017 ESGI Essential DDDDevDay2017 ESGI Essential DDD
DevDay2017 ESGI Essential DDD
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Soluciones Dynatrace
Soluciones DynatraceSoluciones Dynatrace
Soluciones Dynatrace
 
Keynote SUGCON 2021 - Sitecore and SaaS our shared journey
Keynote SUGCON 2021 - Sitecore and SaaS our shared journeyKeynote SUGCON 2021 - Sitecore and SaaS our shared journey
Keynote SUGCON 2021 - Sitecore and SaaS our shared journey
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Office Add-in development
Office Add-in developmentOffice Add-in development
Office Add-in development
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 

Similar a Designing a Serverless Application with Domain Driven Design

Cloud Native Cost Optimization UCC
Cloud Native Cost Optimization UCCCloud Native Cost Optimization UCC
Cloud Native Cost Optimization UCCAdrian 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 QuicklyWhereScape
 
Summer "Tuning" in Jira and DevSecOps
Summer "Tuning" in Jira and DevSecOpsSummer "Tuning" in Jira and DevSecOps
Summer "Tuning" in Jira and DevSecOpsAUGNYC
 
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 DesignVMworld
 
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 UglyAdrian Cockcroft
 
BusinessIntelligenze - On Cloud BI (English)
BusinessIntelligenze - On Cloud BI (English)BusinessIntelligenze - On Cloud BI (English)
BusinessIntelligenze - On Cloud BI (English)BusinessIntelligenze
 
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 summitAndrew 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 2018Steven 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 HabitatNell Shamrell-Harrington
 
06Class_Presentation_AS463561.pdf
06Class_Presentation_AS463561.pdf06Class_Presentation_AS463561.pdf
06Class_Presentation_AS463561.pdfssusere16b3b
 
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 usecasesAshnikbiz
 
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 TakeoutVMware 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 MicroservicesAdrian Cockcroft
 
Introducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemashIntroducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemashSteven Smith
 
Erik Baardse - Bringing Agility to Traditional application by docker
Erik Baardse - Bringing Agility to Traditional application by dockerErik Baardse - Bringing Agility to Traditional application by docker
Erik Baardse - Bringing Agility to Traditional application by dockerAgile Impact Conference
 
Sam George (Cisco Systems): Augmented Reality Solution for Hardware Product D...
Sam George (Cisco Systems): Augmented Reality Solution for Hardware Product D...Sam George (Cisco Systems): Augmented Reality Solution for Hardware Product D...
Sam George (Cisco Systems): Augmented Reality Solution for Hardware Product D...AugmentedWorldExpo
 

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

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)
 
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
 
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
 
Introducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemashIntroducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemash
 
Erik Baardse - Bringing Agility to Traditional application by docker
Erik Baardse - Bringing Agility to Traditional application by dockerErik Baardse - Bringing Agility to Traditional application by docker
Erik Baardse - Bringing Agility to Traditional application by docker
 
Sam George (Cisco Systems): Augmented Reality Solution for Hardware Product D...
Sam George (Cisco Systems): Augmented Reality Solution for Hardware Product D...Sam George (Cisco Systems): Augmented Reality Solution for Hardware Product D...
Sam George (Cisco Systems): Augmented Reality Solution for Hardware Product D...
 

Último

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdfChristopherTHyatt
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 

Último (20)

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 

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 ...