How I work these days (March 2015)

Written by on in Cusco, Peru.

Ever since I started this blog I wanted to share my current set of tools that power my workflow. I hope others can learn from it, clients can better estimate how working with me looks like and, best of all, I can look back at this list in a year and see how things have changed. #tl;dr

In the last 3 months, about half of my work tasks came from existing clients and the other half one from Codeable.
Most of the work I do now, is coding HTML, CSS, JavaScript and PHP related to WordPress. I found this works best with my traveling lifestyle, since the requirements of these kinds of tasks are usually more clearly definable and solvable, than, for instance, logo or interaction design, where a lot of iteration and personal communication is necessary and the outcome can be subject to the taste of a client. I experience - and this might be highly subjective - more trust and independence from clients if I do coding for them, compared to designing, where projects suffered a lot from Parkinson’s law of triviality that frustrates me. Ultimately a coding project gets finished and paid once it works and a design project if the client likes it.

I plan to keep things that way and instead use my design skills in personal side projects where I have full control over the outcome and no external pressure and deadlines.

On GUI vs. CLI

If you take a look at my workflow you’ll notice it is a jolly mishmash of graphical user interfaces and command line tools. As if I hadn’t yet decided yet to which party I belong to. Or as if I were choosing the tools based on how good I get the job done with them and not ideology.

mac%402x

Hardware

I work on a 15” 2012 Retina MacBook Pro (8GB RAM/ 2,3 GHz i7/ 256GB SSD) running OSX 10.10.2. I use BOSE QuietComfort 20i headphones to work in almost any place. In general I disable all automatic notifications such as Mail or Twitter on my Mac and instead channel those to my iPhone 6 Plus. That allows me to turn off all notifications with the silencer switch when I don’t want to be interrupted.

Browsers

Chrome is my default browser since 2008. I tend to use Chrome Canary as my developing browser, as its web inspector has the newest features sooner. With sourcemaps and workspaces enabled you can save local CSS and JavaScript changes from the inspector and mirror it to a local file. That’s pretty handy for smaller CSS fixes and requires no local server setup.

Every couple of years I spend one week only using either Firefox and Safari but I always come back. Especially Safaris Web Inspector has become unusable for me since version 6.

Backups

I use a Nifty MiniDrive in combination with an 128GB microSDXC card for hourly TimeMachine backups.
In addition to the Nifty MiniDrive I use Arq for cloud backups to an 100GB Strato Hidrive.

Design tools

As mentioned in the introduction, design jobs steadily declined in the recent years and while I still monthly pay for Photoshop CC, that’s mainly because I’m subscribed to the Creative Cloud Photography bundle that includes Lightroom which I use for my private photography and adore.
If a client wants me to work that requires Illustrator or InDesign, I’ll charge them for a monthly license of that product.

I often use Sketch although I haven’t yet upgraded it to version 4.

Editors

My main editor is Sublime Text 3 with the following packages installed:
Alignment, CSS3, DocBlockr, Emmet, Emmet Css Snippets, GitGutter, jQuery, jQuery Snippets pack, LESS, Predawn, SideBarEnhancements, Solarized Color Scheme, SublimeLinter, SublimeLinter-php, SublimeLinter-phplint, Syntax Highlighting for Sass, Theme - Soda, Theme - Sodarized, WordPress, WordPress Readme to Markdown

My secondary editors are Byword for writing long form text and Mou for blog articles in markdown such as this one.

sublime%402x
Sublime Text 3 with the Predawn Theme applied

Command Line

I use iTerm, recently switched to Oh my ZSH and I’m still pretty much clueless about it. The one feature I don’t want to miss however, is the one where you enter a commend - such as rsync - and hitting ↑ arrow up on the keyboard will step you through the history of previous parameters for that particular command.

I use homebrew to manage some essential command line tools such ffmpeg and youtube-dl but in general keep my development environment within a virtual machine. I was sick of fixing my configuration every time a new version of OSX came out.

VVV

I use Varying Vagrant Vagrants, a Vagrant configuration focused on WordPress development. I’m using the VVV Site Wizard to quickly setup new projects on a development domain ($clientsdomain.dev).

I use Vagrant Manager and Sequel Pro to access MySQL databases locally or remote.

Once I finish a client project, I teardown the development folder (unless I know it’s a returning client) and keep only the essential project files in a privately hosted git repository.

Deployment

Once my local development domain is setup in VVV, I usually need to get the clients existing data into it. For the initial transfer I am using the free Duplicator plugin because it generates a zip-compressed package of the database and all files of a WordPress installation that gets over the wire faster than any file-by-file syncing method.

For subsequent database synchronisation between local and production servers I use WP Migrate DB Pro. The developer hinted on a future addon that would include file-sync too.

Sometimes a project requires only a small change that can be done directly on the server. For that I use Forklift. I’m tempted to switch back to Panics Transmit because Forklifts performance hasn’t been great recently. Waiting 2 minutes for seeing 800 bytes transferred is not cool but perhaps the ancient FTP protocol is to blame?

Git

All my clients projects are under git version control. The three main reasons being:

  1. It happened one time too many that a client asked me to remove a feature, only to demand it back later, after I had already deleted a day worth of coding. Now my general rule of thumb is, if I get paid to write code, I put it unto version control. Period.
  2. Committing work not only feels like you achieved something today, but it’s also a great point of reference for writing feedback to a client and accounting to what’s done.
  3. It enforces reusability. Sometimes a new client might want something similar to what I have already done in the past for another client and having all my work hosted somewhere helps referring to that. And perhaps one time a client project can grow into a plugin of its own.

The official Github client works well enough for me for committing, rollbacks, and merging. Everything else needs to happen using the command line and stackoverflow/google/good luck.

On some long-term projects I use the “successful Git branching model” and “The Perfect Workflow, with Git, GitHub, and SSH”. The latter will essentially allow me to commit and push changes to my remote repository and a webhook will automatically pull the changes to the live server.

If a client does not provide SSH but only FTP access to the server, I use Dandelion to deploy a git repo via FTP.

Gitlab

I use a private Gitlab installation for hosting all my private git repositories on uberspace. It is essentially like Github but free.

Communication

I use Mailbox for e-mail and Skype for chatting. Also recently Slack for the WordPress and nomad community.

I have a Skype local number from my hometown in Germany that redirects all ingoing calls to my mobile phone in the country that I currently live in and vice-versa it allows me to make calls from everywhere in the world that appear like they were local.

Dropscan is a German startup that scans all the physical mail I get in Berlin and sends it to my email inbox in PDF format (optionally with OCR applied).

PixelLetter is kind-of reverse Dropscan: it prints out digital messages (PDF or plaintext) and sends them to physical addresses for a price cheaper than if you were doing it yourself.

I have opened bank accounts with Skype, Dropscan and PixelLetter while being 10 000 km away.

Accounting

OutBank is my central place for tracking in and outgoing expenses from my savings bank account, credit card and paypal. It’s auto-tagging feature allows you to sort expenses into certain categories based on keywords.

I use Harvest for time tracking and sending invoices. Primarily because it has an integrated payment gateway with stripe wich is by far the cheapest way of transferring money from US-based clients to anywhere in the world.
In general I’m not very satisfied with it Harvest though, mainly because I need a solution to create German and English invoices and Harvest allows only one language. Also the time tracking is only working while on a perfect WiFi connection. Sometimes it will just not work even though I am connected.

I used On the Job before I switching to Harvest last year. It hasn’t really been updated in years but its simplicity I still highly value. I’m slightly switching back to it since I’m not very happy with Harvests subscription model that basically locks you in forever. I’d rather have one solution that I pay for once. Heck, perhaps I might even switch back to writing invoices by hand. Accounting is terrible.

Steuererklärung for electronic tax filing.

More

Alfred saves me countless time everyday to do trivial tasks such as looking up UTF-8 symbols or my own phone number. Read my article about Alfred Workflows I use every day.

I use Dash to lookup function and parameter names for WordPress, jQuery and PHP.

I use Codekit to compile LESS, optimize images, refresh browser tabs and manage bower dependencies.

Patterns is an application that lets you preview and lookup Regex patterns.

Monotype SkyFonts synchronizes Google Fonts to your machine so you can use Open Sans when offline.

1Password for storing all project related passwords in one place.

TL;DR

15” 2012 Retina MacBook Pro, Chrome, Sublime Text 3, iTerm2, Varying Vagrant Vagrants, Git, Mailbox, Dropscan, OutBank, Harvest, Codekit, Alfred, Dash, 1Password.

The future

While traveling South America for 6 months I had to face the possible situation in which my MacBook would get stolen or be damaged. What’s the emergency plan for that case, when the next Apple Service Provider is a thousand kilometres away?

I’m observing how cloud workspaces like Cloud9 or Koding are getting better everyday (full Ubuntu Terminal, SSH, preview in any browser, built-in image editor). Chromebooks are cheap and you could get a cloud workspace setup for under $300. But then again, most of the worlds areas seem to be connected to a 1 Mbit connection or less which makes this a wishful thinking…

iOS apps like DietCoda offer text-editing and iOS 8’s new DocumentProvider feature allow an App like Transmit to act as a remote file provider for any other app. Effectivly you are connecting to a server, edit a file in one app and on save it is synced back to the remote server. Perhaps I make the full switch to the command line and setup my own remote development server that I could connect to via SSH (Prompt). Being able to write code on an iPhone 6 Plus and an external keyboard could be a serious backup solution.