SlideShare a Scribd company logo
Breaking a Monolith
In-Place Refactoring with Service-Oriented Architecture
at a Life-Sciences Startup
Ryan M Harrison, PhD
Head of Engineering
BioBright
The Lab
2
3
Image Metadata
Objective
Excitation
Emission
Label
Reagents
Protocols
Exp Metadata Analysis MetadataRaw Image
Collect all the things
4
Business proposition
in development
DarwinSync DarwinSpeech DarwinTerminal
5
6
Courtesy of https://www.weave.works
7
MicroservicesMonoliths
8
Shiny things!
API Gateway Lambda
9
10
Self-reflection
- B2B / Enterprise
- Unconstrained problem
- Scaling needs?
11
Self-reflection
- B2B / Enterprise ⇒ On prem?
- Unconstrained problem ⇒ Rapid iteration
- Scaling needs? ⇒ Slow / predictable
12
Code: 2016
exports.lastActions = function(req, res) { // data query for lastActions, ember data model
console.log("req: ", req.query);
var user = req.query.user; // get user
var x1 = Math.floor(req.query.x[0]); // get start of time range
var x2 = Math.floor(req.query.x[1]); // end of time range
coknexions[req.lab]('data') // query from data table on users lab
.whereIn('source', user) // query source
.whereBetween("x",[x1, x2]) // query range
.orderBy('x', 'desc') // oldest to newest
.then(function(r){ // results in r
res.json({lastActions:r}); // send in form expected by ember
});
};
13
Self-reflection
exports.lastActions = function(req, res) {
console.log("req: ", req.query);
var user = req.query.user;
var x1 = Math.floor(req.query.x[0]);
var x2 = Math.floor(req.query.x[1]);
coknexions[req.lab]('data')
.whereIn('source', user)
.whereBetween("x",[x1, x2])
.orderBy('x', 'desc')
.then(function(r){
res.json({lastActions:r});
});
};
No documentation
14
Self-reflection
exports.lastActions = function(req, res) {
console.log("req: ", req.query);
var user = req.query.user;
var x1 = Math.floor(req.query.x[0]);
var x2 = Math.floor(req.query.x[1]);
coknexions[req.lab]('data')
.whereIn('source', user)
.whereBetween("x",[x1, x2])
.orderBy('x', 'desc')
.then(function(r){
res.json({lastActions:r});
});
};
Minimal logging
15
Self-reflection
exports.lastActions = function(req, res) {
console.log("req: ", req.query);
var user = req.query.user;
var x1 = Math.floor(req.query.x[0]);
var x2 = Math.floor(req.query.x[1]);
coknexions[req.lab]('data')
.whereIn('source', user)
.whereBetween("x",[x1, x2])
.orderBy('x', 'desc')
.then(function(r){
res.json({lastActions:r});
});
};
No input specification
(or validation)
No output specification
16
Self-reflection
exports.lastActions = function(req, res) {
console.log("req: ", req.query);
var user = req.query.user;
var x1 = Math.floor(req.query.x[0]);
var x2 = Math.floor(req.query.x[1]);
coknexions[req.lab]('data')
.whereIn('source', user)
.whereBetween("x",[x1, x2])
.orderBy('x', 'desc')
.then(function(r){
res.json({lastActions:r});
});
};
Inadequate interface to DB layer
17
Problem
- B2B / Enterprise ⇒ On prem?
- Unconstrained problem ⇒ Rapid iteration
- Scaling needs? ⇒ Slow / predictable
- Engineering maturity ⇒
- Code quality ⇒
18
Must be
this tall
to ride
(the hype)
2016
Not tall enough
19
Must be
this tall
to ride
(the hype)
?
2016
Not tall enough
20
Not tall enough
Dev portal
Monitoring
On demand infra scaling
Continuous Integration
Continuous Deployment
21
Glide paths
API spec → API docs → Dev portal
Logging → Monitoring
Infra → On demand infra scaling
Testing → Continuous Integration
Deployment → Continuous Deployment
22
3 B’s
Build it
Borrow it
Buy it
23
Image Metadata
Objective
Excitation
Emission
Label
Reagents
Protocols
Exp Metadata Analysis MetadataRaw Image
Collect all the things
24
API
25
Raw Image Analysis MetadataExperiment MetadataImage Metadata
API APIAPIAPI
API
26
API (Borrow)
/protocols/notes:
x-swagger-router-controller: protocols
post:
operationId: post_note
security:
- JWT: [write:protocols]
parameters:
...
schema:
$ref: '#/definitions/Note'
responses:
"200":
$ref: "#/responses/ProtocolsResponse"
27
API (Borrow)
function post_note (req, res) {
let content = note.value.data.attributes['content']
let context = note.value.data.attributes['context']
Note
.forge({content: content, context: context})
.save()
.then(function (response) {
let note = mapper.map(response, 'note')
return res.json(note)
})
.catch(function (err) {
...
})
}
28
API (Borrow)
- Logically separated services
- DB ORM, serialisation (JSONAPI)
- Specification and validation (middleware)
- Interactive API docs (tooling)
29
Logging (Borrow)
{
"name": "...",
"hostname": "...",
"pid": 7,
"level": 30,
"req": {
"requestID": "ab9add8f-ceb5-4015-b0d1-2b0b52772add",
"method": "POST",
"url": "/api/protocols",
"remoteAddress": "...",
"remotePort": ...,
"protocol": "https",
"xhr": false,
"headers": {
"host": "..."
}
},
"responseTime": 40.46, // milliseconds
"msg": "API request log",
"time": "...",
"v": 0.5.3
}
Bunyan
30
Logging (Borrow + Buy)
CloudWatch Logs
{
"name": "...",
"hostname": "...",
"pid": 7,
"level": 30,
"req": {
"requestID": "ab9add8f-ceb5-4015-b0d1-2b0b52772add",
"method": "POST",
"url": "/api/protocols",
"remoteAddress": "...",
"remotePort": ...,
"protocol": "https",
"xhr": false,
"headers": {
"host": "..."
}
},
"responseTime": 40.46, // milliseconds
"msg": "API request log",
"time": "...",
"v": 0.5.3
}
Bunyan
31
Infra (Borrow)
module "cloud" {
source = "./BioBrightCloud"
public-key-path = "...”
}
module "database" {
source = "./BioBrightDB"
vpc-id = "${module.cloud.vpc-id}"
database-release = "v0.1.4"
}
module "ember" {
source = "./EmberBioBright"
ember-release = "v0.3.1"
ember-environment = "${terraform.env}"
}
>> terraform apply
32
Testing (Borrow)
parameters:
device_id_path:
name: device_id
in: path
description: ID of device fetch
required: true
type: string
x-example: "..."
33
Testing (Borrow)
hooks.before('protocols > /api/protocols/notes > POST > 200 > application/json; charset=utf-8', function
(transaction) {
let testData = Math.random().toString(36).substring(2)
transaction.request.body = `{"data":{"attributes":{"content":"${testData}","context":{}}}}`
})
hooks.beforeEach(function (transaction) {
transaction.request.headers['Authorization'] = `Bearer ${jwt.token}`
})
34
Deployment (Buy)
Elastic Beanstalk Elastic Beanstalk
+
ECS
35
Summary
API spec Borrow OpenAPI
Logging Borrow + Buy Bunyan +
CloudWatch
Infra Borrow Terraform
Testing Borrow Dredd
Deployment Buy ElasticBeanStalk or
ECS
36
1:1 Service : Swagger controller
1:1 Service : CloudWatch log group
1:1 Service : Terraform Module
1:1 Service : Repo (or Container)
Service Oriented Architecture
37
MicroservicesMonoliths
Service
Oriented
Architecture
38
LinkedIn: https://www.linkedin.com/in/harrisonrm/
Medium: https://medium.com/@rmharrison
Stack Overflow: https://stackoverflow.com/story/rmharrison

More Related Content

Similar to Breaking a monolith: In-place refactoring with service-oriented architecture at a life-sciences startup

StrongLoop Overview
StrongLoop OverviewStrongLoop Overview
StrongLoop Overview
Shubhra Kar
 
Vert.x devoxx london 2013
Vert.x devoxx london 2013Vert.x devoxx london 2013
Vert.x devoxx london 2013
Stuart (Pid) Williams
 
Cloud nativemicroservices jax-london2020
Cloud nativemicroservices   jax-london2020Cloud nativemicroservices   jax-london2020
Cloud nativemicroservices jax-london2020
Emily Jiang
 
Cloud nativemicroservices jax-london2020
Cloud nativemicroservices   jax-london2020Cloud nativemicroservices   jax-london2020
Cloud nativemicroservices jax-london2020
Emily Jiang
 
Application Security Workshop
Application Security Workshop Application Security Workshop
Application Security Workshop
Priyanka Aash
 
MicroProfile, Docker, Kubernetes, Istio and Open Shift lab @dev nexus
MicroProfile, Docker, Kubernetes, Istio and Open Shift lab @dev nexusMicroProfile, Docker, Kubernetes, Istio and Open Shift lab @dev nexus
MicroProfile, Docker, Kubernetes, Istio and Open Shift lab @dev nexus
Emily Jiang
 
使用 Prometheus 監控 Kubernetes Cluster
使用 Prometheus 監控 Kubernetes Cluster 使用 Prometheus 監控 Kubernetes Cluster
使用 Prometheus 監控 Kubernetes Cluster
inwin stack
 
Reactive Microservices with Spring 5: WebFlux
Reactive Microservices with Spring 5: WebFlux Reactive Microservices with Spring 5: WebFlux
Reactive Microservices with Spring 5: WebFlux
Trayan Iliev
 
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-ServicesNode Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Chris Bailey
 
CQRS and Event Sourcing
CQRS and Event Sourcing CQRS and Event Sourcing
CQRS and Event Sourcing
Inho Kang
 
[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습
[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습
[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습
Oracle Korea
 
Analyzing the Performance of Mobile Web
Analyzing the Performance of Mobile WebAnalyzing the Performance of Mobile Web
Analyzing the Performance of Mobile Web
Ariya Hidayat
 
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMPInria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Stéphanie Roger
 
Application Security from the Inside - OWASP
Application Security from the Inside - OWASPApplication Security from the Inside - OWASP
Application Security from the Inside - OWASP
Sqreen
 
CMPT470-usask-guest-lecture
CMPT470-usask-guest-lectureCMPT470-usask-guest-lecture
CMPT470-usask-guest-lecture
Masud Rahman
 
Building a web application with ontinuation monads
Building a web application with ontinuation monadsBuilding a web application with ontinuation monads
Building a web application with ontinuation monads
Seitaro Yuuki
 
DeployR: Revolution R Enterprise with Business Intelligence Applications
DeployR: Revolution R Enterprise with Business Intelligence ApplicationsDeployR: Revolution R Enterprise with Business Intelligence Applications
DeployR: Revolution R Enterprise with Business Intelligence Applications
Revolution Analytics
 
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesIBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
Chris Bailey
 
SharePoint for the .NET Developer
SharePoint for the .NET DeveloperSharePoint for the .NET Developer
SharePoint for the .NET Developer
John Calvert
 
Webcast: API-Centric Architecture for Building Context-Aware Apps
Webcast: API-Centric Architecture for Building Context-Aware AppsWebcast: API-Centric Architecture for Building Context-Aware Apps
Webcast: API-Centric Architecture for Building Context-Aware Apps
Apigee | Google Cloud
 

Similar to Breaking a monolith: In-place refactoring with service-oriented architecture at a life-sciences startup (20)

StrongLoop Overview
StrongLoop OverviewStrongLoop Overview
StrongLoop Overview
 
Vert.x devoxx london 2013
Vert.x devoxx london 2013Vert.x devoxx london 2013
Vert.x devoxx london 2013
 
Cloud nativemicroservices jax-london2020
Cloud nativemicroservices   jax-london2020Cloud nativemicroservices   jax-london2020
Cloud nativemicroservices jax-london2020
 
Cloud nativemicroservices jax-london2020
Cloud nativemicroservices   jax-london2020Cloud nativemicroservices   jax-london2020
Cloud nativemicroservices jax-london2020
 
Application Security Workshop
Application Security Workshop Application Security Workshop
Application Security Workshop
 
MicroProfile, Docker, Kubernetes, Istio and Open Shift lab @dev nexus
MicroProfile, Docker, Kubernetes, Istio and Open Shift lab @dev nexusMicroProfile, Docker, Kubernetes, Istio and Open Shift lab @dev nexus
MicroProfile, Docker, Kubernetes, Istio and Open Shift lab @dev nexus
 
使用 Prometheus 監控 Kubernetes Cluster
使用 Prometheus 監控 Kubernetes Cluster 使用 Prometheus 監控 Kubernetes Cluster
使用 Prometheus 監控 Kubernetes Cluster
 
Reactive Microservices with Spring 5: WebFlux
Reactive Microservices with Spring 5: WebFlux Reactive Microservices with Spring 5: WebFlux
Reactive Microservices with Spring 5: WebFlux
 
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-ServicesNode Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
 
CQRS and Event Sourcing
CQRS and Event Sourcing CQRS and Event Sourcing
CQRS and Event Sourcing
 
[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습
[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습
[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습
 
Analyzing the Performance of Mobile Web
Analyzing the Performance of Mobile WebAnalyzing the Performance of Mobile Web
Analyzing the Performance of Mobile Web
 
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMPInria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
 
Application Security from the Inside - OWASP
Application Security from the Inside - OWASPApplication Security from the Inside - OWASP
Application Security from the Inside - OWASP
 
CMPT470-usask-guest-lecture
CMPT470-usask-guest-lectureCMPT470-usask-guest-lecture
CMPT470-usask-guest-lecture
 
Building a web application with ontinuation monads
Building a web application with ontinuation monadsBuilding a web application with ontinuation monads
Building a web application with ontinuation monads
 
DeployR: Revolution R Enterprise with Business Intelligence Applications
DeployR: Revolution R Enterprise with Business Intelligence ApplicationsDeployR: Revolution R Enterprise with Business Intelligence Applications
DeployR: Revolution R Enterprise with Business Intelligence Applications
 
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesIBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
 
SharePoint for the .NET Developer
SharePoint for the .NET DeveloperSharePoint for the .NET Developer
SharePoint for the .NET Developer
 
Webcast: API-Centric Architecture for Building Context-Aware Apps
Webcast: API-Centric Architecture for Building Context-Aware AppsWebcast: API-Centric Architecture for Building Context-Aware Apps
Webcast: API-Centric Architecture for Building Context-Aware Apps
 

More from Ryan M Harrison

2020-11-13 Anatomy of a FHIR Implementation Guide
2020-11-13 Anatomy of a FHIR Implementation Guide2020-11-13 Anatomy of a FHIR Implementation Guide
2020-11-13 Anatomy of a FHIR Implementation Guide
Ryan M Harrison
 
2021 12-03 TOGAF for Developers
2021 12-03 TOGAF for Developers2021 12-03 TOGAF for Developers
2021 12-03 TOGAF for Developers
Ryan M Harrison
 
Positioning yourself for success in technical careers
Positioning yourself for success in technical careersPositioning yourself for success in technical careers
Positioning yourself for success in technical careers
Ryan M Harrison
 
2019-01-24 Sequelize ORM (Object Relational Mapper): models, migrations, oh my
2019-01-24 Sequelize ORM (Object Relational Mapper): models, migrations, oh my2019-01-24 Sequelize ORM (Object Relational Mapper): models, migrations, oh my
2019-01-24 Sequelize ORM (Object Relational Mapper): models, migrations, oh my
Ryan M Harrison
 
2019-08-23 API contract testing with Dredd
2019-08-23 API contract testing with Dredd2019-08-23 API contract testing with Dredd
2019-08-23 API contract testing with Dredd
Ryan M Harrison
 
End-To-End Asymmetric Encryption of Biomedical Data In-Transit and At-Rest
End-To-End Asymmetric Encryption of Biomedical Data In-Transit and At-RestEnd-To-End Asymmetric Encryption of Biomedical Data In-Transit and At-Rest
End-To-End Asymmetric Encryption of Biomedical Data In-Transit and At-Rest
Ryan M Harrison
 
Nest v. Flat with EmberData
Nest v. Flat with EmberDataNest v. Flat with EmberData
Nest v. Flat with EmberData
Ryan M Harrison
 
DEF CON 24: Reverse engineering biomedical equipment for fun and open science
DEF CON 24: Reverse engineering biomedical equipment for fun and open scienceDEF CON 24: Reverse engineering biomedical equipment for fun and open science
DEF CON 24: Reverse engineering biomedical equipment for fun and open science
Ryan M Harrison
 

More from Ryan M Harrison (8)

2020-11-13 Anatomy of a FHIR Implementation Guide
2020-11-13 Anatomy of a FHIR Implementation Guide2020-11-13 Anatomy of a FHIR Implementation Guide
2020-11-13 Anatomy of a FHIR Implementation Guide
 
2021 12-03 TOGAF for Developers
2021 12-03 TOGAF for Developers2021 12-03 TOGAF for Developers
2021 12-03 TOGAF for Developers
 
Positioning yourself for success in technical careers
Positioning yourself for success in technical careersPositioning yourself for success in technical careers
Positioning yourself for success in technical careers
 
2019-01-24 Sequelize ORM (Object Relational Mapper): models, migrations, oh my
2019-01-24 Sequelize ORM (Object Relational Mapper): models, migrations, oh my2019-01-24 Sequelize ORM (Object Relational Mapper): models, migrations, oh my
2019-01-24 Sequelize ORM (Object Relational Mapper): models, migrations, oh my
 
2019-08-23 API contract testing with Dredd
2019-08-23 API contract testing with Dredd2019-08-23 API contract testing with Dredd
2019-08-23 API contract testing with Dredd
 
End-To-End Asymmetric Encryption of Biomedical Data In-Transit and At-Rest
End-To-End Asymmetric Encryption of Biomedical Data In-Transit and At-RestEnd-To-End Asymmetric Encryption of Biomedical Data In-Transit and At-Rest
End-To-End Asymmetric Encryption of Biomedical Data In-Transit and At-Rest
 
Nest v. Flat with EmberData
Nest v. Flat with EmberDataNest v. Flat with EmberData
Nest v. Flat with EmberData
 
DEF CON 24: Reverse engineering biomedical equipment for fun and open science
DEF CON 24: Reverse engineering biomedical equipment for fun and open scienceDEF CON 24: Reverse engineering biomedical equipment for fun and open science
DEF CON 24: Reverse engineering biomedical equipment for fun and open science
 

Recently uploaded

The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
kalichargn70th171
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
Remote DBA Services
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
VALiNTRY360
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
Peter Muessig
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 
Lecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptxLecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptx
TaghreedAltamimi
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 
fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.
AnkitaPandya11
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Julian Hyde
 
Preparing Non - Technical Founders for Engaging a Tech Agency
Preparing Non - Technical Founders for Engaging  a  Tech AgencyPreparing Non - Technical Founders for Engaging  a  Tech Agency
Preparing Non - Technical Founders for Engaging a Tech Agency
ISH Technologies
 
Malibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed RoundMalibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed Round
sjcobrien
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
mz5nrf0n
 
一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
dakas1
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
ShulagnaSarkar2
 
zOS Mainframe JES2-JES3 JCL-JECL Differences
zOS Mainframe JES2-JES3 JCL-JECL DifferenceszOS Mainframe JES2-JES3 JCL-JECL Differences
zOS Mainframe JES2-JES3 JCL-JECL Differences
YousufSait3
 
YAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring detailsYAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring details
NishanthaBulumulla1
 

Recently uploaded (20)

The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 
Lecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptxLecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptx
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 
fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
 
Preparing Non - Technical Founders for Engaging a Tech Agency
Preparing Non - Technical Founders for Engaging  a  Tech AgencyPreparing Non - Technical Founders for Engaging  a  Tech Agency
Preparing Non - Technical Founders for Engaging a Tech Agency
 
Malibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed RoundMalibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed Round
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
 
一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
 
zOS Mainframe JES2-JES3 JCL-JECL Differences
zOS Mainframe JES2-JES3 JCL-JECL DifferenceszOS Mainframe JES2-JES3 JCL-JECL Differences
zOS Mainframe JES2-JES3 JCL-JECL Differences
 
YAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring detailsYAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring details
 

Breaking a monolith: In-place refactoring with service-oriented architecture at a life-sciences startup