Check out my new company

MeetSpace Logo MeetSpace: Video conferencing for distributed teams

My Workflow

by on

Stemming from a workflow discussion on twitter featuring @bryanl, @eee_c, @pjb3, @stevenhaddox, and @webandy, I decided to share my workflow. Originally, we were talking about Mac Apps (specifically the paid ones), but that turned into "how do you work". Here are my goals for a good workflow:

Goals

  1. Easily navigate applications and contexts
  2. Minimize distraction
  3. Maximize focus
  4. Get work done

Easily navigate applications and contexts

I need to be able to quickly get to certain applications in order to maximize productivity. I want to be able to swap to a browser, terminal, editor, or other application in under a second. The mouse won't cut it, I need keyboard shortcuts.

My solution here is Alt-Tab. One of the oldest and most basic ways of switching apps. Alt-Tab is very fast for me because 95% of the time I have 3 windows open on any given workspace (OS X read: spaces). This means that Alt-Tab goes back to the previous window, and Alt-Tab-Tab goes to the alternative window.

Minimize distraction

I layout my workspaces in a 2x2 layout. Here is what I put on each window:

  • [1,1] Chrome holding "distracting" sites like gmail, twitter, campfire, pivotal, etc
  • [1,2] one Vim, one Terminal, one Chrome with only development related websites open
  • [2,1] passive applications. Usually Xvfb and Rhythmbox. I don't go here often
  • [2,2] alternative dev context. Same as [1,2] but for a different project. This is only up occasionally. Sometimes I use it for transferring files to remote servers.

I spend 99% of my work day in [1,1] and [1,2].

I disable all notifications. Nothing pops up. Nothing makes noise. Nothing "pulses" in the taskbar. Nothing. My phone is on vibrate and no apps on it make notifications except calls and texts. No one ever needs your attention immediately in gmail or campfire or twitter or pivotal or basecamp. When I am at a solid stopping point in my real work (30m to 2h in between) I go check all my distraction tabs. If the server is really on fire, someone will call my phone.

Maximize focus

This is a combination of the previous two, plus I always maximize my windows so I'm only looking at one thing at a time. No distractions so nothing gets in my face while I'm working. Many people like putting up a terminal next to their editor, but they usually end up alt-tabbing anyways. I prefer larger windows so I can have more vim splits (usually 3x3 on each tab) and more terminal output.

Applications

This last section is in response to our twitter debate about paid mac apps. I'm on linux, so I have no access to any of those apps. Let's start with the apps I spend the most time in:

  • Edit code: Vim
  • Run tests, servers, and other commands: gnome-terminal
  • Web browser: Google Chrome
  • File browsing and remote FS management: nautilus w/ gvfs
  • Administer databases: mysql or psql console

That is where I spend the majority of my day. There are very few alternatives to the above applications that aren't very similar. Everyone has a browser and a terminal. Editors is an entirely different can of worms, so I won't get into that here. Some people use GUIs for DBs, but I prefer the console. I learned SQL before I did web development, so it's more natural for me. And if it's too hard, I write a test :-).

There are many excellent command line applications at your fingertips that I use through my terminal. Apps like git, grep, find, screen, top, ps, kill, and thousands of others. Learning the command line root of the application is usually more productive than a gui that was built on top of the command line application. The only exception I've found is when I need something shown to me graphically, like a pdf. I like to avoid the mouse, so the terminal is my friend.

Here are a bunch of Mac Apps that a couple of people brought up during our twitter discussion:

  • mailplane
  • echofon
  • divvy
  • propane
  • alfredapp

I think it's a nice small selection of apps that illustrate the differences in my workflow from many other developers. Mailplane, echofon, and propane are for Gmail, Twitter, and Campfire. I try to ignore those applications as much as possible. Ideally, I want to spend less time in those apps in order to get more done.

Divvy and Alfredapp are all about launching and organizing applications. I have three applications in three windows. Vim manages its own splits and tabs. In my terminal, screen or tabs works. In the browser, I use tabs. Everything is maximized to improve focus.

What it really boils down to, though, is that I don't do a lot of stuff during the work day. I write code. I avoid anything that is not essential to writing code. I want less applications and I like having my life "in the cloud" so I don't have to install a lot of stuff on a new computer. My knee jerk reaction to new applications is not "oooh shiny", it's "I don't need that". Another really nice thing about this workflow is that it's scalable. I've worked from 1024x768 to 2560x1600, and it always makes optimal use of screen real estate. When I swap to my netbook, I don't feel cramped, I just open more tabs.

Join the discussion

Please post comments about the applications you use that I haven't addressed. I'll try to reply to everyone about how I handle different scenarios. Most of the time, my response will be "I try to avoid that because I'm trying to write code here!"

Comments

pjb3
A couple of GUI tools I prefer over command line:

* GitX

I find it easier to review diffs in GitX than diff at the command line. Also easy to unstage unwanted changes before commiting

* Rubymine

Hard to explain this. I'm planning on doing a screencast soon to show how I work in Rubymine. I find it more efficient than vim + command line or emacs.

* Querious

I'm fine with writing SQL on the command line, but viewing the results, esp. when you have large columns and/or large tables, sucks. A GUI fits things in tabs, windows and grids nicely.

I agree with you about the mouse. As much as possible, I'm trying to have keyboard shortcuts for all common operations.

As for distractions, depends on the project you are working on. If you are working on a project by yourself, "leave me alone I'm coding" works really well. If you have many devs working on the same code base, near real-time communication is important. It's a balance though.
Bill Mill
pjb, check out dbext for viewing the results of queries in Vim. If you're a vimmer, it's a godsend.

Also, my workflow is nearly exactly the same as yours, but on OS X. iTerm2 is as good as Linux terminals.
bryanl
Since it appears you are critiquing that apps that I posted earlier, I now feel the need to reply.

Having unique apps which do their jobs really well is the key to helping me focus. The web browser is a lot of things to many people, but it most definitely isn't the end-all-be-all. I actually prefer to have as few browser tabs open as possible. There is nothing more frustrating to me than seeing all the wasted screen space wasted by tabs.

Workflows don't have to be dead simple to be scalable. I work on a 11.6" macbook air, a 15" macbook pro and a 27" imac, and I pretty much have the same configurations on all three workstations. I don't believe in external monitors, and as you know, the keyboard is most definitely the place to be.

For instance: I use mailplane, so I can have easy access to multiple gmail accounts. Sure the web browser works fine, but it doesn't easily scale past one account if you would like to check multiple ones easily.

You hack code 100% of the time. What you describe is ample for a person in that situation. My day is filled with much than just hacking on code, so tool sets will differ. No problems with that. There isn't one true way. The only thing you really need to work on is constant refinement on your path to happiness.

My work here is done. I've inspired yet another blog post ;-) I'll wait for you to troll me again another day.
Nick Gauthier
@pjb3

I use git-gui from time to time to review a large commit.

I'd like to see a rubymine screencast. The few times I've seen it I didn't see any advanced features. The "mining" that I saw looked the same as ctags.

As for the sql gui, I tend to write a test when stuff gets pretty complex. psql's console automatically pipes output to "less" so it's pretty easy to read.

Some projects I pay more attention to campfire, but it's never in realtime. If we really need a real time discussion, it's time for a phone call or a face-to-face.

@bryanl

I didn't mean for it to come off as a critique. I was trying to explain why I don't buy those apps, not "these apps suck because you could just do it this way".

I am pretty OCD about keeping a tidy environment, and I close tabs a lot while I browse.

I like the "single monitor" approach too. I was on a 24" for a long time, then I added a 20" that, but recently ditched both for a 30"@2560x1600.

@mailplane I only have one account. I could see needing this if I had more than one.

It's definitely a 100% hacker setup. If I had to do any graphic design or PM, it would be very different. When I do have to do PM stuff, I use another workspace and a whole new set of applications.

I don't mean to troll you. I find it very interesting that you and I have very different perspectives and setups for doing very similar work. Also, I know you can take it :-)
Elise
I use gitg as well for organizing commits, it's nearly equivalent to gitx and beats the hell out of git log :)

I also use Linux, and I found that for me tiled window managers do wonders for focus - though I understand that Compiz has that possibility now.
I use the Awesome window manager (http://awesome.naquadah.org/), which has all manner of keyboard shortcuts and can be customized using Lua. It's also ideally suited to the kind of organization you're talking about, naming tabs and allocating applications to it.
straydogsw
Nice post Nick, I've been wanting to learn some more keyboard shortcuts for moving around the linux desktop and this has been very useful.

Those windows look tight in your [1,2] screenshot. Do you have a window-placer util or something to get them so nice and even?
straydogsw
oops, nevermind. I see that they are vim-splits in a full size terminal.
Nick Gauthier
yup :-)

There are a bunch of window managers and things for placing windows in linux, but I don't know them.

If you install the ubuntu package compizconfig-settings-manager and run it you'll get the desktop effects settings, which have a keyboard shortcut for tons of stuff.
blog comments powered by Disqus