Archive for the 'Software' Category

A brief history of time (management)

Saturday, July 19th, 2008

This started out as a review of the new OmniFocus app for the iPhone. I was going to talk about it being the first time I can have powerful task management on my main computer and not abandon it at my desk. I was going to explain that I have always either tied myself to a solution that was too simple, but portable, or an awesome desktop app that was only truly helpful when sitting at my desk. Being too analytical, I started out by thinking out the history of my to-do list, and I realized that explained why I like OmniFocus better than my actual article. So, I present to you my (mostly) chronological evolution of to-do lists.

Day Runner

My first love…

My mom got me my first Day Runner when I was 13 (possibly younger). Really. I begged for it in the office supply store as only a future nerd could. She eventually gave in to my geekiness, and I got my first taste of organization. It seemed infinitely extensible, yet structured in a powerful “business professional” way. You’re thinking there was no way I thought about that when I was 13, but you could not be more wrong. I loved a fully-stocked planner, and I still kind of do. My wife replaced her Palm Pilot with a big planner last year, and she couldn’t be happier (although her iMac is replacing it). My problem? I write down way too much with my whole “ubiquitous capture” obsession, and I can kill many a planner.

Paper

…and then I couldn’t afford the refills.

Inevitably, at some point I wore out multiple planners and went through way too many refills. I realized that I could manage just as well with a good spiral notebook, and then I could stop crying quietly at night thinking about how much I was spending on that specially-formatted-just-because-we-can paper known as “refills”. Yes, I could have just printed my own refills, but that wasn’t nearly as easy/popular/economical in the olden days. I normally just ran out of the to-do list refills and ended up shoving a napkin with a project plan into the pocket.

Palm Pilot

Project management in my pocket.

I have had six different PDAs. I even had a Sharp Zaurus SL-5500, which gives me way too much geek cred. I used little project management apps like “progect” to organize my tasks. The thing I loved was that it was in my pocket all the time (seriously, all the time). I just ran my task list from my pocket, and never cared about syncing issues. This was good because I had Linux in the bad old “can’t-really-support-usb” days that involved modifying and compiling your own drivers (I did), and I tended to like Palm apps that could only talk to the ugliest desktop apps on the planet.

Paper 2.0

I guess I just need paper again.

At some point I realized that the un-sync-ability of my task apps made them about as “powerful” as pen and paper and less extensible. Obviously, my next step was to go back to paper with a vengeance. I mean, at least on paper I could organize things the way I wanted them, and I had started to work out my own GTD-like system with projects on one page, and today’s task list on another. I just had a great big list of tasks, and I narrowed that down to a smaller chunk every morning on a separate piece of paper. It was simple, but it didn’t always scale. Once my “big list” reached two pages, a lot of important projects got lost in the shuffle.

Palm Pilot w/iCal

Okay, I can kind of sync.

I had a brand new Powerbook, and it could sync! This didn’t really solve the scaling issue, but it was a start. I imported everything into iCal, and then I’d flag the top 5-10 tasks to work on each day. It was almost exactly like the paper system, but I could scan it faster and it could easily talk to my Palm Pilot. This worked great until my task list reached 265 (I’m now at 423). At that point, I lost perspective, got depressed, and started going on all-night organizational benders.

Kinkless GTD w/iCal

I can kind of sync, and I’m getting organized about it.

After taking a long weekend to “clear my mind” and “stop screaming at inanimate objects”, I found some great sites like 43folders.com that gave me enough tips to talk me off the ledge. I discovered Kinkless GTD, and then I read “Getting Things Done” by David Allen. I decided that GTD wasn’t “the way” or a cult, but it was a good place to start in actually, you know, getting things done. All of a sudden, life was a little bit easier. I had less stress. I could sync with— no, I could kind of sync with my Palm Pilot. I synced a couple times. One day, my iCal messed up it’s own records, synced with Kinkless, wiped out Kinkless, and then in “data seppuku” wiped itself out. I lost my 265 tasks into oblivion. This happened twice before I buckled down and bought Missing Sync.

iGTD w/iCal

I can kind of sync, and I have a GUI.

Unfortunately, I fiddled too much and got tired of pressing the sync button all the time. I completed something, so I pressed the sync button. I changed something, so I pressed the sync button. I forgot if I had forgotten to sync in a while, so I pressed the sync button. It was a natural result of Kinkless being a script, and you can’t blame Ethan for that. I wanted GUI goodness, though, and I tried iGTD. I used iGTD for quite a while, but I just couldn’t commit to it. I wasn’t managing my projects with the same top-down view I had grown to love. It was just built for people who think differently than me. At least I could still sync, though.

OmniFocus

I love my app, but I’m not mobile.

I joined the alpha testing for OmniFocus, and I loved it. It had more of the “big picture” views that I needed, and it even had some basic iCal syncing to tide me over. It wasn’t perfect, but it worked. It worked, at least, until I got my iPhone. I loved my Palm TX, but I just couldn’t resist the charms of the iPhone. I needed my task list, though, because I still have a few moments every day (maybe not today) that I’m not staring at my computer screen. I like to run errands, fix things around the house, and, yes, even help my wife cleaning the house. My big solution? To print an errands and housework list from OmniFocus or write it down in my notebook. Then, I’d check things off and “sync” it later by checking things off in OmniFocus. I always needed to add to my things to my inbox, and I got really good at emailing myself tasks. OmniFocus handled my emails with ease, but I still couldn’t actually edit tasks or plug my new tasks into just the right spot in the middle of a project. I was just sending myself reminders, basically, of things to organize later.

OmniFocus w/iPhone App

Bliss!

Here I am today, and I’m the happiest I’ve ever been with a total solution. This is sweet, sweet, synced bliss. I do my main organization, weekly reviews, new projects, etc. on my laptop in OmniFocus, and then it’s automatically in my pocket. I can even tweak, rearrange, defer, delegate, and create on my iPhone, and I’ll see it later on my laptop when I get back to work. I basically have a license to fidget with my system all the time, for better or worse. Okay, it’s not technically perfect. Sometimes the syncing is slow (like three-minutes-to-update-my-tasks slow) or I can’t sync at all, but that’s pretty much because of MobileMe’s widely-publicized growing pains. Even then, it’s still the best system I’ve had.

Addendum

Moleskine, you complete me.

Lest my pocket Moleskine and Pilot G-2 be offended, let me assure you that I’ve only abandoned paper for my to-do’s. My wife knows exactly how obsessive I am about my notebooks and pens. As an aside, if you haven’t read The Gel Dilemma on RandsInRepose.com, I highly recommend it. The only part where I differ with him is that he sees the retractable operation as a bad thing (which I know I used to), but I actually think it’s more convenient to getting my pen “ready to write” and never losing another cap.

Isolate your apps for fun and profit

Tuesday, May 20th, 2008

isolator.jpgI am not a multi-tasker by nature. I like to concentrate. If you show me a whole bunch of windows on my desktop, I’m not focusing. The irony, of course, is that I willingly run a lot of apps at once all day long. I’m normally using at least 3-4 programs at a bare minimum with another half-dozen in the background, but I need to switch my focus between them quickly. And that, my friends, is why Isolator is my new best friend. It’s not just a little app that I kind of like; no, I turned this on two days ago and have not turned it off yet. It is one of the sacred few programs that I actually want to “start at login.” Seriously, that’s not an honor I give out lightly. What does Isolator do? It simply blocks out all the apps except the one I’m focused on. This one has some new features that I’ve never gotten to have, though, in other apps. I just want to list some of my favorites off for you, please:

  1. It focuses on what I click on. I’m lazy, and I type fast. If I need to do anything to focus on an application that involves fancy “right-clicking” or “drop-down menus,” I won’t do it. Isolator knows what I want to focus on because it’s application I’m typing in right now. That’s it.
  2. It can be transparent. I can even adjust the transparency. This is great, because I can still see the other windows if I want to, but they don’t grab my attention.
  3. I can blur the background. This kind of ties into transparency, but it’s new to the 3.1 beta they just released. Now, I’ve set everything that’s inactive to be blurred about 75% (you can adjust that, too). I can see the shape of the window, I can identify other windows as TextMate or Safari, but I’m not reading them subconsciously. I love this.
  4. I can click on inactive windows and they become active and focused. This is mind-blowing. I don’t want to be distracted by a lot of apps, but I am, as I already stated, running a lot of apps that I’m constantly switching between. I need to concentrate on TextMate, then Safari, then Navicat, then TextMate, then the terminal. I don’t want anything to slow that down, and that’s probably why I can’t use anything that either hides my other windows completely or requires to focus and un-focus apps manually. I want to click on a window and watch TextMate fade to the background as Safari comes up. It’s that simple. I really, really need it to be that simple.
  5. Finally, I can toggle it from the menu bar. I’m trying not to fill up my menu bar, but it’s becoming inevitable. I can click on the menu bar icon for Isolator, though, and it just toggles. I don’t have to go through the drop-down menu or anything. It’s on, and then it’s off. This is especially helpful for the times that I’m either watching something on my second screen or trying not to annoy my coworkers who don’t use Isolator when I need to show them something.
  6. It’s free. Although free is always nice, it’s not a necessity because this app is good enough to pay for. All this means is there’s no reason to even think about it twice before downloading and installing it. It really is awesome, though, so I’ll have to give ‘em a donation as soon as I can.

How to manage 100+ feeds without crying

Monday, May 19th, 2008

feed-menu.jpgJust a quick post to tell anyone who cares that I’ve finally picked a real method for managing my growing RSS feeds in NetNewsWire. My first advice is to get a real RSS reader, of course. Something that lets you categorize your feeds, either NetNewsWire (I paid for it, but now it’s free), NewsFire, Google Reader, etc. You have to break up your feeds at least a little bit.

Special Folders

First, I threw online comics and my daily deals like woot! into their own folders. When I want to read today’s Dilbert, I’m not in the mood to look through a lot of news feeds, and the same goes for my daily MacUpdate promos. I look at those early in the morning on my iPhone, normally. I need to be able to jump on those woot! deals first thing, you know?

The River

Next, I created a folder I just call “The River”. This has almost all of my feeds in it, and I look through it once or twice a day as a quick glance through everything going on in the world that I might care about. It’s basically a fire hose of information, and undoubtedly, I might miss something, but I’m okay with that. I scan through all the headlines spending about a second on each one. If something is remotely interesting, I’ll open it. If I accidentally miss something and it disappears, it will probably be duplicated on one of the other blogs in the river. This actually gives me the freedom to throw even more feeds into the river. Since I’m scanning everything, throwing more feeds in just allows me to have a bigger view of the world and spot more trends as they are repeated. I can easily have two or three-hundred items in this feed to glance through without feeling any stress at all.

Heavy Hitters

Finally, I’ve pulled a small handful of feeds into a special folder I call the “Heavy Hitters”. The heavy hitters are bloggers whose articles I will always read. I don’t want them lost in the river, because I know that I’ll read every word they write. This is only a half-dozen writers for me. I probably know them personally, and they aren’t just “aggregators” of other blogs. Because of this, I will probably only have five or six posts show up in this folder on most days.

My Secret Weapon

Of course, my not-so-secret weapon is the NewsGator service. Because I use NetNewsWire on my laptop, it syncs up automatically with NewsGator online. It just happens that NewsGator has my favorite iPhone interface for reading RSS feeds. So, I end up reading everything on my iPhone about 80% of the time and just “clipping” the few articles that are too long or use Flash video that I can’t watch on my iPhone.

WordPress 2.5

Sunday, March 30th, 2008

It looks like the folks at Happy Cog really did a great job with the new WordPress 2.5 design. I’ve just started to play with it, but so far I’m just happy that the templates are in the “design” area where I expect them to be. In my ever-so-humble opinion, I think great design is just putting everything where people expect them to be. I mean, I could probably go into a Windows vs. Apple rant on that, but I won’t (though, seriously, that’s part of what makes Apple awesome). I’m not trying to say it’s that easy to make things intuitive, either. I am just happy that Jeffery Zeldman and Happy Cog manage to make it look that easy, and I can’t wait to dive into this some more.

How Not to Design Software

Sunday, March 23rd, 2008

For those who care to listen, I try to give advice from things I’ve seen done right. Occasionally, I’ve done something right, but normally I like to look at other people doing things I should do better. This is not about doing things right, though. This is my story of what I did completely backwards and wrong in about a week, and how I had to fix it in one day. Maybe you can learn from my mistakes. Or you can laugh at me. Either way, I hope you can get some amusement or education from my five not-so-easy steps to really screwing up software design:

  1. Design a Perfect Solution. We had a simple problem. We were going to have our first “virtual conference” where real registrations would be paid for by real credit card transactions for access to a “virtual” online conference with streaming video, forums, and chat. Our problem was that our current online registration system was designed for “real world” conferences. I had hacked it into our shopping cart a long time ago, and it worked great. It could provide us a list of attendees before the conference, and emailed them their conference information. It didn’t however, talk to our website’s backend. Our TYPO3 website already has all of the user management tools, and would take care of granting “attendees” access to the forums, chats, and video features based on group permissions. Our shopping cart just didn’t know how to add or edit users in the database. Now, some of you are already shaking your heads. What was I doing running a website where the content management system was not talking to the shopping cart? Have I not learned anything about “seamless integration” and “smooth user experience”? Well, now I need you to get off your soap box and shut up. I would have loved to integrate these two complex, perfectly independent, working systems before. It wasn’t a priority because no front-end users could tell the databases weren’t talking. It was a larger-than-life project. Seriously, you just need to drop it. Anyway, I immediately set forth working on the perfect solution. I designed the entire thing on a whiteboard. I mapped it’s user interface, functionality, and even the variables I would use. It was perfect. Using only 80% of my development time, I had designed the monster. This left me with –crap– a couple of days to actually build the whole thing. I mean, design is so important, but maybe that’s just too much time out of the total timeline. That’s what I should have thought. I didn’t think that. I thought the design was too important to reduce it down to just a day, and so I had over-designed like there was no tomorrow. Literally.
  2. Build for Scalability. What did I design this little bridge for? For the 500 estimated registrants? For this one conference, and maybe the one after? No way. I decided to design a system that would work for the most amount of people and would never have to be changed. I could’ve realistically handled 10,000 registrations, and all we would have had to do for any future conference is create a new instance with a click of the mouse. Obviously, this kind of scale limited my options a little bit. I couldn’t simply modify our current registration system. If I did (and I worked this out), there was no way for the users to be automatically added to the correct group in TYPO3. The problem with designing for 10,000 people was that it all had to be automatic. We couldn’t keep up with manually approving anything, even if it only took one second per user. I also couldn’t make a system that worked just for this conference as a test. No, the entire thing had to customizable to the nth degree considering every conference we host has different demands, and it had to handle all of them (even the ones I can’t think of). The problem with this? There are probably only going to be 500 users at most this time around. If I have to manually touch each of their records for just one second, that’s only 500 seconds in the next month. That’s right, I spent days designing a system that would save me eight minutes and twenty seconds. And future conferences? Yeah, I’ll probably have to tweak the code a little bit no matter what I plan now. In my “perfect solution”, though, that code was an 800 pound gorilla of an extension instead of the 2-3 PHP files that can be edited without worry.
  3. Use the Best Tool for the Job. That’s actually a bit dishonest. I didn’t, technically, try to use the best tool for the job. I tried to use the absolute perfect tool for the insane job I had over-designed. What was my tool? To do basic PHP editing on the shopping cart registration forms? No, that’s not scalable. That’s not elegant. No, my tool was going to be a fantastic TYPO3 extension that would bring the whole world together. Now, I ignored some basic facts like (1) I had never written a simple TYPO3 extension and (2) I had successfully written a hundred modifications to the shopping cart. I would not be deterred, though. Like the thousands of PHP developers who dive into a new learning curve because they know that Ruby on Rails is the best way to build a one-off blog in the afternoon, I cracked open the books. I didn’t ask myself if I was going to need this education again in the near future (probably not) or if I truly had the time to add training to the timeline (definitely not). I just started working on the perfect solution that would take me about two days just to train myself on. Don’t get me wrong, though, because I love learning new solutions. I love learning new languages, frameworks, and techniques. Maybe, though, this was a bit too much training for what could have been a half-day project. Once again, that would have been the perfect thought to have a week ago.
  4. Commit to Your Decisions. Now that I had only done one complex design and started training on a solution I had never used before, I had to commit. Even when I started to fall behind, I reminded myself (and my boss) that I had to launch all or nothing. Why? Because I had conveniently left myself with no other options. I had nothing right now, and the only way to fix that was with this too-big solution. I couldn’t launch just part of it, because it was a monolith. I couldn’t go back to the easier solution because, well, it wouldn’t have all the same features and it wouldn’t be infinitely scalable and I had already read all the books and… and… I was committed.
  5. Fight Through the Pain. Now that I had committed to an over-designed behemoth solution that could scale to twenty times more users than necessary using a system I didn’t know, I had to buckle down. I couldn’t stop for food or sleep. Even when I came back from SXSW exhausted, I started pulling all-nighters. Then, I got sick. So, I muscled through that. Until I got sicker. I muscled through some more. Until my boss made me rest for one day. One whole day. He made me come to our weekly prayer meeting, admonished me for making myself sick instead of asking for a few more days, had everyone pray for me, and then dismissed me to my house to rest. I was not allowed to work on registration. It was horrible. It was the worst thing that he could do. That is, until I rested for a while. I realized that I had designed the wrong solution. What was too hard to realize earlier in the week when I was hungry and sleep-deprived became self-evident. I was being a newbie project manager all over again. So I rested and sub-consciously thought of a whole new solution. I didn’t work on it that day, though. I just napped, watched movies and let it stay in the back of my head for an entire afternoon and evening.

Okay, so that’s everything I did spectacularly wrong. How did I manage to fix it? I gave up on everything I had done. I copied our registration form and modified it slightly for this event. I added in a few quick hooks that added new users to the TYPO3 database by good ol’ MySQL insert. It took me about three hours. What doesn’t it do? Well, it still doesn’t automatically add them to the correct group for approval. But, it marks them using a magical, proprietary system in the user list to show that we need to approve them. Okay, it prepends “1_” to the username. Shut up. It’s great. Once every few hours, we look at the user list in the TYPO3 backend and add everybody with a “1_” to the event group, then delete the “1_”. It takes a little less than a second per person. And now I sleep properly. The wrong design took me about a week of hard work. My next-best design took me a morning. Hopefully I learned my lesson. Maybe I can tattoo my easy steps for designing bad software on my arm for me too look at every day. If you have any more tips that nobody should be taking, you can put them in the comments or email me. Maybe I can tattoo those on my other arm…