SlideShare a Scribd company logo
1 of 38
Download to read offline
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 OverviewShubhra Kar
 
Cloud nativemicroservices jax-london2020
Cloud nativemicroservices   jax-london2020Cloud nativemicroservices   jax-london2020
Cloud nativemicroservices jax-london2020Emily Jiang
 
Cloud nativemicroservices jax-london2020
Cloud nativemicroservices   jax-london2020Cloud nativemicroservices   jax-london2020
Cloud nativemicroservices jax-london2020Emily 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 nexusEmily 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-ServicesChris Bailey
 
[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
 
CQRS and Event Sourcing
CQRS and Event Sourcing CQRS and Event Sourcing
CQRS and Event Sourcing Inho Kang
 
Analyzing the Performance of Mobile Web
Analyzing the Performance of Mobile WebAnalyzing the Performance of Mobile Web
Analyzing the Performance of Mobile WebAriya 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 STAMPStéphanie Roger
 
Application Security from the Inside - OWASP
Application Security from the Inside - OWASPApplication Security from the Inside - OWASP
Application Security from the Inside - OWASPSqreen
 
CMPT470-usask-guest-lecture
CMPT470-usask-guest-lectureCMPT470-usask-guest-lecture
CMPT470-usask-guest-lectureMasud 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 monadsSeitaro 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 ApplicationsRevolution 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 MicroservicesChris Bailey
 
SharePoint for the .NET Developer
SharePoint for the .NET DeveloperSharePoint for the .NET Developer
SharePoint for the .NET DeveloperJohn 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 AppsApigee | 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
 
[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 패턴 실습
 
CQRS and Event Sourcing
CQRS and Event Sourcing CQRS and Event Sourcing
CQRS and 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 GuideRyan M Harrison
 
2021 12-03 TOGAF for Developers
2021 12-03 TOGAF for Developers2021 12-03 TOGAF for Developers
2021 12-03 TOGAF for DevelopersRyan 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 careersRyan 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 myRyan 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 DreddRyan 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-RestRyan M Harrison
 
Nest v. Flat with EmberData
Nest v. Flat with EmberDataNest v. Flat with EmberData
Nest v. Flat with EmberDataRyan 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 scienceRyan 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

Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...masabamasaba
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...Nitya salvi
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...masabamasaba
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Hararemasabamasaba
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfayushiqss
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyviewmasabamasaba
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 

Recently uploaded (20)

Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 

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