When I switched this blog from WordPress to Jekyll I ended up writing a bunch of
Jekyll plugins to make the transition easier. I've updated the code section with
the first plugin - jekyll-archive-page.

One thing I missed from WordPress was a nice archive page, so I wrote a simple
plugin to build an archive page (the archive page for this site uses it). I
based the output the "Smart Archives Reloaded" plugin for WordPress, although I
don't use any Javascript.

It's nothing too fancy, and the code isn't very elegant, but it gets the job
done.

I currently work as a freelance software engineer. Although my work hasn't
changed too much since I started, how I organise myself has.

This is a short post about how I currently get things done & my current work
setup. I've always found it interesting to see how other people work, but I
always want to be able to look back and see how my setup has changed over time.

Work

My tasks generally fall into the following buckets:

Working on stuff I already know about - This is anything that takes longer
than a few hours. Most of my work falls into this category.

Working on new tasks - New tasks either come directly via email, or from
support tickets

Phone calls - I try to keep these to a minimum

Fixing things - Finding out what broke, why it broke, and then fixing it

As work comes in I'll have to make a decision on how important it is, based on
what it is and what I'm already doing. For example, if I'm working on a fix for
one project and an email about tweaking text comes in, I'll put it off until I'm
done. However, if a site is down or something is seriously broken I'll drop what
I'm doing to fix it.

Daily Routine

I've kept this for the last few years. There's room for improvement, but so far
I've found it to be the most efficient system for me.

Get up nice and early - I aim for 5:30am

Check for any important emails that came in overnight. Add anything else to
my todo lists.

Work on whatever I have going on. Getting up early allows me to get
important work done before everyone else wakes up and starts adding
more.

I'll check my org-agenda first to see what's due, and then work on any other
priority items. I prefer to work on something that I can get done before 8
so that I've started my day in a good way.

Break around 8am for breakfast. I'll usually have a snack around
10am - either fruit or nuts of some kind.

Break at 12 for lunch

Aim to finish work for 5pm. Usually finish much later…

Every day is a little different. Sometimes everything goes smoothly and I have a
nice, efficient day. Other times everything starts going wrong and my plan goes
straight out the window.

Organisational Tools

I've simplified my setup in recent years, and it currently has very few
components:

Emacs + org-mode - For things I need to think about harder I'll use some
paper to sketch out notes, but that's pretty much it.

I have a directory for client projects, and each client has their own org
file. I also have directories for my own projects, and an inbox.org file
for keeping track of incoming items and things that don't really belong
anywhere else.

All my org files are synced using DropBox.

Mozilla Thunderbird for managing my email

Trac for ticket management

Doing the work

The majority of my projects are web-based, so my setup is tailored towards
making that more efficient. Like my organisation system, I've tried to keep
things simple.

My editor of choice is emacs - see my list of emacs extensions for an idea
of what I have installed. My .emacs.d is also synced using DropBox so that
whether I'm on my laptop or desktop I have pretty much the same environment.

I also use emacs for tracking my time, although for some clients I use
Harvest.

All the sites I have in development are run from a single server. As my work
is web-based it helps to have a local machine to test on, and it also makes
life much easier when using different development machines.

PHP development tools include phpunit and behat for testing, and phing for
automating things (such as testing and deployment). Everything lives in
source control where possible. I prefer git as it's easier to get small
repositories setup quickly.

I also use guard and guard-livereload to refresh sites as I'm building
them. guard alone has saved me hours when slicing things up.

Hardware consists of a dual-monitor GNU/Linux desktop and a MacBook Pro. I
usually work on the desktop when I need more room to see things, such as
turning an image into an HTML template.

Keeping Going

I use a couple of other tools to keep me in line:

RescueTime - This helps me keep an eye on how much time I'm spending on
various activities. It also has a nifty tools for blocking websites when you
need to focus.

Tomato.es - my favourite Pomodoro app at the moment, mainly because it's so
simple and keeps track of statistics between machines.

Router block - All distracting websites are blocked by my router between
5am - 5pm. This gets rid of the temptation to "just check the news for a
bit".

Beeminder - I have a private goal for tracking how much work I'm billing. At
some point I want to add another goal to make sure I don't do any work past
a certain time. It's all too easy to spend all your time working.