SlideShare a Scribd company logo
1 of 51
Designing an extensible
tooling platform
Good evening!
Designing an extensible tooling platform
Who am I?
Dmitry Zeldin
Software Engineer @ Skyscanner
dmitry.zeldin@skyscanner.net
@ZelJin
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
🤷
Designing an extensible tooling platform
One tool to rule them all
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
Key requirements
• Single authentication system
• Same look-and-feel for all internal tools
• Extensible UI
Micro Frontends
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
Why choose micro frontends?
• Complex frontend
• Developed by multiple teams
• With independent release cycle
Designing an extensible tooling platform
The good
• Technology agnostic
• Source code isolation
Designing an extensible tooling platform
The bad
• Increased complexity
• Debugging
Designing an extensible tooling platform
The ugly
Designing an extensible tooling platform
Designing an extensible tooling platform
Implementation
Designing an extensible tooling platform
OpenComponents
Designing an extensible tooling platform
Architecture
Registry CLI
Client
librariesComponents
Template
system
Designing an extensible tooling platform
├── hello-world/
├── package.json
├── template.hbs
├── server.js
├── img/
├── logo.png
├── src/
├── components/
├── index.js
Component Structure
Designing an extensible tooling platform
package.json
"oc": {
"files": {
"data": "server.js",
"template": { "src": "template.hbs", "type": "handlebars” },
"static": [ "build” ]
},
"parameters": {
...
"repository": {
"type": "string",
"description": "Repository which PRs should be displayed",
"example": "?repository=tower/tower-ui"
}
}
}
Designing an extensible tooling platform
<link rel="stylesheet" href="{{staticPath}}{{css}}">
<div id="tower-github-pr-root"></div>
<script>
window['tower-github-pr'] = {
props: {{{ props }}},
params: {{{ params }}}
};
</script>
<script defer src="{{staticPath}}{{js}}” crossorigin="anonymous"></script>
Template
Designing an extensible tooling platform
import assets from './../../build/asset-manifest.json';
import { version } from '../../package.json';
// ...
export const data = (context, callback) => {
const staticPath = `${context.staticPath}build/`;
const { autoHydrate, repository, baseStylesheet } = context.params;
const templateData = {
baseStylesheet,
staticPath,
css: assets['main.css’],
js: assets['main.js’],
props: JSON.stringify({ repository }),
params: JSON.stringify({autoHydrate, version}),
};
callback(null, templateData);
};
Server-side code
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
<oc-component href=http://0.0.0.0:3000/tower-github-pr>
</oc-component>
Client
Designing an extensible tooling platform
<link rel="stylesheet" href="{{staticPath}}{{css}}">
<div id="tower-github-pr-root"></div>
<script>
window['tower-github-pr'] = {
props: {{{ props }}},
params: {{{ params }}}
};
</script>
<script defer src="{{staticPath}}{{js}}” crossorigin="anonymous"></script>
Client
Designing an extensible tooling platform
<link
rel="stylesheet"
href="http://localhost:3000/tower-github-pr/0.0.7/static/build/static/css/main.af206699.css"
/>
<div id="tower-github-pr-root"></div>
<script>
window["tower-github-pr"] = {
props: {},
params: { autoHydrate: false, version: "0.0.7" }
};
</script>
<script
defer
src="http://localhost:3000/tower-github-pr/0.0.7/static/build/static/js/main.d89a7503.js"
crossorigin="anonymous"
></script>
Client
Designing an extensible tooling platform
Request
Fetch
Compile & Populate
Serve
Example 👨💻
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
Designing an extensible tooling platform
❤️
Designing an extensible tooling platform
🤷
Pain points
• Credentials storage
• Performance issues
• Development complexity
Key takeaways
• Prefer client-side rendering
• Make server-side layer thin
• More tutorials, better on-boarding
Unresolved issues
• Role-based authentication
• Dependency management
Thank you!
Q & A

More Related Content

Similar to Designing an extensible tooling platform (Dmitry Zeldin, Skyscanner)

Office 365 Saturday (Sydney) - SharePoint framework – build integrated user e...
Office 365 Saturday (Sydney) - SharePoint framework – build integrated user e...Office 365 Saturday (Sydney) - SharePoint framework – build integrated user e...
Office 365 Saturday (Sydney) - SharePoint framework – build integrated user e...Anupam Ranku
 
Extending eZ Platform v2 with Symfony and React
Extending eZ Platform v2 with Symfony and ReactExtending eZ Platform v2 with Symfony and React
Extending eZ Platform v2 with Symfony and ReacteZ Systems
 
Real World SharePoint Framework and Azure Services
Real World SharePoint Framework and Azure ServicesReal World SharePoint Framework and Azure Services
Real World SharePoint Framework and Azure ServicesBrian Culver
 
Let's build Developer Portal with Backstage
Let's build Developer Portal with BackstageLet's build Developer Portal with Backstage
Let's build Developer Portal with BackstageOpsta
 
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdfNET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdfTamir Dresher
 
Convert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hour
Convert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hourConvert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hour
Convert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hourBrian Culver
 
How to create an Angular builder
How to create an Angular builderHow to create an Angular builder
How to create an Angular builderMaurizio Vitale
 
Build beautiful native apps in record time with flutter
Build beautiful native apps in record time with flutterBuild beautiful native apps in record time with flutter
Build beautiful native apps in record time with flutterRobertLe30
 
Native script overview
Native script overviewNative script overview
Native script overviewBaskar rao Dsn
 
Angular mobile angular_u
Angular mobile angular_uAngular mobile angular_u
Angular mobile angular_uDoris Chen
 
Serverless in Azure with Functions
Serverless in Azure with FunctionsServerless in Azure with Functions
Serverless in Azure with FunctionsChristos Matskas
 
Kraken
KrakenKraken
KrakenPayPal
 
Front End Workflow
Front End WorkflowFront End Workflow
Front End WorkflowMatt Bailey
 
An insight to microsoft platform
An insight to microsoft platformAn insight to microsoft platform
An insight to microsoft platformConfiz
 
Getting started with spfx
Getting started with spfxGetting started with spfx
Getting started with spfxJenkins NS
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 

Similar to Designing an extensible tooling platform (Dmitry Zeldin, Skyscanner) (20)

Office 365 Saturday (Sydney) - SharePoint framework – build integrated user e...
Office 365 Saturday (Sydney) - SharePoint framework – build integrated user e...Office 365 Saturday (Sydney) - SharePoint framework – build integrated user e...
Office 365 Saturday (Sydney) - SharePoint framework – build integrated user e...
 
Extending eZ Platform v2 with Symfony and React
Extending eZ Platform v2 with Symfony and ReactExtending eZ Platform v2 with Symfony and React
Extending eZ Platform v2 with Symfony and React
 
Real World SharePoint Framework and Azure Services
Real World SharePoint Framework and Azure ServicesReal World SharePoint Framework and Azure Services
Real World SharePoint Framework and Azure Services
 
Let's build Developer Portal with Backstage
Let's build Developer Portal with BackstageLet's build Developer Portal with Backstage
Let's build Developer Portal with Backstage
 
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdfNET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
 
Introducción al SharePoint Framework SPFx
Introducción al SharePoint Framework SPFxIntroducción al SharePoint Framework SPFx
Introducción al SharePoint Framework SPFx
 
Convert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hour
Convert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hourConvert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hour
Convert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hour
 
Build Time Hacking
Build Time HackingBuild Time Hacking
Build Time Hacking
 
How to create an Angular builder
How to create an Angular builderHow to create an Angular builder
How to create an Angular builder
 
Build beautiful native apps in record time with flutter
Build beautiful native apps in record time with flutterBuild beautiful native apps in record time with flutter
Build beautiful native apps in record time with flutter
 
Native script overview
Native script overviewNative script overview
Native script overview
 
Node azure
Node azureNode azure
Node azure
 
Angular mobile angular_u
Angular mobile angular_uAngular mobile angular_u
Angular mobile angular_u
 
Serverless in Azure with Functions
Serverless in Azure with FunctionsServerless in Azure with Functions
Serverless in Azure with Functions
 
Kraken
KrakenKraken
Kraken
 
Front End Workflow
Front End WorkflowFront End Workflow
Front End Workflow
 
An insight to microsoft platform
An insight to microsoft platformAn insight to microsoft platform
An insight to microsoft platform
 
Open event presentation.3 2
Open event presentation.3 2Open event presentation.3 2
Open event presentation.3 2
 
Getting started with spfx
Getting started with spfxGetting started with spfx
Getting started with spfx
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 

More from London Microservices

Building Event-Driven Microservices using Kafka Streams (Stathis Souris, Thou...
Building Event-Driven Microservices using Kafka Streams (Stathis Souris, Thou...Building Event-Driven Microservices using Kafka Streams (Stathis Souris, Thou...
Building Event-Driven Microservices using Kafka Streams (Stathis Souris, Thou...London Microservices
 
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...London Microservices
 
Log and control all service-to-service traffic in one place (Kelvin Wong)
Log and control all service-to-service traffic in one place (Kelvin Wong)Log and control all service-to-service traffic in one place (Kelvin Wong)
Log and control all service-to-service traffic in one place (Kelvin Wong)London Microservices
 
Event Streaming, the hard way by (César Luis Alvargonzález, Revolut)
Event Streaming, the hard way by (César Luis Alvargonzález, Revolut)Event Streaming, the hard way by (César Luis Alvargonzález, Revolut)
Event Streaming, the hard way by (César Luis Alvargonzález, Revolut)London Microservices
 
Hidden secrets of the Deliveroo Application Platform (Ben Cordero, Deliveroo)
Hidden secrets of the Deliveroo Application Platform (Ben Cordero, Deliveroo)Hidden secrets of the Deliveroo Application Platform (Ben Cordero, Deliveroo)
Hidden secrets of the Deliveroo Application Platform (Ben Cordero, Deliveroo)London Microservices
 
Reliability in Microservices: Embracing Failure (César Luis Alvargonzález, Re...
Reliability in Microservices: Embracing Failure (César Luis Alvargonzález, Re...Reliability in Microservices: Embracing Failure (César Luis Alvargonzález, Re...
Reliability in Microservices: Embracing Failure (César Luis Alvargonzález, Re...London Microservices
 
Robots and Food (Orfeo Nicolai, Karakuri)
Robots and Food (Orfeo Nicolai, Karakuri)Robots and Food (Orfeo Nicolai, Karakuri)
Robots and Food (Orfeo Nicolai, Karakuri)London Microservices
 
Cloud Native Patterns (Jamie Dobson, Container Solutions)
Cloud Native Patterns (Jamie Dobson, Container Solutions)Cloud Native Patterns (Jamie Dobson, Container Solutions)
Cloud Native Patterns (Jamie Dobson, Container Solutions)London Microservices
 

More from London Microservices (8)

Building Event-Driven Microservices using Kafka Streams (Stathis Souris, Thou...
Building Event-Driven Microservices using Kafka Streams (Stathis Souris, Thou...Building Event-Driven Microservices using Kafka Streams (Stathis Souris, Thou...
Building Event-Driven Microservices using Kafka Streams (Stathis Souris, Thou...
 
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...
 
Log and control all service-to-service traffic in one place (Kelvin Wong)
Log and control all service-to-service traffic in one place (Kelvin Wong)Log and control all service-to-service traffic in one place (Kelvin Wong)
Log and control all service-to-service traffic in one place (Kelvin Wong)
 
Event Streaming, the hard way by (César Luis Alvargonzález, Revolut)
Event Streaming, the hard way by (César Luis Alvargonzález, Revolut)Event Streaming, the hard way by (César Luis Alvargonzález, Revolut)
Event Streaming, the hard way by (César Luis Alvargonzález, Revolut)
 
Hidden secrets of the Deliveroo Application Platform (Ben Cordero, Deliveroo)
Hidden secrets of the Deliveroo Application Platform (Ben Cordero, Deliveroo)Hidden secrets of the Deliveroo Application Platform (Ben Cordero, Deliveroo)
Hidden secrets of the Deliveroo Application Platform (Ben Cordero, Deliveroo)
 
Reliability in Microservices: Embracing Failure (César Luis Alvargonzález, Re...
Reliability in Microservices: Embracing Failure (César Luis Alvargonzález, Re...Reliability in Microservices: Embracing Failure (César Luis Alvargonzález, Re...
Reliability in Microservices: Embracing Failure (César Luis Alvargonzález, Re...
 
Robots and Food (Orfeo Nicolai, Karakuri)
Robots and Food (Orfeo Nicolai, Karakuri)Robots and Food (Orfeo Nicolai, Karakuri)
Robots and Food (Orfeo Nicolai, Karakuri)
 
Cloud Native Patterns (Jamie Dobson, Container Solutions)
Cloud Native Patterns (Jamie Dobson, Container Solutions)Cloud Native Patterns (Jamie Dobson, Container Solutions)
Cloud Native Patterns (Jamie Dobson, Container Solutions)
 

Recently uploaded

A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
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
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
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
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
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
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
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
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
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
 

Recently uploaded (20)

A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
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
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
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
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
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
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
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
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
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
 

Designing an extensible tooling platform (Dmitry Zeldin, Skyscanner)

Editor's Notes

  1. Good evening everyone! Thank you for coming here today, It’s really nice to see you all! I’m Dmitry and I work at Developer Enablement Tribe in Skyscanner. Today we’re going to talk about building an extensible tooling platform. The talk should take around 30 minutes, and there will be a 10 minute Q&A session in the end. If you have a question later on, do not hesitate to reach me out via email or Twitter.
  2. The company itself probably doesn’t need a long introduction. Skyscanner is a leading global travel search site offering a comprehensive and free flight search service as well as online comparisons for hotels and car hire. We have around 70m unique monthly visitors on our website
  3. Our iOS and Android apps have been downloaded over 70m times.
  4. In Developer Enablement Tribe, we are trying to empower Skyscanner engineers to deliver secure, resilient and efficient services at scale. We offer loads of services and provide robust runtime environment to our developers so they can spend the majority of their time solving customer’s problems rather than re-inventing the wheel. However, this abundance of services comes at a cost – each internal tool usually comes with its own UI
  5. As an example, here is a common workflow – a developer would like to deploy the project to production. First of all, developer approves a pull request in GitHub, then navigates to Drone – open-source CI tools to check the project build status and to SonarQube to access code quality metrics. Finally, developer might like to check the deployment progress in Slingshot – our in-house deployment system and AWS Console. By the time the build succeeds, our developer has visited five tools with five different UIs. Some of the tools are developed in-house, but most of them are 3rd party
  6. We are trying to solve this issue by introducing Tower – first point of contact for all internal tools at Skyscanner It’s not going to replace all other internal tool UIs, but it will make it easier to access most commonly used features
  7. Tower is still in its early development phase. Here is what developers can already do: they can find their project or a 3rd-party service using rich search.
  8. A brief summary is displayed for each project or service. It includes owner and compliance information, links to documentation and useful tools.
  9. And here we can see a list of open pull requests for a certain GitHub repository.
  10. Here are the key requirements for Tower we’ve came up with: First, all internal tools should be available under single authentication system. No further authentication should be required. Each internal tool, especially a 3rd-party one, has its own set of design guidelines that are hard or almost impossible to change. This causes additional friction when you switch from one tool to another. Tower aims to solve this problem by using a single design paradigm that is familiar to all Skyscanner developers. Finally, Tower should be easily extensible, lowering the barrier to add or remove an internal tool.
  11. These requirements lead us to the idea of using micro frontends architecture for Tower. Let’s look into it.
  12. In monolithic architecture, there is a single application that combines both frontend and backend. These applications are easy to develop, test and deploy when the application is small enough, but the development process does not scale properly with the increase in app complexity
  13. Microservices architecture addresses this issue by splitting the backend into multiple loosely coupled components. You all know the benefits and trade-offs of splitting a monolith backend into multiple services. However, until recently teams struggled to decouple front-end monoliths.
  14. Recent advances in JavaScript, like ES6 modules and modern bundlers like WebPack allowed micro frontends architecture to finally take shape. In this approach, monolithic frontend is broken up by its pages and features, where each feature is owned by a single team. Micro frontend is entirely presentation and does not have any server-side logic. Instead, it requests data from one or many microservices.
  15. So why have we decided to adopt micro frontend architecture? The team responsible for Tower simply cannot support extensions for all internal tools – there is not enough manpower for such a complex task. Therefore, development is distributed across multiple teams that have their own development cycle. This combination basically begs for source code separation.
  16. Adopting micro frontends architecture gave us a lot of benefits. First of all, it gives us the freedom to choose the right tools for the job – each micro frontend is completely technologically agnostic from the other one. For example, one tool can be written in vue.js and rendered on the client side, while another one can be implemented in React and rendered on the server side. Source code isolation makes it easier to maintain and test each individual integration. That also means every integration can be deployed independently of any other system.
  17. The negative impact of microservices approach is the increased complexity of the whole system – and such complexity makes it harder to debug any occurring issues.
  18. Here comes the ugly part
  19. In this architecture diagram, one important layer is missing: micro frontends are no longer web apps. Instead, they are UI fragments that have to be combined together on a single web page.
  20. A so-called “Stitching layer”, or a host web application combines multiple micro frontends on one page to enable seamless user experience. This layer has proven to be the most complex bit in micro frontend adoption, and it’s probably the reason this architecture is not so widely spread at the moment.
  21. Let’s move on to our implementation of a micro frontend system.
  22. We decided to use OpenComponents framework developed by OpenTable. This open-source framework has seen its first release in 2014 and is proved to be mature enough for the task.
  23. OpenComponents has 5 main building blocks: Components are our micro frontends that usually consist of HTML, JavaScript and CSS files. They can also contain server-side logic that is used to compose a model which renders the final view. Template system takes the component with the model from the server-side and generates an HTML document that is injected onto a page. Registry provides a REST API to consume, retrieve and publish components to a library. Client libraries are available for multiple languages and provide functionality to load and render a component from the registry. Finally, OpenComponents comes with a nice CLI tools, allowing developers to create, develop and test components locally. It also helps to publish components to the registry.
  24. This is a typical structure of a component. It’s a Node.js application, where the template is defined in a Handlebars file, and server-side logic is defined in server.js.
  25. Application manifest, package.json, contains a dedicated section named “OC”, where component configuration is stored. Here you can customise the location of the server-side logic, choice of template and templating engine and a lot more. Component can be parametrised. For that, all parameters have to be listed in the package.json Parameters can be passed to a component via querystring, when a GET request is sent to the registry to retrieve a component.
  26. This is an example of a Handlebars template for a single-page application. It takes parameters generated on the server side and returns a valid HTML with links to compiled CSS and JS files, as well as a root container where a component is rendered. In this particular case, a React app is rendered, that’s why we included a script to pass props to the root React component.
  27. Server-side code can fetch data from various APIs to generate a data object that is passed to the template. In this particular example, we do not call anything and are just passing parameters communicated via GET request. Please note that this code is running in a node environment of the registry, thus it supports only a limited number of dependencies, and the only way to add an npm module is to install it to the registry.
  28. OC registry also offers another UI where you can see the list of all available components
  29. For each component, you can check the parameters it takes and even render it in a sandbox environment.
  30. Let’s move on to the stitching layer. A host application that loads components has an OC client library as a dependency. Then a component can be included on the page as an OC-component tag. For each tag, OC client library requests an open component from the registry.
  31. OC registry runs server-side logic and generates data necessary to populate a view
  32. Here you can see a populated view for the React application that renders open GitHub pull requests. Finally, generated HTML is sent back to the host application, and OC client library injects this onto the page.
  33. Here you can see an overview of the whole process: OC client library requests the parametrised component from the Registry, Registry fetches the component, it compiles and populates its template that is being returned to the host application. OC Registry can be extended with plugins, and one useful plugin is the addition of caching. Each successfully rendered component template is cached, and, next time it’s requested, OC registry returns a cached version.
  34. Let’s take a look how it’s actually implemented
  35. Let’s return to Tower and look at the component view once again The UI element that displays pull requests is actually a component that is fetched from the registry Let’s take a look at the requests tab to see actual network calls. The component has loaded and shows that we have exactly one open pull request for this project. Let’s have a look at the development console to see the actual network calls Tower did. It fetched the component from the Registry, then the OC client has injected it onto the page. Then OC component fetches required libraries. To save on the bundle size, commonly used libraries are left outside of the component and loaded separately, I already have these libraries in my browser’s cache, so no additional network calls are made. When component is initialised, it fetches GitHub API to retrieve the number of pull requests. It passes the same token that is used to login within Tower.
  36. First, OC Client requests a component from the registry. Registry fetches the component, compiles and returns the template
  37. Here is the output from the registry. OC Client takes html and injects this html onto the page.
  38. When html is injected, css and javascript dependencies are parsed and loaded.
  39. When html is injected, css and javascript dependencies are parsed and loaded.
  40. Once the Component is loaded, it queries GitHub API to get the list of pull requests. This step requires authentication, and GitHub Enterprise uses a slightly different authentication system than the one that is used in Tower. Our Internal authentication is based on JSON Web Token and tied to Active Directory. The component call a microservice that verifies JSON Web Token, identifies the user, generates user GitHub token and passes the request to GitHub API.
  41. Commonly used dependencies like React are not part of the bundle and are downloaded separately. Unless cache is not disabled in your browser, these dependencies are cached and loaded only once.
  42. Commonly used dependencies like React are not part of the bundle and are downloaded separately. Unless cache is not disabled in your browser, these dependencies are cached and loaded only once.
  43. Developers at Skyscanner have a long history developing micro frontends with OpenComponents. This technology is used on the actual skyscanner.net. It allowed us to split the frontend codebase to develop features faster, and has proved to be pretty much robust along the way.
  44. However, the learning curve for this technology is really steep. A lot of nerve cells have been lost before we achieved the level of comfort and stability we have today.
  45. The technology is subject to certain limitations. The most impactful one is a severe limitation on the complexity of the server-side component. All components are running in a shared environment, without separation of concerns. As a result, there is only one source of secrets for all components running in one registry, meaning a single component can access secrets reserved for all components running on this registry. Shared environment also makes it too risky to run complex backend tasks or do complex server-side rendering. Furthermore, if a single component crashes the Registry because of an uncaught rendering error, the whole Registry is brought down for a short period of time. Steep learning curve makes it hard to enrol new engineers into developing components.
  46. To improve the performance and stability of the Registry, we took the following decisions. We decided to limit the usage of server-side rendering to applications where it’s absolutely necessary. We make our server-side layer extremely thin and extract all complex tasks to separate microservices that run outside of the Registry’s environment. We have put a considerable effort into writing tutorials, improving documentation and creating on-boarding process for engineers who’d like to write integrations for Tower. I would like to point out these takeaways are valid for internal development, as some of these features we decided not to use, like server-side rendering, is vital for skyscanner.com website.
  47. However, there are still some unresolved issues. Some internal tools have different roles assigned for different users. We still have not found a way how we can provide a single, role-based authentication system for all available internal tools. Another problem, which originates from the freedom of technology stack choice and independence of development cycle, would be extra dependencies that increase the overall size of the application and negatively affect loading times. For example, different React components can have multiple React versions in their dependencies. As a result, all React versions have to be downloaded before the whole page would work.
  48. Thank you very much for your time! I hope you enjoyed the presentation! I believe Microfrontends architecture has a lot of potential, and it’s definitely worth a try. However, a true benefit of micro frontends may not be visible for smaller projects.
  49. Now, let’s move to the Q & A session.