Five Strategies to Accelerate Plugin Dev Lessons from Speakeasy Don Brown Integration Architect, Atlassian
Just one year ago…
 
 
Five Strategies  <ul><ul><li>Discover your plugin with Speakeasy </li></ul></ul><ul><ul><li>Define interactions with page ...
1. Discover your plugin with Speakeasy
Validate your assumptions!
The #1 time waster is not building the plugin poorly, but is building the wrong plugin <ul><ul><ul><li>Me, channeling Eric...
Example: Inline Commenting Get stats on how often people comment.  Ask heavy comment authors their gripes. Slowness of com...
Social Validation Speakeasy Prototype Plugin
Examine a recent plugin idea and try to identify your assumptions and how you might test them ” “
2. Define Interactions with Page Objects
Overly Simplifying Testing <ul><ul><li>Unit Testing </li></ul></ul><ul><ul><li>Where? </li></ul></ul><ul><ul><ul><li>Same ...
Selenium in 30 Seconds
Testing is Like Diets
Selenium the Ugly <ul><ul><li>waitForEntityRowToBeAdded();            // check entity row has been created         assertT...
Reminds Me of These Days: <ul><ul><li>if(request.getParameter(&quot;action&quot;) != null){  String bookname=request.getPa...
JSP Solution:  Data Access Objects Selenium Solution:  Page Objects
Boldly go where no functional test has gone before…
This ain’t no theory. . .
Use Now! <ul><ul><li>JIRA 4.x, 5.0 </li></ul></ul><ul><ul><li>Confluence 3.x, 4.x </li></ul></ul><ul><ul><li>Bamboo 3.3 </...
Take a look at the Atlassian page object docs and try to write a hello world test for your plugin ” “
3. Optimize the Dev Loop with the SDK
All About the Gap Gap between edit and view Productivity
These Are Your Enemies
Edit -> Refresh js/vm, hotswap changes Gap between edit and view Productivity
Edit -> ‘pi’ -> Refresh java changes Gap between edit and view Productivity
Edit -> CTRL-C ->  atlas-run WEB-INF/lib changes Gap between edit and view Productivity
Speaking of  atlas-run . . .
Run Simultaneously Switch between products Terminal tab per instance
Quickly Spot Errors <ul><ul><li>In your .bashrc file </li></ul></ul><ul><ul><li>export MAVEN_COLOR=true </li></ul></ul>
Track how many times you alt-tab away from development in a day and try to decrease it ” “
4. Reuse UI with AUI
A few of my favorite things
Tabbed Panels!
Messages!
Dialogs!
Play with the AUI sandbox and try out a few components ” “
5. Make Feedback Dead Simple
JIRA Mobile Connect Automated crash reporting as a JIRA issue Message reporters directly, attached to the issue
JIRA Issue Connector Embeddable JavaScript to allow  users to raise issues for your plugin
Make It Rewarding
Add JIRA Issue Connector to as an optional feature to your plugin for dogfooding ” “
Ruthlessly eliminate unnecessary weight from the start “ ” ”
But before I go. . .
The JIRA Studio Problem <ul><ul><li>How to allow plugins without breaking Studio? </li></ul></ul>
Plugins Missing Potential <ul><ul><li>Lots to know just to get started </li></ul></ul><ul><ul><ul><li>Java, Maven, XML, to...
Speakeasy is great. . . <ul><ul><li>Easy to get started </li></ul></ul><ul><ul><ul><li>Just a zip with some JavaScript </l...
But. . . <ul><ul><li>Only supports client-side JavaScript </li></ul></ul><ul><ul><li>DOM as the API is incredibly brittle ...
2012 Project: Remote Plugins <ul><ul><li>What if plugins ran on your server like Facebook Applications? </li></ul></ul><ul...
Let me know. . .  <ul><ul><li>Are you interested in deploying plugins for our JIRA Studio customers? </li></ul></ul><ul><u...
<ul><ul><li>Body Level One </li></ul></ul><ul><ul><li>Body Level One </li></ul></ul><ul><ul><ul><li>Body Level Two </li></...
Enter take-away information here, short enough to be tweeted & retweeted. Move the closing quotation to the end of the sen...
<ul><ul><li>Body Level One </li></ul></ul><ul><ul><li>Body Level One </li></ul></ul><ul><ul><ul><li>Body Level Two </li></...
Thank you!
References <ul><ul><li>Speakeasy </li></ul></ul><ul><ul><li>Page Objects – Coming soon </li></ul></ul><ul><ul><li>Plugin S...
Upcoming SlideShare
Loading in …5
×

AtlasCamp 2011 - Five Strategies to Accelerate Plugin Development

2,853 views
2,733 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,853
On SlideShare
0
From Embeds
0
Number of Embeds
255
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

AtlasCamp 2011 - Five Strategies to Accelerate Plugin Development

  1. 2. Five Strategies to Accelerate Plugin Dev Lessons from Speakeasy Don Brown Integration Architect, Atlassian
  2. 3. Just one year ago…
  3. 6. Five Strategies <ul><ul><li>Discover your plugin with Speakeasy </li></ul></ul><ul><ul><li>Define interactions with page objects </li></ul></ul><ul><ul><li>Optimize your dev loop with the SDK </li></ul></ul><ul><ul><li>Reuse functionality with AUI </li></ul></ul><ul><ul><li>Encourage feedback </li></ul></ul>
  4. 7. 1. Discover your plugin with Speakeasy
  5. 8.
  6. 9. Validate your assumptions!
  7. 10. The #1 time waster is not building the plugin poorly, but is building the wrong plugin <ul><ul><ul><li>Me, channeling Eric Ries </li></ul></ul></ul>” “
  8. 11. Example: Inline Commenting Get stats on how often people comment. Ask heavy comment authors their gripes. Slowness of commenting causing fewer comments and annoyed users Edit a few heavily commented pages and see if the linked numbers help or hurt Users want to see number of comments on a line Look through last 100 comments, note cause and use of quotes Users want to comment on specific lines in on a page Test Assumption
  9. 12. Social Validation Speakeasy Prototype Plugin
  10. 13. Examine a recent plugin idea and try to identify your assumptions and how you might test them ” “
  11. 14. 2. Define Interactions with Page Objects
  12. 15. Overly Simplifying Testing <ul><ul><li>Unit Testing </li></ul></ul><ul><ul><li>Where? </li></ul></ul><ul><ul><ul><li>Same VM </li></ul></ul></ul><ul><ul><li>Awesome for? </li></ul></ul><ul><ul><ul><li>Method validation </li></ul></ul></ul><ul><ul><li>Functional Testing </li></ul></ul><ul><ul><li>Where? </li></ul></ul><ul><ul><ul><li>External VM </li></ul></ul></ul><ul><ul><li>Awesome for? </li></ul></ul><ul><ul><ul><li>Use case validation </li></ul></ul></ul>
  13. 16. Selenium in 30 Seconds
  14. 17. Testing is Like Diets
  15. 18. Selenium the Ugly <ul><ul><li>waitForEntityRowToBeAdded();            // check entity row has been created         assertThat.textPresent(&quot;Schultz&quot;);         assertThat.textPresent(&quot;brown&quot;);         assertEquals(&quot;Delete&quot;, client.getText(&quot;link=Delete&quot;));            // now we delete         client.click(&quot;link=Delete&quot;);         client.waitForAjaxWithJquery();         client.click(&quot;//div[@id='delete-application-link-dialog']/div[2]/div[2]/button&quot;);         client.waitForAjaxWithJquery();         client.click(&quot;//div[@id='delete-application-link-dialog']/div[2]/div[2]/button&quot;);   </li></ul></ul>
  16. 19. Reminds Me of These Days: <ul><ul><li>if(request.getParameter(&quot;action&quot;) != null){  String bookname=request.getParameter(&quot;bookname&quot;if(request.getParameter(&quot;action&quot;) != null){        String bookname=request.getParameter(&quot;bookname&quot;);        String author=request.getParameter(&quot;author&quot;);       stmt.executeUpdate(&quot;insert into books_details(book_name, author) values('&quot;+bookname+&quot;','&quot;+author+&quot;')&quot;);       rst=stmt.executeQuery(&quot;select * from books_details&quot;);       %>       <html>       <body>       <center>          <h2>Books List</h2> </li></ul></ul>
  17. 20. JSP Solution: Data Access Objects Selenium Solution: Page Objects
  18. 21. Boldly go where no functional test has gone before…
  19. 22. This ain’t no theory. . .
  20. 23. Use Now! <ul><ul><li>JIRA 4.x, 5.0 </li></ul></ul><ul><ul><li>Confluence 3.x, 4.x </li></ul></ul><ul><ul><li>Bamboo 3.3 </li></ul></ul><ul><ul><li>FishEye/Crucible, coming soon </li></ul></ul>
  21. 24. Take a look at the Atlassian page object docs and try to write a hello world test for your plugin ” “
  22. 25. 3. Optimize the Dev Loop with the SDK
  23. 26. All About the Gap Gap between edit and view Productivity
  24. 27. These Are Your Enemies
  25. 28. Edit -> Refresh js/vm, hotswap changes Gap between edit and view Productivity
  26. 29. Edit -> ‘pi’ -> Refresh java changes Gap between edit and view Productivity
  27. 30. Edit -> CTRL-C -> atlas-run WEB-INF/lib changes Gap between edit and view Productivity
  28. 31. Speaking of atlas-run . . .
  29. 32. Run Simultaneously Switch between products Terminal tab per instance
  30. 33. Quickly Spot Errors <ul><ul><li>In your .bashrc file </li></ul></ul><ul><ul><li>export MAVEN_COLOR=true </li></ul></ul>
  31. 34. Track how many times you alt-tab away from development in a day and try to decrease it ” “
  32. 35. 4. Reuse UI with AUI
  33. 36. A few of my favorite things
  34. 37. Tabbed Panels!
  35. 38. Messages!
  36. 39. Dialogs!
  37. 40. Play with the AUI sandbox and try out a few components ” “
  38. 41. 5. Make Feedback Dead Simple
  39. 42.
  40. 43. JIRA Mobile Connect Automated crash reporting as a JIRA issue Message reporters directly, attached to the issue
  41. 44. JIRA Issue Connector Embeddable JavaScript to allow users to raise issues for your plugin
  42. 45. Make It Rewarding
  43. 46. Add JIRA Issue Connector to as an optional feature to your plugin for dogfooding ” “
  44. 47. Ruthlessly eliminate unnecessary weight from the start “ ” ”
  45. 48.
  46. 49. But before I go. . .
  47. 50. The JIRA Studio Problem <ul><ul><li>How to allow plugins without breaking Studio? </li></ul></ul>
  48. 51. Plugins Missing Potential <ul><ul><li>Lots to know just to get started </li></ul></ul><ul><ul><ul><li>Java, Maven, XML, tons of APIs, libraries, and frameworks </li></ul></ul></ul><ul><ul><li>Lots of things to break </li></ul></ul><ul><ul><ul><li>API changes, memory leaks, runaway functions </li></ul></ul></ul><ul><ul><li>Limited deployment options </li></ul></ul><ul><ul><ul><li>Not safe for Studio </li></ul></ul></ul>
  49. 52. Speakeasy is great. . . <ul><ul><li>Easy to get started </li></ul></ul><ul><ul><ul><li>Just a zip with some JavaScript </li></ul></ul></ul><ul><ul><li>Safe to experiment </li></ul></ul><ul><ul><ul><li>Per user allowed </li></ul></ul></ul><ul><ul><li>Easy to deploy using Git </li></ul></ul>
  50. 53. But. . . <ul><ul><li>Only supports client-side JavaScript </li></ul></ul><ul><ul><li>DOM as the API is incredibly brittle </li></ul></ul><ul><ul><li>Very different to “real” plugins </li></ul></ul>
  51. 54. 2012 Project: Remote Plugins <ul><ul><li>What if plugins ran on your server like Facebook Applications? </li></ul></ul><ul><ul><li>What if all you had to install in JIRA Studio was a single XML descriptor file? </li></ul></ul><ul><ul><li>What if you could write a plugin that could be deployed for JIRA Studio or custom instances without changes? </li></ul></ul>
  52. 55. Let me know. . . <ul><ul><li>Are you interested in deploying plugins for our JIRA Studio customers? </li></ul></ul><ul><ul><li>Would you like to use this capability for custom instances? </li></ul></ul><ul><ul><li>Would you be interested in having early access? </li></ul></ul><ul><ul><li>Contact me: don@atlassian.com or @mrdonbrown </li></ul></ul>
  53. 56. <ul><ul><li>Body Level One </li></ul></ul><ul><ul><li>Body Level One </li></ul></ul><ul><ul><ul><li>Body Level Two </li></ul></ul></ul><ul><ul><ul><li>Body Level Two </li></ul></ul></ul><ul><ul><li>Body Level One </li></ul></ul><ul><ul><ul><li>Body Level Two </li></ul></ul></ul><ul><ul><li>Body Level One </li></ul></ul><ul><ul><li>Body Level One </li></ul></ul><ul><ul><ul><li>Body Level Two </li></ul></ul></ul><ul><ul><ul><li>Body Level Two </li></ul></ul></ul><ul><ul><li>Body Level One </li></ul></ul><ul><ul><ul><li>Body Level Two </li></ul></ul></ul>
  54. 57.
  55. 58. Enter take-away information here, short enough to be tweeted & retweeted. Move the closing quotation to the end of the sentence manually. “ ”
  56. 59. <ul><ul><li>Body Level One </li></ul></ul><ul><ul><li>Body Level One </li></ul></ul><ul><ul><ul><li>Body Level Two </li></ul></ul></ul><ul><ul><ul><li>Body Level Two </li></ul></ul></ul><ul><ul><li>Body Level One </li></ul></ul><ul><ul><ul><li>Body Level Two </li></ul></ul></ul>
  57. 60. Thank you!
  58. 61. References <ul><ul><li>Speakeasy </li></ul></ul><ul><ul><li>Page Objects – Coming soon </li></ul></ul><ul><ul><li>Plugin SDK </li></ul></ul><ul><ul><ul><li>Multiple products </li></ul></ul></ul><ul><ul><ul><li>Colorization </li></ul></ul></ul><ul><ul><li>Atlassian User Interface (AUI) </li></ul></ul><ul><ul><li>JIRA Mobile Connect </li></ul></ul><ul><ul><li>JIRA Issue Connector </li></ul></ul>

×