Just came back from Amsterdam and as the whole event was in english and my notes too, this blogpost will be an english one as well.
AtlasCamp is a yearly event which is organized since 2009 from Atlassian for Plugin Developers to give them insights in the product APIs, inform about new features and of course get to know each other. After 3 years of coding in California, last year was the first event in Europe (Wiesbaden/Germany) and this year in Amsterdam.
For the first time there was a ShipIt-Hackathon on the first day of the AtlasCamp at the Atlassian Amsterdam Office. Around 20 Plugin Developers were participating and competing for the best plugin shipped during one day. Most of them were fulltime plugin developers, who came with 2-4 people from the same company and had specific ideas for a plugin, for example a new feature for their already existing plugins, as the gliffy-team did, who also won the contest with a great performance at the end. It was quite difficult as a beginner to get involved, because teams were already formed by the people who came together and no introduction talks or tutorials were given. Thats why there was not much to do for me as a newbee who coded her first HelloWorld-Plugin a couple of days ago. But still i got some insider hints about where the flaws of the API can be found 🙂
The next two days were full of interesting talks about new features at atlassian and also very interesting live demonstrations in plugin coding, so on the third day I would have been ready to really try out what I´ve learned. I guess I will do so soon.
There were around 150 Plugin Developers from all over the world participating at AtlasCamp. They were showing a map at the beginning of the conference, which showed that Germany was with 37 participants by far the biggest group. Only 8 came from the netherlands as the guest country, and next were 6 from sweden, italy and another country which i just forgot. I met people from Belgium, 1 guy from Malaysia, some from Russia and many from the westcoast of the US (mainly San Francisco Atlassian Office). But also the polish community was represented by 6 people, which my polish collegue found out the next day. Atlassian itself came with around 30 people to the event.
For those who didn´t make it to the camp but are still interested in what its all about, I made a lot of notes and will present it to you in the following. Its a lot to read, but you can also pick the talks that you are interested in. Maybe Atlassian will also publish some of the slides later on. If so, I will collect the links in the link section below.
It has been an awesome location in the koepelkerk at the Renaissance hotel in Amsterdam. An old church with a huge organ, a big dome and a lot of atmosphere. And of course Amsterdam is beautiful too.
Day 1 – Wednesday 22.05.2013
1. AtlasCamp State of the Union by Jean-Michel Lemieux (VP of Engineering at Atlassian)
An Overview about new features at Atlassian was given and what there plans for the future are. Most importantly were named:
- shared workflows as well as the possibility to rename users in JIRA
- the Atlassian Design Guidelines for everyone who wants to build plugins with the new atlassian design
- numbers of marketplace: 200+ paid-via-atlassian plugins, 122 vendors
- news on Atlassian Connect: it is possible now to write plugins in any language
- new products HipChat and Bitbucket with many releases
- Atlassian Summit in October in San Francisco
2. An Re-Introduction to Atlassian Connect: Add-ons for OnDemand by Seb Ruiz (Team Lead at Atlassian)
The main information was, that they want to allow extensions for OnDemand. They did a 18 months research on how to do it without breaking the product and to ensure security issues. Also it should be possible to write plugins in other languages and deploy them on other servers (Heroku for example). The solution they came up with is now:
- a sandbox for plugin development
- a REST-Api to interact with the product
- a webhook for the communication back from the product
The content can be somewhere else but seams to be there, with the same design.
There are no breaks because interaction is via REST-Api and the webhook informs the plugin about changes. Deployment is faster.
When you upload the plugin in the marketplace it is recognized as an OnDemand-Plugin.
Some Tweaks are: marketplace descriptor, atlassian-plugin.xml (will be replaced), permissions and authentication scopes and sandboxing and security
3. Atlassian Connect in Action by Samuel Le Berrigaud (Software dude @ Atlassian)
Great Live Demonstration how to build a plugin for OnDemand. Sam used Play! for the development, which is a nice tool for web applications in java and scala, to build a confluence macro. You have Scala-Templates which you can use for that. It shows an compilation error in the browser on fail.
Advantages of the Atlassian Connect Play Modul:
- creates automatically an RSA keypair
- will auto-install in locally running instances
- has an add-on descriptor template
- Validation of incoming oAuth requests
- REST calls back to the host application
- AUI integration
- better used with IDEA than with Eclipse
ac-page creates a Demo-Page and @ac.aui includes the design. The plugin renders as an IFrame.
Link to the Demo Code: https://bitbucket.org/sleberrigaud_atlassian/ac-play-java
4. Lightning Talks
- Skblz presented their Plugin to record the screen and attach it to an issue in jira.
- comalatech presented their ad_hoc Plugins
- Wings for JIRA presented their mobile client for Jira, they are looking for expert partners to sell it
- Zenfoundation presented their Zen Plugins to remove pain from the process with service packages, pre-sales strategy, customer demos, well-defined processes
- Langur, a dutch company, presented their translation plugin. You point on strings and they translate immediatly, you see them in context in the browser
5. Bring Your Own Stack by Andreas Knecht (Software Engineer at Atlassian)
- Install NodeJS and NPM
- Install Feebs CLI: npm i-gfeebs-cli
- createFeebs NodeJSapp: feebs new atlascamp-demo
- Deploy it on Heroku.
Link to the Demo Code: https://bitbucket.org/knecht_andreas/atlascamp-demo
6. 7 Habits of Highly Effective Marketplace Vendors by Dave Meyer (Product Marketing Specialist at Atlassian )
Dave gave an introduction into how to best sell your plugin. He presented 7 habits that plugins should achieve:
- Build to sell
- want to be found
- Beautiful on the outside
- beautiful on the inside
- engage the enterprise
- know your customers
- always be closing
He recommends research on the top voted issues in JIRA on what the customers want as a plugin. And he has more recommandations:
- The need of a good website with a professional look that is trustworthy.
- Applying the design guidelines brings conversion rate up.
- Knowing how plugin performs.
- 5-minutes-rule to start with the product, getting-started page, use UPM hooks!
- Reminder emails.
They are extending the pricing model in the future to make it more flexible.
Links: dmeyer.bitbucket.com and he also recommended the codegeist page http://codegeist.atlassian.com
Tim expressed his satisfaction about the fact that they are developing software to solve their own problems. They are designing for extensibility and to make devs happy.
He presented Stash JQL to extend the search in Jira. The goal is to kill context switching.
He presented how to use git hooks. For example for post-checkout build status. He showed how stash suggests automatically the right reviewers, to find out whose code you´ve been messing with. It is customizable by external devs.
8. ADG / Lean UX by Jurgen Spangl (Senior Design Manager at Atlassian)
Jürgen presented the new Atlassian Design Guidelines. Stash was the first product with the new design guidelines. Bitbucket was next. Confluence came in february and JIRA followed this week. To build the guidelines they were listening to the customers. They had 3 principles:
- users are in the center, they should get their work done
- just enough is more, not too much design
- Devs to kick ass, learn to get better in design
There is a lot of documentation, download a flatback example as a starting point, all is open source.
9. Modernizing your Plugin UI by Jonathan Creenaune (Lead Front End Architect at Atlassian)
Jon stated that the goal of UI should be beauty and interactivity. To do so use the Atlassian UserInterface Library (AUI) with for example <header> .
AUI 5.0 is in JIRA 6.0, Confluence 5.0, Bamboo 4.3, Stash 2.0 and FE/CRU 3.0.
The URLs should be pretty and designed for the user. You should make sure to replace only content and not to reload the whole page.
Day 2 – Thursday 23.05.2013
1. Confluence State of the Union by Sherif Mansour (Technical Product Manager at Atlassian)
In the new design the intuitive header is always accessible. A new create-experience is available with the blueprint templates.
Blueprints 5.1.: the main achievement of the new confluence are the blueprints. There are blueprints for meeting notes, product requirements, JIRA report changelog etc. Inside of the space the content is more structured due to this blueprints (for example meeting notes). There is more user guidance in the create dialogue and an index page for each blueprint section. Other applications are integrated, for example there is a teamcalenders page, custom views, galleries… The galleries-index-page has a preview for each gallery (visual index).
Coming Soon: They are working on Confluence Space Blueprints, which is very interesting to us, as we had the same idea for a plugin (Template for Spaces). Space Blueprints will come with Confluence 5.3.
2. Alice in Module Descriptor Land: Design Patterns for Add-ons by Ryan Thomas (Development Team Lead at Atlassian)
Ryan presented, after a quick introduction about design patterns in general, some rules to follow while developing plugins.
- in context pattern 1 and 2
- replace placeholder with macro
- instead of using an image macro, use the image dialogue
- if the macro generates a link, extend link browser dialogue
- if you capture data from user in editor, extend autoconvert
- you´re too big pattern: too complex
- think of the 90% of the use cases
- think about required parameters, is there a sensible default?
- Notification pattern: configure post-install-url for your plugin for news, add a web-item to the system.admin.tasks/general section, keep admins informed
3. Confluence Blueprints by David Taylor (Senior Developer at Atlassian)
David made a great live demonstration on how to write a blueprint for confluence. Just follow the guidelines on developer.atlassian.com
- get the SDK
- do atlas-create
- get the example at git
- edit the attlassian-plugin.xml
Link to the Demo Code: https://bitbucket.org/dtaylor/amps
4. The Magic in My Brain by Jonathan Doklovic (Software Developer at Atlassian)
Best talk of the conference! Jon told us how his brain works to develop awesome software. First he talked about himself, how he got his first computer when he was 10 and his father asked him if he wants to play games. Of course he was delighted, but all he got was a magazine on how to develop games. So he started to be a software developer without taking one lecture. When he was 14 he got his first drumset and just started to play without taking one lesson. He told us about how this natural feeling for rythm helps him creating software. He made a quick drum introduction with the whole audience, to let us know what a rythm and what a real groove is. Then he presented his two principles in developing software:
- Never disrupt my flow, man!
- It has to feel good
First one concerns the right choice of tools. The environment for development has to be as good as possible.The second one is how he chooses his tasks. The product has to feel good to him, thats why he develops improvements. For example he just implemented the possibility to share workflows in JIRA, to make it more easy to work with them.
At Atlassian he has never got a real task from his boss. He just does what comes to his mind and normally that are cool things. Thats why his boss told him to talk about the magic in his brain at AtlasCamp
5. JIRA State of the Union by Justus Pendleton (Development Manager at Atlassian)
Justus first pointed out, that you risk friction, if you don´t use the ADG. It doesn´t feel right to the user. Also he recommends to use abstraction.
JIRA 6.0 solves the most voted issue: to change usernames
For Plugin Developers that means that you have to make sure that you don´t cache ApplicationUsers anywhere.
Also new are Project Templates. They are the same as Blueprints, just for JIRA. There are templates for:
- Software Development projects
- Agile Scrum
- Bug tracking
- Project Management
- Agile Kanban
In OnDemand they try to compromise between opening and sandbox.
Their active work in JIRA is on clustering.
Coming soon in 6.1: Fix for renaming usernames from external sources.
6. JIRA Project Templates by Ian Grunert (Java Developer at Atlassian)
Ian presented the new project templates in JIRA more in detail.
For example if you use an agile project, the template asks you to install greenhopper if you don´t have it already. Also a rapid board is automatically created in the project.
You can also write project templates yourself. It is not as far developed as confluence blueprints, but they are working on it.
7. Stash’ing it in Amsterdam by Nicola Paolucci (Developer Advocate at Atlassian)
Nicola, the italian guy, talked about Stash. Stash is a git repository management. You can use git hooks, customize workflows and merge checks. There are forks for personal repositories.
Then he made a live demonstration on how to include a PDF-Viewer in stash.
- He used PDF.js from Mozilla
- the command atlas-create-stash-plugin creates a new plugin
- single servlet retrieve binding
- soy template pages
Everything is a plugin in stash, all components were plugged in. They always had extensibility in mind.
There are the following APIs included:
- Java or REST
- Stash API, SPI
- Git API
- Built integration
- SSH Support
- Branch Permission
Hooks are everywhere. They can control the following things:
- what happens when pushed
- check before something is on the server
- Pre- and Post-receive
- Merge checks
- auto-generators, free form validation
There are pre-build widgets to build a hook and a lot of open source examples in bitbucket.
8. Show Me the Numbers: Automated Browser Performance Testing by Chris Mountford (Senior Software Engineer at Atlassian)
- it started in 1995, which he called the classical period with form validation
- then came the browser wars
- the dark ages
- Firebug Revolution
- V8 – high performance Jobs for Chrome
Thats why he wanted them to show him the numbers, how good their applications perform.
In Mobile Web everything is the same but worst:
- the network /powermode
Chris really recommends the Chrome Dev Tools, but also Firebug Lite and dynatrace. Then he showed us some of the numbers he found out.
What affects performance:
- Blocking of Scripts – Ways around it: document script tag, throwing attribute on top of script tag
- CSS Transforms (hardware acceleration?)
- Data weight
- Concurrent request count
- Inline Base64 Encoded resources
JIRA Browser Performance Tests at Atlassian:
- Page Objects – play the role of mapping
- Soke Framework: Soke interactions, like JUnit-Framework, define Timed Sections, number of repetitions, personas, makes charts with colors of testexecutions
- Bamboo, Koto Charts
- Psycho Events
- OnDemand Analytics – What is the user doing?
- Baselines – Reference point / numerical value to start with
- vigilance -attention
- Batching – Atlassian Plugins, No worries
- Predictive Fetching – Guided by Analytics
- Caching – Watch for memory leaks
Perception is important: “I don’t know… it just feels slow,” a JIRA Product Manager.
Psycho Latency: The feel of the application, is it ready for action, show rendered page, then do the rest in background, always has to be ready for the user.
SeleniumWebdriver: Chromedriver is implemented by Chrometeam, others by Selenium. Click-Events for example mean something else, in Chrome its on geometric center of the target.
More Infos on Soke: http://blogs.atlassian.com/2012/06/performance-and-soke
- Presentation of Sherif Mansour about Confluence
- Video of the Location: http://www.youtube.com/watch?feature=player_embedded&v=L8mBK0zZic8
- Link to the Demo Code of Samuel Le Berrigaud: https://bitbucket.org/sleberrigaud_atlassian/ac-play-java
- Link to the Demo Code of Andreas Knecht: https://bitbucket.org/knecht_andreas/atlascamp-demo
- Link to the Demo Code of David Taylor: https://bitbucket.org/dtaylor/amps
- Link to Atlassian Design Guidelines: https://developer.atlassian.com/design
- Infos on Soke: http://blogs.atlassian.com/2012/06/performance-and-soke/
- Codegeist Development Contest: http://codegeist.atlassian.com