Productivity

Jun 27, 2008

OmniFocus as a Development Management System

I'm developing software and most of the time I'm working by myself. This does not mean that I don't need to organize my work. As we all know, setting goals and staying focused is crucial. That is a challenge for me - I'm usually bursting with ideas for features and enhancements. I need to prioritize and keep tabs on what I'm doing. Still, I don't want to lose any good ideas for the future.

This is where OmniFocus comes to the rescue. OmniFocus, is, IMHO, the best task management software I've used. It is Mac only and it is based on the well known Getting Things Done method, aka GTD. I'm not a strict GTD follower, yet, I still get everything I need from OmniFocus. In this post, I'll show you how to turn OmniFocus into a development management system for tracking development tasks and bugs. For teams of developers, it cannot replace a full blown system like Bugzilla. However, if you're like me, working in a one man team (no sharing option in OmniFocus) this could be a great solution. Before we start, I recommend reading a bit about GTD if you're not familiar with its' basic concepts.

Overview
Here's an example of my "Planning View"
Planning View
My system is based on the following:

  • Product versions are shown as Folders (for grouping projects)
  • Each version will have the following projects:
    • Active Projects - Bugs and Enhancements
    • On Hold Projects - Waiting tasks - organized into 3 projects according to priority
    • On Hold Task List - Ideas for the future
    • Complete Task List - I drop finished tasks here to clear the clutter
  • I have contexts according to the product modules:
    • Main Context is called 'Dev' - to distinguish from my personal tasks
    • Under 'Dev' I have a hierarchy of modules like Front End and Back End, under Front End I'll have all the flows, etc.
  • Tasks usually have tags: when entering a task, I'll usually start with a tag, like [bug], [check], [idea], etc. This helps categorizing tasks later, but not a necessity.

Entering Tasks
I usually use the Quick Entry window to enter new tasks. The great thing about it is that I can invoke at any given time, jot down an idea, bug or just something that I need to check later, and immediately get it out of my head. I usually add a task note which contains as many details as I think I'll need to understand my original idea. I also enter a context (see hereunder), but not a project - so it will remain in my inbox for review.

Entry Window

If you want to include screen shots, you can just add it as a note to the task. I find that Skitch is the perfect companion for that, since it provides simple tools for easy annotations. You don't need to save the file, either, you can just drag it from Skitch to your OmniFocus item.

Working
I use either the Planning view or the Context View for that. I find the Planning View more natural for that. At the early days of the version you can decide to focus on Enhancements and proceed to bug fixes. That's why I find the separation to projects helpful. If I have a of lower priority, which I'm not interested in working on, I just push it to one of the Waiting projects according to its' priority.

When fixing bugs, the separation to Enhancements and Bugs becomes even more helpful as I usually have the tendency to get carried away and work on enhancements instead of fixing bugs. I have one super-task inside the Bugs project which I call "Can't Reproduce". Here I drop bug that I can't reproduce for some reason. You can also have a separate task list for that.

Contexts
The organization for contexts is critical here. When entering the context for a task I try to find the one that best fits. However, if I have a task for fixing something across the system, it will have a more general context, maybe even the top 'Dev' context.

One of the major benefits of this system is the ability to work by context. Clearly, if you have a large system, you cannot keep it all "in your head". This means that, when you're starting to work on some module, weather it is on an enhancement or a bug fix, you're going to spend some time to reacquaint yourself with the code.

When working by context, you can group tasks dealing with the same module and perform them together. Conceptually, it's the basic reason for having contexts like "@home" or "@supermarket" in GTD. You want to gather all the tasks which are relevant to your current context. That's exactly why module is the same: since I'm here, let's be productive and do everything which is in the vicinity, which is in the same context.

Context View

Review
From this point forward, it's basic GTD stuff. I have a daily review of my current tasks and I set up goals in terms of due dates. I have weekly reviews for reviewing all (hopefully) my tasks, promoting, demoting and eliminating the tasks no longer relevant.

Conclusion
I presented a way for turning OmniFocus into an effective development management system. What I like the most about this system:

  • The ability to quickly get things off my mind, knowing they won't be lost.
  • Gathering work by modules, i.e. contexts.
  • The outlining ability - breaking tasks into smaller and smaller sub-tasks. I think this is the main selling point of OmniFocus specially.

Hope this works for you, too. Good luck.

Apr 02, 2008

No, I haven't switched back...

Yesterday's post, obviously, was an April fools' joke. I'm not switching back to Windows and there is no software which sends you electrical shocks through the keyboard.

Some after thoughts:

  • It's an interesting marketing technique: it may be easier to get bloggers to mention your site free as part of a joke. If you're smart enough (and have a good sense of humor), you can even generate some hype out of it.
  • There is a connection between managing my tasks and managing my machine time. So, why am I using two separate tools for that, that has no integration between them?  There's a correlation between the RescueTime Tags and the GTD contexts. Just a thought.

Apr 01, 2008

The software that made me switch back to windows

[This was an April Fool's joke. See the next post.]

I didn't think that this day will come. Well, I was wrong. I came across this amazingly innovative piece of software which completely changed the way I use my machine. It's called FruitfulTime TaskManager Electro. Essentially, it's a task management software which also keeps track of what you do on your machine accordingly. I had two separate systems for that on my Mac: OmniFocus for task management and RescueTime for logging my machine usage.

Taskmanager_electro_box However, there's a big difference. FTE can help you prevent procrastination by giving you a small "reminder" whenever you start doing unrelated stuff on your machine. Now, you're probably thinking: "I can ignore those remainders, there's nothing new here". Trust me, you won't ignore this one, since it comes in the form of an electric shock.

I took part in a private beta over the past 3 weeks and I can just tell you this: amazing. My productivity went up by roughly 70%. As I said, it only works on Windows. A Mac OS X version is not planned at the moment, so I had to switch to Vista on my Mac. Well, my MacBook Pro was declared in 2007 as the fastest laptop for running Vista by PC World, so no worries there. My only concern was that it drained the batteries of my Wireless Mighty Mouse. Nevertheless, the FruitfulTime team assured me this will be solved until the beta is complete.

Mar 31, 2008

Too many tabs? Go vertical!

If you're a bit like me, you now have about 20 tabs open in your browser. Let's not go into the psychological reasons for that, but it probably have something to do with a very short attention span.

FirefoxwithtreestyletabI found this cool Firefox extension which changed my browsing experience. It's called "Tab Tree Style" and it shows the tab headers on the left side rather than on top. The result: I can have more tabs and easily see all of them at a glance. Navigating between the tabs is easier than ever and I get full size tab headers, so if a site shows information in the header I can see it. For example, GMail shows the name of the current folder. No more cramped headers on the top of the page. The cost is screen real-estate on the left. This is not a problem for me since I use a wide screen and more web sites are designed for regular resolutions. Highly recommended.

I was so pleased with this transition, that I immediately thought about my IDE. I usually have at least 20 files open. Even on my wide 20" monitor, I see about 7 headers. In most cases, I work with two files, side by side, which means I see even less headers. Navigating the rest of the files is a pain. So, I looked for a solution.

EclipsewitheditorsviewI found an interesting plug-in called "EditorViewer". This plug-in provides a list of open editors. Since this is a separate view you can place it where you please. I placed it to the left of my editor.

It's close to what I was looking for, but not exactly. The plug-in seems to be deserted. Nobody touched it since it 2005. You can download it here (download link is missing from the site). There's no "Eclipse update site", but it does work on Eclipse 3.3.1 (and on a Mac). I think it should take less than a day to write something which fits my needs, so maybe I'll write myself, if I can find some spare time :-)

Jan 01, 2008

Self discipline...

I came across this great post, which concluded with a paragraph I must quote:

The world is an interesting place, and we live in a time that is very exciting for entrepreneurs. There are lots of cool problems to solve. Don't let a lack of self-discipline interfere with your capacity to do great things.

Whenever, I talk to people about my startup, the most common reaction is "oh, I don't think I could discipline myself to work alone at home". It's tough. Sentences like the one above can help. Hang it over your head if you have to.

Have a creative & productive year.

Zviki

Nov 19, 2007

OmniFocus: the next best thing for task management

I admit, I have a tendency to forget stuff. My attention can easily jump from one task to another and there may be casualties in the process. That's why I like to organize my tasks in lists. However, I have yet to find a task manager which fits the way I think. Until now.

My main problem with existing task managers is their inability to create outlines, a multi-leveled structure. I was trained to think in outlines. I write in bullets which have sub-bullets. Making me think of tasks as a flat list, all at the same level, confuses me. The span of items I can see and contain is limited. Thus, if the list is too long I just get stuck. I must break it into a hierarchy which I can visualize and comprehend. It works the same way with code, by the way.

That's exactly what makes OmniFocus different and a clear winner, from my point of view. It has an incredible flexibility when jotting down the tasks outline. Creating tasks is as easy as writing in bullets with a word processor. On top of that, OmniFocus adds very useful views for planning and execution. You can focus on a project or a subtask, or focus on your next actions. It also complies to the GTD method (Getting Things Done), which seems to be very trendy nowadays.

OmniFocus is the latest application from The Omni Group. It's a small software company which makes software solely for the Mac platform. I got OmniOutliner bundled with my Mac and it quickly became one of my essential tools. It is just plain useful. I can baldly say that the Omni products are a strong reason to switch over to the Mac. Surprisingly, you will not find parallel tools in Windows.

OmniFocus is currently in private alpha and can be pre-ordered for 50% discount. If you use a Mac and you're swamped with tasks, this is something you need to check out.

Nov 09, 2007

This is guaranteed to make a developer laugh

I have neglected my blog in the passing two weeks or so. I have some ideas for posts, but I'm still working on it (this was an explanation ;-).

In the mean while, something different. One of the most effective stress relieving techniques is just a good laugh.  As a software developer, there's this one site which is guaranteed to make me laugh. Better than reruns of Seinfeld. It's called Worse Than Failure (or WTF, yeah).

They have all kind of computer programs mishaps. It mainly falls into these categories (although there are some others as well):

  • CodeSOD - interesting and usually incorrect code snippets taken from actual production code in a commercial and/or open source software projects.
  • Tales from the Interview - Job interview stories.
  • Error'd - fun error messages and other visual oddities from the world of IT.

The last one is a true jewel. It features UI bloopers that never cease to amaze me. Goofy dialog boxes with cryptic error messages, web sites with overflown numbers and what not. I highly recommend adding it to your RSS reading list for those moments you just need a break.

Oct 29, 2007

Productivity tip: discipline yourself with RescueTime

When I tell people that I'm now working for myself at home, the first reaction is usually "wow, that takes a lot of self discipline". True, it does. There's no replacement for healthy self discipline. However, as with most things in life, there are levels of gray here. I always seek ways to improve.

I found this great tool that helps me keep going. It's called RescueTime. It's a small little gizmo that sits on my machine and monitors what I'm doing. I can then log into the RescueTime web site, see a graph that shows how much I've worked and when. It logs tasks according to the process being executed or the web site being visited. Monitoring URLs is important since many applications are online today. I can then tag the activities with tags like "work", "fun", etc., and get a summary of my activities according to my tags.

Rescuetime___my_data_home_date_view

So, if you tend to lose track of time reading your RSS feeds or in IM chats, this will give you the required feedback to get back on track. It's like a mirror, providing silent, yet deadly honest, feedback.

RescueTime supports PC and Mac, and is currently in private beta.

Oct 14, 2007

Unstable State

Mejeep_3 I just got back from a long break of over a month. I spent two and a half weeks in Champaign, IL, giving a training for my former employer and two weeks doing Jeep Safari in Morocco.

Morocco was great. We had 6 days with the Jeeps, traveling through the Atlas Mountains and the Sahara Desert.  My pictures are still under development (the camera I'm holding is a film SLR), I'll post some more soon.

It's very hard for me to focus back on my software. I did a critical mistake and started changing the design just before I left. Before I took off, I got some new ideas and decided it was not too late to implement them. The thing is, I had about a day of work left. I knew it will not be enough for me to implement all the changes and I knew that leaving the system in an unstable state is going to hurt me. Yet, wasting a day of work was too much.

It's now really hard to get back on track. I'm seriously considering undoing what I did in the last day and starting over. Luckily, I took some time to document my ideas before I jumped into implementing them, so it shouldn't be too hard. My main lesson is: if you know you're going to leave your system for some time, document as much as you can.

It also reminds me of a blog post I read some time ago, which discussed techniques for working efficiently. One of the ideas was not to set up any appointments. For example, if I set up an appointment at 11:00, I will not start anything major in the morning, since I know it's going to be interrupted. When I return, half the day is gone and it will take me time to get back to focus.

The original post claims you should not keep any schedule and only meet people ad-hoc. If you can do that, great. If not, here are some other ideas for mitigation:

  • Set up the meetings in the early morning or late afternoon (or evening).
  • Work on small issues. I keep a list of smaller to do items that can be done in less than an hour. This is good for "filling the gaps".
  • Document before coding. Then start working on the major issue and it will be easier to get back to it later.

Jul 25, 2007

Coding on the Mac

I've been busy in the passing week, since I started coding a prototype for my product. I really had to start doing something that shows some immediate results, so I decided to go ahead and code.

My machine is working really well. I'm so glad I decided to switch over. Just to give you a sense of what's running on my machine right now:

  • I'm running with an external 20" monitor, at 1680X1050. I don't think you need a larger monitor for programming.
  • My network is wireless, my keyboard and mouse are wireless (Bluetooth) as well.
  • Currently running:
    • 2 Eclipse instances running, one 3.2 and one Europa
    • Firefox with about 20 tabs open - I use the tab counter plug-in, I can really lose track of things if I don't.
    • iTunes - playing a radio station from the Internet.
    • iCal & iGTD for tasks and calendar.
    • Freemind - a mind mapping software in Java, that's another JVM (about 1.5GB allocated).
    • NeoOffice - an Office application in Java, that's a 4th JVM (about 1.6GB allocated).
    • Adium & Skype - instant messaging applications.
    • Preview, showing me about 3 PDFs and an image file.
    • Dashboard, with about 9 widgets running.
    • More background apps - Quicksilver, Mozy (backup), SideNote, Google Notifier, ...
  • My machine works perfectly. That's insane. The most amazing thing about it is the memory management. Windows is always busy with swapping. Even if you have 2 gigabytes. Here, I can switch to an application which wasn't active for some time and it will respond, no waiting.
  • I'm starting to really appreciate the Apple JVM. The performance seems to be great and they're very stable.

I will try to do a head-to-head comparison between Eclipse instances running on Mac and Windows in the upcoming days.