Ever wanted to be a fly on the wall in someone else's retrospective? Now you can! Join Jon Mort and Adam Markham from Adaptavist as they walk us through recent lessons learned from their team. Hear how ScriptRunner, Adaptavist's popular Automation add-on moved into the cloud. Learn about the parts they loved as well as challenges and frustrations they faced. This honest and open talk will be easy for any add-on developer to relate to.
Jon Mort, Head of Engineering Research and Development, Adaptavist
Adam Markham, Software Developer, Adaptavist
11. DEVELOPMENT TIMELINE - AUGUST
ShipIt
Initial version
Preparing for
launch - now with
a team
Launch
Future
Aug 2015 Jan June Sept Present
Connect Week
February
AtlasCamp
May
12. August
ShipIt
Result
Tech Stack
Where next for ScriptRunner?
Atlassian Cloud of course
Which app?
JIRA first
But how to bring it to Cloud?
Many challenges - mostly deferred
13. August
What did we ship?
Scripted Workflow Post Functions
Script Console
Hacky JQL Function workaround
ShipIt
Result
Tech Stack
In a nutshell
Remote code exploitation
14. August
The Choices
Play
Atlassian Connect Express (ACE)
We chose to do it our way
Ratpack
Why not use Play or ACE?
Groovy - written by users
Control
SR is not like anything else (or is it?)
Result
Tech Stack
ShipIt
15. RATPACK
Ratpack is a set of Java libraries for building modern
HTTP applications.
It provides just enough for writing practical, high
performance, apps.
It is built on Java 8, Netty
and reactive principles.
16. JVM
Great Groovy support.
All the libraries we know.
Lightweight
No application server. Single executable Jar.
And fast.
Asynchronous
Concurrent request processing.
Connect is inherently async
17. JVM
Great Groovy support.
All the libraries we know.
Lightweight
No application server. Single executable Jar.
And fast.
Asynchronous
Concurrent request processing.
Connect is inherently async
18. JVM
Great Groovy support.
All the libraries we know.
Lightweight
No application server. Single executable Jar.
And fast.
Asynchronous
Concurrent request processing.
Connect is inherently async
21. DEVELOPMENT TIMELINE - AUGUST
ShipIt
Initial version
Preparing for
launch - now with
a team
Launch
Future
Aug 2015 Jan June Sept Present
Connect Week
February
AtlasCamp
May
22. DEVELOPMENT TIMELINE - JANUARY
ShipIt
Initial version
Preparing for
launch - now with
a team
Launch
Future
Aug 2015 Jan June Sept Present
Connect Week
February
AtlasCamp
May
24. Three
Categories
of Feature
Re-implement
Re-think
Can’t Do
Cloud is different, but similar
Some extension points don’t exist on Cloud, others are
different
Same Concepts
Good mapping from Server to Cloud so we can just re-
implement using the same metaphors
Very few differences
There might be some differences but mostly they are
the same
25. Three
Categories
of Feature
Re-implement
Re-think
Can’t Do
No extension point
There is no direct extension point. We have to re-think
the feature to give a similar level of functionality
Calculated Custom Fields
Base need is to be able to update a field based on
other values. Custom field replaced by webhook based
update
JQL Extensions
Initially we thought we couldn’t do this. But using
Aliases and Filters we can get to a similar level of
functionality
27. Workaround or Fix
Or just be comfortable that we can’t do it
Development Cycle
Running into limitations and frustrations
28. Shipping Often
Multiple times a day
Managing multiple environments
Code Sharing
Very little No code is shared between Cloud and
Server
Continuous Delivery
We are running on AWS with lots of automated
tests
We might be
doing
DevOps
now?
29. Shipping Often
Multiple times a day
Managing multiple environments
Code Sharing
Very little No code is shared between Cloud and
Server
Continuous Delivery
We are running on AWS with lots of automated
tests
We might be
doing
DevOps
now?
30. Shipping Often
Multiple times a day
Managing multiple environments
Code Sharing
Very little No code is shared between Cloud and
Server
Continuous Delivery
We are running on AWS with lots of automated
tests
We might be
doing
DevOps
now?
31. DEVELOPMENT TIMELINE - JANUARY
ShipIt
Initial version
Preparing for
launch - now with
a team
Launch
Future
Aug 2015 Jan June Sept Present
Connect Week
February
AtlasCamp
May
32. DEVELOPMENT TIMELINE - FEBRUARY
ShipIt
Initial version
Preparing for
launch - now with
a team
Launch
Future
Aug 2015 Jan June Sept Present
Connect Week
February
AtlasCamp
May
33. JQL and Custom Field Ideas
Talking through with Atlassian Devs about how
we can achieve feature parity and knock off
some of the rough edges
HipChat Spike
8hrs to a working HipChat implementation
Confluence Support
Perpetually coming soon.
Scripted Macros
Connect
Week
34. JQL and Custom Field Ideas
Talking through with Atlassian Devs about how
we can achieve feature parity and knock off
some of the rough edges
HipChat Spike
8hrs to a working HipChat implementation
Confluence Support
Perpetually coming soon.
Scripted Macros
Connect
Week
35. JQL and Custom Field Ideas
Talking through with Atlassian Devs about how
we can achieve feature parity and knock off
some of the rough edges
HipChat Spike
8hrs to a working HipChat implementation
Confluence Support
Perpetually coming soon
Scripted Macros
Connect
Week
36. DEVELOPMENT TIMELINE - FEBRUARY
ShipIt
Initial version
Preparing for
launch - now with
a team
Launch
Future
Aug 2015 Jan June Sept Present
Connect Week
February
AtlasCamp
May
37. DEVELOPMENT TIMELINE - MAY
ShipIt
Initial version
Preparing for
launch - now with
a team
Launch
Future
Aug 2015 Jan June Sept Present
Connect Week
February
AtlasCamp
May
39. Your a SaaS
provider now
Not Just A Jar
Environment
Operations
Service not a Jar
Many more things to think about
Fewer versions to worry about
One version to rule them all
More control
Customers upgrade when you want and using
whatever technology you like
40. Your a SaaS
provider now
Not Just A Jar
Environment
Operations
Uptime
99% 99.9% 99.99%
Scaling
Load balancing your service
Services
Coping with third party outages
JIRA Cloud has daily maintenance windows
41. Your a SaaS
provider now
Not Just A Jar
Environment
Operations
0 downtime deployments
Customers must not notice when you deploy
Monitoring
Logs must be centralised and correlated
Metrics should be useful
Dashboards should be beautiful
Alerting
Choosing the right metrics to alert on is hard
Always be iterating on what wakes you up at night
42. DEVELOPMENT TIMELINE - JUNE
ShipIt
Initial version
Preparing for
launch - now with
a team
Launch
Future
Aug 2015 Jan June Sep Present
Connect Week
February
AtlasCamp
May
43. DEVELOPMENT TIMELINE - LAUNCH
ShipIt
Initial version
Preparing for
launch - now with
a team
Launch
Future
Aug 2015 Jan June Sep Present
Connect Week
February
AtlasCamp
May
45. Running the Service
is a little scary
Real Customers
Need support
Have good ideas
Invalid expectations
Post Launch
46. We learned a lot!
Reporting
Marketplace has good tools for cloud
reporting. Conversion rates,
renewals, churn.
Customer Feedback
Changed our priorities.
JQL is needed.
Evaluations
Paying customers after 30 days?
Nope
Promotions
Can we give it away or cheap for the
first 3 months?
48. You don’t get this on Server
Jars don’t just stop working
Logs are important
Lifeline in diagnosing what went wrong across
many different systems
Iterate Operations
Alerting needed improving. Increase tolerance
of failure
December
First outage
49. You don’t get this on Server
Jars don’t just stop working
Logs are important
Lifeline in diagnosing what went wrong across
many different systems
Iterate Operations
Alerting needed improving. Increase tolerance
of failure
December
First outage
50. You don’t get this on Server
Jars don’t just stop working
Logs are important
Lifeline in diagnosing what went wrong across
many different systems
Iterate Operations
Alerting needed improving. Increase tolerance
to failure
December
First outage
52. issueFunction in hasComments(3)
numberOfComments = 3
issueFunction in commented("jmort")
commentedBy = "jmort"
issueFunction in linkedIssuesOf("project = FOO")
(can’t do yet)
ENHANCED JQL - SERVER
53. issueFunction in hasComments(3)
numberOfComments = 3
issueFunction in commented("jmort")
commentedBy = "jmort"
issueFunction in linkedIssuesOf("project = FOO")
(can’t do yet)
ENHANCED JQL - CLOUD
54. Launch
Took planning to ensure we had capacity and
we could monitor
Customer Feedback
Was immediate and positive
Getting it right
Nearly launched, pulled it and thought againJQL Aliases
Launch
55. Launch
Took planning to ensure we had capacity and
we could monitor
Customer Feedback
Was immediate and positive
Getting it right
Nearly launched, pulled it and thought againJQL Aliases
Launch
56. Launch
Took planning to ensure we had capacity and
we could monitor
Customer Feedback
Was immediate and positive
Getting it right
Nearly launched, pulled it and thought againJQL Aliases
Launch
57. Infrastructure
Lambda, SNS, SQS,
Cloud Watch, EC2,
ELB.
Must scale
Permissions
Add-on user must be
able to see all issues.
Issue Links
No webhook for
links, so we have to
work it out!
JRA-8505 Please!!!!
Initial Sync
We must crawl every
issue of every
instance.
What makes JQL so tricky?
59. DEVELOPMENT TIMELINE - SEPTEMBER
ShipIt
Initial version
Preparing for
launch - now with
a team
Launch
Future
Aug 2015 Jan June Sep Present
Connect Week
February
AtlasCamp
May
60. DEVELOPMENT TIMELINE - FUTURE
ShipIt
Initial version
Preparing for
launch - now with
a team
Launch
Future
Aug 2015 Jan June Sep Present
Connect Week
February
AtlasCamp
May
61. To the Server
Take JQL Aliases
to the Server
(allthethings)
Support Confluence,
HipChat, Bitbucket and Trello
The Future
62. What is the Same on Server
Support
Similar questions and use cases
Using the API
Atlassian Community
AUI/ADG
UI is the same libs
Metaphors
Same JIRA
Mostly the same…
Used for the same kinds of things
Marketplace
Same listing
Reviews
Reputation
63. Summary
Support
is easier in the cloud
One version, we have the logs
Ship faster
Features, bugs and bug fixes
To everyone
All at once
Cloud is another world
Connect has more freedom
P2 is easier to get things done
SaaS
is a totally different ball game