<?xml version='1.0' encoding='utf-8' ?>
<feed xmlns='http://www.w3.org/2005/Atom'>
<title type='text'>Agile Planner</title>
<generator uri='http://nestacms.com'>Nesta</generator>
<id>tag:www.agileplannerapp.com,2009:/</id>
<link href='https://www.agileplannerapp.com/articles.xml' rel='self' />
<link href='https://www.agileplannerapp.com/' rel='alternate' />
<subtitle type='text'>The agile app for iterative development teams</subtitle>
<updated>2022-09-03T18:00:00+01:00</updated>
<entry>
<title>Iteration 48: Better support for Kanban and hashtags</title>
<link href='https://www.agileplannerapp.com/blog/retrospectives/better-support-for-kanban-and-hashtags' rel='alternate' type='text/html' />
<id>tag:www.agileplannerapp.com,2022-09-03:/blog/retrospectives/better-support-for-kanban-and-hashtags</id>
<content type='html'>&lt;p&gt;The main goal of iteration 48 was to build on the (recently added) tagging features. Planner has also become significantly easy to use for teams that are adopting Kanban&amp;#39;s &amp;quot;continuous flow&amp;quot; approach (rather than using sprints or iterations).&lt;/p&gt;

&lt;h2&gt;Better support for hashtags&lt;/h2&gt;

&lt;p&gt;Planner lets you &lt;a href=&quot;https://www.agileplannerapp.com/blog/organising-cards-with-hashtags&quot;&gt;use #hashtags&lt;/a&gt; to organise your story cards. They&amp;#39;re easy to use; to create a tag you just type a &amp;quot;#&amp;quot; character, followed by a word, and save your card. Planner will convert the tag into a link, so you can see all other cards that are using the same tag.&lt;/p&gt;

&lt;p&gt;The only problem was remembering which tags you were using, or how you&amp;#39;d spelt them. To deal with this, Planner now suggests tags that are in use on the current board.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/features/autocompleting-tags.gif&quot; alt=&quot;Suggesting tags as you type&quot;&gt;&lt;/p&gt;

&lt;p&gt;The most used tags appear at the top of the list. As you start typing the suggestions are filtered to show those that match what you&amp;#39;ve typed.&lt;/p&gt;

&lt;h2&gt;Support for &amp;quot;continuous flow&amp;quot;&lt;/h2&gt;

&lt;p&gt;Planner is, first and foremost, designed for teams that practice &amp;quot;iterative development&amp;quot;. It expects that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You like working in iterations (or sprints) of 1, 2, 3 or 4 weeks in length.&lt;/li&gt;
&lt;li&gt;You&amp;#39;ll take stock of how things are going every iteration, review your business&amp;#39;s priorities, and choose the most valuable things to work on in your next iteration.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Beyond that, Planner doesn&amp;#39;t really have an opinion on how you work. Your process should be for you to change, improve, and experiment with.&lt;/p&gt;

&lt;p&gt;Back in the early days of Agile (when Extreme Programming and Scrum became popular) it was common for teams to wait until the end of an iteration before releasing any of the work that they&amp;#39;d completed during the iteration.&lt;/p&gt;

&lt;p&gt;Only the stories that made it into the release were considered to be complete, and the corresponding estimates were added up to calculate the velocity for that iteration.&lt;/p&gt;

&lt;p&gt;These days many of us are able to release our work continually (as we complete it), rather than in one lump at the end of an iteration. It&amp;#39;s also fairly common for stories to be partially developed, or be awaiting review from stakeholders at the end of an iteration, and nobody loses any sleep over it.&lt;/p&gt;

&lt;p&gt;At the end of every iteration Planner prompts you to &amp;quot;close&amp;quot; the iteration. You get to make sure that all the cards are in the right columns before the stories that you&amp;#39;ve finished will be moved to the History page.&lt;/p&gt;

&lt;p&gt;The big question is, what should happen to stories thare are still in progress?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/iteration-48/story-cards-during-iteration.png&quot; alt=&quot;Some stories are still in progress&quot;&gt;&lt;/p&gt;

&lt;p&gt;Usually, you&amp;#39;ll want to finish a partially complete story during the next iteration. But not always.&lt;/p&gt;

&lt;p&gt;When choosing which cards belong in your next iteration, Planner has always moved your unfinished cards back to your Backlog, prompting you to drag them into your next iteration.&lt;/p&gt;

&lt;p&gt;Having to drag these cards around may seem like a pain (by comparison to automatically moving them to your next iteration), but it prompts you to reconsider whether each card is still a top priority. Priorities can change on a daily basis, so this is usually a useful (and quick) exercise.&lt;/p&gt;

&lt;p&gt;However, if you&amp;#39;re using Planner to manage a team using &amp;quot;continuous flow&amp;quot;, you&amp;#39;ll usually have a lot of cards that are unfinished. And you&amp;#39;ll still need to close an iteration every week/fortnight, even if you&amp;#39;re not really working in iterations (closing an iteration is the only way to move your completed cards over to the History page).&lt;/p&gt;

&lt;p&gt;So if you&amp;#39;re using Planner with continuous flow, what you really need is a way to move all the completed cards to the history page, while leaving any work that&amp;#39;s in progress in the current iteration.&lt;/p&gt;

&lt;p&gt;So now you can choose what happens to your unfinished cards. This is what you&amp;#39;ll see when you click the &amp;quot;Close&amp;quot; link:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/iteration-48/moving-cards-to-next-iteration.png&quot; alt=&quot;Moving unfinished cards to the next iteration&quot;&gt;&lt;/p&gt;

&lt;p&gt;If you&amp;#39;re using iterations or sprints, you can choose where to put your unfinished cards. If you&amp;#39;re using continuous flow, select &amp;quot;Move them to the next iteration&amp;quot;.&lt;/p&gt;

&lt;h2&gt;Retrospective&lt;/h2&gt;

&lt;p&gt;This iteration felt good. I got a lot done (including a few small features that I didn&amp;#39;t explain above), all of which was in response to customer feedback.&lt;/p&gt;

&lt;p&gt;Planner is shaping up nicely. :-)&lt;/p&gt;
</content>
<published>2022-09-03T18:00:00+01:00</published>
<updated>2022-09-03T18:00:00+01:00</updated>
<category term='retrospectives'></category>
</entry>
<entry>
<title>Add tasks to your story cards</title>
<link href='https://www.agileplannerapp.com/blog/write-tasks-in-markdown' rel='alternate' type='text/html' />
<id>tag:www.agileplannerapp.com,2015-04-22:/blog/write-tasks-in-markdown</id>
<content type='html'>&lt;p&gt;Planner now lets you add tasks to your story cards.&lt;/p&gt;

&lt;p&gt;Tasks are written as bulleted lists in each card&amp;#39;s &lt;em&gt;Notes &amp;amp; Tasks&lt;/em&gt; area, by prefixing the text of the bullet with &lt;code&gt;[ ]&lt;/code&gt; and &lt;code&gt;[x]&lt;/code&gt; (followed by a space). The “x” indicates that the task has been completed.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/features/add-tasks-to-cards.gif&quot; alt=&quot;Write tasks with Markdown&quot;&gt;&lt;/p&gt;

&lt;p&gt;Clicking a task&amp;#39;s checkbox adds the &amp;quot;x&amp;quot; for you and saves the card (as you can see in the animation above).&lt;/p&gt;

&lt;p&gt;Because your tasks are written in plain text, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write them very quickly, editing and refactoring the list as your plan evolves.&lt;/li&gt;
&lt;li&gt;Break long lists up into multiple lists, just by inserting a paragraph or heading in the middle of the list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I often make one list for a story&amp;#39;s development tasks, and a separate &amp;quot;deployment checklist&amp;quot; just beneath it.&lt;/p&gt;

&lt;h2&gt;How this approach came about&lt;/h2&gt;

&lt;p&gt;When thinking about how to build a new feature, I find that &lt;strong&gt;breaking the problem down into tasks is a very useful exercise&lt;/strong&gt;. Unfortunately it&amp;#39;s not something that I usually get right first time, so I like to iterate on my task lists as I write them.&lt;/p&gt;

&lt;p&gt;Back in 2002 (when I worked in a team that used real index cards) we&amp;#39;d keep notes about our stories in a Wiki (the notes wouldn&amp;#39;t fit on the cards themselves).&lt;/p&gt;

&lt;p&gt;We used to keep track of tasks by writing bulleted lists on the story&amp;#39;s Wiki page, indicating which ones we&amp;#39;d finished by writing “[DONE]” at the beginning of each bullet. It was basic, but it worked well.&lt;/p&gt;

&lt;p&gt;We could &lt;strong&gt;edit, delete and re-order tasks quickly&lt;/strong&gt; (with the keyboard). It made writing detailed task lists a breeze.&lt;/p&gt;

&lt;p&gt;If you estimate your stories, you&amp;#39;ve probably noticed that &lt;strong&gt;breaking stories down&lt;/strong&gt; into tasks helps you make &lt;strong&gt;more consistent estimates&lt;/strong&gt;. Back in 2002, our plans (with estimates based on the tasks we&amp;#39;d captured on our Wiki pages) became very consistent.&lt;/p&gt;

&lt;p&gt;When designing Planner I wanted to maintain a Wiki&amp;#39;s freeform approach to writing and editing tasks, but realised that people would appreciate being able to mark a task as complete by clicking a checkbox.&lt;/p&gt;

&lt;p&gt;I evolved my “[DONE]” indicator into the “[ ]” and “[x]” syntax that you can see above, with the intention of converting them into clickable checkboxes.&lt;/p&gt;

&lt;p&gt;I was excited the idea, but at the time I knew I had higher priorities to work on. By the time I came to implement it GitHub had &lt;a href=&quot;https://github.com/blog/1375%0A-task-lists-in-gfm-issues-pulls-comments&quot;&gt;added support&lt;/a&gt; for exactly the same syntax. That&amp;#39;s always a sign that you&amp;#39;re onto a good thing. :-)&lt;/p&gt;

&lt;p&gt;So not only is it a great way to work with task lists, you can use the same approach in multiple apps. Better still, if you&amp;#39;d like to add support for this approach to another app, GitHub have &lt;a href=&quot;https://github.com/blog/1930-task-lists-are-open-source&quot;&gt;released their code&lt;/a&gt; as open source.&lt;/p&gt;
</content>
<published>2015-04-22T00:00:00+00:00</published>
<updated>2015-04-22T00:00:00+00:00</updated>
</entry>
<entry>
<title>A new approach to tags</title>
<link href='https://www.agileplannerapp.com/blog/a-new-approach-to-tags' rel='alternate' type='text/html' />
<id>tag:www.agileplannerapp.com,2015-04-07:/blog/a-new-approach-to-tags</id>
<content type='html'>&lt;p&gt;For some time now, Planner has allowed you to organise your story cards by &lt;a href=&quot;organising-cards-with-hashtags&quot;&gt;tagging them with hashtags&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We chose to use hashtags because they’d help us to keep Planner’s user interface clean and simple, and for the most part they worked well. It’s become clear that hashtags have their limitations, so we’ve replaced them with a more typical tagging interface.&lt;/p&gt;

&lt;h2&gt;What’s wrong with hashtags?&lt;/h2&gt;

&lt;p&gt;When tagging your stories with hashtags, they encourage you to include the tags in the description of your story. Here’s an example:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/features/tagging-with-hashtags.png&quot; alt=&quot;A story card with hashtags&quot;&gt;&lt;/p&gt;

&lt;p&gt;It works very nicely when you first write your card, but what happens when we want to rename a tag? We might have written a story like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It’s difficult to understand what the cards in your backlog represent at a glance. Allow people to #filter the cards in the backlog by typing a snippet of text that matches their stories’ title or content.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If we later decided that we wanted to rename the #filter tag to #backlog-management, Planner would need to edit our story text. Unfortunately “Allow project managers to #backlog-management the cards…” doesn’t make any sense!&lt;/p&gt;

&lt;p&gt;So you can’t automatically rename hashtags.&lt;/p&gt;

&lt;h2&gt;The new approach&lt;/h2&gt;

&lt;p&gt;It’s very simple. There’s a new “Add tags…” link beneath each story card. Click it to add a tag.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/features/tagging-cards-1.png&quot; alt=&quot;The ‘Add tags’ link&quot;&gt;&lt;/p&gt;

&lt;p&gt;Existing tags are shown as labels, each of which has a small button you can click to remove the tag from the card:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/features/tagging-cards-2.png&quot; alt=&quot;Showing tags as labels&quot;&gt;&lt;/p&gt;

&lt;p&gt;Clicking the tag’s name will show you all the cards that use the tag.&lt;/p&gt;

&lt;p&gt;That’s it!&lt;/p&gt;
</content>
<published>2015-04-07T00:00:00+00:00</published>
<updated>2015-04-07T00:00:00+00:00</updated>
</entry>
<entry>
<title>Assigning other people to cards</title>
<link href='https://www.agileplannerapp.com/blog/assigning-other-people-to-cards' rel='alternate' type='text/html' />
<id>tag:www.agileplannerapp.com,2015-03-19:/blog/assigning-other-people-to-cards</id>
<content type='html'>&lt;p&gt;When using Planner you can show people which cards you’re working on by adding your avatar to your cards. The intention is to make it easy to see at a glance what people are &lt;em&gt;currently doing&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Here’s an example, taken from a publicly visible board used by one of Planner&amp;#39;s beta testers:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/features/overview-of-what-people-are-working-on.png&quot; alt=&quot;Overview of what people are doing&quot;&gt;&lt;/p&gt;

&lt;p&gt;When I first added support for avatars, I didn’t think there’d be any need to be able to add or remove other people. Feedback from beta testers has made it &lt;em&gt;very&lt;/em&gt; clear that this isn’t the case, so I’ve just released support for adding/removing your teammates.&lt;/p&gt;

&lt;p&gt;This quick animation will give you a good feel for how it works:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/features/adding-and-removing-teammates.gif&quot; alt=&quot;Adding a teammate to a card&quot;&gt;&lt;/p&gt;

&lt;p&gt;Note that Planner &lt;strong&gt;doesn’t email people&lt;/strong&gt; when you add them to a card. At first glance sending an email might sound like a good idea, but it’s very easy to abuse a tool that allows it. I’ve worked in plenty of places where managers like to “assign” work to people, without getting their team’s input on who would be most suitable for each task.&lt;/p&gt;

&lt;p&gt;Every time I’ve witnessed people being “managed” in this way it’s affected team morale. So if you’d like somebody to work on something, it’s far better to start a conversation and get a consensus. With Planner that means you’ll just have to walk over and have a chat, pick up the phone, or drop into your online chat room instead. Just like you would if you were using a physical card wall…&lt;/p&gt;
</content>
<published>2015-03-19T00:00:00+00:00</published>
<updated>2015-03-19T00:00:00+00:00</updated>
</entry>
<entry>
<title>Suggesting tags as you type</title>
<link href='https://www.agileplannerapp.com/blog/suggesting-tags-as-you-type' rel='alternate' type='text/html' />
<id>tag:www.agileplannerapp.com,2014-09-03:/blog/suggesting-tags-as-you-type</id>
<content type='html'>&lt;p&gt;Planner lets you &lt;a href=&quot;organising-cards-with-hashtags&quot;&gt;keep your stories organised&lt;/a&gt; with #hashtags. It can be hard to remember all the tags that your team is using, but Planner can know remind you which tags are in use, suggesting tags as you type.&lt;/p&gt;

&lt;p&gt;The easiest way to show you how it works is with a quick demo...&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/features/autocompleting-tags.gif&quot; alt=&quot;Suggesting tags as you type&quot;&gt;&lt;/p&gt;
</content>
<published>2014-09-03T00:00:00+00:00</published>
<updated>2014-09-03T00:00:00+00:00</updated>
</entry>
<entry>
<title>Iteration 47: Reprioritising cards on the Kanban board</title>
<link href='https://www.agileplannerapp.com/blog/retrospectives/reprioritising-cards-on-the-kanban-wall' rel='alternate' type='text/html' />
<id>tag:www.agileplannerapp.com,2014-08-20:/blog/retrospectives/reprioritising-cards-on-the-kanban-wall</id>
<content type='html'>&lt;p&gt;The development team (me) was a bit light on resource this fortnight, as I&amp;#39;ve been getting ready to move house!&lt;/p&gt;

&lt;p&gt;The vast majority of my time (when I wasn&amp;#39;t packing boxes) was spent fixing bugs, but (in response to a customer&amp;#39;s request) I did ship one new feature – Planner&amp;#39;s Markdown now supports tabular data. You can find out more on the &lt;a href=&quot;https://www.agileplannerapp.com/help/markdown&quot;&gt;Markdown help&lt;/a&gt; page.&lt;/p&gt;

&lt;h2&gt;Bug fixes&lt;/h2&gt;

&lt;p&gt;I like to fix bugs quickly, soon after they&amp;#39;re discovered. Letting your bugs pile up can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give customers the impression that your app isn&amp;#39;t a high quality product.&lt;/li&gt;
&lt;li&gt;Require you to spend (waste) time explaining to your customers why things didn&amp;#39;t quite work as they expected.&lt;/li&gt;
&lt;li&gt;Depress your team – nobody likes having a bunch of unfixed bugs filed against their code, or spending the day &amp;quot;bug fixing&amp;quot;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I fixed a few minor bugs this iteration, and one big one.&lt;/p&gt;

&lt;p&gt;Planner had been confusing a small number of people for a few weeks, but I hadn&amp;#39;t felt able to prioritise the fix.&lt;/p&gt;

&lt;p&gt;For reasons that I probably shouldn&amp;#39;t go into (it&amp;#39;s hard to explain, and not particularly interesting) the only place you could prioritise your cards was on the Planning page.&lt;/p&gt;

&lt;p&gt;On the Planning page cards are laid out in a grid, with the highest priority card at the top left, the lowest at the bottom right. By picking a card up and dragging it to a new position in the grid, you could reprioritise it.&lt;/p&gt;

&lt;p&gt;When you viewed the same cards on the Current Iteration page (which arranges the cards in columns - &amp;quot;To Do&amp;quot;, &amp;quot;In Progress&amp;quot;, etc) you could drag them between the columns. It also &lt;strong&gt;seemed as though&lt;/strong&gt; you could re-prioritise cards by dragging them up and down within their columns.&lt;/p&gt;

&lt;p&gt;For complicated technical reasons, you couldn&amp;#39;t. Worse still, it had never occurred to me that people would actually want to do it (I always re-order my cards on the Planning page). I was blissfully unaware that people expected it to work.&lt;/p&gt;

&lt;p&gt;It seems so obvious now, but this is why usability testing is so important. As designers and developers we don&amp;#39;t think about our products in quite the same way that our customers do.&lt;/p&gt;

&lt;p&gt;Unfortunately, solving it properly (I didn&amp;#39;t want to hack something together quickly) was a big job. This meant I had to prioritise it accordingly – fixing it would delay the arrival of some important new features.&lt;/p&gt;

&lt;p&gt;This iteration, I set aside the time to fix it.&lt;/p&gt;

&lt;h2&gt;Retrospective&lt;/h2&gt;

&lt;p&gt;I didn&amp;#39;t deliver that much this fortnight, partly due to my impending house move, and partly due to some unexpected complexity in this bug fix.&lt;/p&gt;

&lt;p&gt;My velocity was 1.75. To put that in context, I&amp;#39;ve had an average velocity of 3 over the three previous iterations.&lt;/p&gt;
</content>
<published>2014-08-20T00:00:00+00:00</published>
<updated>2014-08-20T00:00:00+00:00</updated>
<category term='retrospectives'></category>
</entry>
<entry>
<title>Iteration 46: Real-time updates and performance improvements</title>
<link href='https://www.agileplannerapp.com/blog/retrospectives/keep-people-up-to-date' rel='alternate' type='text/html' />
<id>tag:www.agileplannerapp.com,2014-07-23:/blog/retrospectives/keep-people-up-to-date</id>
<content type='html'>&lt;p&gt;One of the benefits of working with a physical card wall is that you know that your wall is an authorative version of your plan, and an accurate reflection of the team&amp;#39;s progress.&lt;/p&gt;

&lt;p&gt;This isn&amp;#39;t necessarily the case if your card wall is on a web page. When somebody moves a card on their screen, anybody who has the same page open will be looking at an outdated plan. You often need to reload the web page to see the latest version.&lt;/p&gt;

&lt;p&gt;Some of the teams using Planner have more than ten people working on a single board. With that many people on a board, significant changes can occur every quarter of an hour. Making decisions based on out of date web pages was starting to cause them problems.&lt;/p&gt;

&lt;p&gt;The focus of iteration 46 was to fix it.&lt;/p&gt;

&lt;h2&gt;Notifications explain what&amp;#39;s changed&lt;/h2&gt;

&lt;p&gt;The ideal solution would be to update everybody&amp;#39;s boards in real time, replicating drag/drop events across all active browsers. Everybody&amp;#39;s card wall would be kept up to date. It would have taken longer to write the code to do that than was available in the iteration, and we realised we could get most of the benefit for half the effort (the credit for spotting this goes to &lt;a href=&quot;https://twitter.com/tekin&quot;&gt;@tekin&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The big problem wasn&amp;#39;t that people had to reload a web page; it was that &lt;strong&gt;they didn&amp;#39;t know when&lt;/strong&gt; they needed to reload a web page.&lt;/p&gt;

&lt;p&gt;Next time you leave your browser open on the Current Iteration page you&amp;#39;ll see a message like this one when somebody moves a card:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/features/card-moved-column-message.png&quot; alt=&quot;Card moved between columns&quot;&gt;&lt;/p&gt;

&lt;p&gt;This is just an example, but it isn&amp;#39;t the only message you might see – Planner will also tell you if somebody edits a card while you&amp;#39;re looking at it.&lt;/p&gt;

&lt;p&gt;In future I expect we&amp;#39;ll be moving cards around before your eyes, as your teammates update your board.&lt;/p&gt;

&lt;h2&gt;Performance improvements&lt;/h2&gt;

&lt;p&gt;When considering how to implement real-time updates, I had a choice between two competing technologies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Server Side Events (SSE), an HTML5 technology that allows the server to send data to the browser over the existing HTTP connection, and&lt;/li&gt;
&lt;li&gt;Websockets, which support two-way communication between the server and the browser on a separate network port.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After a bit of research I decided to use SSE, as it looked like the simpler of the two options.&lt;/p&gt;

&lt;p&gt;In order to be able to use SSE I needed to upgrade Planner to a newer version of Ruby and Rails (the programming language and framework that Planner is written in). I&amp;#39;d been wanting to upgrade for a while, but had prioritised new features instead. This was a perfect opportunity to do it.&lt;/p&gt;

&lt;p&gt;Much to my surprise, the Ruby upgrade lead to a three-fold decrease in the time taken to serve its web pages. Requests that had been routinely taking over 300ms were now getting served in less than 100ms.&lt;/p&gt;

&lt;h2&gt;Retrospective&lt;/h2&gt;

&lt;p&gt;Shortly after I&amp;#39;d upgraded Ruby and Rails (so I could implement the notifications using SSE) I discovered that Rails isn&amp;#39;t well suited to serving SSE at scale.&lt;/p&gt;

&lt;p&gt;The Rails developers amongst you may now be saying &amp;quot;&lt;strong&gt;WAT?!&lt;/strong&gt; He&amp;#39;s said Rails doesn&amp;#39;t scale!&amp;quot; I&amp;#39;ll briefly explain what I&amp;#39;m saying. It&amp;#39;s specifically about SSE, in Rails, running in a typical server environment. As currently implemented (Rails 4.x), SSE requires a threaded web server, and one active server thread for each user who keeps your app open in their browser. The thread is responsible for pushing data over an HTTP connection, and needs to maintain an open connection to your database.&lt;/p&gt;

&lt;p&gt;If you&amp;#39;re hosting your app in the cloud, a large number of concurrent database connections can become quite costly. I suspect that to make SSE a sensible approach we&amp;#39;d need threadsafe access to the database (which I expect will arrive in Rails before too long, for this very reason).&lt;/p&gt;

&lt;p&gt;If you have a similar need for SSE and are hosting in the cloud, I&amp;#39;d recommend that you just use Websockets, and let &lt;a href=&quot;http://pusher.com/&quot;&gt;Pusher&lt;/a&gt; (a hosted Websocket platform) deal with the complicated bits. Pusher turned out to be simpler to integrate into Planner than SSE anyway, as I didn&amp;#39;t need to switch to a multi-threaded web server or setup an event bus to broadcast messages between threads.&lt;/p&gt;

&lt;p&gt;So as it turned out I upgraded Ruby and Rails so I could use SSE, then switched to Websockets, and needn&amp;#39;t have upgraded anything at all. Happily, the unexpected performance improvements alone have made the upgrade worth it.&lt;/p&gt;

&lt;p&gt;Though it all turned out well, I dropped the ball here. I should have investigated SSE more thoroughly before committing so much time to the upgrade (which took several days).&lt;/p&gt;

&lt;p&gt;I&amp;#39;ll have to keep a closer eye on myself. I&amp;#39;m a loose cannon&amp;hellip;&lt;/p&gt;
</content>
<published>2014-07-23T16:30:00+01:00</published>
<updated>2014-07-23T16:30:00+01:00</updated>
<category term='retrospectives'></category>
</entry>
<entry>
<title>Iteration 45: Tagging and searching</title>
<link href='https://www.agileplannerapp.com/blog/retrospectives/searching-for-hashtags' rel='alternate' type='text/html' />
<id>tag:www.agileplannerapp.com,2014-07-08:/blog/retrospectives/searching-for-hashtags</id>
<content type='html'>&lt;p&gt;The main focus this iteration was on tagging and grouping of cards. We&amp;#39;ve also done some more work on search, and improved the way that discussions are displayed on the card page.&lt;/p&gt;

&lt;h2&gt;A search results page&lt;/h2&gt;

&lt;p&gt;Back in &lt;a href=&quot;https://www.agileplannerapp.com/blog/retrospectives/coloured-stickers-and-search&quot;&gt;iteration 43&lt;/a&gt;, Planner gained early support for searching for cards. When you type some words into the search form Planner suggests up to ten cards that match your query. You can select a card with your cursor keys, press enter, and jump to the card.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/iteration-43/search-demo.gif&quot; alt=&quot;Suggested matches&quot;&gt;&lt;/p&gt;

&lt;p&gt;That&amp;#39;s not new, but what if there are more than ten cards that match your query? And what if you want to share the results with somebody else?&lt;/p&gt;

&lt;p&gt;If you type a query and press Enter (rather than using the cursor keys to navigate to one of the suggestions) Planner will now show you all the cards that match (sorted by how well each card matches your query).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/iteration-45/search-results-page.png&quot; alt=&quot;Page of search results&quot;&gt;&lt;/p&gt;

&lt;h2&gt;Tagging your stories&lt;/h2&gt;

&lt;p&gt;Hashtag support was the main new feature this iteration. I &lt;a href=&quot;https://www.agileplannerapp.com/blog/organising-cards-with-hashtags&quot;&gt;blogged about tags&lt;/a&gt; when they went live earlier this week, so I&amp;#39;ll just cover them briefly here.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/features/tagging-with-hashtags.png&quot; alt=&quot;A story card with tags&quot;&gt;&lt;/p&gt;

&lt;p&gt;When you click on a hashtag you&amp;#39;re taken to the search results page for the tag. When I click the &amp;quot;#API&amp;quot; link on Planner&amp;#39;s own board, this is what I get:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/iteration-45/search-for-hashtag.png&quot; alt=&quot;All the cards that match a tag&quot;&gt;&lt;/p&gt;

&lt;p&gt;There are 38 cards on the board that contain the word &amp;quot;api&amp;quot;, but only three of them have been tagged. Had I searched for &amp;quot;API&amp;quot; instead of &amp;quot;#API&amp;quot;, all 38 would have matched the search.&lt;/p&gt;

&lt;p&gt;Hashtags are a good way to keep control over a group of related cards, an epic, or a list of requirements for a specific customer.&lt;/p&gt;

&lt;h2&gt;Improvements to the card page&lt;/h2&gt;

&lt;p&gt;Teams that make heavy use of Planner&amp;#39;s discussions have been reporting that there are too many clicks involved in navigating between the card page, and the conversations that they&amp;#39;ve been having about the card. They&amp;#39;ve been finding it difficult to keep track.&lt;/p&gt;

&lt;p&gt;It&amp;#39;s clear that Planner needs notifications to keep people abreast of what&amp;#39;s going on, but in the short term there were some obvious improvements to the card page that could help.&lt;/p&gt;

&lt;p&gt;Rather than just listing discussions, we now show you the most recent message in each discussion. I&amp;#39;ve also redesigned the summary of each discussion so that it shows all the files that have been uploaded to a discussion, directly on the card page.&lt;/p&gt;

&lt;p&gt;The next step is to allow replies to be sent directly from the card page.&lt;/p&gt;

&lt;p&gt;Feedback pointing out the need for improvements like this is just what I need to make Planner better, so please keep it coming.&lt;/p&gt;

&lt;h2&gt;Retrospective&lt;/h2&gt;

&lt;p&gt;At the start of the iteration I met up with Neil (who&amp;#39;s responsible for the attractive parts of Planner&amp;#39;s design) and we chatted through some of the usability issues that people have been reporting recently. Neil has suggested some nice improvements, and has sent through some exciting changes to the design language.&lt;/p&gt;

&lt;p&gt;I had hoped to get more development work completed this iteration than I have, but if I take the time I&amp;#39;ve spent working with Neil into account, it&amp;#39;s no surprise that I&amp;#39;ve seen a drop in velocity this fortnight.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/iteration-45/velocity-graph.png&quot; alt=&quot;Veloctiy graph&quot;&gt;&lt;/p&gt;
</content>
<published>2014-07-08T22:00:00+00:00</published>
<updated>2014-07-08T22:00:00+00:00</updated>
<category term='retrospectives'></category>
</entry>
<entry>
<title>Get organised with hashtags</title>
<link href='https://www.agileplannerapp.com/blog/organising-cards-with-hashtags' rel='alternate' type='text/html' />
<id>tag:www.agileplannerapp.com,2014-07-07:/blog/organising-cards-with-hashtags</id>
<content type='html'>&lt;p&gt;Keeping track of all the ideas and features that belong in your product can be difficult at the best of times, and writing them all down on separate cards doesn&amp;#39;t help us to keep track.&lt;/p&gt;

&lt;p&gt;Once you&amp;#39;ve written a handful of cards on a related topic it can be hard to remember:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which cards you&amp;#39;ve written.&lt;/li&gt;
&lt;li&gt;Which ones are in progress, have been completed, etc.&lt;/li&gt;
&lt;li&gt;How cards are related to (or dependent upon) one another.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Today&amp;#39;s project management apps could do a lot more to help. Solving this problem is one of the key goals for Planner.&lt;/p&gt;

&lt;p&gt;Planner&amp;#39;s solution is built on top of a fast and flexible search engine. You can already search for cards by the words on the card and in the notes, and before long you&amp;#39;ll be able to filter your backlog using the same search syntax.&lt;/p&gt;

&lt;p&gt;You might be wondering what I mean by &amp;quot;filter&amp;quot;. Imagine a big wall of cards on which you need to find the stories that represent your new product&amp;#39;s API. Wouldn&amp;#39;t it be good if you could highight them all just by typing &amp;quot;api&amp;quot;?&lt;/p&gt;

&lt;p&gt;Search is great for this, but it&amp;#39;s not without limitations. If one of your cards contained the URL &lt;code&gt;https://www.flickr.com/services/api/&lt;/code&gt; that card would also match the &amp;quot;api&amp;quot; filter.&lt;/p&gt;

&lt;p&gt;Popularised on Twitter, hashtags allow you to use any word within a sentence as a tag, simply by prefixing words on your stories &amp;quot;#&amp;quot; character. They fit perfectly with Planner&amp;#39;s approach of extracting the information that matters from the text written on your stories (you can already write &amp;quot;Related to card 42&amp;quot; to create a link between two cards).&lt;/p&gt;

&lt;p&gt;If you&amp;#39;d tagged your API stories you could filter by &amp;quot;#api&amp;quot; instead, removing the false positives.&lt;/p&gt;

&lt;p&gt;Here&amp;#39;s an example of hashtags in action:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/features/tagging-with-hashtags.png&quot; alt=&quot;A story card with hashtags&quot;&gt;&lt;/p&gt;

&lt;p&gt;When you click a #hashtag link it uses Planner&amp;#39;s search engine to show you a page of all the cards that match the tag.&lt;/p&gt;

&lt;p&gt;So in a sense, hashtags are just a way of making search slightly more precise. If you just need to be able to find a card again, write your card in plain text and search will help you find it. If you need a precise group, add a &amp;quot;#&amp;quot;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE (3 September 2014):&lt;/strong&gt; We&amp;#39;ve now got support for &lt;a href=&quot;suggesting-tags-as-you-type&quot;&gt;suggesting tags as you type&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE (7 April 2015):&lt;/strong&gt; Hashtags worked pretty well, but turned out to have a couple of downsides. We&amp;#39;ve replaced them with a &lt;a href=&quot;a-new-approach-to-tags&quot;&gt;more flexible tagging interface&lt;/a&gt;.&lt;/p&gt;
</content>
<published>2014-07-07T12:00:00+00:00</published>
<updated>2014-07-07T12:00:00+00:00</updated>
</entry>
<entry>
<title>Iteration 44: Public boards and UI improvements</title>
<link href='https://www.agileplannerapp.com/blog/retrospectives/public-boards-and-ui-improvements' rel='alternate' type='text/html' />
<id>tag:www.agileplannerapp.com,2014-06-25:/blog/retrospectives/public-boards-and-ui-improvements</id>
<content type='html'>&lt;p&gt;There were two areas of focus for this iteration. I&amp;#39;ve had lots of great feedback from customers recently which have lead to some good improvements to the UI. One customer also needed to be able to share their projects with the public, so (while it wasn&amp;#39;t a feature I was expecting to be adding to Planner just yet) I&amp;#39;m delighted that we now support public boards!&lt;/p&gt;

&lt;h2&gt;Public boards&lt;/h2&gt;

&lt;p&gt;As this was quite a big new feature, I&amp;#39;ve already written about it in a &lt;a href=&quot;https://www.agileplannerapp.com/blog/public-boards&quot;&gt;separate blog post&lt;/a&gt; so there&amp;#39;s no point in me repeating everything here.&lt;/p&gt;

&lt;p&gt;In a nutshell, public boards allow you to share your cards and your project plan with the public, while keeping your discussions and uploaded documents private.&lt;/p&gt;

&lt;h2&gt;Coloured stickers and CSV export&lt;/h2&gt;

&lt;p&gt;Last iteration saw the arrival of four &lt;a href=&quot;https://www.agileplannerapp.com/help/colored-stickers&quot;&gt;coloured stickers&lt;/a&gt; (red, green, blue and black) that you can add to your cards to highlight things of interest. You had to remember what each of the colours meant, but we&amp;#39;ve now added support for labelling each sticker (e.g. &amp;quot;red is for bugs&amp;quot;).&lt;/p&gt;

&lt;p&gt;The stickers that are attached to each card have also been added to the CSV export. We&amp;#39;re also ordering the cards in the CSV by iteration, and then (within each iteration) by their priority.&lt;/p&gt;

&lt;h2&gt;Simplifying discussions&lt;/h2&gt;

&lt;p&gt;It&amp;#39;s now easier for you to start a new discussion with your team mates. You no longer need to tick a checkbox for each person you&amp;#39;d like to send your message to, but can select them from a pull down menu instead.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/iteration-44/new-discussion-recipients.png&quot; alt=&quot;Choosing who to message&quot;&gt;&lt;/p&gt;

&lt;h2&gt;More Markdown support&lt;/h2&gt;

&lt;p&gt;Markdown is a great way to format plain text for the web, but it often surprises people that it doesn&amp;#39;t observe a carriage return part way through a paragraph.&lt;/p&gt;

&lt;p&gt;This behaviour was causing a few problems for people, so we&amp;#39;ve modified the Planner&amp;#39;s Markdown parser so that line breaks will be observed.&lt;/p&gt;

&lt;p&gt;We&amp;#39;ve also added support for GitHub-style fenced code blocks. See the &lt;a href=&quot;https://www.agileplannerapp.com/help/markdown&quot;&gt;Markdown help&lt;/a&gt; for details.&lt;/p&gt;

&lt;p&gt;If there are any other Markdown extensions that you&amp;#39;d like to see, let us know and we&amp;#39;ll see what we can do.&lt;/p&gt;

&lt;h2&gt;How did the iteration go?&lt;/h2&gt;

&lt;p&gt;More new features than usual were rolled out this fortnight.&lt;/p&gt;

&lt;p&gt;I was recently chatting with a friend (another founder) about how productive I feel when working for myself on Planner, by comparison to how much I&amp;#39;ve got done in the past, working as a freelancer. I said it was normal for me to deliver 3.5 units of estimated work in a fortnight (don&amp;#39;t worry about how small that number is – for historical reasons I tend to use some fairly small numbers), but only 2.5 on Planner.&lt;/p&gt;

&lt;p&gt;Let&amp;#39;s have a look at my typical velocity from Planner&amp;#39;s recent iterations. The last time I shared this graph was back in iteration 38, when my velocity looked like this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/iteration-38/velocity-graph.png&quot; alt=&quot;Velocity graph (iteration 38)&quot;&gt;&lt;/p&gt;

&lt;p&gt;We can see that I can reliably expect to deliver cards whose estimates add up to around 2.5 (the dip between iterations 33 and 35 was the effect of Christmas and the New Year). That&amp;#39;s &lt;em&gt;only 70% of what I can produce&lt;/em&gt; when I&amp;#39;m freelancing .&lt;/p&gt;

&lt;p&gt;Where does that other 30% go? I&amp;#39;m using the same approach to estimating, and we can see from the trend that my estimates are consistent enough to be quite reliable.&lt;/p&gt;

&lt;p&gt;I think 30% of my time on Planner is spent thinking. Or rather, 25% of it is spent thinking, and 5% on writing blog posts like this one.&lt;/p&gt;

&lt;p&gt;My recent velocity is interesting.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://agileplannerapp.s3.amazonaws.com/screenshots/iteration-44/velocity-graph.png&quot; alt=&quot;Velocity graph&quot;&gt;&lt;/p&gt;

&lt;p&gt;That big dip in the middle was down to a couple of week&amp;#39;s holiday, and some time spent working on open source projects. What&amp;#39;s interesting is that iteration 44 was 30% more productive than normal.&lt;/p&gt;

&lt;p&gt;Why? I think the opening paragraph of this blog post explains it; rather than spending a lot of time working out what the right thing to do was and then doing it, the feedback I&amp;#39;d had from customers made it clear what I should do next.&lt;/p&gt;

&lt;p&gt;I didn&amp;#39;t question it, I just got on with it. :-)&lt;/p&gt;
</content>
<published>2014-06-25T11:00:00+00:00</published>
<updated>2014-06-25T11:00:00+00:00</updated>
<category term='retrospectives'></category>
</entry>
</feed>
