- Do you have a team that's having a hard time shipping software, and you're having a hard time figuring out why, never mind helping them?
- Do you have a timing or consistency bug that you can't seem to figure out or solve?
- Are you building a system that has tight performance, consistency, or reliability constraints, but also want to ship something quickly?
- Do you need to help getting observability set up and integrated with your system, or moving to a new observability stack/system?
- Are your tests flaky and unreliable, and you're having a hard time getting engineers to spend time fixing them?
- Are you trying to build a developer "platform," with Kubernetes or similar?
- Or are you trying to get your developers to actually use the platform the infrastructure group built for them?
- Are you an XP-influenced consulting agency that's scoping a big, tricky project with a large client?
- Or a consulting agency that's looking for an engineer with experience writing TDD'd Ruby or Elixir?
I spent 2014 - 2020 working on Cloud Foundry, which as far as I know was the largest software project developed with XP methodologies of all time. That project also happened to be a container-based developer platform, and a complex distributed system that contained multiple distributed data services. Since then I've worked as an SRE and as a consultant at mid-sized startups.
I spent much of that time working on problems related to the design, deployment, and release of these systems. I have a lot of experience making complex systems more reliable by making them easier to understand and easier to change.
(Oh, and just in case you think this means I only know Cloud Foundry: I've also deployed Kubernetes, written controllers for it, and managed applications on it. I performance tested an early version of a Cloud Foundry-like system that ran on Kubernetes.)
This set of experiences gives me an unusual perspective. I've seen how TDD, pairing, backlogs, and other XP techniques function at scale and over time. I know, bone-deep, that these practices work, and that they work well. I also know some of the ways that they can fail, especially when the production environment or release process are technically complex. When I work with infrastructure teams, I can help them understand the perspective of application developers. When I work on an application, I teach my team how to be "good ops citizens," and give clear, actionable feedback to the platform and infrastructure teams.
I'm available for consulting projects, coding projects, and (if the opportunity is interesting enough) for hire. I work remotely from California, so west coast timezones are the easiest for me to collaborate with, but I can also work with teams on the east coast.
I'm most interested in tightly scoped engagements where I can deliver significant value in weeks if not days, but I'm open to all kinds of projects and processes.
If you're a consulting agency, I'm especially helpful during scoping. I can talk to a client, understand the problem they're trying to solve, conduct interviews across the development organization, maybe pair with a few engineers, and then write a six page document that describes the causes of the client's problems, and describes a project that can work and that will address those problems. This typically takes between 2 and 10 weeks.
If you're a manager at a product company, I can do something similar. I'll listen to your problem, talk to your team, take a look at your software, and make some recommendations. How long this takes and how much it costs depends on how big your team is and how deep of analysis you need. If you have a big enough problem, I may refer you to another consultant, or a consulting agency I've worked with for a larger engagement.
For implementation work, I'm most interested in projects where I will:
- instrument a system using OpenTelemetry
- build something with Elixir or Ruby, and a test suite that takes less than 10 seconds to run
- design or debug a system that uses the Event Sourcing pattern
- understand a system that includes the words "node," "cluster," and "bootstrap"
- work closely with designers to understand customers and design solutions to their problems