Building a Cerberus App Without Losing Our Heads
The Passage to a Cross-Platform App
DRAGOS CIUPUREANU | SOFTWARE ENGINEER | @ADAPTAVIST | @DRAGOSMC
SANDESH KUMAR | AUTOMATION TEST LEAD | @ADAPTAVIST | @SANDESHPKUMAR
Cerberus, is a multi-headed dog that
guards the gates of the Underworld to
prevent the dead from leaving.
@ADAPTAVIST
Black Mirror Bandersnatch. Picture: Netflix / YouTube
Sugar PuffsKellogg’s
Frosties
CHOICE A CHOICE B
Agenda
The History of TM4J
Current State
Tech Deep Dive
Testing
Product Management
Appendix
The History of TM4J
Kanoah Tests
2014
The History of TM4J
Kanoah Tests
2014
2017
Reaches 500
Server installs
The History of TM4J
Kanoah Tests
2014
2017
Reaches 500
Server installs
Kanoah turns into
Test Management
for Jira
2017
The History of TM4J
Kanoah Tests
2014
2017
Reaches 500
Server installs
Kanoah turns into
Test Management
for Jira
2017
The History of TM4J
2018
Test Management for
Jira Cloud
Kanoah Tests
2014
2017
Reaches 500
Server installs
Kanoah turns into
Test Management
for Jira
2017
The History of TM4J
Among the first DC
apps on the
Marketplace
2018
2018
Test Management for
Jira Cloud
Kanoah Tests
2014
2017
Reaches 500
Server installs
2019
3700 installs
Kanoah turns into
Test Management
for Jira
2017
The History of TM4J
Among the first DC
apps on the
Marketplace
2018
2018
Test Management for
Jira Cloud
The History of TM4J
The History of TM4J
Users
The History of TM4J
Users Assumptions
Building a Cerberus App Without Losing Our Heads: The Passage to a Cross-Platform App
Technology
Technology
Personas & Features
Technology
Personas & Features
Revenue
Tech Deep Dive
How did we actually do it?
https://confluence.atlassian.com/enterprise/scaling-with-atlassian-data-center-895912481.html
https://confluence.atlassian.com/enterprise/scaling-with-atlassian-data-center-895912481.html
https://confluence.atlassian.com/enterprise/scaling-with-atlassian-data-center-895912481.html
https://blog.developer.atlassian.com/why-atlassian-uses-an-internal-paas-to-regulate-aws-access/
https://blog.developer.atlassian.com/why-atlassian-uses-an-internal-paas-to-regulate-aws-access/
Building a Cerberus App Without Losing Our Heads: The Passage to a Cross-Platform App
https://developer.atlassian.com/cloud/jira/platform/integrating-with-jira-cloud/
Sharing is caring
Sharing is caring
Common libs
Frontend
Sharing is caring
Common libs
Frontend
Sharing is caring
ServicesCommon libs
COMMON LIBRARIES
const val atm_file_importer: String = "com.adaptavist:atm-file-importer:1.1.1"
const val atm_kql_filter: String = “com.adaptavist:atm-kql-filter:1.1.1"
const val commons_tm4j_reports: String = “com.adaptavist:commons-tm4j-reports:1.1.1"
const val commons_tm4j_tql: String = “com.adaptavist:commons-tm4j-tql:1.1.1"
const val tm4j_bdd: String = “com.adaptavist:tm4j-bdd:1.1.1"
const val tm4j_security: String = “com.adaptavist:tm4j-security:1.1.1"
const val tm4j_junit_extensions: String = "com.adaptavist:tm4j-junit-extensions:1.1.1"
FRONTEND
Reuse the
Frontend
Entirely
Frontend Branching Strategies
SERVICES
Keep goingI’ve had
enough
CHOICE A CHOICE B
Release Cycle
Release Cycle
Scrum
Release Cycle
Scrum Kan-Ban
Release Cycle
FEATURE FLAGS
<li feature-flag="testCase.testdata">
<a id="ktm-test-data-option"
href
ng-click="selectTypeTestData()"
class="aui-dropdown2-checkbox"
ng-class="{'aui-dropdown2-checked': showTestData()}”
translate>
TEST_SCRIPT.PARAM_TYPE.TESTDATA
</a>
</li>
FEATURE FLAGS
Troubleshooting
Server
Troubleshooting
Server
Troubleshooting
Server
Troubleshooting
Server
Troubleshooting
Cloud
Server
Troubleshooting
Cloud
Server
Troubleshooting
Cloud
Amazon CloudWatch
Building a Cerberus App Without Losing Our Heads: The Passage to a Cross-Platform App
Security
Performance
Security
Performance
Data
Security
Testing
Areas of Testing
Functional Performance Security User
Areas of Testing
Server
Test Management for Jira
Data CentreCloud
Don’t
Repeat
Yourself
Don’t
Repeat
Yourself
Don’t
Repeat
Yourself
Don’t
Repeat
Yourself
Challenges
Locators
Locators
Features
Locators
API
Features
Locators
API
Performance
Features
Locators
API
Performance
Features
UI/UX
Locators
API
Performance
Features
UI/UX
Stakeholders
LOCATORS
LOCATORS
@FindBy(id = "ktm-new-testcase") //common
private WebElement testCaseCreateButton;
@FindAll({
@FindBy(id = "ktm-testcycle"), //server
@FindBy(id = "ktm-testrun") //cloud
})
private WebElement testCycleCreateButton;
FEATURES
FEATURES
class ConditionalExecutionExampleTests {
@Test
void serverAndCloudTest(){
...
}
@EnabledIfEnvironmentVariable(
named = "ENV",
matches = "CLOUD"
)
@Test
void cloudOnlyTest(){
…
}
}
API
API
@TestFixture
class TestFixtureAnnotationExampleTests {
@TestCaseFixture(name = "Test Data Name")
private TestCase testCaseFirst;
@FolderFixture(name = "/Folder Name")
private Folder folderFirst;
@IssueFixture(name = "Jira Issue for coverage")
private Issue jiraIssue;
@Test
void viewTestCaseTraceabilityTest(){
...
}
}
PERFORMANCE
PERFORMANCE
class RetryAnnotationExampleTests {
@Test
@Retry(
times = 3,
onlyIf = "System.getProperty("ENV") == "CLOUD""
)
void autoRetryWhenFailTest(){
Assertions.fail();
}
}
UI/UX
UI/UX
class VisualTests {
private WebDriver driver;
@VisualTest(
baselineImagePath = "target",
changesImagePath = "target",
baselinePrefix = "benchmark"
)
@Test
void withVisualTestAnnotationCustomValuesTest(){
...
}
}
STAKEHOLDERS
STAKEHOLDERS
@TM4JReporter
class ConditionalExecutionExampleTests {
@Test
void serverAndCloudTest(){
...
}
@EnabledIfEnvironmentVariable(
named = "ENV",
matches = "CLOUD"
)
@Test
void cloudOnlyTest(){
...
}
}
Open Source
TESTING
TESTING
Tests
TESTING
Build Docker
Images
Tests
TESTING
Build Docker
Images
Push
Tests
TESTING
Build Docker
Images
Push
Tests
ServerCloud
TESTING
Build Docker
Images
Push
Tests
Build
ServerCloud
TESTING
Build Docker
Images
Push
Tests
Build
ServerCloud
TESTING
Provision
Build Docker
Images
Push
Tests
Build
Pull
ServerCloud
TESTING
Provision
Execute
Build Docker
Images
Push
Tests
Build
Pull
ServerCloud
TESTING
Provision
Execute
Build Docker
Images
Push
Tests
Build
Pull
ServerCloud
Shared
Security
Testing
Performance
Testing
CHOICE A CHOICE B
Performance
Testing
Performance Testing
Performance Testing
Cloud
Server
Performance Testing
Cloud
Server
Performance Testing
Data CentreCloud
REPORT - SERVER & DC
REPORT - CLOUD
REPORT - CLOUD
REPORT - CLOUD
REPORT - CLOUD
REPORT - CLOUD
REPORT - CLOUD
Security
Testing
Peer Review
Peer Review
Scanners
Peer Review
Scanners
Crowd Sourcing
User
Testing
Canary Launch
Canary Launch
Dog Fooding
Canary Launch
Dog Fooding
Beta Version
Product Management
Feature FlagsAnalytics
CHOICE A CHOICE B
Analytics
ANALYTICS
ANALYTICS
Feature Flags
FEATURE FLAGS
Test
Feedback
Business model
Please remember
You don’t always need the line or text at all.
Appendix
Stuff we’re not going to be able to talk about much
Don’t forget to consider …
Don’t forget to consider …
Marketing
Support
Don’t forget to consider …
Marketing
Support
Don’t forget to consider …
LicensingMarketing
Takeaways
Reuse code
After all, sharing is caring.
Takeaways
Reuse code
After all, sharing is caring.
3rd party services
Accelerated feedback loop.
Takeaways
Reuse code
After all, sharing is caring.
3rd party services
Accelerated feedback loop.
Assumptions
Same-same, but different.
Takeaways
Thank you!
DRAGOS CIUPUREANU | SOFTWARE ENGINEER | @ADAPTAVIST | @DRAGOSMC
SANDESH KUMAR | AUTOMATION TEST LEAD | @ADAPTAVIST | @SANDESHPKUMAR

More Related Content

PDF
Spec-first API Design for Speed and Safety
PDF
Leaning into Server to Cloud App Migration
PDF
Serverless Analytics and Monitoring For Your Cloud App
PDF
Integration Testing on Steroids: Run Your Tests on the Real Things
PDF
Practical Patterns for Developing a Cross-product Cross-version App
PDF
From AUI to Atlaskit - Streamlining Development for Server & Cloud Apps
PDF
Declaring Server App Components in Pure Java
PDF
Integrating Jira Software Cloud With the AWS Code Suite
Spec-first API Design for Speed and Safety
Leaning into Server to Cloud App Migration
Serverless Analytics and Monitoring For Your Cloud App
Integration Testing on Steroids: Run Your Tests on the Real Things
Practical Patterns for Developing a Cross-product Cross-version App
From AUI to Atlaskit - Streamlining Development for Server & Cloud Apps
Declaring Server App Components in Pure Java
Integrating Jira Software Cloud With the AWS Code Suite

What's hot (20)

PDF
Take Action with Forge Triggers
PDF
Scaling Indexing and Replication in Jira Data Center Apps
PDF
What's New in Jira Cloud for Developers
PDF
Building Secure Apps in the Cloud
PDF
An Exploration of Cross-product App Experiences
PDF
The New & Improved Confluence Server and Data Center
PDF
Forge: Under the Hood
PDF
Meet the Forge Runtime
PDF
Building Faster With Your Team's UI Kit
PDF
4 Changes We're Making to Help you be Successful in the Cloud
PDF
Access to User Activities - Activity Platform APIs
PDF
Integrate CI/CD Pipelines with Jira Software Cloud
PDF
What Does Jira Next-Gen Mean for Cloud Apps?
PDF
Technical Deep Dive Into Atlassian's New Apps Performance Testing Framework
PDF
Designing and Running a GraphQL API
PDF
Creating Your Own Server Add-on that Customizes Confluence or JIRA
PDF
Designing Forge UI: A Story of Designing an App UI System
PDF
How to Build a Better JIRA Add-on
PDF
How Bitbucket Pipelines Loads Connect UI Assets Super-fast
PPTX
Next level of Appium
Take Action with Forge Triggers
Scaling Indexing and Replication in Jira Data Center Apps
What's New in Jira Cloud for Developers
Building Secure Apps in the Cloud
An Exploration of Cross-product App Experiences
The New & Improved Confluence Server and Data Center
Forge: Under the Hood
Meet the Forge Runtime
Building Faster With Your Team's UI Kit
4 Changes We're Making to Help you be Successful in the Cloud
Access to User Activities - Activity Platform APIs
Integrate CI/CD Pipelines with Jira Software Cloud
What Does Jira Next-Gen Mean for Cloud Apps?
Technical Deep Dive Into Atlassian's New Apps Performance Testing Framework
Designing and Running a GraphQL API
Creating Your Own Server Add-on that Customizes Confluence or JIRA
Designing Forge UI: A Story of Designing an App UI System
How to Build a Better JIRA Add-on
How Bitbucket Pipelines Loads Connect UI Assets Super-fast
Next level of Appium
Ad

Similar to Building a Cerberus App Without Losing Our Heads: The Passage to a Cross-Platform App (20)

PDF
Serverless in production, an experience report (JeffConf)
PDF
Serverless in production, an experience report (Going Serverless)
PDF
Serverless in production, an experience report (linuxing in london)
PDF
Testing your application on Google App Engine
PDF
Testing Your Application On Google App Engine
PDF
Agile integration workshop Seattle
PPTX
Useful practices of creation automatic tests by using cucumber jvm
PDF
Heavenly hell – automated tests at scale wojciech seliga
PDF
20211028 ADDO Adapting to Covid with Serverless Craeg Strong Ariel Partners
PDF
Session 3 - CloudStack Test Automation and CI
PDF
Microservice Teams - How the cloud changes the way we work
PDF
AWS Lambda from the trenches
PDF
20211202 NADOG Adapting to Covid with Serverless Craeg Strong Ariel Partners
PDF
Testing for fun in production Into The Box 2018
PPT
Selenium-Webdriver With PHPUnit Automation test for Joomla CMS!
PDF
Karim Fanadka
PDF
20211202 North America DevOps Group NADOG Adapting to Covid With Serverless C...
PDF
Cypress Automation : Increase Reusability with Custom Commands
PPT
Java 6 [Mustang] - Features and Enchantments
PPTX
Cloud Serving Engine
Serverless in production, an experience report (JeffConf)
Serverless in production, an experience report (Going Serverless)
Serverless in production, an experience report (linuxing in london)
Testing your application on Google App Engine
Testing Your Application On Google App Engine
Agile integration workshop Seattle
Useful practices of creation automatic tests by using cucumber jvm
Heavenly hell – automated tests at scale wojciech seliga
20211028 ADDO Adapting to Covid with Serverless Craeg Strong Ariel Partners
Session 3 - CloudStack Test Automation and CI
Microservice Teams - How the cloud changes the way we work
AWS Lambda from the trenches
20211202 NADOG Adapting to Covid with Serverless Craeg Strong Ariel Partners
Testing for fun in production Into The Box 2018
Selenium-Webdriver With PHPUnit Automation test for Joomla CMS!
Karim Fanadka
20211202 North America DevOps Group NADOG Adapting to Covid With Serverless C...
Cypress Automation : Increase Reusability with Custom Commands
Java 6 [Mustang] - Features and Enchantments
Cloud Serving Engine
Ad

More from Atlassian (20)

PPTX
International Women's Day 2020
PDF
10 emerging trends that will unbreak your workplace in 2020
PDF
Forge App Showcase
PDF
Let's Build an Editor Macro with Forge UI
PDF
Forge UI: A New Way to Customize the Atlassian User Experience
PDF
Observability and Troubleshooting in Forge
PDF
Trusted by Default: The Forge Security & Privacy Model
PDF
Design Your Next App with the Atlassian Vendor Sketch Plugin
PDF
Tear Up Your Roadmap and Get Out of the Building
PDF
Nailing Measurement: a Framework for Measuring Metrics that Matter
PDF
Building Apps With Color Blind Users in Mind
PDF
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
PDF
Beyond Diversity: A Guide to Building Balanced Teams
PDF
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
PDF
Building Apps With Enterprise in Mind
PDF
Shipping With Velocity and Confidence Using Feature Flags
PDF
Build With Heart and Balance, Remote Work Edition
PDF
How to Grow an Atlassian App Worthy of Top Vendor Status
PDF
Monitoring As Code: How to Integrate App Monitoring Into Your Developer Cycle
PDF
How to Market Your New App on the Atlassian Marketplace
International Women's Day 2020
10 emerging trends that will unbreak your workplace in 2020
Forge App Showcase
Let's Build an Editor Macro with Forge UI
Forge UI: A New Way to Customize the Atlassian User Experience
Observability and Troubleshooting in Forge
Trusted by Default: The Forge Security & Privacy Model
Design Your Next App with the Atlassian Vendor Sketch Plugin
Tear Up Your Roadmap and Get Out of the Building
Nailing Measurement: a Framework for Measuring Metrics that Matter
Building Apps With Color Blind Users in Mind
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Beyond Diversity: A Guide to Building Balanced Teams
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
Building Apps With Enterprise in Mind
Shipping With Velocity and Confidence Using Feature Flags
Build With Heart and Balance, Remote Work Edition
How to Grow an Atlassian App Worthy of Top Vendor Status
Monitoring As Code: How to Integrate App Monitoring Into Your Developer Cycle
How to Market Your New App on the Atlassian Marketplace

Recently uploaded (20)

PDF
Transform-Your-Factory-with-AI-Driven-Quality-Engineering.pdf
PPTX
Microsoft Excel 365/2024 Beginner's training
PDF
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
PDF
Five Habits of High-Impact Board Members
PPTX
GROUP4NURSINGINFORMATICSREPORT-2 PRESENTATION
PDF
Enhancing plagiarism detection using data pre-processing and machine learning...
PDF
sustainability-14-14877-v2.pddhzftheheeeee
PPTX
TEXTILE technology diploma scope and career opportunities
PPTX
AI IN MARKETING- PRESENTED BY ANWAR KABIR 1st June 2025.pptx
PPTX
Build Your First AI Agent with UiPath.pptx
PDF
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
PDF
Credit Without Borders: AI and Financial Inclusion in Bangladesh
PDF
5-Ways-AI-is-Revolutionizing-Telecom-Quality-Engineering.pdf
PDF
Taming the Chaos: How to Turn Unstructured Data into Decisions
PDF
UiPath Agentic Automation session 1: RPA to Agents
PPTX
Module 1 Introduction to Web Programming .pptx
PDF
Transform-Your-Streaming-Platform-with-AI-Driven-Quality-Engineering.pdf
PDF
OpenACC and Open Hackathons Monthly Highlights July 2025
PDF
4 layer Arch & Reference Arch of IoT.pdf
PPTX
Custom Battery Pack Design Considerations for Performance and Safety
Transform-Your-Factory-with-AI-Driven-Quality-Engineering.pdf
Microsoft Excel 365/2024 Beginner's training
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
Five Habits of High-Impact Board Members
GROUP4NURSINGINFORMATICSREPORT-2 PRESENTATION
Enhancing plagiarism detection using data pre-processing and machine learning...
sustainability-14-14877-v2.pddhzftheheeeee
TEXTILE technology diploma scope and career opportunities
AI IN MARKETING- PRESENTED BY ANWAR KABIR 1st June 2025.pptx
Build Your First AI Agent with UiPath.pptx
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
Credit Without Borders: AI and Financial Inclusion in Bangladesh
5-Ways-AI-is-Revolutionizing-Telecom-Quality-Engineering.pdf
Taming the Chaos: How to Turn Unstructured Data into Decisions
UiPath Agentic Automation session 1: RPA to Agents
Module 1 Introduction to Web Programming .pptx
Transform-Your-Streaming-Platform-with-AI-Driven-Quality-Engineering.pdf
OpenACC and Open Hackathons Monthly Highlights July 2025
4 layer Arch & Reference Arch of IoT.pdf
Custom Battery Pack Design Considerations for Performance and Safety

Building a Cerberus App Without Losing Our Heads: The Passage to a Cross-Platform App