Sharpening the saw

Steven Covey's "The 7 Habits of Highly Successful People" is one of my favourite self-improvement books. It's full of great advice, but the habit of "sharpening the saw" is particularly powerful.

Sharpen the Saw means preserving and enhancing the greatest asset you have – you. It means having a balanced program for self-renewal in the four areas of your life: physical, social/emotional, mental, and spiritual.

Habit 7: Sharpen the Saw

There's a lot of overlap between this and reducing toil. The main difference for me is that sharpening the saw is about learning and improving skills, whereas reducing toil is about automating and eliminating certain types of work.

Looking at my own routines, I've made some improvements over the years:

A few areas I would like to improve:

There are a lot of areas where I'd like to improve. I'm pretty comfortable with the habit of weekly reviews for my GTD list, but I don't have any regular review system for my own processes. I've thought about using a structured approach like kaizen, but it might be overkill for this kind of situation.

I think the first step for me will be to set aside some time to take a full inventory of all my workflows, responsibilities, and routines. It's not very exciting, but I've been so focused on doing things that I haven't really taken the time to step back and examine where I could be doing it better (or if I need to be doing it at all).


Making time

I'm hardly the first person to notice the term "making time" isn't accurate. There are 24 hours in a day, and that can't be changed no matter how much you try.

How to use that time is the tricky part. There are so many different things fighting to get a piece of that time. Right now I've got a pretty big mix of activities on my plate:

  • Tasks that I have to do for other people. Some of these have hard deadlines, others do not. I get paid to do these.
  • Clerical work. Writing/replying to emails, processing my inbox and my next actions list, checking all of my projects are up to date, creating a schedule, and managing financial records all fit in here.
  • Things that need to be done to keep me functioning. Eating, drinking, sleeping, hygiene maintenance.
  • Exercising. I do running and bodyweight exercises on alternating days, with Sunday designated as a rest day.
  • Housework. This in includes cooking, cleaning, doing laundry (and putting it away), and walking the dog.
  • Recreation. Reading, writing, creating software, and a million other projects that I want to do but probably never will.
  • Time wasting. I don't plan this, but it tends to fill in the cracks between other activities.

These don't just take time, but energy as well. And like time, I can only spend so much energy without getting tired.

I've talked about measuring productivity; a big challenge for me is spending less time on low value activities. What counts as "value" is different for everyone, but for I want to change a couple of things:

  • Spend less time on work – This one is tricky as it keeps a roof over my head and food on my plate. But I definitely want to re-balance my days so that work isn't always the primary focus.
  • Spend more time on personal projects – There are lots of things I want to do, but it's really not possible for me to do them all. The last couple of years I've set myself GHD goals to try and focus myself, but I still struggle to complete the things on the list (and my list doesn't always contain things I actually want to do). I will probably tweak this approach for 2021.
  • Waste less time – It's really easy to lose a lot of time to mindlessly browsing the web. It doesn't always happen in one go, but each 5 minute break quickly adds up. I'd like to replace this with low energy activities that I can do instead.

I'm not trying to be productive every single minute of the day - I don't think that's a particularly healthy way to live - but I want to spend more time finishing projects instead of just daydreaming about them.


Limiting goaccess reports to a date range

A few days ago I wrote about filtering referer spam from my server logs before they're processed by goaccess. goaccess doesn't support log filtering out of the box, but tools like grep or sed can be used to filter the log before it's processed by goaccess.

There are two main reports I use for this blog: today's log, and the last 30 days of activity.

Viewing today's log

This is nice and simple. It searches the log for entries that have today's date string, and the results are then piped to goaccess.

grep "$(date '+%d\/%b\/%Y' -d 'today')" path/to/access_log \
    | goaccess -a

This can also be adapted to show log entries for a specific month (or year). I use this when generating monthly reports on how "Writing PHP with Emacs" is performing:

grep 'Nov/2020' path/to/access_log \
    | grep "books/php-with-emacs" \
    | goaccess -a

Note: This could also be done in a single pass using grep's -e syntax, but I find this version more readable.

Viewing this month's log

This one is a little trickier as we need to filter out everything before a specific date. Thankfully sed can do this:

sed -n '/'$(date '+%d\/%b\/%Y' -d '1 month ago')'/,$ p' path/to/access_log \
    | goaccess -a

There are a couple of parts here:

-n
This flag tells sed to hide its output. Normally it will display every line that is processed, which in this case would output the entire log file.
$(date '+%d\/%b\/%Y' -d '1 month ago')
This is evaluated and replaced by a timestamp for 1 month ago.
'/'$(date '+%d\/%b\/%Y' -d '1 month ago')'/,$ p'
This is the expression that sed will evaluate, which searches all entries that match a specific range. The , symbol is the range delimiter, and $ is the end of the range (which in this case is any date after the start date).
p
This final modifier tells sed to output lines that matched.

All together this filters log entries to the last 30 days before goaccess processes them. The date command is pretty flexible so this approach can filter entries to the current week, quarter, or any other range.


Lessons from 11 years of freelancing

I've been working as a freelance software engineer for just over 11 years now. My first contract came through Upwork (which was called oDesk back in 2009) and I charged $10 an hour. All of my early work was for individual bloggers or small businesses, and usually involved building or tweaking WordPress themes and plugins.

Since then I've been able to help dozens of different organizations and work on some really interesting projects. It's not quite the career I had in mind, but I enjoy the variety of work that comes my way.

Here's what I've learned.

It takes time

It took me about two years for my income to stabilize. The first year I could often go a week or two without any money coming in. This situation improved once I found a few steady clients, most of which came through referrals. After three years I was able to pay all of my bills (rent/food/etc) entirely through freelance work.

Use what you know

There is a time and a place to experiment with new technology. It's not when you're doing billed work for a client.

Charge more

This is a pretty common refrain in freelance circles, but it's still good advice. Raising prices does several things:

  • Signals that you're serious about what you do.
  • Weeds out clients that you may not want.
  • Allows you to be more selective about what you do.

It took me a long time to build the experience - and courage - to increase my rates. I could have been self-sustainable much earlier if I'd been brave enough to charge more.

Sometimes people won't pay

This has only happened a few times, but it's extremely frustrating when it does. These days I won't do any work without signing a contract first and being very clear about what is expected from both parties.

Not all clients are a good fit

This doesn't mean that they're bad people, just that their work styles don't mesh with mine. It's usually better to cut things early rather than trying to make things work.

Don't rely on a single client

After my first year I stopped looking for new projects and took all of my work from the same client. When they decided to switch to another company my income dried up overnight. There's no severance pay when you're a freelancer.

Communicate. Communicate more

Early on I developed a very bad habit where I wouldn't show what I'd done until it looked perfect. This sounds like a logical approach, but it causes all kinds of problems:

  1. I know that I've been working on something, but the client doesn't know that unless I tell them. They are paying for my services, and they want to see what they're getting.
  2. Often what they originally asked for isn't quite what they want. Showing things early gives time for feedback.
  3. It's not my place to decide what's perfect for the client.

I solved all of these by communicating clearly. I don't particularly like writing emails, but they're an important part of my work.

You need to learn a lot of non-work skills

Keeping accurate records, sending invoices, paying estimated taxes (and finding out who to pay), and filing taxes are all things I've had to learn since I started.

I keep a single spreadsheet for all of my financial information, and I store any printed receipts for the year in a manila folder. Once taxes are done, finances get printed and put in the filing cabinet. It's not glamorous, but it means I have an actual record if I need it.

Hint: scribbling "paid $xxx" on a post-it note is not good bookkeeping.

It can be expensive

My experience is based on living in the US, but I've found freelancing to have a lot of hidden costs. I have to pay health insurance, pay into social security (including the employer contribution), pay into a retirement account, and I don't get paid holidays.

Non-billable tasks take a lot of time

Hours of time can quickly get eaten by emails and administrative tasks. There are also non-work things like eating, drinking, and bathroom breaks that take time. Take these into account.

You're on your own

Unless you hire outside help, everything that needs doing rests on the shoulders of one person: you. This includes planning projects, scheduling work days, writing proposals, sending invoices (and following up on them), setting up meetings, and then actually doing the work you're being paid for on top of all that.

It's a lot.

Take all of this advice with a grain of salt; there's a hefty chunk of survivorship bias thrown in.


Post or Pay

Post or Pay

Aleix contacted me about their new service, "Post or Pay":

Post or Pay is a website that allows bloggers to put a price to not blogging. The user sets a deadline for her blog post and a price. If she doesn't publish it on time, she pays.

20% of the payment goes to charity (the World Literacy Foundation).

I use Beeminder for tracking my blog posting. As long as I post frequently enough, I'll stay on target and not get billed. It's working well for my 30 Days of Blogging trial, although it wasn't totally painless to set up - I had to hook up my RSS feed to Zapier in order to automate data submission.

Post or Pay works a little differently; you commit to writing a single post by a specific date, and then send proof once it's published. It's a much more focused approach.

If you're struggling to blog more, or you're looking to dip your toes into the world of commitment services, Post or Pay might be a good place to start.