SlideShare a Scribd company logo
1 of 65
Download to read offline
#atlassian
Scaling Plugins in Critical Systems 
Getting It Right 
JON MORT • CONSULTANT • ADAPTAVIST • @ADAPTAVIST
About Me
About Me 
Who Am I 
• Atlassian Consultant/Developer at Adaptavist 
• 5 years of experience developing Atlassian plugins 
• Plugin License Manager was my fault 
• Spoken at various Conferences, including Summit about: 
• Atlassian development 
• Performance tuning 
• Level One 
• Level Two 
• Level Two 
• Level Two 
• Level One
About Me 
Adaptavist - Who Are We 
• 60 people in 4 offices in the UK, USA and Germany 
• Level One 
• Level Two 
• Level Two 
• Level Two 
• Level One 
• Customers in 60+ countries including over half of the Fortune 500 
• Longest established Atlassian partners - since 2005 
• Professional Services, Managed Services, Products and Training 
• Focused on helping Enterprises plan, deliver and manage software and applications using the 
Atlassian toolset
About Me 
Why Should You Listen To Me? 
• Because I’ve messed up 
• A lot 
• … but also made it better 
• Level One 
• Level Two 
• Level Two 
• Level Two 
• Level One
Who, What, Why?
Who are you? 
Add-On Developers 
• Level One 
• Level Two 
• Level Two 
• Level Two 
• Level One
Who are you? 
Application Administrators 
• Level One 
• Level Two 
• Level Two 
• Level Two 
• Level One
Who are you? 
Product Owners & Users 
• Level One 
• Level Two 
• Level Two 
• Level Two 
• Level One
Data Center
Before Data Center Users 
• Level One 
• Level Two 
• Level Two 
• Level Two 
• Level One 
WAN 
JIRA 
Index 
Database
With Data Center 
The Architecture 
• Level One 
• Level Two 
• Level Two 
• Level Two 
• Level One 
WAN 
Users 
. . . 
Multiple JIRA Nodes 
Replicated Indexes 
Load Balancer 
Database Shared Home
” 
“ <plugin-info> 
<param name=“atlassian-data-center-compatible">true</param> 
</plugin-info>
NO!
NO!
Scaling Plugins 
STATE 
CACHES & POOLS 
COORDINATION 
TESTING 
USER INTERFACE 
IN THE CODE
The Problem with 
State
Consistency 
Availability 
Partition Tolerance
Use Provided 
Storage 
Mechanisms
State - Do’s & Don’ts 
COLUMN TITLE COLUMN TITLE COLUMN TITLE 
DO Read up distributed systems theory 
DO Consider and test failure modes 
DO Keep as little state as possible 
DO Use the appropriate supported APIs 
DON’T Just assume everything will be OK
Scaling Plugins 
STATE 
CACHES & POOLS 
COORDINATION 
TESTING 
USER INTERFACE 
IN THE CODE
Caching
Map<String, ?> 
cache =
Local, Cluster, Hybrid 
Keys Values 
Local Local Local 
Cluster Replicated Replicated 
Hybrid Replicated Local
Pool Party!
Be flexible to 
changes of Scale
Pool Monitoring 
• Level One 
• Level Two 
• Level Two 
• Level Two 
• Level One
Caches and Pools - Do’s & Don’ts 
COLUMN TITLE COLUMN TITLE COLUMN TITLE 
DO Cache values that are complex to create and cheap to store 
DO Invalidate caches appropriately using time and freshness checks 
DO Pool resources where appropriate 
DO Use and know the new caching APIs 
DON’T Use hash maps or statics or sessions for caching!
Scaling Plugins 
STATE 
CACHES & POOLS 
COORDINATION 
TESTING 
USER INTERFACE 
IN THE CODE
Become Immortal 
Become 
Immutable
CONF-15313 
Concurrent 
Modification 
Exception
Synchronization 
Makes Me Cry
Synchronization 
Makes Me Cry
Cross Node 
Concurrency
Scheduled 
Jobs
Testing 
Concurrency 
Sucks
Coordination - Do’s & Don’ts 
COLUMN TITLE COLUMN TITLE COLUMN TITLE 
DO Think about concurrency - read Java Concurrency in Practice 
DO Use immutable data structures with reentrant logic 
DON’T Be scared and ignore potential problems 
DON’T Use locking (like synchronised blocks)
Scaling Plugins 
STATE 
CACHES & POOLS 
COORDINATION 
TESTING 
USER INTERFACE 
IN THE CODE
How to Lose 
Friends and 
Alienate People
Everyone’s a bit 
unstable
Finding the 
Bottleneck
Don’t be 
THAT Plugin
Be Vocal
Testing - Do’s & Don’ts 
COLUMN TITLE COLUMN TITLE COLUMN TITLE 
DO Make it easy to detect application API changes - Integration test 
DO Performance testing 
DO Actively try to increase the test coverage - these are important! 
DO Test at scale and announce results 
DO Declare how you tested for Data Center 
DON’T Ignore Security
Scaling Plugins 
STATE 
CACHES & POOLS 
COORDINATION 
TESTING 
USER INTERFACE 
IN THE CODE
One 
True 
Plugin
Blend In
Use the ADG
Enterprise Systems 
do not have only 
5 Projects
User Interface - Do’s & Don’ts 
COLUMN TITLE COLUMN TITLE COLUMN TITLE 
DO use and know the ADG 
DO Think about scaled use 
DO Think about the impact you might make 
DON’T Think you’re the only plugin that matters 
DON’T Lock the UI up
Scaling Plugins 
STATE 
CACHES & POOLS 
COORDINATION 
TESTING 
USER INTERFACE 
IN THE CODE
Watch your Weight
Put your eggs 
in one batch
webjars.org
Your Black Box 
isn’t Opaque
Atlassian Spring 
Scanner
Atlassian 
Pocketknife
Useful Libs - Do’s & Don’ts 
COLUMN TITLE COLUMN TITLE COLUMN TITLE 
DO Watch A P2 Plugin and a SaaS Platform Walk into a Bar… from 
AtlasCamp 
DO Know your OSGi 
DO Use Atlassian Spring Scanner 
DO Look at Pockeknife 
DO Use Wired Tests 
DO Take advantage of batching
In Summary
Key takeaways: #atlassian 
• Understand your state 
• Play nice - respect the application you execute within. 
• Be mindful of the user experience - does it scale? 
• Understand the bottlenecks within your plugin - are you lazy enough? 
• Be immutable, else be remembered for the wrong reasons! 
• Test at scale or announce that you haven’t.
Thank you! 
JON MORT • CONSULTANT • ADAPTAVIST • @ADAPTAVIST
Scaling Plugins in Critical Systems - Jon Mort

More Related Content

What's hot

[Webinar] Continuous Testing Done Right: Test Automation at the World's Leadi...
[Webinar] Continuous Testing Done Right: Test Automation at the World's Leadi...[Webinar] Continuous Testing Done Right: Test Automation at the World's Leadi...
[Webinar] Continuous Testing Done Right: Test Automation at the World's Leadi...Applitools
 
Automating Web Analytics
Automating Web AnalyticsAutomating Web Analytics
Automating Web AnalyticsAnand Bagmar
 
Build Your Custom Performance Testing Framework
Build Your Custom Performance Testing FrameworkBuild Your Custom Performance Testing Framework
Build Your Custom Performance Testing FrameworkTechWell
 
Moving from fast to solr on atg
Moving from fast to solr on atgMoving from fast to solr on atg
Moving from fast to solr on atglucenerevolution
 
Selenium and Appium Training from Sauce Labs
Selenium and Appium Training from Sauce LabsSelenium and Appium Training from Sauce Labs
Selenium and Appium Training from Sauce LabsSauce Labs
 
Visual Studio LightSwitch (Beta 1) Overview
Visual Studio LightSwitch (Beta 1) OverviewVisual Studio LightSwitch (Beta 1) Overview
Visual Studio LightSwitch (Beta 1) OverviewSteve Lange
 
Unit Testing - Calgary .NET User Group - Nov 26 2014 - Depth Consulting
Unit Testing -  Calgary .NET User Group - Nov 26 2014 - Depth ConsultingUnit Testing -  Calgary .NET User Group - Nov 26 2014 - Depth Consulting
Unit Testing - Calgary .NET User Group - Nov 26 2014 - Depth ConsultingDave White
 
How To Use Selenium Successfully
How To Use Selenium SuccessfullyHow To Use Selenium Successfully
How To Use Selenium SuccessfullyDave Haeffner
 
Untying the Knots of Web Dev with Internet Explorer
Untying the Knots of Web Dev with Internet Explorer Untying the Knots of Web Dev with Internet Explorer
Untying the Knots of Web Dev with Internet Explorer Sarah Dutkiewicz
 
Approval Tests in Action: A LEGO Exercise and an Experience Report
Approval Tests in Action: A LEGO Exercise and an Experience ReportApproval Tests in Action: A LEGO Exercise and an Experience Report
Approval Tests in Action: A LEGO Exercise and an Experience Reporthouseofyin
 
Automated Acceptance Tests in .NET
Automated Acceptance Tests in .NETAutomated Acceptance Tests in .NET
Automated Acceptance Tests in .NETWyn B. Van Devanter
 
Selenium course training institute ameerpet hyderabad – Best software trainin...
Selenium course training institute ameerpet hyderabad – Best software trainin...Selenium course training institute ameerpet hyderabad – Best software trainin...
Selenium course training institute ameerpet hyderabad – Best software trainin...Sathya Technologies
 
Test Your Own Stuff - Scrum Atlanta 2015
Test Your Own Stuff - Scrum Atlanta 2015Test Your Own Stuff - Scrum Atlanta 2015
Test Your Own Stuff - Scrum Atlanta 2015Alex Kell
 
A Sampling of Tools
A Sampling of ToolsA Sampling of Tools
A Sampling of ToolsDawn Code
 
Few minutes To better Code - Refactoring
Few minutes To better Code - RefactoringFew minutes To better Code - Refactoring
Few minutes To better Code - RefactoringDiaa Al-Salehi
 
VodQA_ParallelizingCukes_AmanKing
VodQA_ParallelizingCukes_AmanKingVodQA_ParallelizingCukes_AmanKing
VodQA_ParallelizingCukes_AmanKingpoojaelkunchwar
 

What's hot (19)

[Webinar] Continuous Testing Done Right: Test Automation at the World's Leadi...
[Webinar] Continuous Testing Done Right: Test Automation at the World's Leadi...[Webinar] Continuous Testing Done Right: Test Automation at the World's Leadi...
[Webinar] Continuous Testing Done Right: Test Automation at the World's Leadi...
 
Automating Web Analytics
Automating Web AnalyticsAutomating Web Analytics
Automating Web Analytics
 
Build Your Custom Performance Testing Framework
Build Your Custom Performance Testing FrameworkBuild Your Custom Performance Testing Framework
Build Your Custom Performance Testing Framework
 
Moving from fast to solr on atg
Moving from fast to solr on atgMoving from fast to solr on atg
Moving from fast to solr on atg
 
Selenium and Appium Training from Sauce Labs
Selenium and Appium Training from Sauce LabsSelenium and Appium Training from Sauce Labs
Selenium and Appium Training from Sauce Labs
 
Visual Studio LightSwitch (Beta 1) Overview
Visual Studio LightSwitch (Beta 1) OverviewVisual Studio LightSwitch (Beta 1) Overview
Visual Studio LightSwitch (Beta 1) Overview
 
Unit Testing - Calgary .NET User Group - Nov 26 2014 - Depth Consulting
Unit Testing -  Calgary .NET User Group - Nov 26 2014 - Depth ConsultingUnit Testing -  Calgary .NET User Group - Nov 26 2014 - Depth Consulting
Unit Testing - Calgary .NET User Group - Nov 26 2014 - Depth Consulting
 
How To Use Selenium Successfully
How To Use Selenium SuccessfullyHow To Use Selenium Successfully
How To Use Selenium Successfully
 
05 managing transactions
05   managing transactions05   managing transactions
05 managing transactions
 
Untying the Knots of Web Dev with Internet Explorer
Untying the Knots of Web Dev with Internet Explorer Untying the Knots of Web Dev with Internet Explorer
Untying the Knots of Web Dev with Internet Explorer
 
Approval Tests in Action: A LEGO Exercise and an Experience Report
Approval Tests in Action: A LEGO Exercise and an Experience ReportApproval Tests in Action: A LEGO Exercise and an Experience Report
Approval Tests in Action: A LEGO Exercise and an Experience Report
 
Automated Acceptance Tests in .NET
Automated Acceptance Tests in .NETAutomated Acceptance Tests in .NET
Automated Acceptance Tests in .NET
 
Selenium course training institute ameerpet hyderabad – Best software trainin...
Selenium course training institute ameerpet hyderabad – Best software trainin...Selenium course training institute ameerpet hyderabad – Best software trainin...
Selenium course training institute ameerpet hyderabad – Best software trainin...
 
Being Lean Agile
Being Lean AgileBeing Lean Agile
Being Lean Agile
 
Test Your Own Stuff - Scrum Atlanta 2015
Test Your Own Stuff - Scrum Atlanta 2015Test Your Own Stuff - Scrum Atlanta 2015
Test Your Own Stuff - Scrum Atlanta 2015
 
A Sampling of Tools
A Sampling of ToolsA Sampling of Tools
A Sampling of Tools
 
akka-scalaphx-jun2015
akka-scalaphx-jun2015akka-scalaphx-jun2015
akka-scalaphx-jun2015
 
Few minutes To better Code - Refactoring
Few minutes To better Code - RefactoringFew minutes To better Code - Refactoring
Few minutes To better Code - Refactoring
 
VodQA_ParallelizingCukes_AmanKing
VodQA_ParallelizingCukes_AmanKingVodQA_ParallelizingCukes_AmanKing
VodQA_ParallelizingCukes_AmanKing
 

Viewers also liked

JIRA 7 for Developers - Bartek Gatz Filip Rogaczewski Ian Grunert
JIRA 7 for Developers - Bartek Gatz Filip Rogaczewski Ian GrunertJIRA 7 for Developers - Bartek Gatz Filip Rogaczewski Ian Grunert
JIRA 7 for Developers - Bartek Gatz Filip Rogaczewski Ian GrunertAtlassian
 
Atlassian Connect – Add Ons For Every Platform - Tanguy Crusson
Atlassian Connect – Add Ons For Every Platform - Tanguy CrussonAtlassian Connect – Add Ons For Every Platform - Tanguy Crusson
Atlassian Connect – Add Ons For Every Platform - Tanguy CrussonAtlassian
 
"Hacking" JIRA and Confluence Cloud Part 2 - Build Your Own - Luke Kilpatrick
"Hacking" JIRA and Confluence Cloud Part 2 - Build Your Own - Luke Kilpatrick"Hacking" JIRA and Confluence Cloud Part 2 - Build Your Own - Luke Kilpatrick
"Hacking" JIRA and Confluence Cloud Part 2 - Build Your Own - Luke KilpatrickAtlassian
 
"Hacking" JIRA and Confluence Cloud Part 1 - Connect Your Apps - Travis Smith
"Hacking" JIRA and Confluence Cloud Part 1 - Connect Your Apps - Travis Smith"Hacking" JIRA and Confluence Cloud Part 1 - Connect Your Apps - Travis Smith
"Hacking" JIRA and Confluence Cloud Part 1 - Connect Your Apps - Travis SmithAtlassian
 
Knowledge-Centered Support at Atlassian - Neil Kenagy
Knowledge-Centered Support at Atlassian - Neil KenagyKnowledge-Centered Support at Atlassian - Neil Kenagy
Knowledge-Centered Support at Atlassian - Neil KenagyAtlassian
 
Knowledge-Centered Support – The Methodology That Really Works - John Custy
Knowledge-Centered Support – The Methodology That Really Works - John CustyKnowledge-Centered Support – The Methodology That Really Works - John Custy
Knowledge-Centered Support – The Methodology That Really Works - John CustyAtlassian
 
HipChat (allthethings) for (alltheteams)! - Rich Manalang
HipChat (allthethings) for (alltheteams)! - Rich ManalangHipChat (allthethings) for (alltheteams)! - Rich Manalang
HipChat (allthethings) for (alltheteams)! - Rich ManalangAtlassian
 

Viewers also liked (7)

JIRA 7 for Developers - Bartek Gatz Filip Rogaczewski Ian Grunert
JIRA 7 for Developers - Bartek Gatz Filip Rogaczewski Ian GrunertJIRA 7 for Developers - Bartek Gatz Filip Rogaczewski Ian Grunert
JIRA 7 for Developers - Bartek Gatz Filip Rogaczewski Ian Grunert
 
Atlassian Connect – Add Ons For Every Platform - Tanguy Crusson
Atlassian Connect – Add Ons For Every Platform - Tanguy CrussonAtlassian Connect – Add Ons For Every Platform - Tanguy Crusson
Atlassian Connect – Add Ons For Every Platform - Tanguy Crusson
 
"Hacking" JIRA and Confluence Cloud Part 2 - Build Your Own - Luke Kilpatrick
"Hacking" JIRA and Confluence Cloud Part 2 - Build Your Own - Luke Kilpatrick"Hacking" JIRA and Confluence Cloud Part 2 - Build Your Own - Luke Kilpatrick
"Hacking" JIRA and Confluence Cloud Part 2 - Build Your Own - Luke Kilpatrick
 
"Hacking" JIRA and Confluence Cloud Part 1 - Connect Your Apps - Travis Smith
"Hacking" JIRA and Confluence Cloud Part 1 - Connect Your Apps - Travis Smith"Hacking" JIRA and Confluence Cloud Part 1 - Connect Your Apps - Travis Smith
"Hacking" JIRA and Confluence Cloud Part 1 - Connect Your Apps - Travis Smith
 
Knowledge-Centered Support at Atlassian - Neil Kenagy
Knowledge-Centered Support at Atlassian - Neil KenagyKnowledge-Centered Support at Atlassian - Neil Kenagy
Knowledge-Centered Support at Atlassian - Neil Kenagy
 
Knowledge-Centered Support – The Methodology That Really Works - John Custy
Knowledge-Centered Support – The Methodology That Really Works - John CustyKnowledge-Centered Support – The Methodology That Really Works - John Custy
Knowledge-Centered Support – The Methodology That Really Works - John Custy
 
HipChat (allthethings) for (alltheteams)! - Rich Manalang
HipChat (allthethings) for (alltheteams)! - Rich ManalangHipChat (allthethings) for (alltheteams)! - Rich Manalang
HipChat (allthethings) for (alltheteams)! - Rich Manalang
 

Similar to Scaling Plugins in Critical Systems - Jon Mort

The Top 5 Skills Enterprise Admins Need to Know
The Top 5 Skills Enterprise Admins Need to KnowThe Top 5 Skills Enterprise Admins Need to Know
The Top 5 Skills Enterprise Admins Need to KnowAtlassian
 
How To Make A Framework Plugin That Does Not Suck
How To Make A Framework Plugin That Does Not SuckHow To Make A Framework Plugin That Does Not Suck
How To Make A Framework Plugin That Does Not SuckMax Andersen
 
Part of the DLM story: Get your Database under Source Control - SQL In The City
Part of the DLM story: Get your Database under Source Control - SQL In The City Part of the DLM story: Get your Database under Source Control - SQL In The City
Part of the DLM story: Get your Database under Source Control - SQL In The City Red Gate Software
 
Improving the Quality of Existing Software
Improving the Quality of Existing SoftwareImproving the Quality of Existing Software
Improving the Quality of Existing SoftwareSteven Smith
 
Test Automation using UiPath Test Suite - Developer Circle Part-4.pdf
Test Automation using UiPath Test Suite - Developer Circle Part-4.pdfTest Automation using UiPath Test Suite - Developer Circle Part-4.pdf
Test Automation using UiPath Test Suite - Developer Circle Part-4.pdfDiana Gray, MBA
 
Automated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choiceAutomated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choicetoddbr
 
Business Applications Integration In The Cloud
Business Applications Integration In The CloudBusiness Applications Integration In The Cloud
Business Applications Integration In The CloudAnna Brzezińska
 
ARIA_11_12_Practical_Perspective.pptx
ARIA_11_12_Practical_Perspective.pptxARIA_11_12_Practical_Perspective.pptx
ARIA_11_12_Practical_Perspective.pptxMarkSteadman7
 
Developing for the Atlassian Ecosystem
Developing for the Atlassian EcosystemDeveloping for the Atlassian Ecosystem
Developing for the Atlassian EcosystemAlex Henderson
 
20111110 how puppet-fits_into_your_existing_infrastructure_and_change_managem...
20111110 how puppet-fits_into_your_existing_infrastructure_and_change_managem...20111110 how puppet-fits_into_your_existing_infrastructure_and_change_managem...
20111110 how puppet-fits_into_your_existing_infrastructure_and_change_managem...garrett honeycutt
 
Integration strategies best practices- Mulesoft meetup April 2018
Integration strategies   best practices- Mulesoft meetup April 2018Integration strategies   best practices- Mulesoft meetup April 2018
Integration strategies best practices- Mulesoft meetup April 2018Rohan Rasane
 
Extending SAP SuccessFactors in the Cloud and how not to do it
Extending SAP SuccessFactors in the Cloud and how not to do itExtending SAP SuccessFactors in the Cloud and how not to do it
Extending SAP SuccessFactors in the Cloud and how not to do itChris Paine
 
Mastering Test Automation: How to Use Selenium Successfully
Mastering Test Automation: How to Use Selenium Successfully Mastering Test Automation: How to Use Selenium Successfully
Mastering Test Automation: How to Use Selenium Successfully Applitools
 
How to use selenium successfully
How to use selenium successfullyHow to use selenium successfully
How to use selenium successfullyTEST Huddle
 
Facilitating Release Planning Event
Facilitating Release Planning EventFacilitating Release Planning Event
Facilitating Release Planning EventRavi Tadwalkar
 
World-class Data Engineering with Amazon Redshift
World-class Data Engineering with Amazon RedshiftWorld-class Data Engineering with Amazon Redshift
World-class Data Engineering with Amazon RedshiftLars Kamp
 
Using Compass to Diagnose Performance Problems
Using Compass to Diagnose Performance Problems Using Compass to Diagnose Performance Problems
Using Compass to Diagnose Performance Problems MongoDB
 
Using Compass to Diagnose Performance Problems in Your Cluster
Using Compass to Diagnose Performance Problems in Your ClusterUsing Compass to Diagnose Performance Problems in Your Cluster
Using Compass to Diagnose Performance Problems in Your ClusterMongoDB
 
Writing Clean Code (Recommendations by Robert Martin)
Writing Clean Code (Recommendations by Robert Martin)Writing Clean Code (Recommendations by Robert Martin)
Writing Clean Code (Recommendations by Robert Martin)Shirish Bari
 

Similar to Scaling Plugins in Critical Systems - Jon Mort (20)

The Top 5 Skills Enterprise Admins Need to Know
The Top 5 Skills Enterprise Admins Need to KnowThe Top 5 Skills Enterprise Admins Need to Know
The Top 5 Skills Enterprise Admins Need to Know
 
How To Make A Framework Plugin That Does Not Suck
How To Make A Framework Plugin That Does Not SuckHow To Make A Framework Plugin That Does Not Suck
How To Make A Framework Plugin That Does Not Suck
 
Part of the DLM story: Get your Database under Source Control - SQL In The City
Part of the DLM story: Get your Database under Source Control - SQL In The City Part of the DLM story: Get your Database under Source Control - SQL In The City
Part of the DLM story: Get your Database under Source Control - SQL In The City
 
Improving the Quality of Existing Software
Improving the Quality of Existing SoftwareImproving the Quality of Existing Software
Improving the Quality of Existing Software
 
Test Automation using UiPath Test Suite - Developer Circle Part-4.pdf
Test Automation using UiPath Test Suite - Developer Circle Part-4.pdfTest Automation using UiPath Test Suite - Developer Circle Part-4.pdf
Test Automation using UiPath Test Suite - Developer Circle Part-4.pdf
 
Automated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choiceAutomated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choice
 
Business Applications Integration In The Cloud
Business Applications Integration In The CloudBusiness Applications Integration In The Cloud
Business Applications Integration In The Cloud
 
ARIA_11_12_Practical_Perspective.pptx
ARIA_11_12_Practical_Perspective.pptxARIA_11_12_Practical_Perspective.pptx
ARIA_11_12_Practical_Perspective.pptx
 
Developing for the Atlassian Ecosystem
Developing for the Atlassian EcosystemDeveloping for the Atlassian Ecosystem
Developing for the Atlassian Ecosystem
 
Taming the shrew Power BI
Taming the shrew Power BITaming the shrew Power BI
Taming the shrew Power BI
 
20111110 how puppet-fits_into_your_existing_infrastructure_and_change_managem...
20111110 how puppet-fits_into_your_existing_infrastructure_and_change_managem...20111110 how puppet-fits_into_your_existing_infrastructure_and_change_managem...
20111110 how puppet-fits_into_your_existing_infrastructure_and_change_managem...
 
Integration strategies best practices- Mulesoft meetup April 2018
Integration strategies   best practices- Mulesoft meetup April 2018Integration strategies   best practices- Mulesoft meetup April 2018
Integration strategies best practices- Mulesoft meetup April 2018
 
Extending SAP SuccessFactors in the Cloud and how not to do it
Extending SAP SuccessFactors in the Cloud and how not to do itExtending SAP SuccessFactors in the Cloud and how not to do it
Extending SAP SuccessFactors in the Cloud and how not to do it
 
Mastering Test Automation: How to Use Selenium Successfully
Mastering Test Automation: How to Use Selenium Successfully Mastering Test Automation: How to Use Selenium Successfully
Mastering Test Automation: How to Use Selenium Successfully
 
How to use selenium successfully
How to use selenium successfullyHow to use selenium successfully
How to use selenium successfully
 
Facilitating Release Planning Event
Facilitating Release Planning EventFacilitating Release Planning Event
Facilitating Release Planning Event
 
World-class Data Engineering with Amazon Redshift
World-class Data Engineering with Amazon RedshiftWorld-class Data Engineering with Amazon Redshift
World-class Data Engineering with Amazon Redshift
 
Using Compass to Diagnose Performance Problems
Using Compass to Diagnose Performance Problems Using Compass to Diagnose Performance Problems
Using Compass to Diagnose Performance Problems
 
Using Compass to Diagnose Performance Problems in Your Cluster
Using Compass to Diagnose Performance Problems in Your ClusterUsing Compass to Diagnose Performance Problems in Your Cluster
Using Compass to Diagnose Performance Problems in Your Cluster
 
Writing Clean Code (Recommendations by Robert Martin)
Writing Clean Code (Recommendations by Robert Martin)Writing Clean Code (Recommendations by Robert Martin)
Writing Clean Code (Recommendations by Robert Martin)
 

More from Atlassian

International Women's Day 2020
International Women's Day 2020International Women's Day 2020
International Women's Day 2020Atlassian
 
10 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 202010 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 2020Atlassian
 
Forge App Showcase
Forge App ShowcaseForge App Showcase
Forge App ShowcaseAtlassian
 
Let's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UILet's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UIAtlassian
 
Meet the Forge Runtime
Meet the Forge RuntimeMeet the Forge Runtime
Meet the Forge RuntimeAtlassian
 
Forge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User ExperienceForge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User ExperienceAtlassian
 
Take Action with Forge Triggers
Take Action with Forge TriggersTake Action with Forge Triggers
Take Action with Forge TriggersAtlassian
 
Observability and Troubleshooting in Forge
Observability and Troubleshooting in ForgeObservability and Troubleshooting in Forge
Observability and Troubleshooting in ForgeAtlassian
 
Trusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy ModelTrusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy ModelAtlassian
 
Designing Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI SystemDesigning Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI SystemAtlassian
 
Forge: Under the Hood
Forge: Under the HoodForge: Under the Hood
Forge: Under the HoodAtlassian
 
Access to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAccess to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAtlassian
 
Design Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginDesign Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginAtlassian
 
Tear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the BuildingTear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the BuildingAtlassian
 
Nailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that MatterNailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that MatterAtlassian
 
Building Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in MindBuilding Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in MindAtlassian
 
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...Atlassian
 
Beyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced TeamsBeyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced TeamsAtlassian
 
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed TeamThe Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed TeamAtlassian
 
Building Apps With Enterprise in Mind
Building Apps With Enterprise in MindBuilding Apps With Enterprise in Mind
Building Apps With Enterprise in MindAtlassian
 

More from Atlassian (20)

International Women's Day 2020
International Women's Day 2020International Women's Day 2020
International Women's Day 2020
 
10 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 202010 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 2020
 
Forge App Showcase
Forge App ShowcaseForge App Showcase
Forge App Showcase
 
Let's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UILet's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UI
 
Meet the Forge Runtime
Meet the Forge RuntimeMeet the Forge Runtime
Meet the Forge Runtime
 
Forge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User ExperienceForge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User Experience
 
Take Action with Forge Triggers
Take Action with Forge TriggersTake Action with Forge Triggers
Take Action with Forge Triggers
 
Observability and Troubleshooting in Forge
Observability and Troubleshooting in ForgeObservability and Troubleshooting in Forge
Observability and Troubleshooting in Forge
 
Trusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy ModelTrusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy Model
 
Designing Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI SystemDesigning Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI System
 
Forge: Under the Hood
Forge: Under the HoodForge: Under the Hood
Forge: Under the Hood
 
Access to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAccess to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIs
 
Design Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginDesign Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch Plugin
 
Tear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the BuildingTear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the Building
 
Nailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that MatterNailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that Matter
 
Building Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in MindBuilding Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in Mind
 
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
 
Beyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced TeamsBeyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced Teams
 
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed TeamThe Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
 
Building Apps With Enterprise in Mind
Building Apps With Enterprise in MindBuilding Apps With Enterprise in Mind
Building Apps With Enterprise in Mind
 

Scaling Plugins in Critical Systems - Jon Mort

  • 2. Scaling Plugins in Critical Systems Getting It Right JON MORT • CONSULTANT • ADAPTAVIST • @ADAPTAVIST
  • 4. About Me Who Am I • Atlassian Consultant/Developer at Adaptavist • 5 years of experience developing Atlassian plugins • Plugin License Manager was my fault • Spoken at various Conferences, including Summit about: • Atlassian development • Performance tuning • Level One • Level Two • Level Two • Level Two • Level One
  • 5. About Me Adaptavist - Who Are We • 60 people in 4 offices in the UK, USA and Germany • Level One • Level Two • Level Two • Level Two • Level One • Customers in 60+ countries including over half of the Fortune 500 • Longest established Atlassian partners - since 2005 • Professional Services, Managed Services, Products and Training • Focused on helping Enterprises plan, deliver and manage software and applications using the Atlassian toolset
  • 6. About Me Why Should You Listen To Me? • Because I’ve messed up • A lot • … but also made it better • Level One • Level Two • Level Two • Level Two • Level One
  • 8. Who are you? Add-On Developers • Level One • Level Two • Level Two • Level Two • Level One
  • 9. Who are you? Application Administrators • Level One • Level Two • Level Two • Level Two • Level One
  • 10. Who are you? Product Owners & Users • Level One • Level Two • Level Two • Level Two • Level One
  • 12. Before Data Center Users • Level One • Level Two • Level Two • Level Two • Level One WAN JIRA Index Database
  • 13. With Data Center The Architecture • Level One • Level Two • Level Two • Level Two • Level One WAN Users . . . Multiple JIRA Nodes Replicated Indexes Load Balancer Database Shared Home
  • 14. ” “ <plugin-info> <param name=“atlassian-data-center-compatible">true</param> </plugin-info>
  • 15. NO!
  • 16. NO!
  • 17. Scaling Plugins STATE CACHES & POOLS COORDINATION TESTING USER INTERFACE IN THE CODE
  • 20. Use Provided Storage Mechanisms
  • 21. State - Do’s & Don’ts COLUMN TITLE COLUMN TITLE COLUMN TITLE DO Read up distributed systems theory DO Consider and test failure modes DO Keep as little state as possible DO Use the appropriate supported APIs DON’T Just assume everything will be OK
  • 22. Scaling Plugins STATE CACHES & POOLS COORDINATION TESTING USER INTERFACE IN THE CODE
  • 25. Local, Cluster, Hybrid Keys Values Local Local Local Cluster Replicated Replicated Hybrid Replicated Local
  • 27. Be flexible to changes of Scale
  • 28. Pool Monitoring • Level One • Level Two • Level Two • Level Two • Level One
  • 29. Caches and Pools - Do’s & Don’ts COLUMN TITLE COLUMN TITLE COLUMN TITLE DO Cache values that are complex to create and cheap to store DO Invalidate caches appropriately using time and freshness checks DO Pool resources where appropriate DO Use and know the new caching APIs DON’T Use hash maps or statics or sessions for caching!
  • 30. Scaling Plugins STATE CACHES & POOLS COORDINATION TESTING USER INTERFACE IN THE CODE
  • 31.
  • 32.
  • 40. Coordination - Do’s & Don’ts COLUMN TITLE COLUMN TITLE COLUMN TITLE DO Think about concurrency - read Java Concurrency in Practice DO Use immutable data structures with reentrant logic DON’T Be scared and ignore potential problems DON’T Use locking (like synchronised blocks)
  • 41. Scaling Plugins STATE CACHES & POOLS COORDINATION TESTING USER INTERFACE IN THE CODE
  • 42. How to Lose Friends and Alienate People
  • 43. Everyone’s a bit unstable
  • 45. Don’t be THAT Plugin
  • 47. Testing - Do’s & Don’ts COLUMN TITLE COLUMN TITLE COLUMN TITLE DO Make it easy to detect application API changes - Integration test DO Performance testing DO Actively try to increase the test coverage - these are important! DO Test at scale and announce results DO Declare how you tested for Data Center DON’T Ignore Security
  • 48. Scaling Plugins STATE CACHES & POOLS COORDINATION TESTING USER INTERFACE IN THE CODE
  • 52. Enterprise Systems do not have only 5 Projects
  • 53. User Interface - Do’s & Don’ts COLUMN TITLE COLUMN TITLE COLUMN TITLE DO use and know the ADG DO Think about scaled use DO Think about the impact you might make DON’T Think you’re the only plugin that matters DON’T Lock the UI up
  • 54. Scaling Plugins STATE CACHES & POOLS COORDINATION TESTING USER INTERFACE IN THE CODE
  • 56. Put your eggs in one batch
  • 58. Your Black Box isn’t Opaque
  • 61. Useful Libs - Do’s & Don’ts COLUMN TITLE COLUMN TITLE COLUMN TITLE DO Watch A P2 Plugin and a SaaS Platform Walk into a Bar… from AtlasCamp DO Know your OSGi DO Use Atlassian Spring Scanner DO Look at Pockeknife DO Use Wired Tests DO Take advantage of batching
  • 63. Key takeaways: #atlassian • Understand your state • Play nice - respect the application you execute within. • Be mindful of the user experience - does it scale? • Understand the bottlenecks within your plugin - are you lazy enough? • Be immutable, else be remembered for the wrong reasons! • Test at scale or announce that you haven’t.
  • 64. Thank you! JON MORT • CONSULTANT • ADAPTAVIST • @ADAPTAVIST