Wednesday, November 6, 2019
Complex Systems Talk at Philly DevOpsDays

I gave a talk at Philly DevOpsDays last month: “We Have a Complex Systems Problem...and We Need to Talk About It.” Check out the video below!

Friday, October 18, 2019
On People Leaving a Department

I recently fielded a question in a department ask-me-anything (AMA) session noting that a few folks have left our department recently, and asking what I thought about it. I thought I would share a lightly-edited version of what I wrote:

In general, I assume that when someone joins my department, it will be for a finite period of time; it would be really unusual to hire someone right out of college and have them work in our department until they retire! So: how long will someone work for us?

In general, I think a couple of things have to be in alignment: (1) the individual has to bring skills, experience, and performance that are relevant to what the role requires (i.e. the person is a good fit for the role); and (2) the role has to offer someone the ability to work on things they are interested in and opportunities to learn things they want to learn (i.e. the role is a good fit for the person). When one of those things isn't true, it's time to part ways.

It may be that the business context changes what is needed for a role, or changes what projects are available. It may be that techniques evolve and there is less opportunity to do something you enjoyed or maybe there is a growing need to do something you enjoy doing less. Maybe a role evolves in a way that means you are not actually as good at it. Maybe you have learned everything you want to learn from a position. Maybe your interests change! These are all fine, and it doesn't necessarily mean the individual or the department is doing anything wrong. It's just not a fit anymore.

My management team and I believe so strongly in helping people advance in their careers that we are willing to have transparent discussions about whether this 2-way fit still exists, and if it doesn't, to help someone find a better fit if we can (especially somewhere else in the company). I have definitely had folks promoted out of my department and have been super happy for them to have a great opportunity they are excited about.

In addition, if there is something we seem to do exceptionally well as a department, it is to attract and hire really amazingly smart, friendly, and creative people. So I also look at someone "graduating" from my department as a new opportunity to find another person I really like working with!

Saturday, May 11, 2019
Running Concourse locally on Windows

Update 3: Ok, got this all documented, cleaned up, and pushed to Github: vagrant-concourse-local.

Update 2: Bosh deployment also didn't work on Windows. I did finally manage to get builds working. Rough recipe was: use Vagrant (from the Windows shell) to spin up an Ubuntu box. Run vault, postgres, and concourse via docker-compose (I wanted to use Vault because that's how I am used to managing secrets, although unsealing is a pain). I need to debug having everything come up after a reboot and clean up the Vagrantfile, then I will publish something.

Update: Turns out the instructions below did NOT work. Next attempt was to try to run the concourse/lite box via Vagrant; still no dice, then saw it was deprecated anyway. Currently trying a VirtualBox lite deployment via concourse-bosh-deployment.

I just spent a fair amount of time getting Concourse running locally on my Windows PC, and figured I might as well write it all down in case someone else runs into all this. In my case, I recently learned Concourse and wanted to use it for CI/CD for some hobby projects, but didn't want to just run it in AWS since I wouldn't be using it that often.

For context, I have a regular Home edition of Windows 10, which means that I can't run the nifty Docker Desktop for Windows (boo) and have to run the older Docker Toolbox that installs VirtualBox and then runs Docker inside a Linux VM.

I grabbed a docker-compose.yml file from the Concourse tutorial site, ran docker-compose up -d, and...couldn't connect to the UI in my browser.

After much poking around, I finally figured out that you can't use localhost ( to talk to Concourse, but have to use the local NAT IP address of the VM. You can find this by running docker-machine from the "Docker Quickstart" shell that comes with Docker Toolbox:

So in my case I can navigate to and get the Concourse UI.

The other updates I made to the docker-compose.yml were to create a named volume (docker volume create concourse-data) so I can re-mount the database if my PC reboots, and, most importantly, to populate the CONCOURSE_EXTERNAL_URL environment variable for the concourse container, so that redirect URLs will get properly generated to use the NAT address. That's it! Here's the working Docker Compose file (you can run it with docker-compose up -d in a Docker Quickstart shell):

Note: It can take quite a bit for the database to initialize itself the first time, and the Concourse UI won't listen on its socket until it can talk to the database, which means if you get a "connection refused" you might just need to wait a little longer. A little docker logs -f goes a long way here!