Dylan Etkin

Atlassian "Fedex Day" VI

Dylan Etkin talks about Fedex
September 21, 2007

Here at Atlassian we have just finished up our sixth edition of "Fedex Day".

What is it?

For those who don't know, "Fedex Day" is Atlassian's irregular answer to Google 20% time: time set aside for developers to work on whatever they want with a skew towards our products.

We tend to run "Fedex" with a fairly open format you can do whatever you want as long as you can somehow relate it to our products. We have expanded it such that we set aside 1 1/2 days for the developers to complete their ideas. We start after lunch on a Thursday and work until 4pm Friday when we present what we have to everyone.

The goals of "Fedex" are:

  • Foster creativity. Atlassian is good at hiring smart people and we'd be mad to keep all that brain-power locked up.
  • Scratch itches. Every developer has something that bugs them about our products, or something they'd like to see them do.
  • Spike. Often, radical ideas don't get traction because we don't understand how they'd work or what benefit they'd provide.
  • Have fun. Institutions like Fedex make Atlassian a fun place to work.

Being the competitive individuals we are we also have a trophy plus bragging rights for the winner.

fedextrophy.jpg

The Results

We are always growing here at Atlassian, this time around we had 32 separate projects compared with 12 from our first Fedex. Here are the highlights of what happened:

The Winners

First Prize - JIRA Caller ID

Caller%20ID%20icon%20screenshot.gif
JIRA Caller ID developed by Adrian Hempel set out to use Caller ID information from an Asterisk based phone system to automatically retrieve the caller's information in JIRA. It turned out great, even including a call history embedded in JIRA where you could replay recorded calls.

Second Prize - Atlasbook

thefeed.gif
Second prize went to Atlassian founder Mike Cannon Brookes with his "evil-twisted-modification of Facebook for Atlassian's developers", Atlasbook. What it does is aggregate action data from various different external servers and display a single chronological feed.

What is more impressive is that "Cannon" wrote about 40 screens and did the whole thing in Groovy + Grails all in the Fedex timeframe.

Thrid Prize - Calling Bamboo

Samuel Le Berrigaud made Bamboo build status information available over the phone. Using VXML or VoiceXML he added voice recognition so that one could say which project they would like to know the status of. The plugin would then read the builds status through the phone.

Being a phone based plugin there is not much in the way of screenshots to show, but take my word for it, the demo was very cool.

JIRA Projects

JIRA JMX

jManage-avgmethodinvocationgraph.png
Andreas Knecht decided it would be good to monitor real-time what happens in any given JIRA instance. This includes any issue events (creation, comments, etc) that are taking place, as well as more detailed profiling information to identify slow sub-systems in JIRA. He did this using Spring JMX and the JManage console.

Visualizing JIRA Workflows

workflow_graph.png
For a while now Anton Mazkovoi has been attempting to use various tools to create a graphical (flowchart like) view of a JIRA Workflow. Workflows can get quite complicated in JIRA, and with a non-graphical representation of a workflow it is a bit confusing to see how an issue can move through the workflow.

He finally stumbled upon Drag Node Chart from FusionCharts and came up with a pretty nice looking graph. The graphing tool is proprietary and we are looking into getting something like this into JIRA.

Add Users from URL for JIRA

microformats.png
Dushan Hanuska modified JIRA to allow it to import users by reading microformatted user information from a given URL. If you want to quickly import a set of users into JIRA and you have their information already available with microformatted markup then this could be a huge time saver.

AJAX diffing saved filter portlet + Side dashboard

ajaxDiffPortlet1.jpg
At Atlassian we use JIRA for many things, one of them is doing support. Dylan Etkin was bothered that he constantly had to refresh his dashboard to see if there are any new issues "in-the-box" and he wanted to do support while keeping an eye on the "inbox".

He created an AJAX updated version of the saved filter portlet which also shows a color-coded diff of the found results for each refresh. He then created a "right-hand" nav style view of the dashboard so you can work and keep a eye on your portlets. This should hopefully find its way into the JIRA Toolkit.

Long Running Tasks in JIRA

videopoker.png
Brad Baker tackled the fact that long running tasks in JIRA, such a migrating issues in workflows, do not display anything in the browser to indicate progress until the operation completes.

He provided a bit of page to show tasks logs but then decided that a fully fledged Video Poker game in JavaScript to play while you wait would be cooler. So He wrote one.

Confluence Projects

Staff Directory using Simile Exhibit

staffDirectory.jpg
This was the inaugural entry from the Internal Systems team, being Ernest Wong and John Rotenstein.

They used MIT Simile Exhibit technology to revamp our staff contact list which is kept in Confluence. They made the list searchable, pretty, they included a timeline for employees start dates and a Google map view of where each employee was from. It looked amazing.

Copy Space Plugin Published

copyspace.png
Don Willis spent Fedex finishing and publishing his project from last Fedex. The Copy Space Plugin copies an entire Confluence Space including its pages within a single Confluence instance. Sounds simple but Confluence doesn't let you do it out of the box.

This is now available in confluence plugin repository.

Return to Castle Confluence

vstorm_small.png
Our Fedex V winner Nick Menere and Matt Jensen had a very ambitious plan in mind. This involved using the Confluence Remote API to analyze a Confluence instance to generate a series of rooms to give the user a fully immersive 3D interface to Confluence.

What they ended up with was a single room, Confluence on the wall and an image download process collecting images from the Confluence dashboard history.

There was some fun stuff added (a Tin Soldier, a V-can rocket launcher, and the pictured V-storm), as a "cheap effort to win more votes".

Confluence Profiler

profiler.jpg
Per Fragemann ventured out to implement a simple AspectJ-based profiler for Confluence, which displays its results in a ordered table list through a configurable Macro.

As shown his venture was a success.

Confluence ROX

Soren Harner and Brett Jackson set out to create a Digg like capability for Confluence.

There approach was base ranking top ROX pages based on a social network analysis. As happens sometimes on Fedex the project did not yield any demo-able results, but they are armed for next time.

One-Click Blog Publishing

square-peg.jpg
Don Brown as fully described here bridged the gap between Confluence blogging and blogging in Moveable Type.

In his demo he published his developer blog from a local instance of Confluence running his plugin, it was quite impressive.

Bamboo/Crowd Projects

Visualisation for Bamboo Builds

bambooVisualisation.jpg
Brendan Humphreys wanted to implement a visualisation of build results as they came from his teams Bamboo server - something he could have running on a spare display for the team area. He also wanted a project that would give him an excuse to learn Quartz Composer.

Overall he was pleased to get something working, but pretty disappointed with the general appearance of his screensaver. He'd have preferred spending more time polishing the look and feel of the composition rather than grappling with subtle timing issues and 3D transformations.

Crowd Auditing

Justin Koke, a Crowd developer, decided to add something he really was missing in his product, placing auditing into Crowd. He introduced a plugin point to Crowd, similar to Confluence around Event Listeners, so now you can drop in a JAR file that has your defined listeners for given events.

The ground work has been laid, the next step will be some 'portlet' style graphs for the Crowd Console.

FishEye Projects

FishEye TreeMap Visualization

fesrctype.png
Conor MacNeill wanted to add treemap visualizations to FishEye.

He used the jtreemap library available on sourceforge.

An image map was generated to allow the user to navigate into the tree. The image map was constructed so that any click would take the user down one level in the tree but rendered tooltips related to 2 levels down in the treemap. This allowed users to hover over a hot spot within a container to find out what it may be. Leaf nodes would take the user back into FishEye's traditional browse mode.

Fisheye Plugin for Eclipse

FisheyePluginShot1.png
Michael Studman chose to write the beginnings of a plugin for Eclipse that would provide access to some rudimentary features of FishEye. He wanted to achieve this through integration with the widely used CVS/SVN plugins shipped by Eclipse and others.

All features, besides CVS integration, were implemented. With just a few configuration settings users can now view basic FishEye information for their SVN project files and folders.

We are looking at about 3 or 4 days of polishing to wipe out the NPEs and rough edges before we try to get this into the hands of our customers.

Clover Projects

Realtime Code Coverage Viewer

CloverRealTime2.png
Nick Pellow created a real time viewer of code coverage metrics. The idea behind this, apart from giving you something interesting to look at while your tests run, was to also reveal tests which take a long time to run but don't do much for your overall code coverage.

Some problems were encountered and in the end it was no longer a real-time viewer, however it was displaying Code Coverage versus Time, and as Nick says, "admittedly I was trying to grab some cheap FedEx votes from people impressed by an animated line crawling up the screen".

Cross Product Projects

Scriptdiculous

scriptdiculous.png
Chris Mountford added an extension to the cross-product plugin system to enable plugin developers to use a wide range of scripting languages to develop bona fide plugins for Atlassian products. He implemented one scripting bridge as a ModuleFactory, namely BsfModuleFactory. It integrates with Apache BSF (Bean Scripting Framework) which is a common abstraction over a number of scripting languages.

In the end it was quite a success and he created a simple JavaScript based IssueTabPanel and two simple Groovy based JIRA portlets.

Picture Uploader Web Component

Picture_selection.png
Edwin Wong figured it would be great if users of Atlassian products could preview, crop, and resize their pictures before they are uploaded.
The new picture uploader ended up as a basic two step wizard. Upload the picture, then you can crop a section of the picture, the user can use a draggable, resizable box to make their selection on the image that they just uploaded. This is done using YUI and Java AWT package's Graphics2D object which does the real work on the server.

The next step after adding resize, of course, is to incorporate the uploader into Confluence, JIRA, and even Bamboo.

Conclusion

If you made it this far, I have to say you are a real Champ.

It feels like every "Fedex" day everyone really kicks it up a notch and we here at Atlassian can't wait until the next one.


Tags: fedex

5 Comment(s)

It'd would be fantastic for the next time you did this if someone wrote a user signup plugin/app for Crowd.

By Daniel at September 27, 2007 4:20 AM

Does the Picture Uploader include an applet to embed in Confluence for drag n' drop / paste uploading? We could really use that.

By KC Baltz at October 1, 2007 9:14 PM

Having MIT's Exhibit work with Confluence (as it does with MediaWiki) would be HUGELY useful - any chance the team that produced the staff directory would be willing to share their work?

By d at January 6, 2008 10:20 PM

Sorry for being an ignorant Englishman, but why Fedex days? What's it got to do with delivering things?

By Richard Pitt at March 14, 2008 4:20 PM

Richard- Fedex is (or was originally) about delivering something in 24 hours, hence the name. It's broadened in scope quite a lot since the start as we're always playing with the formula but that's where the name comes from.

There's more details here in my old, old original post - http://blogs.atlassian.com/rebelutionary/archives/2005/04/the_inaugural_f.html.

m

By Mike Cannon-Brookes at March 16, 2008 6:15 PM

Post a comment

If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.





Remember personal info?

Type the characters you see in the picture above.