-
Ruby on (Guard)Rails
I've worked on a few Ruby apps in my career at varying scales (Homebrew, AllTrails, GitHub, Workbrew) and there's been a consistent theme: Ruby is great for moving fast (and breaking things).
-
Our Intentions Don't Matter
This is a bit of a departure from my usual writing but it’s a topic that’s been on my mind for years. What finally pushed me over the edge was reading Michael Lewis’ “Going Infinite”; his telling of the rise and fall of FTX and CEO/founder, Sam Bankman-Fried (SBF). There seems to be a bit of drama around the book; many are accusing Lewis of being “duped” by SBF into considering SBF’s actions to be mistakes based on bumbling ignorance rather than nefarious intent.
-
How I Procrastinate Less
I have been in a fight with my abysmal lack of self-control since I started university with limitless computer access. Each time I uncover some new self-control technique, the advances in technology force me to wrestle harder.
-
More Effective Remote Working
COVID-19 was many people’s first introduction to the working-from-home experience. I’ve been lucky enough to have been working from home exclusively since 2009 and at US-based companies (e.g. GitHub) since 2012. I’ve also been an EU-based open-source maintainer since 2007 and maintaining the globally-distributed Homebrew package manager since 2009. These experiences have helped me learn some tips on how to be more effective working remotely that I’d like to share with you:
-
My Favourite Open Source Engineering Books
I’ve been a professional software engineer and maintaining open source software since 2007. My work on open source has been heavily informed by industry best practises and my work on proprietary software has been heavily informed by open source best practises. Without these books, I’d be a worse engineer on many dimensions. Some of them may feel antiquated but all are still full of relevant wisdom for every open source (and proprietary) software engineer today.
-
How To Find A Therapist
In 2020, due to the “fun” combination of COVID-19 and two young children at home, I wanted to see an (individual) therapist. At the time I was employed by GitHub, which had a program where I could get up to six sessions paid for by them. After five of these, I’d found some benefits but wanted to try a different approach with a therapist of my choice. Based on my experience finding a therapist, I’ve outlined how I (and several friends at this point) went about doing so.
-
Some Financial Advice
I’m sporadically asked for financial advice related to personal finances, self-employment, and small business, so I wrote them down. I hope you find some of it useful. I would be surprised if you disagree with none of it. I’m based in Scotland, so these assume the UK financial/tax/employment system. Each list is in order of descending importance.
-
Entitlement in Open Source
There have been discussions in the aftermath of the
log4j
vulnerability about whether or not open source is broken or sustainable, what we can do to improve the sustainability of the open source ecosystem moving forwards, and the entitlement of users and companies in expecting maintainers to fix their problems. -
The Best Project
This project was the best. Everything the company had done like this before ended up being a mess, full of stupid decisions, built by idiots. We weren’t going to make the same mistakes again; we knew better. We avoided the terrible legacy systems and built things better from scratch. We did things right the first time, avoiding the failures of previous, similar projects. We had a well-staffed team with a well-planned backlog. We would deliver something big and exciting that we know our customers want and will love. We delivered it. Customers hated it. What the hell went wrong?
-
Saying No
I’ve developed a bit of a reputation inside and outside work as being pretty good with “saying no” and setting boundaries. In this post, I will help you do so, too.
-
Hidden Complexities Of Software Estimation
I’m currently working on an internal GitHub project where, for a change, my estimations have been wildly off. Before this project, I’d had a good multi-year streak of never overshooting my estimates and consistently hitting deadlines. This overshoot, combined with some recent reading, has made me think about hidden complexities of software estimation and what I didn’t consider when making my estimates. These are in a rough order from “most obvious” to “least obvious”.
-
Stop requiring specific technology experience for senior-plus engineers
A conversation I’ve had (too) many times in our industry:
You: “I’m looking to hire a senior engineer. Know anyone good?”
Me: “Oh great, I know some good people! How about
$A
?”You: “They won’t do. We need someone with at least
$X
years in$TECHNOLOGY
.Me: “Why?”
You: “They need to be able to get up to speed quickly.”
Me: ☹️
-
Open Source Economics (is not what you think)
“Open Source Economics” and the “Open Source Economy” are regularly discussed in the context of how to improve open source software’s sustainability, contributor diversity and ecosystem quality. Too often, though, the use of the word “economics” brings incorrect assumptions about the problems to be solved.
-
What is a Staff (or Staff-Plus or Principal) Engineer?
In 2020, GitHub promoted me from Senior to Staff Engineer. This title and role seems commonplace and well understood at some technology companies but unknown and unused at many others.
-
The Mentorship Diamond
I’ve been very lucky to have some great mentors and mentees in my time at GitHub. Through weekly 1:1s with @seejohnrun explaining to me what a staff engineer should (and should not) be doing I was able to get the role and (hopefully!) do a reasonable job at it. Currently, I’m lucky to have regular mentorship from @eileencodes who guides me on how to think about the most important work I could be doing and avoid pitfalls that I would not otherwise have seen.
-
How I Get Things Done
The first thing you need to accept is: your memory sucks. If you have tasks you want or need to do in life (for yourself or for others) chances are you can’t remember them all. That’s why organised people don’t rely on their own memory and instead have a system to track their commitments. In this post I’ll explain my system and why it is the way it is.
-
Robot Pedantry, Human Empathy
Homebrew was the first open source project I’ve maintained where I’ve had to review and merge contributions from other users. Homebrew is also one of the most active community projects on GitHub with a consistently small team of maintainers (always under thirty in total, always under ten doing work every week). As a result I’ve had to figure out over the last twelve years how best to manage large numbers of contributions from users in pleasantly and efficiently for both maintainers and contributors.
-
Types Of Remote Jobs
There’s a lot of discussion currently (I wonder why) about “remote working”. As someone who has been doing it for 11+ years at this point I’ve noticed that people mean pretty radically different things when they talk about “remote jobs”.
-
My Engineering Values
I’ve been encouraged by a mentor to think about what my core (engineering) values are (in the context of being recently promoted to be a “staff engineer” and having my eyes on being a “principal engineer” one day). This felt like something that could be of wider interest so here we go:
-
User and Feature Segmentation in Homebrew
Many software projects that operate at scale want ways to be able to expose some features or test some releases of their software on a subset of their users before they are released to the majority. In Homebrew we have two ways of doing this: developer segmentation and feature flags (that I stole from GitHub).
-
Some Things Good Engineers Do
I have not been working as an engineer long enough to feel like an industry expert but I have noticed patterns in new engineers that seem to result in them being more or less successful. I’ve had some requests to share these in a post so I hope they are useful.
-
Making Homebrew Financially Sustainable
More and more open source projects are seeking to get financial support from their users. In this post I’m going to talk about the approaches we’ve taken in Homebrew and their pros and cons.
-
How Becoming A Dad Has Changed How I Work
I became a father for the first time in 2017, took 3 months paternity leave alone with my eldest in 2018 (thanks to GitHub for 5 months paid paternity leave). I had another child two weeks ago so I’m on paternity leave (again) right now and expect to take more in 2020. This has given me time to reflect on how becoming a father has changed the way I do my paid (currently a “Senior Engineer” at GitHub) and unpaid (open source, currently primarily as the “Homebrew Project Leader”) work and how this differs from my previous schedule and ways of getting things done. This may be of interest to you if you’re currently, planning or debating becoming a parent in future.
-
Research Study Interview: The Work of Maintaining Open Source Software
I was recently interviewed as part of a research study into the work of maintaining open-source software. I asked if I could make the (lightly edited) transcript public and they agreed. This will be an interesting read for anyone interested in some of the deeper questions about maintaining a project like Homebrew for 10 years.
-
Stop Mentoring First-Time Contributors
If you’re an open source maintainer lucky enough to have a significant number of contributors you need to learn to mentor efficiently. First timer issues are not the right good way to get people involved in your project nor mentoring individual first-time contributors. Instead, do things that help all of them.
-
How To (Not) Fail At Using Open Source Software In Your Organisation
In the technology sector in 2018 the use of open source software (OSS) is routine. Despite this many organisations find using OSS frustrating or confusing. This is not the fault of OSS but an opportunity for organisations (and the individuals within them) to learn how to use OSS more effectively.
-
The Open Source Contributor Funnel (or: Why People Don’t Contribute To Your Open Source Project)
Homebrew, the macOS package manager I maintain, is one of the most active community projects on GitHub. We regularly attract large numbers of new contributors and valuable, first-time open source contributions. We’ve done this by thinking about our users, contributors and maintainers going through a “contributor funnel”. If you’re wondering why people aren’t contributing to your open source project (😭): thinking this way will help you fix this.
-
Open Source Maintainers Owe You Nothing
This post is heavily inspired by my experience over the last ten years participating in the open source community and eight years as a maintainer of Homebrew (which I’ve maintained longer than anyone else at this point).
-
Saved replies keyboard shortcuts
For almost two years you've been able to use saved replies to quickly respond to multiple issues and pull requests. Now saved replies have keyboard shortcuts to make them even easier to use.
-
Translations With Rails And Jekyll
I’ve been adding translations to open source Ruby on Rails and GitHub Pages (i.e. GitHub hosted Jekyll) sites I maintain. For Rails there’s a fantastic Rails internationalisation guide which walks you through everything you’d want to know. For GitHub Pages there’s no such similarly standard resource. Plugins such as Anthony-Gaudino/jekyll-multiple-languages-plugin are available but aren’t supported by GitHub Pages so require checking in outputted HTML. This has always felt disgusting to me and reminds me of my C++ days when people checked binaries into Subversion 😭.
-
Issues With First Timer Issues
I’ve noticed more open source software projects creating “first timer issues”. Written up in more detail than usual these issues explain a known, easy-to-solve problem reserved for first time contributors to that project. At their most extreme they spell out everything down to the commands and exact text changes required to make a contribution.
-
Archiving GitHub Repositories
Just because a repository isn't actively developed anymore and you don't want to accept additional contributions doesn't mean you want to delete it. Now archive repositories on GitHub to make them read-only.
-
Homebrew's CI evolution
When I started contributing to and then maintaining Homebrew in 2009 it had no continuous integration, automated testing or binary packages on the project. Contributors would create an issue with a link to a commit in their fork, Max Howell (@mxcl, Homebrew’s creator) or a maintainer would test the change locally and then push it to Homebrew’s
master
if it worked. -
Managing large numbers of GitHub notifications
When you first started using GitHub, you read every notification that trickled in with interest and stayed up-to-date on projects with ease. It gets more difficult when you start to watch an active open source project or work at a company that uses GitHub heavily. Now you find yourself with hundreds or thousands of GitHub notifications every day and struggle to keep up. Here are a few good practices that can help you manage your notifications so you can focus what’s important.
-
Contribute on Open Source Friday
Open Source Friday is a structured program for contributing to open source. Over the last three years, we've encouraged GitHub employees to take time at least every fourth Friday to work on open source and share what we're working on with each other. Open Source Friday has grown from this into a program anyone can take part in.
-
How To Run A Google Summer Of Code Project On GitHub
Google provides some guidance on how to effectively run a Google Summer of Code project but it's not tailored specifically to GitHub's workflow. To set clear expectations for mentors and students here's our ideas on how to successfully participate in Google Summer of Code as a mentor or organization administrator.
-
Replacing Boxen
When I started working at GitHub my GitHub-provided MacBook was bootstrapped with Boxen. Boxen is a tool for managing OS X development machines using Puppet to install and update packages, start persistent services, install and bootstrap projects and apply security policies. Over time I went from a Boxen novice to power user to internal and external maintainer and finally to implementing its replacement for GitHub.
-
Long Distance Business Travel
One of the side effects of successfully finding a remote job and working from home is that you may find yourself having to travel internationally for work. In comparison to traveling for your own pleasure there’s a few attributes that may differ:
-
Kindly Closing Pull Requests
Getting your first pull request from an outside contributor on GitHub is an exciting experience. Someone cared enough about the problem you were solving to check it out themselves, change something, and contribute that change back to your project. When your project has a relatively small number of high-quality, desirable incoming pull requests it is easy to happily merge them.
-
Runnable Documentation: Code For Humans
Getting your first pull request from an outside contributor on GitHub is an exciting experience. Someone cared enough about the problem you were solving to check it out themselves, change something, and contribute that change back to your project. When your project has a relatively small number of high-quality, desirable incoming pull requests it is easy to happily merge them.
-
Antisocial Networking
Two recent posts made me reconsider how I used social networking.
-
Finding A Remote Job
In 2012 I found myself in an awkward position in my career. I was working at KDAB, a company of lovely, talented people with great bosses and working on (mostly) interesting projects. Sounds great, right?
-
My Working From Home Schedule
Since my last post on working from home a few people have asked me for a more specific breakdown of how I schedule my day. Obviously this varies a bit but here’s my vague timetable:
-
Working From Home
I used to have a list of “Things I Will Never Do In My Job” when I was at university. Looking back at the 7 years since I graduated I realise I’ve done almost all of them.
-
Why Use Version Control?
You may not be familiar with version control concepts or why version control systems are useful for managing changes to text. Let’s start off by asking why you should use version control.
-
Deploying Qt applications With DeployQt4
DeployQt4 will take an executable and any specified Qt plugins and install and setup all the linked dependencies.
-
Make Qt Use The GTK Style On XFCE or Xubuntu
I’m a Qt developer and use Xubuntu in my Linux VMs as it is lighter than KDE and doesn’t get in my way (unlike Unity).
-
The Social Network: A Defence Of Programming
I recently saw The Social Network, a dramatisation of the creation of Facebook. It was a thoroughly enjoyable film with brilliant direction, casting (Eisenberg and Timberlake in particular) and writing. It also had an incredibly realistic hacking scene (using wget and perl scripts) and featured KDE on the desktop of most of the programmers in the film. I highly recommend seeing it, regardless of your thoughts on Facebook.
-
Why I Left Linux
I originally bought a MacBook to use as a nice Linux laptop and for some iPhone and Qt macOS development. Shortly afterwards I got engaged which made me think about the future and how I spent my time a bit more. Linux is great for many use-cases but I just kept finding myself getting increasingly fed up with trying to use it on the desktop. My problems included having DVD playback not work quite correctly, having to manually edit configuration files in a text editor just to get some piece of hardware that worked instantly in OS X and Windows working and various other issues that wasted my time. Due to a kernel bug in Linux affecting my MacBook, I found myself using OS X more and more for work and finally moved across completely to my MacBook and also removing Linux from my desktop to relegate it to a Windows-only games machine. I’m now only running Linux on my NAS, this server, TV and phone.
-
Windows Autologin Lock Screen
Something I miss when I used Windows is the nice autologin feature from KDE’s login manager (KDM). Autologin always struck me as a bit insecure; why have a password if you are going to bypass it completely? KDM’s solution was pretty nice, it allowed you to be logged in automatically (so that everything that runs on startup started loading) and lock the desktop before it appeared so that when you turned on your computer you would still get a password prompt but would unlock it to find that all your applications had already loaded.
-
KDE - Blog From KOrganizer HOWTO
Blog from KOrganizer? What kind of madness is this? Apparently some crazy fool decided to give you the ability to post journals from KOrganizer to your blog. Let’s learn how to do it!
-
Using .asoundrc To Remap ALSA channels For Audacity
My sound card (a Creative Sound Blaster Audigy 2) has got lots of inputs, especially with the nice drive bay expansion port.
-
Konqueror With Latest Adobe Flash HOWTO (Outdated)
I agree with Lubos. Flash sucks. However, most of us have or want to use it for things like YouTube or watching badgers.
-
IBM Cell SDK/SDK For Multicore Acceleration On Debian/Ubuntu HOWTO
Today I battled with trying to get IBM’s Cell SDK 3.0 (now known as the SDK for Multicore Acceleration) installed on my Debian AMD64 machine. This would cause slight grief even with a regular Debian machine as IBM only formally supports Fedora and RHEL so only provides RPMs. This is worsened by the fact that a bunch of the packages aren’t even available from IBM but require perusal of some provided yum configuration files to find.
-
Community Driven Software Development
Some people have suggested that the future of E-Commerce will be shaped by various kinds of “communities” (both online and offline); other are more sceptical about the potential.
-
Making Dizzy Shiny With Ajax
Hypothesis: "Ajax applications can provide a more effective user interface than those of GUI desktop or classic Web applications with fewer drawbacks than either individual approach."
-
Digital Rights Management And Operating Systems
“Sony has recalled many millions of its music CDs, because they contain ‘copy protection software’ that may damage computers. Describe and explain this story; compare Sony’s approach with other attempts to achieve copy protection, and discuss the future for digital rights management in operating systems design.”