<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss1full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:cc="http://web.resource.org/cc/" xmlns="http://purl.org/rss/1.0/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

<channel rdf:about="http://blogs.atlassian.com/developer/">
<title>Atlassian Developer Blog</title>
<link>http://blogs.atlassian.com/developer/</link>
<description />
<dc:language>en-us</dc:language>
<dc:creator />
<dc:date>2011-09-21T17:47:53-08:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=4.34-en" />


<items>
<rdf:Seq>
<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2011/09/hold_on_to_your_hats_the_tech_writers_are_innovating.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2010/04/creating_issues_from_your_iphone.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2010/01/help_the_jira_4_dashboard_is_slow_on_a_mobile_device.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2009/12/jira_iphone_web_interface_plugin.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2009/06/hamcrest_saves_your_soul_now_w.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2009/04/setting_up_jira_and_confluence.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2009/03/20_percent_continuing.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2009/02/20_percent_year_in_review.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2008/11/presenting_the_future_macro.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2008/10/20_projects_in_the_wild_raphae.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2008/09/jira_issues_bucket_20_released.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2008/06/jira_issues_bucket.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2008/05/the_20_friday_five.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2008/04/my_people_are_spending_time_on.html" />

<rdf:li rdf:resource="http://blogs.atlassian.com/developer/2008/03/20_time_the_nuts_and_bolts.html" />
</rdf:Seq>
</items>

<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rdf+xml" href="http://feeds.feedburner.com/20PercentTime" /><feedburner:info uri="20percenttime" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /></channel>


<item rdf:about="http://blogs.atlassian.com/developer/2011/09/hold_on_to_your_hats_the_tech_writers_are_innovating.html">
<title>Hold on to your hats! The tech writers are innovating!</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/_KRHLSi6Qvk/hold_on_to_your_hats_the_tech_writers_are_innovating.html</link>
<description>Have you ever had a cracking idea? The sort of idea that just sits and simmers in your brain. Here at Atlassian, we have a team of awesome technical writers, full of ideas like these. However, keeping up with the dev teams and juggling documentation deadlines doesn't leave much time to try new things. The solution? An innovation sprint!&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/_KRHLSi6Qvk" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>Have you ever had a cracking idea? The sort of idea that just sits and simmers in your brain. Here at Atlassian, we have a team of awesome technical writers, full of ideas like these. However, keeping up with the dev teams and juggling documentation deadlines doesn't leave much time to try new things.</p>

<p>The solution? <b>An innovation sprint!</b></p>

<p>An innovation sprint is a day set aside for the technical writers to explore new ideas related to the documentation. Giving everybody an outlet to explore these ideas is a win-win situation. As Thomas Edison once said, "To have a great idea, have a lot of them." We've implemented a number of ideas from past innovation sprints, such as <a href="http://confluence.atlassian.com/display/JIRA/Installing+JIRA+Standalone">flowcharts in key guides</a> and <a href="http://confluence.atlassian.com/display/DOC/Tips+via+Twitter">Tips via Twitter pages</a>.<br />
&nbsp;<br />
&nbsp;<br />
<big><b>How did it work?</b></big></p>

<p>A technical writer innovating looks surprisingly unassuming. You'd never know that they were turning brilliant ideas into awesome innovations. In fact, here are some examples of technical writers participating in an innovation sprint:</p>

<p><a href="http://blogs.atlassian.com/news/assets_c/2011/09/innovationsprint-img1-7987.html" onclick="window.open('http://blogs.atlassian.com/news/assets_c/2011/09/innovationsprint-img1-7987.html','popup','width=284,height=212,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://blogs.atlassian.com/news/assets_c/2011/09/innovationsprint-img1-thumb-200x149-7987.png" width="175" height="130" alt="innovationsprint-img1.png" class="mt-image-left" style="margin: 0 20px 20px 0;" /></a> <a href="http://blogs.atlassian.com/news/assets_c/2011/09/innovationsprint-img2-7988.html" onclick="window.open('http://blogs.atlassian.com/news/assets_c/2011/09/innovationsprint-img2-7988.html','popup','width=298,height=212,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://blogs.atlassian.com/news/assets_c/2011/09/innovationsprint-img2-thumb-200x142-7988.png" width="175" height="130" alt="innovationsprint-img2.png" class="mt-image-left" style="margin: 0 20px 20px 0;" /></a> <a href="http://blogs.atlassian.com/news/assets_c/2011/09/innovationsprint-img3-7989.html" onclick="window.open('http://blogs.atlassian.com/news/assets_c/2011/09/innovationsprint-img3-7989.html','popup','width=273,height=204,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://blogs.atlassian.com/news/assets_c/2011/09/innovationsprint-img3-thumb-200x149-7989.png" width="175" height="130" alt="innovationsprint-img3.png" class="mt-image-left" style="margin: 0 20px 20px 0;" /></a></p>

<p>A few weeks ahead of time, we agreed to reserve the 20th of September for the innovation sprint. Closer to the date, we nominated the ideas that we'd be working on. These ideas were discussed at our team meeting just prior to the sprint for peer feedback.</p>

<p>During the day, each tech writer explored an idea that they had nominated at the previous team meeting. Some of us paired on a task, while others worked solo. Our team standup was cancelled and we only attended essential dev meetings.</p>

<p>We wore hats. We ate chocolate. We innovated.</p>

<p><img alt="innovationsprint-img4.png" src="http://blogs.atlassian.com/news/innovationsprint-img4.png" width="505" height="282" class="mt-image-left" style="margin: 0 20px 20px 0;" />
&nbsp;<br />
&nbsp;<br />
<big><b>What did we achieve?</b></big></p>

<p>We have a retrospective planned for our innovation sprint in two weeks time. However, the early results look promising. I've seen new conceptual diagrams, improved flowcharts, style investigations, scripts for finding broken links and conditional publishing prototypes. I'm sure that many of these ideas will find their way into our documentation.</p>

<p><img alt="innovationsprint-img5.png" src="http://blogs.atlassian.com/news/innovationsprint-img5.png" width="287" height="215" class="mt-image-left" style="margin: 0 20px 20px 0;" /></p>

<p><em>Why hats? Everybody knows that a good hat is essential for innovation. Hats also help ward off pesky interruptions.</em><br />
&nbsp;<br />
&nbsp;<br />
<big><b>What could we have done better?</b></big></p>

<p>In hindsight, we should have dedicated more time to peer review of our ideas prior to the innovation sprint. Getting the perspective of other people can help you refine your idea earlier, making the sprint itself much more productive.<br />
&nbsp;<br />
&nbsp;<br />
<big><b>Guidelines for running your own innovation sprint</b></big></p>

<p>An innovation sprint doesn't require a lot of structure. However, it is important that everybody has a clear idea of what they want to work on. This prevents people from unknowingly working on the same idea or turning up on the day without anything to work on.</p>

<p>It's also helpful for participants to have as few interruptions as possible. A distraction can totally derail your train of thought. I posted an internal blog post a week ahead of time letting everyone in the company know that we would be unavailable on the day, except for urgent issues.</p>

<p>Finally, you want to make sure that your ideas are implemented. There's no point in dedicating a day to innovation when the results of everyone's work gets put on the backburner for the next year. Note, you don't want to deter people from aiming high and failing. However, participants should be planning out the next steps for their innovation work, regardless of how well the sprint went.</p>

<p>Best of luck running your own sprint!</p>]]></content>
<dc:subject>Atlassian</dc:subject>
<dc:creator>alui</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-121-100x100.png</authorImage>
<dc:date>2011-09-21T17:47:53-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2011/09/hold_on_to_your_hats_the_tech_writers_are_innovating.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2010/04/creating_issues_from_your_iphone.html">
<title>Creating issues from your iPhone</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/3ct-OOQss3Q/creating_issues_from_your_iphone.html</link>
<description>It's been a while since the last update but I've finally gotten around to working a little more on my 20% project, the JIRA iPhone web-interface. What is the iPhone web-interface?...&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/3ct-OOQss3Q" height="1" width="1"/&gt;</description>
<content><![CDATA[<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="iphonemenuphone.png" src="http://blogs.atlassian.com/developer/iphonemenuphone.png" width="194" height="361" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></span>
It's been a while since the last update but I've finally gotten around to working a little more on my 20% project, the <a href="https://plugins.atlassian.com/plugin/details/16089">JIRA iPhone web-interface</a>.  </p>

<p>What is the iPhone web-interface? It's a plugins 2 plugin that can be deployed to a JIRA instance.  Once deployed, any user accessing your JIRA instance will get redirected to a more iPhone friendly web-interface for JIRA.  With the latest release (version 0.6) the following features are now available:</p>

<ul>
    <li>Viewing Dashboards & Gadgets</li>
<li>Creating Issues (limited to certain fields)</li>
<li>Browse issues via favourite filters and JQL</li>
<li>Viewing issues reported by you and assigned to you</li>
<li>Adding comments to issues</li>
</ul>

<p>Since the <a href="http://blogs.atlassian.com/developer/2009/12/jira_iphone_web_interface_plugin.html">last release</a> the UI's been completely re-written with jQTouch providing a much cleaner and faster UI.  The plugin now works with JIRA 4.1 and it is now possible to create issues on the go (the most requested feature so far).  Currently creating issues is limited to the following fields, but hopefully more will follow soon:</p>

<ul>
    <li>Project</li>
<li>Issue Type</li>
<li>Summary</li>
<li>Assignee</li>
<li>Priority</li>
<li>Description</li>
</ul>

<p>So what's left on the roadmap? Adding more fields both to the view issue and create issue screens has the highest priority at the moment followed closely by edit issue functionality.</p>

<p>So feel free to give the plugin a <a href="https://plugins.atlassian.com/server/1.0/download/pluginVersion/21712">go</a> and leave any feedback on this blog or create reviews on the plugin's <a href="https://plugins.atlassian.com/plugin/details/16089">homepage</a>.</p>
]]></content>
<dc:subject>20 Percent Time</dc:subject>
<dc:creator>andreask</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-43-100x100.png</authorImage>
<dc:date>2010-04-21T23:46:41-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2010/04/creating_issues_from_your_iphone.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2010/01/help_the_jira_4_dashboard_is_slow_on_a_mobile_device.html">
<title>Help! The JIRA 4 dashboard is slow on a mobile device!</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/xvC3GrDwpHU/help_the_jira_4_dashboard_is_slow_on_a_mobile_device.html</link>
<description>At Atlassian, all developers end up doing a 2 week support rotation every now and then. It's a great opportunity to see first hand how all the buggy code I write as...&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/xvC3GrDwpHU" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>At Atlassian, all developers end up doing a 2 week support rotation every now and then.  It's a great opportunity to see first hand how all the buggy code I write as a developer ends up hurting customers and will hopefully provide an incentive to write less buggy code in the future ;).  It is also a good time to come up with innovative little patches that help customers in the short-term, which can then be fed back into the product in the long run.   This blog is about one such case.</p>

<p>During my last support stint one of our JIRA Studio support engineers brought a support case to my attention where customers where using the JIRA dashboard fairly heavily from iPhone and Android devices. Since their Studio instance got upgraded to JIRA 4.0, they could hardly use the dashboard anymore and apparently 2 gadgets were critical for their users in the field.  The JIRA 4 dashboard includes a lot of javascript at the top of the page, and generates a lot of DOM elements dynamically with javascript.  This generally isn't a problem on most modern browsers, but on a mobile device with limited CPU and memory it can make a website crawl.</p>

<p>Read on for a one file solution to this problem.</p>
]]></content>
<dc:subject>JIRA</dc:subject>
<dc:creator>andreask</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-43-100x100.png</authorImage>
<dc:date>2010-01-28T17:17:53-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2010/01/help_the_jira_4_dashboard_is_slow_on_a_mobile_device.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2009/12/jira_iphone_web_interface_plugin.html">
<title>JIRA iPhone Web Interface Plugin</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/rEtlYnfet9E/jira_iphone_web_interface_plugin.html</link>
<description>JIRA's UI on the iPhone (or any mobile device for that matter) leaves a lot to be desired. It's slow, shows too much information and is difficult to navigate on a screen...&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/rEtlYnfet9E" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>JIRA's UI on the iPhone (or any mobile device for that matter) leaves a lot to be desired.  It's slow, shows too much information and is difficult to navigate on a screen that only supports a resolution of 320x480 pixels.  There's already some native iPhone apps for JIRA available like <a href="http://ijira.wordpress.com/">iJIRA</a>, <a href="http://confluence.atlassian.com/display/JIRAEXT/JIRA+Mate+-+iPhone+Application">JIRA Mate</a> and <a href="http://www.pragmasql.com/home/jiratouch.aspx">JIRA Touch</a>, however they require developers to go through app store approval first and users to install the apps manually on their iPhones.</p>

<p>With my last <a href="http://confluence.atlassian.com/display/DEV/What+is+FedEx">fedex day</a> project, I created the <a href="http://confluence.atlassian.com/display/DEV/FedEx+XI+Delivery+-+JIRA+iPhone+Webclient">JIRA iPhone Webclient</a> as a proof of concept showing that it's possible to develop a web-interface for the iPhone that looks and feels almost like a native iPhone app.  </p>]]></content>
<dc:subject>JIRA</dc:subject>
<dc:creator>andreask</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-43-100x100.png</authorImage>
<dc:date>2009-12-01T16:21:44-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2009/12/jira_iphone_web_interface_plugin.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2009/06/hamcrest_saves_your_soul_now_w.html">
<title>Hamcrest saves your soul - Now with less suffering!</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/dbEHvaHd50g/hamcrest_saves_your_soul_now_w.html</link>
<description>In a previous post I described how Hamcrest can save your soul. After writing that, it was pointed out that you probably don't need to suffer so much boiler-plate to save your...&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/dbEHvaHd50g" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>In a previous post I described <a href="http://blogs.atlassian.com/developer/2009/06/how_hamcrest_can_save_your_sou.html" rel="nofollow">how Hamcrest can save your soul</a>.  After writing that, it was pointed out that you probably don't need to suffer so much boiler-plate to save your soul.</p>

<p>With that thought I set out to write the <tt>deeplyIsEqual</tt> matcher.  The result is the <a href="http://labs.atlassian.com/source/browse/AHAM/trunk/src/main/java/com/atlassian/hamcrest/DeepIsEqual.java?r=2624" rel="nofollow">DeepIsEqual</a> Matcher.  Using it is pretty easy.  In that previous post I described the Matcher for comparing lightsabers, LightsaberIsEqual.  We no longer need that.  Now we can simply do</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
    assertThat(anakinsLightsaber, is(deeplyEqualTo(lukesFirstLightsaber));
</pre>
</div></div>

<p>No extra boilerplate is needed and we still get all the benefits of only seeing the fields that didn't match in the error messages.  Oh, and the reported expected value is built using reflection too, so you don't need to worry about whether the type of objects you're comparing implement <tt>toString</tt> or how they implement it.</p>

<p>After going through the initial implementation I started switching over the OAuth tests to use this new matcher.  Everything was going great until I hit a case where <tt>PublicKey</tt> or <tt>PrivateKey</tt> objects were being compared.  The problem was, one was a generated key and the other was converted from an encoded string value.  Apparently, depending on which way you create <tt>Key</tt> objects, the internal fields can be slightly different.  So, comparing them recursively was failing.  I struggled with what to do - I could add the <tt>Key</tt> to the <a href="http://labs.atlassian.com/source/browse/AHAM/trunk/src/main/java/com/atlassian/hamcrest/DeepIsEqual.java?r=2624#l144" rel="nofollow">internal, hardcoded types</a> that are compared by simply using <tt>equals()</tt>, or I could add the ability for testers to specify how they wanted certain types to be compared using a <tt>MatcherFactory</tt>.  This being 20% time and me seeing other places where specifying custom matchers for certain types would be very useful, I went with the second option.</p>

<p>So, if we wanted to match <tt>Hilt</tt>s in a very specific way we could that pretty simply.  </p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
    <span class="code-keyword">public</span> <span class="code-keyword">static</span> Matcher&lt;? <span class="code-keyword">super</span> Lightsaber&gt; equalTo(Lightsaber lightsaber)
    {
        <span class="code-keyword">return</span> deeplyEqualTo(lightsaber, extraTypeMatchers);
    }

</pre>
</div></div>

<p>I wrapped the <tt>deeplyEqualTo</tt> call in a convience method, because the creation of the extraTypeMatchers can be a bit gnarly and makes the tests a bit harder to read.  As a simple example, let's say we want to compare {{Hilt}}s using their <tt>equals()</tt> and don't care if the subtypes are different.  To accomplish that we could use the following <tt>extraTypeMatchers</tt>.

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java"><span class="code-keyword">import</span> <span class="code-keyword">static</span> com.atlassian.hamcrest.ClassMatchers.isAssignableTo;
<span class="code-keyword">import</span> <span class="code-keyword">static</span> com.atlassian.hamcrest.DeepIsEqual.deeplyEqualTo;
<span class="code-keyword">import</span> <span class="code-keyword">static</span> com.atlassian.hamcrest.MatcherFactories.isEqual;
    Map&lt;Matcher&lt;<span class="code-object">Class</span>&lt;?&gt;&gt;, MatcherFactory&gt; extraTypeMatchers = <span class="code-keyword">new</span> HashMap&lt;Matcher&lt;<span class="code-object">Class</span>&lt;?&gt;&gt;, MatcherFactory&gt;()
    {{
        put(isAssignableTo(Hilt.class), isEqual());
    }};
</pre>
</div></div>

<p>That's not very pretty, but by wrapping it up our test can go back to simply being</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
    assertThat(anakinsLightsaber, is(equalTo(lukesFirstLightsaber));
</pre>
</div></div>

<p>and we get all the benefits we had before, plus we are matching <tt>Hilt</tt>s in the desired way.</p></p>

<p>The biggest thing left to tackle is how to handle object graphs that have cycles in them.  We have some ideas about how to do it, such as tracking the objects visited and if we find one that we've already visited just stop recursion and assume it will be true, relying on all the other matching to prove otherwise.  I'm not 100% sure this will work.  The main problem being, what happens if a field in expected value has a reference to, for example, the first object in the graph.  But, the actual value doesn't have a cyclic reference but does have a reference to an object that should be considered "equal" to the same object as the expected value (I know, it's probably not entirely clear what I mean but I'm having a problem figuring out how to phrase it more better as my brain keeps breaking when I think too hard about it).  I'm thinking for now, being able to specify custom matchers for types should be enough.  If there is some part of the object graph that we expect to have a cycle, then just specify a custom matcher for it and move on.</p>

<p>To play with this you can checkout the code from <a href="http://labs.atlassian.com/svn/AHAM/trunk" rel="nofollow">the labs project</a>, or you can get from our <a href="http://maven.atlassian.com/public/com/atlassian/hamcrest/atlassian-hamcrest/1.0.beta1/" rel="nofollow">public maven repository</a>.  If you find any problems with it report them in <a href="http://labs.atlassian.com/browse/AHAM/" rel="nofollow">JIRA</a>.</p>

<p>Thanks, and enjoy testing again!</p>]]></content>
<dc:subject>20 Percent Time</dc:subject>
<dc:creator>rwallace</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-84-100x100.png</authorImage>
<dc:date>2009-06-29T11:10:29-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2009/06/hamcrest_saves_your_soul_now_w.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2009/04/setting_up_jira_and_confluence.html">
<title>Setting up JIRA and Confluence in minutes</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/Ez7cpgdHgNU/setting_up_jira_and_confluence.html</link>
<description>This week's offer of $5 licenses puts JIRA and Confluence within reach of even the smallest of teams. You'd be mad not to take advantage of it. You're probably thinking: "Yup, that's...&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/Ez7cpgdHgNU" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>This week's offer of <a href="http://www.atlassian.com/starter/">$5 licenses</a> puts JIRA and Confluence within reach of even the smallest of teams. You'd be mad not to take advantage of it.</p>

<p>You're probably thinking: "Yup, that's a great deal, but I how do I run it?". Anticipating this, I took some <a href="http://blogs.atlassian.com/developer/2009/03/20_percent_continuing.html">20% time</a> last week to find a way to get you up and running quickly.  What I've worked out will get you started with no up-front costs, and running costs that can be less than $5 a week!</p>

<p>With a few simple steps, anyone can use Amazon's <a href="http://aws.amazon.com/ec2/">Elastic Compute Cloud (EC2)</a> to get JIRA and Confluence up and running for their team in a matter of minutes. Let me show you how:</p>

<h1>Setting up</h1>

<h3>Step 1: Create an Amazon Web Services account</h3>

<p>Follow <a href="http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide/account.html">Amazon's instructions</a> for setting up an account for use with their <a href="http://aws.amazon.com/ec2/">EC2</a> hosting service. Skip the part about the X.509 Certificate and the AWS Account ID, as you won't be needing them. Instead, look for your Access Key ID and Secret Access Key on the Account Identifiers page.</p>

<p>Make sure you record your Access Key ID and Secret Access Key, as you'll need them in step 3.</p>

<h3>Step 2: Install Java</h3>

<p>Make sure that you have a recent version of <a href="http://java.com/">Java</a> installed on your desktop PC. You may already have it.</p>

<h3>Step 3: Download and run the Instant Atlassian tool</h3>

<p>Download the <a href="http://instant-atlassian.s3.amazonaws.com/instant-atlassian-1.1.jar">Instant Atlassian</a> tool to your desktop PC, and at a command line, change to the directory containing the tool and run the following command (substituting the red placeholders with the credentials you obtained in step 1):</p>

<div style="border: 1px solid gray; padding: 0.8em">
<code style="font-size: 9pt">
java -jar <a href="http://instant-atlassian.s3.amazonaws.com/instant-atlassian-1.1.jar">instant-atlassian-1.1.jar</a> "<em style="color: red">Your_AWS_Access_Key_ID</em>" "<em style="color: red">Your_AWS_Secret_Access_Key</em>" create 10
</code>
</div>

<p>This will create a server for you, with JIRA and Confluence pre-installed, and 10 gigabytes of space for storing your data.</p>

<p>This tool uses the Amazon Elastic Block Store to store your data. 10 gigabytes of space will cost you $1 per month. These charges stop once you use the tool's "delete" command (described below) to delete the data.</p>

<p>The server will take a couple of minutes to start. During this process, it will give you two pieces of information that you need to keep a note of: The EBS Volume ID (which you'll need to stop the server, and hence the time-based charging), and the URL of your new server.</p>

<p>The server is a "small" EC2 instance located in the US and running Linux, so it costs 10 cents per hour (or part hour). These charges stop once you use the tool's "pause" command (described below) to shut down the server.</p>

<h3>Step 4: Complete the JIRA and Confluence Setup Wizards</h3>

<p>Open the server URL in your web browser, and you'll see the following page:</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="splash.png" src="http://blogs.atlassian.com/developer/2009/04/20/splash.png" width="798" height="195" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>

<p>From this page, you can click the JIRA and Confluence logos to navigate to the respective applications.</p>

<p>To start, each application will display a Setup Wizard which you will need to complete with a few details. To make your life easier, some of the options have been pre-configured for you, and are disabled in this configuration.</p>

<h3>Step 5: Share the URL with your team</h3>

<p>Once you've finished the Setup Wizards, share the URL of the server with the rest of your team. They can open it in their web browser and can immediately get to work with JIRA and Confluence.</p>

<h1>When you're done</h1>

<h3>Cutting costs by pausing and resuming</h3>

<p>Your team might not need 24x7 access to JIRA and Confluence, so there's a lot of potential to cut costs by pausing your Instant Atlassian server when you're not using it: A 24x7 server will cost you $16.80/week, but this drops to just $4/week if you only run the server for 40 hours a week. (Storage and data transfer costs will be additional, but in typical usage scenarios these will be negligible compared to the time-based charges.)</p>

<p>To pause your server, simply run the following command on your desktop PC (substituting the red placeholders with the credentials from step 1 and the volume ID from step 3):</p>

<div style="border: 1px solid gray; padding: 0.8em">
<code style="font-size: 9pt">
java -jar <a href="http://instant-atlassian.s3.amazonaws.com/instant-atlassian-1.1.jar">instant-atlassian-1.1.jar</a> "<em style="color: red">Your_AWS_Access_Key_ID</em>" "<em style="color: red">Your_AWS_Secret_Access_Key</em>" pause <em style="color: red">Your_EBS_Volume_ID</em>
</code>
</div>

<p>Once this command completes, your hourly charges have stopped (but your data storage charges will continue until you use the "delete" command, described in the next section).</p>

<p>When you need your server again, just run the following command:</p>

<div style="border: 1px solid gray; padding: 0.8em">
<code style="font-size: 9pt">
java -jar <a href="http://instant-atlassian.s3.amazonaws.com/instant-atlassian-1.1.jar">instant-atlassian-1.1.jar</a> "<em style="color: red">Your_AWS_Access_Key_ID</em>" "<em style="color: red">Your_AWS_Secret_Access_Key</em>" resume <em style="color: red">Your_EBS_Volume_ID</em>
</code>
</div>

<p>When this command completes, your server will be up and running again. The URL will have changed, so make a note of it, and make sure to share it with your team. (Later in the week, I'll show you how you can <a href="http://blogs.atlassian.com/developer/2009/04/instant_atlassian_part_2_creat.html">set up your very own customised URL</a> that won't change when you pause and resume your server.)</p>

<h3>Cleaning up when you're done</h3>

<p>While your server is paused, Amazon will only be charging you for the cost of data storage. If you've followed the instructions above to create a 10 gigabyte storage allocation, this will only cost you $1 per month.</p>

<p>If you have finished with your server, and you're sure you no longer need any of your data, you can delete your data storage by entering the following command:</p>

<div style="border: 1px solid gray; padding: 0.8em">
<code style="font-size: 9pt">
java -jar <a href="http://instant-atlassian.s3.amazonaws.com/instant-atlassian-1.1.jar">instant-atlassian-1.1.jar</a> "<em style="color: red">Your_AWS_Access_Key_ID</em>" "<em style="color: red">Your_AWS_Secret_Access_Key</em>" delete <em style="color: red">Your_EBS_Volume_ID</em>
</code>
</div>

<p>When this command completes, your data will have been deleted, and Amazon will no longer be charging you for its storage.</p>

<h1>Beyond the basics</h1>

<p>These instructions should be all you need to get your team started with JIRA and Confluence.</p>

<p>Later in the week, I'll show you how to <a href="http://blogs.atlassian.com/developer/2009/04/instant_atlassian_part_2_creat.html">give your new server a customised URL</a> of your own, how to <a href="http://blogs.atlassian.com/developer/2009/04/instant_atlassian_part_3_insta.html">backup and restore your data</a> to protect against the risk of data loss, and how you might be able to reduce your costs even further by making an up-front payment.</p>

<p><em>All currency amounts are in US dollars, and were correct at the time of writing.</em></p>]]></content>
<dc:subject>JIRA</dc:subject>
<dc:creator>ahempel</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-79-100x100.png</authorImage>
<dc:date>2009-04-21T09:40:00-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2009/04/setting_up_jira_and_confluence.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2009/03/20_percent_continuing.html">
<title>Atlassian's 20% Time now out of Beta</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/n0EykT8FFKM/20_percent_continuing.html</link>
<description>In my previous blog about 20% Time, I gave a summary of Atlassian's "20% Experiment" but left readers hanging as to the future of 20% Time at Atlassian. Well, I'm glad to...&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/n0EykT8FFKM" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>In my <a href="http://blogs.atlassian.com/developer/2009/02/20_percent_year_in_review.html">previous blog about 20% Time</a>, I gave a summary of Atlassian's "20% Experiment" but left readers hanging as to the future of 20% Time at Atlassian. Well, I'm glad to end that suspense now and officially announce that <strong>Atlassian is continuing with 20% Time</strong>, rather than keeping it under the label of being an "experiment".</p>

<p>We get a lot of questions about the 'nuts and bolts' of how we've implemented 20% Time, so I'm happy to share the details.</p>

<p><table width="500px" align="center" style="background-color: rgb(238, 238, 255); max-width: 500px; margin:auto;">
<tr><td colspan="2" style="text-align: center; font-weight: bold; background-color: rgb(187, 204, 255);">The Goal of 20% Time</td></tr>
<tr><td><img width="120" height="103" src="http://blogs.atlassian.com/developer/2009/03/23/20dude.png" style="border : 0;"/></td>
<td><strong>To encourage innovation in products, development techniques and the Atlassian development ecosystem.</strong></p>
<ul><li>Not every 20% Time project has to lead to shipped features</li><li>Internal innovation is encouraged - new processes, techniques, libraries</li><li>Contribution to the larger ecosystem counts too, where it assists Atlassian</li><li>Failing is OK</li></ul>
</td></tr>
</table></p>

<p>The key here is that <strong>innovation is not guaranteed</strong>. We can't mandate that every 20% Time project must lead to a new feature since we don't want people to be afraid of failure. Rather, we aim to create an environment where innovation is encouraged and where 'trying' is as much a cause to celebrate as 'succeeding'.</p>

<p>We have also stated a broad scope for 20% Time that includes work on productivity enhancements and external activities (eg working on Open Source projects)  &mdash; but only where there is a beneficial link back to Atlassian. After all, 20% Time is a part of our Development effort, not a charity. (We have the <a href="http://www.atlassian.com/about/foundation.jsp">Atlassian Foundation</a> for that!)</p>

<h3>Tracking effort vs Tracking projects</h3>
The next major decision we had to make was how closely to monitor 20% Time. The Management team want to track "return on investment" so they can justify the expense of 20% Time. Developers, on the other hand, want freedom to innovate without having to justify everything they do. As one person suggested:

<blockquote>Reporting against specific 20% projects can lead to a decrease in the innovation factor. 20% projects, by their very nature, will have a lot of false starts, dead-ends, and time spent that doesn't directly contribute to a production product (and that is how it should be). If you start tracking and reporting on individuals and how much time they are spending on a project, they might start picking safer, less innovative products, so they don't have a lot of false starts and dead-ends showing up against their name in the reports.</blockquote>

<p>These two viewpoints lead to some friction. For example, we have two sign-off points to ensure projects don't consume too much time without foreseeable benefit:<br />
<ul><li>Any project that has consumed more than<strong> 5 days</strong> of developer time requires the sign-off of three supporters. These supporters should be developers who are not involved in the project, but who believe the project is both viable, and a good idea.</li><li>Any project that has consumed more than <strong>10 days</strong> of developer time requires sign-off from a Founder.</li></ul></p>

<p>Enforcing these rules would mean that we have to track time against each project, but this is contrary to giving Developers freedom to innovate without a "big brother" watching over them.</p>

<p>After vigorous debate amongst management, it was decided to have <em>Faith</em> that our Developers would apply their time wisely. Therefore, we are tracking 20% Time at a high-level within our normal time-tracking system, but not at the individual project level. Developers are responsible for getting appropriate sign-off and updating the status of their own projects, the results of which are displayed on a dashboard on our corporate wiki.</p>

<p><img alt="20% Dashboard" src="http://blogs.atlassian.com/developer/2009/03/23/20dash.png" width="362" height="318" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px; border : 1px solid;" /></p>

<p>(For those interested, we track each 20% project as an individual 'issue' within JIRA, then display those projects as a dashboard on our Confluence wiki.)</p>

<p>It's also worth mentioning that our <a href="http://confluence.atlassian.com/display/DEV/Atlassian+FedEx+Days">quarterly FedEx days</a> also contribute to 20% Time but are tracked separately. They involve specific days set aside for innovation in a time-limited, competitive-like atmosphere.</p>

<h3>The Future</h3>
All of these decisions, however, do not help overcome our biggest problem &mdash; that scheduling 20% Time can be difficult and can seem unfair. That will be our on-going challenge as we continue with 20% Time.]]></content>
<dc:subject>20 Percent Time</dc:subject>
<dc:creator>jrotenstein</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-66-100x100.png</authorImage>
<dc:date>2009-03-23T17:57:11-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2009/03/20_percent_continuing.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2009/02/20_percent_year_in_review.html">
<title>Atlassian's 20% Time: A Year in Review</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/ExJyi_m3n5U/20_percent_year_in_review.html</link>
<description>One year ago, Atlassian announced it's 20% Time Experiment. Originally a 6-month trial, we've actually let it go for 12 months before reviewing results and determining its fate. In line with Atlassian's...&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/ExJyi_m3n5U" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>One year ago, Atlassian announced it's <a href="http://blogs.atlassian.com/developer/2008/03/20_time_experiment.html">20% Time Experiment</a>.  Originally a 6-month trial, we've actually let it go for 12 months before reviewing results and determining its fate.</p>

<p>In line with Atlassian's innate openness, I'm happy to share our findings.</p>

<center><table bgcolor=#ccccee><tr><td>
<h2><center>Atlassian's 20% Results At-a-glance</center></h2>
</td></tr><tr><td bgcolor=#eeeeee>
<h2><center>1 Year</center></h2>
<h2><center>48 Projects*</center></h2>
<center>(25 In Progress, 16 Incorporated into products**, 7 retired)</center>
<h2><center>248 Days of Effort* = "1.1% Time"</center></h2>
<h2><center>34 People*</center></h2>
<h2><center>8 Developer Blog Posts</center></h2>
* It's actually more, but not everyone updated their statistics, so we don't know<BR>
** Really, 20% Time "incubated" the feature, which was finished in normal development cycle
</td></tr></table></center><BR>

<p>The biggest surprise was the fact that we only delivered "1.1% Time", based upon the number of developers involved. While people had worried that we would spend too much time on 20% projects, it turned out that we hardly invested much time at all.</p>

<p>It's worth mentioning that these statistics are approximate. We didn't mandate strict record-keeping and we don't have reliable timesheet data since 20% Time got mixed-in with our <a href="http://blogs.atlassian.com/developer/fedex/">FedEx projects</a>. Therefore, the actual time spent could be 2 or 3 times this figure, which is still very low.</p>

<p>However, we do know that projects ranged in time from 1 to 18 days of effort and that we created some shit-hot improvements to JIRA, Confluence and Bamboo. There were also some projects focussed on internal improvements and Open Source efforts.</p>

<h3>How did it work?</h3>
Developers could choose their own project. They then negotiated with their Team Leader to get time for their 20% project in amongst normal development activities, including their rotations through Support. Some developers took time in multiple small-blocks. Some locked themselves away for longer periods with signs warding off disturbance. Some teams even trialled a "20% Week" in between release cycles. (This one has generated mixed reactions &mdash; it was great to make the time available, but it's not always possible to schedule innovation on somebody else's timetable.)

<p>Each project was listed on our internal Confluence wiki, with manual tracking of 'days expended'. Projects that got incorporated into products were moved to a virtual 'Hall of Fame' while other projects were retired. A great many projects are still on-going.</p>

<p>Interestingly, the projects that were incorporated into products actually consumed very little 20% Time. Once a concept was proven, it was typically adopted by a Product Manager and incorporated into the normal stream of development. The bulk of work on the feature (adding functionality, testing, perfecting) was therefore done in normal development time. As a result, Hall of Fame projects were typically only 1-5 days.</p>

<h3>What problems did we experience?</h3>
As part of the 20% Time trial, we surveyed developers to gather feedback. Far and away, the biggest problem was scheduling time for 20% work. As one person put it, "Getting 20% time is incredibly difficult amongst all the pressure to deliver new features and bug fixes."

<p>Atlassian has frequent product releases, so it is very hard for teams to schedule 'down time'. Small teams in particular found it hard to afford time away from core product development. This wasn't due to Team Leaders being harsh. It was often due to developers not wanting to increase the workload on their peers while they did 20% work. They like the products they are developing and are proud of their efforts. However, they don't want to be seen as enjoying a privilege while others carry the workload.</p>

<p>Another problem was accurate tracking of 20% effort. We have tight controls around Annual Leave, so why don't we have controls around 20% Time? The answer probably lies within the Atlassian culture. One of our <a href="http://www.atlassian.com/about/values.jsp">core values</a> is to "build with heart and balance" and there is a shared feeling of trust that people know whether they are providing valuable work. We track time in major buckets (eg new product development vs maintenance) but there is no "big brother" breathing down the necks of developers who can't explain every minute of their day.</p>

<h3>Are we continuing with 20% Time?</h3>
To find that out, you'll have to wait for our next 20% Time blog post. Let's just say that this review has led us to reconsider the goals of 20% Time and question how we can determine whether it is of value to the company. Stay Tuned!]]></content>
<dc:subject>20 Percent Time</dc:subject>
<dc:creator>jrotenstein</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-66-100x100.png</authorImage>
<dc:date>2009-02-19T21:05:35-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2009/02/20_percent_year_in_review.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2008/11/presenting_the_future_macro.html">
<title>Presenting the Future Macro</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/DOmULJsr86A/presenting_the_future_macro.html</link>
<description>I am pleased to announce that the &lt;a href="http://labs.atlassian.com/wiki/display/FUTURE/Home"&gt;&lt;cite&gt;Confluence Future Macro&lt;/cite&gt; has been released&lt;/a&gt; as an open source plugin on &lt;a href="http://labs.atlassian.com/"&gt;the Atlassian Labs site&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/DOmULJsr86A" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>For Atlassian's 7th FedEx Day I implemented a Confluence macro that would defer rendering its body until the full page was received by the client. The body of the macro would then be sent back to Confluence for rendering via AJAX while the user was presented with a loading placeholder. As the rendering of the body occurs in the future with respect to the original page rendering pipeline, I called this functionality <cite>the Future Macro</cite>. It is ideally suited for rendering content that is retrieved from external sources where high latency can hold up the delivery of other content on the page.</p>

<p>After some further refinement during <a href="/developer/2008/03/20_time_experiment.html">Atlassian's 20% time scheme</a>, I am now pleased to announce that the <a href="http://labs.atlassian.com/wiki/display/FUTURE/Home"><cite>Confluence Future Macro</cite> has been released</a> as an open source plugin on <a href="http://labs.atlassian.com/">the Atlassian Labs site</a>.</p>

<p>It is currently in beta release and I welcome all feedback regarding its current operation and future improvements. Of course, as Atlassian has generously allowed me to release the source under the Apache 2 license, you are very much free to adjust it as you see fit!</p>]]></content>
<dc:subject>20 Percent Time</dc:subject>
<dc:creator>cowen</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-46-100x100.png</authorImage>
<dc:date>2008-11-27T15:43:29-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2008/11/presenting_the_future_macro.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2008/10/20_projects_in_the_wild_raphae.html">
<title>20% projects in the wild -- Raphaël</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/_4SKeG2Kfeg/20_projects_in_the_wild_raphae.html</link>
<description>As you may recall, in March this year, Atlassian publically announced the commencement of the 20% Time Experiment. Since then, we have been keeping you up to date how it works, and...&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/_4SKeG2Kfeg" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>As you may recall, in March this year, Atlassian publically announced the commencement of the <a href="http://blogs.atlassian.com/developer/2008/03/20_time_experiment.html">20% Time Experiment</a>. Since then, we have been keeping you up to date <a href="http://blogs.atlassian.com/developer/2008/03/20_time_the_nuts_and_bolts.html">how</a> it <a href="http://blogs.atlassian.com/developer/2008/05/the_20_friday_five.html">works</a>, and what people have been <a href="http://blogs.atlassian.com/developer/2008/06/jira_issues_bucket.html">doing</a>.</p>

<p>Dmitry Baranovskiy, a Developer on the Confluence team, has been spending his 20% time on a JavaScript library for creating vector graphics. In August, Dmitry released <a href="http://raphaeljs.com/">Raphaël</a> -- the first 20% project unrelated to an Atlassian product to be released to the public. At the 2008 <a href="http://www.webdirections.org/">Web Directions South</a> conference held last week in Sydney, Dmitry delivered a presentation, related to his work, and was interviewed by <a href="http://www.sitepoint.com/">SitePoint</a>'s Andrew Tetlaw on the beginnings and details of the library.</p>

<p>Here's an excerpt from the article:<br />
<blockquote><strong>SitePoint: Right, I thought my first question should be: why did you write Raphaël? What inspired you to write it?</strong></p>

<p>I was doing a FedEx project. Internally at Atlassian, we have FedEx Days when you are given the time to present a project you've been working on. [...]  So I thought I'd do something the programmers might not know anything about, and because I've had experience with SVG before, it made sense to work with SVG. But, as a front end developer, I'm concerned about creating something that only works in Firefox, so I wanted to create a bridge for VML on IE. My original project was to create a charting application, like a simple line chart. I quickly knocked it up in a day and a half from scratch, showed it, but it didn't win anything. It didn't impress people.</p>

<p><strong>SP: Not even a little bit?</strong></p>

<p>Oh, maybe a little bit, but not in general. So I left it for a while. Then we started our 20% projects (just like Google). I decided to pick up this project and extend it a little bit. I got rid of the charting part and turned it into a generic drawing library. Just a bridge between SVG and VML to enable me to do more cool stuff without worrying about browser compatibility.</p>

<p>So at the next FedEx Day, I used this library to create a Skitch-like application. You could take a picture and add things like arrows and ellipses. It even saved the image, but obviously that's not the hardest part.</p>

<p>Then I started working more on this 20% project. To be honest, I spent more than one day a week: I worked with my laptop on the train -- one hour to work and one hour back -- two days a week in general, for about a month. Then I decided that it was good enough to release, because it's better to do so before another developer releases the same thing. So, I released it in the middle of August.</p>

<p>I was stunned by the feedback. I didn't expect it, to be honest, because I wrote about it on my blog and I usually get about 20 hits per day; but after it was released and made it to the front page of Delicious and Reddit, I got about 8,000 hits per day. It chewed through my bandwidth and I had to create a new domain. It actually started costing me money! </blockquote></p>

<p>To find out more about technical challenges Dmitry faced, like cross-browser compatibility, you can <a href="http://www.sitepoint.com/blogs/2008/10/01/dmitry-baranovskiy-talks-about-raphael/">read the full interview</a>. And if you're super keen, you can also follow Dmitry's <a href="http://dmitry.baranovskiy.com/">personal blog</a> to get the latest on what he's up to.</p>

<p>I expect that as 20% time continues to give our developers an outlet for innovation outside of the realm of Atlassian's existing products, more projects like Raphaël will make their way into the wild. As a relatively young Atlassian, this excites me greatly, as it's yet another reminder of how cool this place is to work at, and gives me instant bragging rights in any tech-related conversations that could occur in a social context (believe me, it happens!). Stay tuned for more updates!</p>]]></content>
<dc:subject>20 Percent Time</dc:subject>
<dc:creator>mtokar</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-89-100x100.png</authorImage>
<dc:date>2008-10-02T23:09:22-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2008/10/20_projects_in_the_wild_raphae.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2008/09/jira_issues_bucket_20_released.html">
<title>JIRA Issues Bucket 2.0 released</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/m1rr8gYA3rk/jira_issues_bucket_20_released.html</link>
<description>Just in time for JIRA 3.13 release (release notes), JIRA Issues Bucket plugin version 2.0 of this plugin is released as well (release notes). This is a major productivity improvement. Some of...&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/m1rr8gYA3rk" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>Just in time for <a href="http://blogs.atlassian.com/news/2008/09/announcing_jira.html">JIRA 3.13 release</a> (<a href="http://confluence.atlassian.com/display/JIRA/JIRA+3.13+Release+Notes">release notes</a>), <a href="http://labs.atlassian.com/wiki/display/BUCKET/JIRA+Issues+Bucket">JIRA Issues Bucket</a> plugin version <strong>2.0</strong> of this plugin is released as well (<a href="http://labs.atlassian.com/wiki/display/BUCKET/Release+Notes">release notes</a>).</p>

<p>This is a major productivity improvement. Some of the annoyances are taken care of now:</p>

<h4>Filter out updated issues where the author of the last update is current user</h4>

<p>In a typical way, when going through the bucket, I would open the issue in a new browser tab, so I would still have my bucket open and did not need to navigate back to it. That means that once the issue was actioned, I would go back and remove it from the bucket. However, because I just <u>updated</u> that issue, in few moments later the very same issue would re-appear in the bucket.</p>

<p>Not, anymore. You can select an option to exclude your updates from re-entering the bucket.</p>

<p><img src="http://labs.atlassian.com/wiki/download/attachments/5767191/edit_portlet_filter.png" /></p>

<p>See <a href="http://labs.atlassian.com/browse/BUCKET-21">BUCKET-21</a> for more information.</p>

<h4>Issue view page operation that will allow for issue removal from a bucket</h4>

<p>If you follow the process as described above, you will find it easier to remove the issue from the bucket directly on the view issue page. Once you are done, you can close that tab and refresh the page with the bucket. Done. No more looking to the "just actioned" issue in the list of issues in the bucket just so you can click the little trash icon.</p>

<p><img src="http://labs.atlassian.com/wiki/download/attachments/5767191/issue_op.png" /></p>

<p>See <a href="http://labs.atlassian.com/browse/BUCKET-16">BUCKET-16</a> for more information.</p>

<h4>Compatibility</h4>

<p>This version uses new JIRA 3.13 API, therefore it won't run on older versions of JIRA. Also, as JIRA drops support for Java 1.4 in the future major release (4.0), this plugin steps ahead and only supports Java 5.</p>

<p>See <a href="http://labs.atlassian.com/browse/BUCKET-29">BUCKET-29</a> for more information.</p>

<h4>Shareable buckets</h4>

<p>As the dashboard pages are now <a href="http://confluence.atlassian.com/display/JIRA/JIRA+3.13+Release+Notes#JIRA3.13ReleaseNotes-Shareabledashboards">shareable</a> we had to make this feature work as well. So now, if you share the page with your bucket, other users will be able to see what's in your bucket. Respecting the permissions, if you don't own the bucket, you cannot do anything with it (read-only). And also you can only see the issues that you have permission to see. Keep in mind that as a result there could be more issues in the bucket than you can actually see.</p>

<p>See <a href="http://labs.atlassian.com/browse/BUCKET-30">BUCKET-30</a> for more information.<br />
</p>]]></content>
<dc:subject>JIRA</dc:subject>
<dc:creator>dhanuska</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-34-100x100.png</authorImage>
<dc:date>2008-09-09T19:31:16-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2008/09/jira_issues_bucket_20_released.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2008/06/jira_issues_bucket.html">
<title>JIRA Issues Bucket</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/ncswSzOA4WM/jira_issues_bucket.html</link>
<description>Did you ever need to keep an eye on a pulse of issue flow in JIRA? JIRA is all about issues; whatever they may be. Some JIRA users create issues. Others action...&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/ncswSzOA4WM" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>Did you ever need to keep an eye on a pulse of issue flow in JIRA?</p>

<p>JIRA is all about issues; whatever they may be. Some JIRA users create issues. Others action issues: fix bugs, implement new features, follow up on tasks, etc. If you are one of those people who need to monitor what is happening in your JIRA instance, read on.</p>

<p>I am a bug master for <a href="http://jira.atlassian.com/browse/JRA">JRA project</a>. My responsibilities include keeping an eye on bugs. I need to know about all new bugs raised - so I can take an action if needed; to comment back, to schedule them for fixing or to bring them to attention higher up if necessary. The problem I faced was that it was difficult for me to check the pulse at random. Surely, I have a filter set up to list all issues updated in last 24 hours (which includes created ones as well). I even have a subscription that e-mails me the results of this filter at 2pm every day. The issue coverage in the filter looks like this:</p>

<p><img alt="time_subscription.png" src="http://blogs.atlassian.com/developer/2008/06/22/time_subscription.png" style="margin: 10px; border: none;" /></p>

<p>Unfortunately, I could not check the updates in real-time. Well, I could, if I ran the filter. If I ran the filter too soon (in less than 24 hours) I would have overlaps as shown on the next picture:</p>

<p><img alt="time_overlap.png" src="http://blogs.atlassian.com/developer/2008/06/22/time_overlap.png" style="margin: 10px; border: none;" /></p>

<p>Or if I ran the filter too late I could potentially miss some issues that were created / updated during those time gaps as shown on the next picture:</p>

<p><img alt="time_overlap.png" src="http://blogs.atlassian.com/developer/2008/06/22/time_gap.png" style="margin: 10px; border: none;" /></p>

<p>Here comes JIRA Issues Bucket plug-in!</p>

<p><img alt="time_overlap.png" src="http://blogs.atlassian.com/developer/2008/06/22/bucket-full.png" style="margin: 10px; border: none;" /></p>

<p>This plug-in displays a list of issues in a portlet on a dashboard page. It focuses at showing the created / updated issues from the last time you ran this portlet.</p>

<p><img alt="time_overlap.png" src="http://blogs.atlassian.com/developer/2008/06/22/time_bucket.png" style="margin: 10px; border: none;" /></p>

<p>Issues are added automatically as they are created or updated and match the criteria of the associated filter (e.g. bugs in JRA project updated in last 24h).</p>

<p>These issues stay in the list until you manually remove them either by deleting the from the bucket one by one or flushing the whole bucket at once.</p>

<p>You can think about this portlet as your personal to-do list. The issues stay in the bucket until you action them - whether that means to look at them only or actually doing something about them.</p>

<p>Oh, and it also has a "happy factor!" It's what you feel when you go home at the end of the day and you bucket looks like this:</p>

<p><img alt="time_overlap.png" src="http://blogs.atlassian.com/developer/2008/06/22/bucket-empty.png" style="margin: 10px; border: none;" /></p>

<p>The plug-in is free and can be downloaded from <a href="https://labs.atlassian.com/wiki/display/BUCKET/Download">https://labs.atlassian.com/wiki/display/BUCKET/Download</a>. For more information head to project's <a href="https://labs.atlassian.com/wiki/display/BUCKET/JIRA+Issues+Bucket">homepage</a> and <a href="http://labs.atlassian.com/browse/BUCKET">JIRA</a> at <a href="http://labs.atlassian.com/">Atlassian Labs</a>.<br />
</p>]]></content>
<dc:subject>20 Percent Time</dc:subject>
<dc:creator>dhanuska</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-34-100x100.png</authorImage>
<dc:date>2008-06-22T19:43:14-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2008/06/jira_issues_bucket.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2008/05/the_20_friday_five.html">
<title>The 20% Friday Five</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/17joGYE1Gzc/the_20_friday_five.html</link>
<description>Ten weeks into Atlassian's experiment with twenty percent time, I asked the participating developers for some opinions, ideas and feedback.&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/17joGYE1Gzc" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>It's been ten weeks since we started our 20% time experiment at Atlassian, and about eight weeks since the first time someone from marketing asked me "Have we done anything yet?"</p>

<p>I think that among some people there was an expectation that we would just turn on the 20% spigot, and out would come a steady stream of new ideas and implementations. Of course, that's not going to happen. 20% of ten weeks gives each developer at most ten working days, and with the effort of having to fit them around already-tight release schedules, I doubt anyone's used up more than half their allotment so far. Most teams were a month or so into the programme before they could spare any significant developer time.</p>

<p>Still, we've had some successes already. Two different projects are already deployed on our internal <span class="caps">JIRA </span>instances, ready for inclusion in the product's next major release. With that in mind, I sent out a quick survey to a few of the developers taking part.</p>]]></content>
<dc:subject>20 Percent Time</dc:subject>
<dc:creator>cmiller</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-24-100x100.png</authorImage>
<dc:date>2008-05-22T19:06:08-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2008/05/the_20_friday_five.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2008/04/my_people_are_spending_time_on.html">
<title>My people are spending time on f**cking what?!</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/2138UeXKgBM/my_people_are_spending_time_on.html</link>
<description>I must admit that while Charles was very excited to hear the announcement of the 20% time trial at Atlassian, I received it with mixed feelings. The first thought that popped into...&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/2138UeXKgBM" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>I must admit that while <a href="http://fishbowl.pastiche.org/">Charles</a> was <a href="http://blogs.atlassian.com/developer/2008/03/20_time_the_nuts_and_bolts.html">very excited to hear</a> the announcement of <a href="http://blogs.atlassian.com/developer/2008/03/20_time_experiment.html">the 20% time trial</a> at Atlassian, I received it with mixed feelings.</p>

<p>The first thought that popped into my head was that we are giving people one day a week to slack off. Hence, the features that we think will benefit customers the most will be delayed. How can we encourage developers to spend time away from the chosen roadmap? Aren't people just going to spend their time learning the latest scripting language of the day off the web? How will that bring benefit to our customers?</p>

<p>I could just see it... <br />
Coming to work on a Friday morning, checking whether we are on track with the latest JIRA release, and seeing the guys, beer in hand, recoding JIRA's data access layer in JavaScript! </p>

<p>I've been at Atlassian for 5 years now, working on <a href="http://www.atlassian.com/software/jira">JIRA</a>, our oldest product, first as a developer then a team lead. Over the years I have seen JIRA grow in size and stability, provide more solutions and deliver more and more "bang for the buck". It's my responsibility to ensure that we continually improve JIRA while meeting deadlines, and it's something I truly enjoy. Therefore, I'm not a big fan of anything that threatens our ability to continue doing that well.</p>

<p>However, a few moments later, another thought kicked in. Choosing features has always been our hardest task. The number of possible improvements that we could make, hugely outnumbers what we can actually deliver with acceptable quality. Additionally, it is often impossible to accurately gauge the benefit of making one large improvement versus twenty five smaller ones, especially because people use JIRA in so many different ways. What is extremely important to one person is not necessarily so for the next.</p>

<p>I believe it is even harder to prioritise feature work with respect to internal improvements. We feel guilty each time we take away developer resources from feature work today, (e.g. to speed up the build process or improve the development environment setup script), so that we can spend more time on features tomorrow.</p>

<p>All Atlassian developers use our products, speak with customers and do support. They are an extremely committed bunch of people, who have a keen sense of where good improvements can be made. They are also the best people to evaluate which internal improvements need immediate attention.</p>

<p>Rather than schedule endless discussions about relative importance of each improvement, why don't we give developers time and ask them to use it in the best way they can come up with? I think we could see some great benefits come out of this and allow developers to identify even more with the product they are working on.</p>

<p>I do believe, however, that the success of this trial heavily depends on the discipline of each participant. Each developer needs to ensure they use their time effectively. I am really in favour of time boxing the effort to 20% and sticking to the <a href="http://blogs.atlassian.com/developer/2008/03/20_time_the_nuts_and_bolts.html">guidelines</a> that we have in place, especially the peer review of the 20% time projects.</p>

<p>From my perspective, the 20% time trial is an interesting take on Product Management. While the project could affect our velocity in the short term, I believe that it has a large potential to help us improve our products and deliver more customer value, via more innovative releases and internal improvements to tools and processes.</p>

<p>I am eager to see the results at the end of the trial.</p>]]></content>
<dc:subject>20 Percent Time</dc:subject>
<dc:creator>anton@atlassian.com</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-17-100x100.png</authorImage>
<dc:date>2008-04-16T22:42:37-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2008/04/my_people_are_spending_time_on.html</feedburner:origLink></item>

<item rdf:about="http://blogs.atlassian.com/developer/2008/03/20_time_the_nuts_and_bolts.html">
<title>20% time nuts and bolts</title>
<link>http://feedproxy.google.com/~r/20PercentTime/~3/MIl0KshS6ng/20_time_the_nuts_and_bolts.html</link>
<description>How do you set up a program where developers are free to pursue their passion, to do what they feel is most worthwhile for them to be doing, but at the same time stop developer time disappearing into black-holes and dead ends?&lt;img src="http://feeds.feedburner.com/~r/20PercentTime/~4/MIl0KshS6ng" height="1" width="1"/&gt;</description>
<content><![CDATA[<p>First, some quick background. My name is <a href="http://fishbowl.pastiche.org">Charles Miller</a>. I am (not counting the founders) the fourth-longest serving Atlassian employee. I started back in 2003 as a developer on the Confluence project, worked my way up to be team lead for a while, slipped sideways into an architect role, and am currently on temporary secondment to the <a href="http://www.jira.com"><span class="caps">JIRA</span> Studio</a> team.</p>

<p>About three months ago, at our not-quite-quarterly all-hands meeting, <a href="http://blogs.atlassian.com/rebelutionary">Mike</a> announced that Atlassian would, at some time in the future, in some way shape or form, begin an <a href="http://blogs.atlassian.com/developer/2008/03/20_time_experiment.html">experiment with 20% time.</a>. My immediate reaction was:</p>


<ol>
<li>This is a great idea.</li>
<li>What can I do to make sure this still isn't on the drawing board when the next staff meeting rolls around?</li>
</ol>



<p>Generally, the biggest barrier to getting something running is finding the time to take care of the boring details, so I decided on a neat hack around the problem: I would volunteer to spend the first six months of my own 20% time... on organising 20% time.</p>

<p>Explaining why I think it's a good idea is another post, and probably repeats a lot of what Mike has said already. This post is all about implementation. I'm not going to go into all the details straight away (that would be long and tedious), but hopefully this is a good overview of how the project has been set up.</p>

<h3>Bootstrapping</h3>

<p>My first task was to work with company founders Mike and Scott, and Soren (our Director of Engineering) to come up with a framework in which we could start the experiment. For the most part this meant coming up with a list of questions we expected developers might ask, and having answers ready for them. (Sometimes the A in <span class="caps">FAQ </span>stands for 'anticipated').</p>

<p>We made a conscious effort to make as few rules as possible. In many ways this whole programme is an exercise in trust between Atlassian and its developers, to see what is done when the restrictions are removed. Shackling it in proscriptive regulation would be counter-productive. Even some rules we did come up with were discarded -- one draft rule barred new developers from taking part in 20% time until they had passed their three-month probationary period, until it was pointed out that this would have excluded our most recent Fedex Day champion.</p>

<h3>Expectations</h3>

<p>What are we expecting people to work on in their 20% time? I put it this way in the <span class="caps">FAQ</span>:</p>

<p>"Our experience with Fedex day, and with general developer slack-time is that the output of developers left to their own devices will fall into the following categories:</p>


<ul>
<li>pet features/improvements that never made it onto the roadmap</li>
<li>"this always annoyed me" bug-fixes or architectural improvements</li>
<li>integration of some technology-du-jour with a product</li>
<li>random wacky shit</li>
</ul>



<p>We're also going to try to use 20% time to encourage contribution to open source projects, <span class="caps">JSR</span>s or other community projects, because we want to be good citizens.</p>

<h3>Forces</h3>

<p>The first three <a href="http://blogs.atlassian.com/rebelutionary/archives/2007/11/parenthood_product_management_and_pain.html">core Atlassian values</a> are:</p>


<ol>
<li>Open company. No bullshit.</li>
<li>Build with heart and balance.</li>
<li>Don't fuck the customer.</li>
</ol>



<p>It turns out that a lot of what we need to guide us through 20% time comes out of these three values.</p>

<h3>Open Company, No Bullshit</h3>

<p>This exercise is, as of now, an experiment. For the experiment to be successful, we need to have some idea of what is being produced, and what effort it took to produce it. For this reason, all projects have to be documented on our internal wiki, and we'll be organising "demo lunches" where developers can show off their achievements... or warn others away from the jagged rocks of their failures.</p>

<h3>Build with Heart and Balance</h3>

<p>How do you set up a program where developers are free to pursue their passion, to do what <em>they</em> feel is most worthwhile for them to be doing, but at the same time stop developer time disappearing into black-holes and dead ends?</p>

<p>We really only put one <em>a priori</em> restriction on projects: that 20% time not be used as a technological masturbation aid. If you have some concrete goal in mind and honestly think that Haskell is the best way to reach it, that's great. If you just want an excuse to play with Haskell, that's what weekends are for.</p>

<p>Beyond that, the most powerful force to <em>keep it real</em> is peer review. If you have to justify your project to your peers, who will feel it is their duty to ask the difficult questions you may have been fudging over, it should be apparent if your project is worth continuing or not. So there are two mandatory checkpoints. If you want to spend more than 40 hours on one project (one developer-week), you must find three supporters within the company who agree that the project is both a good idea, and viable. After 160 hours, the project also needs to be signed off by Mike or Scott.</p>

<h3>Don't Fuck the Customer</h3>

<p>Atlassian needs to innovate. We need to devote resources to research and development. We need to take risks and try new things. If we don't, our products will grow stale, wither and die, and the company will follow them. That's not good for us, and not good for our customers. At the same time, we have development schedules. We have customers who are waiting on far more mundane, bread-and-butter features. If we have developers running off to do 20% work whenever they feel like, our release cycles will suffer.</p>

<p>The solution we've come up with is to treat 20% time exactly the same way we treat annual leave. If you want to take time off from scheduled work to work on your own project, you have to give your manager reasonable notice and have it approved ahead of time. And like annual leave requests, managers are expected to approve them unless there is some good reason not to, like the developer being on the critical path for a release, or too many developers taking time off at once.</p>

<h3>On Success</h3>

<p>One problem with the emphasis we have placed on peer review is that it might cause developers to become <i>too</i> conservative in what they attempt. To quote a Russian proverb my girlfriend is fond of, "He who does not risk does not drink champagne."  To remind everyone that failure is, in fact, an option, I put this in the <span class="caps">FAQ</span>:</p>

<blockquote><p>A failed 20% project is not necessarily a bad thing. 20% is an exercise in innovation and risk, and when you take risks you invite failure. You could work on some cool technology and discover that it doesn't really produce the result you were after. You could work on a product feature and find that it doesn't fit in with the direction the product is going. You could just realise, as you develop your project, that it isn't such a good idea after all.

<p>The best advice is to fail fast. Don't get stuck in a death-spiral of unproductiveness, don't spend your days trying to bang a round peg into a square hole. Don't be afraid to draw a big red line through your project, and move on to something that could bear fruit.</p>

(Warning: mixing this many metaphors can be dangerous.)</blockquote>]]></content>
<dc:subject>20 Percent Time</dc:subject>
<dc:creator>cmiller</dc:creator>
<authorImage>http://blogs.atlassian.com/mt-static/support/assets_c/userpics/userpic-24-100x100.png</authorImage>
<dc:date>2008-03-17T07:50:00-08:00</dc:date>
<feedburner:origLink>http://blogs.atlassian.com/developer/2008/03/20_time_the_nuts_and_bolts.html</feedburner:origLink></item>


</rdf:RDF>

